Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-05-19 12:40:56 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-05-19 12:40:56 +0400
commita5152b7ca0d6d7f340b1955c0e8a15ba23fda336 (patch)
tree1b8289047b989964a442deb8f084a04d07f97b00
parent8925ed1420ea2557abc7867cf12f89730ef77718 (diff)
parent65228807725d57aa4d33bcb8c3e3966d1acf0b8a (diff)
Merged changes in the trunk up to revision 46787.
Conflicts resolved: source/blender/blenkernel/intern/idcode.c source/blender/blenloader/intern/readfile.c source/blender/editors/include/ED_anim_api.h source/blender/editors/include/UI_resources.h source/blender/makesrna/intern/rna_main.c
-rw-r--r--CMakeLists.txt32
-rw-r--r--GNUmakefile2
-rw-r--r--build_files/cmake/macros.cmake3
-rw-r--r--build_files/cmake/packaging.cmake4
-rw-r--r--build_files/package_spec/rpm/blender.spec.in34
-rw-r--r--build_files/scons/config/win32-vc-config.py2
-rw-r--r--build_files/scons/config/win64-mingw-config.py9
-rw-r--r--build_files/scons/tools/btools.py1
-rw-r--r--extern/bullet2/patches/make_id.patch42
-rw-r--r--extern/bullet2/readme.txt4
-rw-r--r--extern/bullet2/src/LinearMath/btSerializer.h28
-rw-r--r--intern/audaspace/CMakeLists.txt6
-rw-r--r--intern/cycles/blender/blender_session.cpp1
-rw-r--r--intern/cycles/device/device.h2
-rw-r--r--intern/cycles/device/device_cpu.cpp1
-rw-r--r--intern/cycles/device/device_cuda.cpp1
-rw-r--r--intern/cycles/device/device_multi.cpp2
-rw-r--r--intern/cycles/device/device_opencl.cpp9
-rw-r--r--intern/cycles/kernel/kernel_compat_cpu.h1
-rw-r--r--intern/cycles/kernel/kernel_compat_cuda.h1
-rw-r--r--intern/cycles/kernel/kernel_light.h2
-rw-r--r--intern/cycles/kernel/kernel_textures.h5
-rw-r--r--intern/cycles/kernel/kernel_types.h31
-rw-r--r--intern/cycles/kernel/osl/nodes/node_camera.osl2
-rw-r--r--intern/cycles/kernel/svm/svm.h16
-rw-r--r--intern/cycles/kernel/svm/svm_attribute.h13
-rw-r--r--intern/cycles/kernel/svm/svm_image.h75
-rw-r--r--intern/cycles/kernel/svm/svm_tex_coord.h6
-rw-r--r--intern/cycles/render/film.cpp1
-rw-r--r--intern/cycles/render/image.cpp60
-rw-r--r--intern/cycles/render/image.h4
-rw-r--r--intern/cycles/render/mesh.cpp2
-rw-r--r--intern/cycles/render/scene.cpp2
-rw-r--r--intern/cycles/render/scene.h4
-rw-r--r--intern/cycles/util/util_math.h14
-rw-r--r--intern/elbeem/CMakeLists.txt1
-rw-r--r--intern/elbeem/intern/globals.h10
-rw-r--r--intern/elbeem/intern/ntl_blenderdumper.cpp5
-rw-r--r--intern/elbeem/intern/ntl_geometryobject.cpp2
-rw-r--r--intern/elbeem/intern/ntl_vector3dim.h19
-rw-r--r--intern/elbeem/intern/ntl_world.cpp3
-rw-r--r--intern/elbeem/intern/particletracer.cpp4
-rw-r--r--intern/elbeem/intern/solver_adap.cpp3
-rw-r--r--intern/elbeem/intern/solver_init.cpp5
-rw-r--r--intern/elbeem/intern/solver_main.cpp4
-rw-r--r--intern/elbeem/intern/solver_relax.h2
-rw-r--r--intern/elbeem/intern/solver_util.cpp6
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerX11.cpp62
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerX11.h48
-rw-r--r--intern/ghost/intern/GHOST_DropTargetX11.cpp30
-rw-r--r--intern/ghost/intern/GHOST_DropTargetX11.h52
-rw-r--r--intern/ghost/intern/GHOST_NDOFManagerX11.cpp8
-rw-r--r--intern/ghost/intern/GHOST_SystemPathsX11.cpp18
-rw-r--r--intern/ghost/intern/GHOST_SystemPathsX11.h14
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.cpp966
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.h128
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.cpp849
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.h262
-rw-r--r--release/scripts/startup/bl_operators/console.py4
-rw-r--r--release/scripts/startup/bl_operators/image.py6
-rw-r--r--release/scripts/startup/bl_operators/object.py25
-rw-r--r--release/scripts/startup/bl_operators/presets.py32
-rw-r--r--release/scripts/startup/bl_operators/wm.py68
-rw-r--r--release/scripts/startup/bl_ui/properties_animviz.py17
-rw-r--r--release/scripts/startup/bl_ui/properties_data_armature.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_data_bone.py3
-rw-r--r--release/scripts/startup/bl_ui/properties_data_modifier.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_paint_common.py34
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_field.py1
-rw-r--r--release/scripts/startup/bl_ui/properties_scene.py23
-rw-r--r--release/scripts/startup/bl_ui/properties_texture.py15
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py1
-rw-r--r--release/scripts/startup/bl_ui/space_node.py20
-rw-r--r--release/scripts/startup/bl_ui/space_text.py2
-rw-r--r--release/scripts/startup/bl_ui/space_time.py2
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py3
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py31
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py50
-rw-r--r--source/blender/CMakeLists.txt2
-rw-r--r--source/blender/SConscript2
-rw-r--r--source/blender/avi/AVI_avi.h6
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h164
-rw-r--r--source/blender/blenkernel/BKE_action.h34
-rw-r--r--source/blender/blenkernel/BKE_armature.h36
-rw-r--r--source/blender/blenkernel/BKE_blender.h22
-rw-r--r--source/blender/blenkernel/BKE_bmesh.h40
-rw-r--r--source/blender/blenkernel/BKE_bmfont.h10
-rw-r--r--source/blender/blenkernel/BKE_booleanops_mesh.h47
-rw-r--r--source/blender/blenkernel/BKE_brush.h18
-rw-r--r--source/blender/blenkernel/BKE_bullet.h2
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h23
-rw-r--r--source/blender/blenkernel/BKE_camera.h7
-rw-r--r--source/blender/blenkernel/BKE_ccg.h26
-rw-r--r--source/blender/blenkernel/BKE_cdderivedmesh.h8
-rw-r--r--source/blender/blenkernel/BKE_collision.h19
-rw-r--r--source/blender/blenkernel/BKE_colortools.h59
-rw-r--r--source/blender/blenkernel/BKE_constraint.h38
-rw-r--r--source/blender/blenkernel/BKE_context.h4
-rw-r--r--source/blender/blenkernel/BKE_curve.h12
-rw-r--r--source/blender/blenkernel/BKE_customdata.h54
-rw-r--r--source/blender/blenkernel/BKE_customdata_file.h6
-rw-r--r--source/blender/blenkernel/BKE_deform.h18
-rw-r--r--source/blender/blenkernel/BKE_depsgraph.h114
-rw-r--r--source/blender/blenkernel/BKE_displist.h12
-rw-r--r--source/blender/blenkernel/BKE_dynamicpaint.h4
-rw-r--r--source/blender/blenkernel/BKE_effect.h22
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h60
-rw-r--r--source/blender/blenkernel/BKE_fluidsim.h6
-rw-r--r--source/blender/blenkernel/BKE_global.h70
-rw-r--r--source/blender/blenkernel/BKE_group.h18
-rw-r--r--source/blender/blenkernel/BKE_icons.h19
-rw-r--r--source/blender/blenkernel/BKE_idprop.h14
-rw-r--r--source/blender/blenkernel/BKE_image.h89
-rw-r--r--source/blender/blenkernel/BKE_key.h2
-rw-r--r--source/blender/blenkernel/BKE_lattice.h2
-rw-r--r--source/blender/blenkernel/BKE_library.h4
-rw-r--r--source/blender/blenkernel/BKE_main.h4
-rw-r--r--source/blender/blenkernel/BKE_material.h3
-rw-r--r--source/blender/blenkernel/BKE_mesh.h24
-rw-r--r--source/blender/blenkernel/BKE_modifier.h101
-rw-r--r--source/blender/blenkernel/BKE_movieclip.h12
-rw-r--r--source/blender/blenkernel/BKE_navmesh_conversion.h48
-rw-r--r--source/blender/blenkernel/BKE_nla.h10
-rw-r--r--source/blender/blenkernel/BKE_node.h13
-rw-r--r--source/blender/blenkernel/BKE_object.h27
-rw-r--r--source/blender/blenkernel/BKE_ocean.h18
-rw-r--r--source/blender/blenkernel/BKE_packedFile.h4
-rw-r--r--source/blender/blenkernel/BKE_particle.h61
-rw-r--r--source/blender/blenkernel/BKE_plugin_types.h10
-rw-r--r--source/blender/blenkernel/BKE_pointcache.h84
-rw-r--r--source/blender/blenkernel/BKE_report.h4
-rw-r--r--source/blender/blenkernel/BKE_scene.h12
-rw-r--r--source/blender/blenkernel/BKE_screen.h108
-rw-r--r--source/blender/blenkernel/BKE_script.h2
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h94
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h32
-rw-r--r--source/blender/blenkernel/BKE_sketch.h62
-rw-r--r--source/blender/blenkernel/BKE_smoke.h4
-rw-r--r--source/blender/blenkernel/BKE_softbody.h12
-rw-r--r--source/blender/blenkernel/BKE_subsurf.h10
-rw-r--r--source/blender/blenkernel/BKE_texture.h4
-rw-r--r--source/blender/blenkernel/BKE_unit.h34
-rw-r--r--source/blender/blenkernel/BKE_utildefines.h42
-rw-r--r--source/blender/blenkernel/BKE_writeffmpeg.h32
-rw-r--r--source/blender/blenkernel/CMakeLists.txt1
-rw-r--r--source/blender/blenkernel/depsgraph_private.h58
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c73
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c639
-rw-r--r--source/blender/blenkernel/intern/action.c2
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c578
-rw-r--r--source/blender/blenkernel/intern/armature.c22
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c4
-rw-r--r--source/blender/blenkernel/intern/cloth.c91
-rw-r--r--source/blender/blenkernel/intern/collision.c1744
-rw-r--r--source/blender/blenkernel/intern/colortools.c46
-rw-r--r--source/blender/blenkernel/intern/constraint.c2
-rw-r--r--source/blender/blenkernel/intern/curve.c24
-rw-r--r--source/blender/blenkernel/intern/customdata.c445
-rw-r--r--source/blender/blenkernel/intern/customdata_file.c162
-rw-r--r--source/blender/blenkernel/intern/deform.c10
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c18
-rw-r--r--source/blender/blenkernel/intern/displist.c74
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c2135
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c450
-rw-r--r--source/blender/blenkernel/intern/font.c3
-rw-r--r--source/blender/blenkernel/intern/icons.c78
-rw-r--r--source/blender/blenkernel/intern/idcode.c96
-rw-r--r--source/blender/blenkernel/intern/idprop.c3
-rw-r--r--source/blender/blenkernel/intern/image.c20
-rw-r--r--source/blender/blenkernel/intern/key.c3
-rw-r--r--source/blender/blenkernel/intern/lattice.c4
-rw-r--r--source/blender/blenkernel/intern/mball.c4
-rw-r--r--source/blender/blenkernel/intern/mesh.c107
-rw-r--r--source/blender/blenkernel/intern/multires.c16
-rw-r--r--source/blender/blenkernel/intern/nla.c348
-rw-r--r--source/blender/blenkernel/intern/node.c7
-rw-r--r--source/blender/blenkernel/intern/object.c31
-rw-r--r--source/blender/blenkernel/intern/ocean.c492
-rw-r--r--source/blender/blenkernel/intern/particle_system.c208
-rw-r--r--source/blender/blenkernel/intern/report.c76
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c122
-rw-r--r--source/blender/blenkernel/intern/sketch.c18
-rw-r--r--source/blender/blenkernel/intern/softbody.c28
-rw-r--r--source/blender/blenkernel/intern/sound.c1
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c177
-rw-r--r--source/blender/blenkernel/intern/suggestions.c26
-rw-r--r--source/blender/blenkernel/intern/tracking.c2
-rw-r--r--source/blender/blenkernel/intern/writeavi.c88
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c716
-rw-r--r--source/blender/blenkernel/nla_private.h22
-rw-r--r--source/blender/blenlib/BLI_args.h2
-rw-r--r--source/blender/blenlib/BLI_array.h6
-rw-r--r--source/blender/blenlib/BLI_bitmap.h6
-rw-r--r--source/blender/blenlib/BLI_bpath.h14
-rw-r--r--source/blender/blenlib/BLI_callbacks.h4
-rw-r--r--source/blender/blenlib/BLI_dlrbTree.h10
-rw-r--r--source/blender/blenlib/BLI_dynlib.h6
-rw-r--r--source/blender/blenlib/BLI_dynstr.h94
-rw-r--r--source/blender/blenlib/BLI_edgehash.h84
-rw-r--r--source/blender/blenlib/BLI_fileops.h4
-rw-r--r--source/blender/blenlib/BLI_fileops_types.h37
-rw-r--r--source/blender/blenlib/BLI_fnmatch.h46
-rw-r--r--source/blender/blenlib/BLI_ghash.h153
-rw-r--r--source/blender/blenlib/BLI_graph.h89
-rw-r--r--source/blender/blenlib/BLI_gsqueue.h102
-rw-r--r--source/blender/blenlib/BLI_heap.h22
-rw-r--r--source/blender/blenlib/BLI_jitter.h2
-rw-r--r--source/blender/blenlib/BLI_kdopbvh.h37
-rw-r--r--source/blender/blenlib/BLI_kdtree.h7
-rw-r--r--source/blender/blenlib/BLI_linklist.h21
-rw-r--r--source/blender/blenlib/BLI_math_base.h14
-rw-r--r--source/blender/blenlib/BLI_math_color.h22
-rw-r--r--source/blender/blenlib/BLI_math_geom.h66
-rw-r--r--source/blender/blenlib/BLI_math_matrix.h38
-rw-r--r--source/blender/blenlib/BLI_math_rotation.h14
-rw-r--r--source/blender/blenlib/BLI_math_vector.h5
-rw-r--r--source/blender/blenlib/BLI_memarena.h22
-rw-r--r--source/blender/blenlib/BLI_noise.h2
-rw-r--r--source/blender/blenlib/BLI_path_util.h54
-rw-r--r--source/blender/blenlib/BLI_rand.h78
-rw-r--r--source/blender/blenlib/BLI_rect.h2
-rw-r--r--source/blender/blenlib/BLI_scanfill.h18
-rw-r--r--source/blender/blenlib/BLI_smallhash.h20
-rw-r--r--source/blender/blenlib/BLI_string.h130
-rw-r--r--source/blender/blenlib/BLI_string_utf8.h6
-rw-r--r--source/blender/blenlib/BLI_threads.h48
-rw-r--r--source/blender/blenlib/BLI_utildefines.h177
-rw-r--r--source/blender/blenlib/BLI_vfontdata.h21
-rw-r--r--source/blender/blenlib/BLI_winstuff.h10
-rw-r--r--source/blender/blenlib/PIL_time.h44
-rw-r--r--source/blender/blenlib/intern/BLI_args.c26
-rw-r--r--source/blender/blenlib/intern/BLI_dynstr.c88
-rw-r--r--source/blender/blenlib/intern/BLI_ghash.c27
-rw-r--r--source/blender/blenlib/intern/BLI_heap.c10
-rw-r--r--source/blender/blenlib/intern/BLI_kdopbvh.c441
-rw-r--r--source/blender/blenlib/intern/BLI_kdtree.c246
-rw-r--r--source/blender/blenlib/intern/BLI_linklist.c46
-rw-r--r--source/blender/blenlib/intern/BLI_memarena.c8
-rw-r--r--source/blender/blenlib/intern/BLI_mempool.c4
-rw-r--r--source/blender/blenlib/intern/DLRB_tree.c188
-rw-r--r--source/blender/blenlib/intern/boxpack2d.c46
-rw-r--r--source/blender/blenlib/intern/bpath.c148
-rw-r--r--source/blender/blenlib/intern/callbacks.c16
-rw-r--r--source/blender/blenlib/intern/cpu.c18
-rw-r--r--source/blender/blenlib/intern/dynlib.c20
-rw-r--r--source/blender/blenlib/intern/edgehash.c18
-rw-r--r--source/blender/blenlib/intern/fileops.c90
-rw-r--r--source/blender/blenlib/intern/freetypefont.c234
-rw-r--r--source/blender/blenlib/intern/graph.c52
-rw-r--r--source/blender/blenlib/intern/gsqueue.c44
-rw-r--r--source/blender/blenlib/intern/jitter.c104
-rw-r--r--source/blender/blenlib/intern/listbase.c172
-rw-r--r--source/blender/blenlib/intern/math_geom.c40
-rw-r--r--source/blender/blenlib/intern/math_rotation.c13
-rw-r--r--source/blender/blenlib/intern/math_vector_inline.c8
-rw-r--r--source/blender/blenlib/intern/noise.c447
-rw-r--r--source/blender/blenlib/intern/path_util.c462
-rw-r--r--source/blender/blenlib/intern/pbvh.c11
-rw-r--r--source/blender/blenlib/intern/rand.c58
-rw-r--r--source/blender/blenlib/intern/rct.c6
-rw-r--r--source/blender/blenlib/intern/scanfill.c78
-rw-r--r--source/blender/blenlib/intern/smallhash.c22
-rw-r--r--source/blender/blenlib/intern/storage.c156
-rw-r--r--source/blender/blenlib/intern/string.c118
-rw-r--r--source/blender/blenlib/intern/threads.c128
-rw-r--r--source/blender/blenlib/intern/time.c36
-rw-r--r--source/blender/blenlib/intern/uvproject.c2
-rw-r--r--source/blender/blenlib/intern/voxel.c4
-rw-r--r--source/blender/blenlib/intern/winstuff.c96
-rw-r--r--source/blender/blenloader/BLO_readfile.h127
-rw-r--r--source/blender/blenloader/BLO_sys_types.h24
-rw-r--r--source/blender/blenloader/intern/readblenentry.c126
-rw-r--r--source/blender/blenloader/intern/readfile.c4482
-rw-r--r--source/blender/blenloader/intern/readfile.h26
-rw-r--r--source/blender/blenloader/intern/undofile.c44
-rw-r--r--source/blender/blenloader/intern/versioning_legacy.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_core.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh.c6
-rw-r--r--source/blender/bmesh/intern/bmesh_opdefines.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.c4
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.h1
-rw-r--r--source/blender/bmesh/intern/bmesh_polygon.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_walkers.c8
-rw-r--r--source/blender/bmesh/intern/bmesh_walkers_impl.c8
-rw-r--r--source/blender/bmesh/operators/bmo_create.c6
-rw-r--r--source/blender/bmesh/operators/bmo_dupe.c4
-rw-r--r--source/blender/bmesh/operators/bmo_hull.c90
-rw-r--r--source/blender/bmesh/operators/bmo_removedoubles.c4
-rw-r--r--source/blender/bmesh/operators/bmo_triangulate.c30
-rw-r--r--source/blender/bmesh/operators/bmo_utils.c63
-rw-r--r--source/blender/bmesh/tools/BME_bevel.c4
-rw-r--r--source/blender/collada/GeometryExporter.cpp61
-rw-r--r--source/blender/collada/GeometryExporter.h5
-rw-r--r--source/blender/collada/MeshImporter.cpp260
-rw-r--r--source/blender/collada/MeshImporter.h16
-rw-r--r--source/blender/compositor/CMakeLists.txt608
-rw-r--r--source/blender/compositor/COM_compositor.h304
-rw-r--r--source/blender/compositor/COM_defines.h99
-rw-r--r--source/blender/compositor/SConscript14
-rw-r--r--source/blender/compositor/intern/COM_CPUDevice.cpp42
-rw-r--r--source/blender/compositor/intern/COM_CPUDevice.h41
-rw-r--r--source/blender/compositor/intern/COM_ChannelInfo.cpp35
-rw-r--r--source/blender/compositor/intern/COM_ChannelInfo.h121
-rw-r--r--source/blender/compositor/intern/COM_ChunkOrder.cpp51
-rw-r--r--source/blender/compositor/intern/COM_ChunkOrder.h45
-rw-r--r--source/blender/compositor/intern/COM_ChunkOrderHotspot.cpp40
-rw-r--r--source/blender/compositor/intern/COM_ChunkOrderHotspot.h37
-rw-r--r--source/blender/compositor/intern/COM_CompositorContext.cpp52
-rw-r--r--source/blender/compositor/intern/COM_CompositorContext.h147
-rw-r--r--source/blender/compositor/intern/COM_Converter.cpp501
-rw-r--r--source/blender/compositor/intern/COM_Converter.h70
-rw-r--r--source/blender/compositor/intern/COM_Device.cpp24
-rw-r--r--source/blender/compositor/intern/COM_Device.h57
-rw-r--r--source/blender/compositor/intern/COM_ExecutionGroup.cpp596
-rw-r--r--source/blender/compositor/intern/COM_ExecutionGroup.h404
-rw-r--r--source/blender/compositor/intern/COM_ExecutionSystem.cpp320
-rw-r--r--source/blender/compositor/intern/COM_ExecutionSystem.h229
-rw-r--r--source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp329
-rw-r--r--source/blender/compositor/intern/COM_ExecutionSystemHelper.h127
-rw-r--r--source/blender/compositor/intern/COM_InputSocket.cpp246
-rw-r--r--source/blender/compositor/intern/COM_InputSocket.h162
-rw-r--r--source/blender/compositor/intern/COM_MemoryBuffer.cpp353
-rw-r--r--source/blender/compositor/intern/COM_MemoryBuffer.h170
-rw-r--r--source/blender/compositor/intern/COM_MemoryManager.cpp74
-rw-r--r--source/blender/compositor/intern/COM_MemoryManager.h146
-rw-r--r--source/blender/compositor/intern/COM_MemoryManagerState.cpp100
-rw-r--r--source/blender/compositor/intern/COM_MemoryManagerState.h87
-rw-r--r--source/blender/compositor/intern/COM_MemoryProxy.cpp39
-rw-r--r--source/blender/compositor/intern/COM_MemoryProxy.h106
-rw-r--r--source/blender/compositor/intern/COM_Node.cpp197
-rw-r--r--source/blender/compositor/intern/COM_Node.h131
-rw-r--r--source/blender/compositor/intern/COM_NodeBase.cpp143
-rw-r--r--source/blender/compositor/intern/COM_NodeBase.h174
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.cpp126
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.h247
-rw-r--r--source/blender/compositor/intern/COM_NodeProgram.cpp0
-rw-r--r--source/blender/compositor/intern/COM_NodeProgram.h7
-rw-r--r--source/blender/compositor/intern/COM_OpenCLDevice.cpp65
-rw-r--r--source/blender/compositor/intern/COM_OpenCLDevice.h88
-rw-r--r--source/blender/compositor/intern/COM_OutputSocket.cpp159
-rw-r--r--source/blender/compositor/intern/COM_OutputSocket.h105
-rw-r--r--source/blender/compositor/intern/COM_Socket.cpp50
-rw-r--r--source/blender/compositor/intern/COM_Socket.h100
-rw-r--r--source/blender/compositor/intern/COM_SocketConnection.cpp95
-rw-r--r--source/blender/compositor/intern/COM_SocketConnection.h123
-rw-r--r--source/blender/compositor/intern/COM_SocketReader.cpp25
-rw-r--r--source/blender/compositor/intern/COM_SocketReader.h113
-rw-r--r--source/blender/compositor/intern/COM_WorkPackage.cpp29
-rw-r--r--source/blender/compositor/intern/COM_WorkPackage.h64
-rw-r--r--source/blender/compositor/intern/COM_WorkScheduler.cpp326
-rw-r--r--source/blender/compositor/intern/COM_WorkScheduler.h127
-rw-r--r--source/blender/compositor/intern/COM_compositor.cpp60
-rw-r--r--source/blender/compositor/nodes/COM_AlphaOverNode.cpp72
-rw-r--r--source/blender/compositor/nodes/COM_AlphaOverNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_BilateralBlurNode.cpp43
-rw-r--r--source/blender/compositor/nodes/COM_BilateralBlurNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_BlurNode.cpp85
-rw-r--r--source/blender/compositor/nodes/COM_BlurNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_BokehBlurNode.cpp66
-rw-r--r--source/blender/compositor/nodes/COM_BokehBlurNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_BokehImageNode.cpp39
-rw-r--r--source/blender/compositor/nodes/COM_BokehImageNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_BoxMaskNode.cpp43
-rw-r--r--source/blender/compositor/nodes/COM_BoxMaskNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_BrightnessNode.cpp41
-rw-r--r--source/blender/compositor/nodes/COM_BrightnessNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ChannelMatteNode.cpp90
-rw-r--r--source/blender/compositor/nodes/COM_ChannelMatteNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ChromaMatteNode.cpp71
-rw-r--r--source/blender/compositor/nodes/COM_ChromaMatteNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ColorBalanceNode.cpp70
-rw-r--r--source/blender/compositor/nodes/COM_ColorBalanceNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_ColorCorrectionNode.cpp44
-rw-r--r--source/blender/compositor/nodes/COM_ColorCorrectionNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ColorCurveNode.cpp46
-rw-r--r--source/blender/compositor/nodes/COM_ColorCurveNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ColorMatteNode.cpp68
-rw-r--r--source/blender/compositor/nodes/COM_ColorMatteNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ColorNode.cpp40
-rw-r--r--source/blender/compositor/nodes/COM_ColorNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ColorRampNode.cpp52
-rw-r--r--source/blender/compositor/nodes/COM_ColorRampNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_ColorSpillNode.cpp57
-rw-r--r--source/blender/compositor/nodes/COM_ColorSpillNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_ColorToBWNode.cpp41
-rw-r--r--source/blender/compositor/nodes/COM_ColorToBWNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_CombineHSVANode.cpp45
-rw-r--r--source/blender/compositor/nodes/COM_CombineHSVANode.h38
-rw-r--r--source/blender/compositor/nodes/COM_CombineRGBANode.cpp64
-rw-r--r--source/blender/compositor/nodes/COM_CombineRGBANode.h37
-rw-r--r--source/blender/compositor/nodes/COM_CombineYCCANode.cpp44
-rw-r--r--source/blender/compositor/nodes/COM_CombineYCCANode.h37
-rw-r--r--source/blender/compositor/nodes/COM_CombineYUVANode.cpp39
-rw-r--r--source/blender/compositor/nodes/COM_CombineYUVANode.h37
-rw-r--r--source/blender/compositor/nodes/COM_CompositorNode.cpp44
-rw-r--r--source/blender/compositor/nodes/COM_CompositorNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_ConvertAlphaNode.cpp44
-rw-r--r--source/blender/compositor/nodes/COM_ConvertAlphaNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_CropNode.cpp49
-rw-r--r--source/blender/compositor/nodes/COM_CropNode.h36
-rw-r--r--source/blender/compositor/nodes/COM_DefocusNode.cpp114
-rw-r--r--source/blender/compositor/nodes/COM_DefocusNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_DifferenceMatteNode.cpp53
-rw-r--r--source/blender/compositor/nodes/COM_DifferenceMatteNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_DilateErodeNode.cpp48
-rw-r--r--source/blender/compositor/nodes/COM_DilateErodeNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_DirectionalBlurNode.cpp42
-rw-r--r--source/blender/compositor/nodes/COM_DirectionalBlurNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_DisplaceNode.cpp46
-rw-r--r--source/blender/compositor/nodes/COM_DisplaceNode.h36
-rw-r--r--source/blender/compositor/nodes/COM_DistanceMatteNode.cpp60
-rw-r--r--source/blender/compositor/nodes/COM_DistanceMatteNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.cpp45
-rw-r--r--source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_EllipseMaskNode.cpp43
-rw-r--r--source/blender/compositor/nodes/COM_EllipseMaskNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_FilterNode.cpp82
-rw-r--r--source/blender/compositor/nodes/COM_FilterNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_FlipNode.cpp55
-rw-r--r--source/blender/compositor/nodes/COM_FlipNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_GammaNode.cpp40
-rw-r--r--source/blender/compositor/nodes/COM_GammaNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_GlareNode.cpp130
-rw-r--r--source/blender/compositor/nodes/COM_GlareNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_GroupNode.cpp73
-rw-r--r--source/blender/compositor/nodes/COM_GroupNode.h57
-rw-r--r--source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.cpp71
-rw-r--r--source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_HueSaturationValueNode.cpp70
-rw-r--r--source/blender/compositor/nodes/COM_HueSaturationValueNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_IDMaskNode.cpp51
-rw-r--r--source/blender/compositor/nodes/COM_IDMaskNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ImageNode.cpp152
-rw-r--r--source/blender/compositor/nodes/COM_ImageNode.h44
-rw-r--r--source/blender/compositor/nodes/COM_InvertNode.cpp44
-rw-r--r--source/blender/compositor/nodes/COM_InvertNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_LensDistortionNode.cpp60
-rw-r--r--source/blender/compositor/nodes/COM_LensDistortionNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_LuminanceMatteNode.cpp61
-rw-r--r--source/blender/compositor/nodes/COM_LuminanceMatteNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_MapUVNode.cpp43
-rw-r--r--source/blender/compositor/nodes/COM_MapUVNode.h36
-rw-r--r--source/blender/compositor/nodes/COM_MapValueNode.cpp42
-rw-r--r--source/blender/compositor/nodes/COM_MapValueNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_MathNode.cpp93
-rw-r--r--source/blender/compositor/nodes/COM_MathNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_MixNode.cpp133
-rw-r--r--source/blender/compositor/nodes/COM_MixNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_MovieClipNode.cpp121
-rw-r--r--source/blender/compositor/nodes/COM_MovieClipNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_MovieDistortionNode.cpp46
-rw-r--r--source/blender/compositor/nodes/COM_MovieDistortionNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_MuteNode.cpp98
-rw-r--r--source/blender/compositor/nodes/COM_MuteNode.h40
-rw-r--r--source/blender/compositor/nodes/COM_NormalNode.cpp57
-rw-r--r--source/blender/compositor/nodes/COM_NormalNode.h39
-rw-r--r--source/blender/compositor/nodes/COM_NormalizeNode.cpp38
-rw-r--r--source/blender/compositor/nodes/COM_NormalizeNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_OutputFileNode.cpp91
-rw-r--r--source/blender/compositor/nodes/COM_OutputFileNode.h40
-rw-r--r--source/blender/compositor/nodes/COM_RenderLayersNode.cpp114
-rw-r--r--source/blender/compositor/nodes/COM_RenderLayersNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_RotateNode.cpp62
-rw-r--r--source/blender/compositor/nodes/COM_RotateNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ScaleNode.cpp88
-rw-r--r--source/blender/compositor/nodes/COM_ScaleNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_SeparateHSVANode.cpp44
-rw-r--r--source/blender/compositor/nodes/COM_SeparateHSVANode.h39
-rw-r--r--source/blender/compositor/nodes/COM_SeparateRGBANode.cpp72
-rw-r--r--source/blender/compositor/nodes/COM_SeparateRGBANode.h37
-rw-r--r--source/blender/compositor/nodes/COM_SeparateYCCANode.cpp46
-rw-r--r--source/blender/compositor/nodes/COM_SeparateYCCANode.h38
-rw-r--r--source/blender/compositor/nodes/COM_SeparateYUVANode.cpp42
-rw-r--r--source/blender/compositor/nodes/COM_SeparateYUVANode.h38
-rw-r--r--source/blender/compositor/nodes/COM_SetAlphaNode.cpp36
-rw-r--r--source/blender/compositor/nodes/COM_SetAlphaNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_SocketProxyNode.cpp95
-rw-r--r--source/blender/compositor/nodes/COM_SocketProxyNode.h46
-rw-r--r--source/blender/compositor/nodes/COM_SplitViewerNode.cpp51
-rw-r--r--source/blender/compositor/nodes/COM_SplitViewerNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_Stabilize2dNode.cpp89
-rw-r--r--source/blender/compositor/nodes/COM_Stabilize2dNode.h34
-rw-r--r--source/blender/compositor/nodes/COM_SwitchNode.cpp46
-rw-r--r--source/blender/compositor/nodes/COM_SwitchNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_TextureNode.cpp51
-rw-r--r--source/blender/compositor/nodes/COM_TextureNode.h34
-rw-r--r--source/blender/compositor/nodes/COM_TimeNode.cpp59
-rw-r--r--source/blender/compositor/nodes/COM_TimeNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_TonemapNode.cpp41
-rw-r--r--source/blender/compositor/nodes/COM_TonemapNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_TransformNode.cpp79
-rw-r--r--source/blender/compositor/nodes/COM_TransformNode.h34
-rw-r--r--source/blender/compositor/nodes/COM_TranslateNode.cpp45
-rw-r--r--source/blender/compositor/nodes/COM_TranslateNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ValueNode.cpp40
-rw-r--r--source/blender/compositor/nodes/COM_ValueNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_VectorBlurNode.cpp47
-rw-r--r--source/blender/compositor/nodes/COM_VectorBlurNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_VectorCurveNode.cpp42
-rw-r--r--source/blender/compositor/nodes/COM_VectorCurveNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ViewLevelsNode.cpp67
-rw-r--r--source/blender/compositor/nodes/COM_ViewLevelsNode.h38
-rw-r--r--source/blender/compositor/nodes/COM_ViewerNode.cpp56
-rw-r--r--source/blender/compositor/nodes/COM_ViewerNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_ZCombineNode.cpp67
-rw-r--r--source/blender/compositor/nodes/COM_ZCombineNode.h38
-rw-r--r--source/blender/compositor/operations/COM_AlphaOverKeyOperation.cpp60
-rw-r--r--source/blender/compositor/operations/COM_AlphaOverKeyOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp63
-rw-r--r--source/blender/compositor/operations/COM_AlphaOverMixedOperation.h48
-rw-r--r--source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp61
-rw-r--r--source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_AntiAliasOperation.cpp105
-rw-r--r--source/blender/compositor/operations/COM_AntiAliasOperation.h61
-rw-r--r--source/blender/compositor/operations/COM_BilateralBlurOperation.cpp121
-rw-r--r--source/blender/compositor/operations/COM_BilateralBlurOperation.h57
-rw-r--r--source/blender/compositor/operations/COM_BlurBaseOperation.cpp106
-rw-r--r--source/blender/compositor/operations/COM_BlurBaseOperation.h58
-rw-r--r--source/blender/compositor/operations/COM_BokehBlurOperation.cpp167
-rw-r--r--source/blender/compositor/operations/COM_BokehBlurOperation.h60
-rw-r--r--source/blender/compositor/operations/COM_BokehImageOperation.cpp122
-rw-r--r--source/blender/compositor/operations/COM_BokehImageOperation.h67
-rw-r--r--source/blender/compositor/operations/COM_BoxMaskOperation.cpp119
-rw-r--r--source/blender/compositor/operations/COM_BoxMaskOperation.h65
-rw-r--r--source/blender/compositor/operations/COM_BrightnessOperation.cpp80
-rw-r--r--source/blender/compositor/operations/COM_BrightnessOperation.h56
-rw-r--r--source/blender/compositor/operations/COM_CalculateMeanOperation.cpp129
-rw-r--r--source/blender/compositor/operations/COM_CalculateMeanOperation.h69
-rw-r--r--source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.cpp97
-rw-r--r--source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.h47
-rw-r--r--source/blender/compositor/operations/COM_ChangeHSVOperation.cpp54
-rw-r--r--source/blender/compositor/operations/COM_ChangeHSVOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ChannelMatteOperation.cpp121
-rw-r--r--source/blender/compositor/operations/COM_ChannelMatteOperation.h76
-rw-r--r--source/blender/compositor/operations/COM_ChromaMatteOperation.cpp101
-rw-r--r--source/blender/compositor/operations/COM_ChromaMatteOperation.h52
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cpp75
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h81
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp80
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h81
-rw-r--r--source/blender/compositor/operations/COM_ColorCorrectionOperation.cpp145
-rw-r--r--source/blender/compositor/operations/COM_ColorCorrectionOperation.h64
-rw-r--r--source/blender/compositor/operations/COM_ColorCurveOperation.cpp99
-rw-r--r--source/blender/compositor/operations/COM_ColorCurveOperation.h56
-rw-r--r--source/blender/compositor/operations/COM_ColorMatteOperation.cpp84
-rw-r--r--source/blender/compositor/operations/COM_ColorMatteOperation.h52
-rw-r--r--source/blender/compositor/operations/COM_ColorRampOperation.cpp57
-rw-r--r--source/blender/compositor/operations/COM_ColorRampOperation.h57
-rw-r--r--source/blender/compositor/operations/COM_ColorSpillOperation.cpp118
-rw-r--r--source/blender/compositor/operations/COM_ColorSpillOperation.h64
-rw-r--r--source/blender/compositor/operations/COM_CombineChannelsOperation.cpp76
-rw-r--r--source/blender/compositor/operations/COM_CombineChannelsOperation.h42
-rw-r--r--source/blender/compositor/operations/COM_CompositorOperation.cpp127
-rw-r--r--source/blender/compositor/operations/COM_CompositorOperation.h69
-rw-r--r--source/blender/compositor/operations/COM_ConvertColorProfileOperation.cpp51
-rw-r--r--source/blender/compositor/operations/COM_ConvertColorProfileOperation.h78
-rw-r--r--source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp47
-rw-r--r--source/blender/compositor/operations/COM_ConvertColorToBWOperation.h60
-rw-r--r--source/blender/compositor/operations/COM_ConvertColorToVectorOperation.cpp45
-rw-r--r--source/blender/compositor/operations/COM_ConvertColorToVectorOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertColourToValueProg.cpp47
-rw-r--r--source/blender/compositor/operations/COM_ConvertColourToValueProg.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cpp103
-rw-r--r--source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.h72
-rw-r--r--source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.cpp50
-rw-r--r--source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.cpp57
-rw-r--r--source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.h49
-rw-r--r--source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.cpp64
-rw-r--r--source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.h48
-rw-r--r--source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.h60
-rw-r--r--source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.cpp72
-rw-r--r--source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.h68
-rw-r--r--source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.cpp48
-rw-r--r--source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertValueToColourProg.cpp49
-rw-r--r--source/blender/compositor/operations/COM_ConvertValueToColourProg.h53
-rw-r--r--source/blender/compositor/operations/COM_ConvertValueToVectorOperation.cpp50
-rw-r--r--source/blender/compositor/operations/COM_ConvertValueToVectorOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertVectorToColorOperation.cpp46
-rw-r--r--source/blender/compositor/operations/COM_ConvertVectorToColorOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertVectorToValueOperation.cpp47
-rw-r--r--source/blender/compositor/operations/COM_ConvertVectorToValueOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.cpp72
-rw-r--r--source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.h68
-rw-r--r--source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.h58
-rw-r--r--source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.cpp98
-rw-r--r--source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.h34
-rw-r--r--source/blender/compositor/operations/COM_ConvolutionFilterOperation.cpp142
-rw-r--r--source/blender/compositor/operations/COM_ConvolutionFilterOperation.h48
-rw-r--r--source/blender/compositor/operations/COM_CropOperation.cpp115
-rw-r--r--source/blender/compositor/operations/COM_CropOperation.h63
-rw-r--r--source/blender/compositor/operations/COM_CurveBaseOperation.cpp40
-rw-r--r--source/blender/compositor/operations/COM_CurveBaseOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_DifferenceMatteOperation.cpp88
-rw-r--r--source/blender/compositor/operations/COM_DifferenceMatteOperation.h53
-rw-r--r--source/blender/compositor/operations/COM_DilateErodeOperation.cpp159
-rw-r--r--source/blender/compositor/operations/COM_DilateErodeOperation.h70
-rw-r--r--source/blender/compositor/operations/COM_DirectionalBlurOperation.cpp120
-rw-r--r--source/blender/compositor/operations/COM_DirectionalBlurOperation.h59
-rw-r--r--source/blender/compositor/operations/COM_DisplaceOperation.cpp151
-rw-r--r--source/blender/compositor/operations/COM_DisplaceOperation.h63
-rw-r--r--source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp131
-rw-r--r--source/blender/compositor/operations/COM_DisplaceSimpleOperation.h63
-rw-r--r--source/blender/compositor/operations/COM_DistanceMatteOperation.cpp90
-rw-r--r--source/blender/compositor/operations/COM_DistanceMatteOperation.h52
-rw-r--r--source/blender/compositor/operations/COM_DotproductOperation.cpp55
-rw-r--r--source/blender/compositor/operations/COM_DotproductOperation.h41
-rw-r--r--source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.cpp1301
-rw-r--r--source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.h64
-rw-r--r--source/blender/compositor/operations/COM_EllipseMaskOperation.cpp123
-rw-r--r--source/blender/compositor/operations/COM_EllipseMaskOperation.h65
-rw-r--r--source/blender/compositor/operations/COM_FastGaussianBlurOperation.cpp205
-rw-r--r--source/blender/compositor/operations/COM_FastGaussianBlurOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_FlipOperation.cpp75
-rw-r--r--source/blender/compositor/operations/COM_FlipOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_FogGlowImageOperation.cpp51
-rw-r--r--source/blender/compositor/operations/COM_FogGlowImageOperation.h39
-rw-r--r--source/blender/compositor/operations/COM_GammaCorrectOperation.cpp106
-rw-r--r--source/blender/compositor/operations/COM_GammaCorrectOperation.h80
-rw-r--r--source/blender/compositor/operations/COM_GammaOperation.cpp60
-rw-r--r--source/blender/compositor/operations/COM_GammaOperation.h54
-rw-r--r--source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp182
-rw-r--r--source/blender/compositor/operations/COM_GaussianBokehBlurOperation.h51
-rw-r--r--source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp135
-rw-r--r--source/blender/compositor/operations/COM_GaussianXBlurOperation.h49
-rw-r--r--source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp132
-rw-r--r--source/blender/compositor/operations/COM_GaussianYBlurOperation.h49
-rw-r--r--source/blender/compositor/operations/COM_GlareBaseOperation.cpp81
-rw-r--r--source/blender/compositor/operations/COM_GlareBaseOperation.h70
-rw-r--r--source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp114
-rw-r--r--source/blender/compositor/operations/COM_GlareSimpleStarOperation.h35
-rw-r--r--source/blender/compositor/operations/COM_GlareStreaksOperation.cpp95
-rw-r--r--source/blender/compositor/operations/COM_GlareStreaksOperation.h35
-rw-r--r--source/blender/compositor/operations/COM_GlareThresholdOperation.cpp52
-rw-r--r--source/blender/compositor/operations/COM_GlareThresholdOperation.h57
-rw-r--r--source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp78
-rw-r--r--source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.h53
-rw-r--r--source/blender/compositor/operations/COM_IDMaskOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_IDMaskOperation.h57
-rw-r--r--source/blender/compositor/operations/COM_ImageOperation.cpp163
-rw-r--r--source/blender/compositor/operations/COM_ImageOperation.h94
-rw-r--r--source/blender/compositor/operations/COM_InvertOperation.cpp75
-rw-r--r--source/blender/compositor/operations/COM_InvertOperation.h60
-rw-r--r--source/blender/compositor/operations/COM_LensGhostOperation.cpp815
-rw-r--r--source/blender/compositor/operations/COM_LensGhostOperation.h82
-rw-r--r--source/blender/compositor/operations/COM_LensGlowImageOperation.cpp56
-rw-r--r--source/blender/compositor/operations/COM_LensGlowImageOperation.h52
-rw-r--r--source/blender/compositor/operations/COM_LensGlowOperation.cpp58
-rw-r--r--source/blender/compositor/operations/COM_LensGlowOperation.h56
-rw-r--r--source/blender/compositor/operations/COM_LuminanceMatteOperation.cpp83
-rw-r--r--source/blender/compositor/operations/COM_LuminanceMatteOperation.h51
-rw-r--r--source/blender/compositor/operations/COM_MapUVOperation.cpp158
-rw-r--r--source/blender/compositor/operations/COM_MapUVOperation.h62
-rw-r--r--source/blender/compositor/operations/COM_MapValueOperation.cpp56
-rw-r--r--source/blender/compositor/operations/COM_MapValueOperation.h66
-rw-r--r--source/blender/compositor/operations/COM_MathBaseOperation.cpp261
-rw-r--r--source/blender/compositor/operations/COM_MathBaseOperation.h150
-rw-r--r--source/blender/compositor/operations/COM_MixAddOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_MixAddOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixBaseOperation.cpp96
-rw-r--r--source/blender/compositor/operations/COM_MixBaseOperation.h67
-rw-r--r--source/blender/compositor/operations/COM_MixBlendOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_MixBlendOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixBurnOperation.cpp86
-rw-r--r--source/blender/compositor/operations/COM_MixBurnOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixColorOperation.cpp61
-rw-r--r--source/blender/compositor/operations/COM_MixColorOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixDarkenOperation.cpp56
-rw-r--r--source/blender/compositor/operations/COM_MixDarkenOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixDifferenceOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_MixDifferenceOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixDivideOperation.cpp59
-rw-r--r--source/blender/compositor/operations/COM_MixDivideOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixDodgeOperation.cpp91
-rw-r--r--source/blender/compositor/operations/COM_MixDodgeOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixHueOperation.cpp60
-rw-r--r--source/blender/compositor/operations/COM_MixHueOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixLightenOperation.cpp54
-rw-r--r--source/blender/compositor/operations/COM_MixLightenOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_MixLinearLightOperation.cpp56
-rw-r--r--source/blender/compositor/operations/COM_MixLinearLightOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixMultiplyOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_MixMultiplyOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixOverlayOperation.cpp65
-rw-r--r--source/blender/compositor/operations/COM_MixOverlayOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixSaturationOperation.cpp56
-rw-r--r--source/blender/compositor/operations/COM_MixSaturationOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixScreenOperation.cpp50
-rw-r--r--source/blender/compositor/operations/COM_MixScreenOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_MixSoftLightOperation.cpp55
-rw-r--r--source/blender/compositor/operations/COM_MixSoftLightOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixSubtractOperation.cpp47
-rw-r--r--source/blender/compositor/operations/COM_MixSubtractOperation.h45
-rw-r--r--source/blender/compositor/operations/COM_MixValueOperation.cpp54
-rw-r--r--source/blender/compositor/operations/COM_MixValueOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_MovieClipAttributeOperation.cpp70
-rw-r--r--source/blender/compositor/operations/COM_MovieClipAttributeOperation.h61
-rw-r--r--source/blender/compositor/operations/COM_MovieClipOperation.cpp100
-rw-r--r--source/blender/compositor/operations/COM_MovieClipOperation.h64
-rw-r--r--source/blender/compositor/operations/COM_MovieDistortionOperation.cpp95
-rw-r--r--source/blender/compositor/operations/COM_MovieDistortionOperation.h113
-rw-r--r--source/blender/compositor/operations/COM_MultilayerImageOperation.cpp105
-rw-r--r--source/blender/compositor/operations/COM_MultilayerImageOperation.h68
-rw-r--r--source/blender/compositor/operations/COM_NormalizeOperation.cpp114
-rw-r--r--source/blender/compositor/operations/COM_NormalizeOperation.h69
-rw-r--r--source/blender/compositor/operations/COM_OpenCLKernels.cl9
-rw-r--r--source/blender/compositor/operations/COM_OpenCLKernels.cl.cpp14
-rw-r--r--source/blender/compositor/operations/COM_OutputFileOperation.cpp263
-rw-r--r--source/blender/compositor/operations/COM_OutputFileOperation.h89
-rw-r--r--source/blender/compositor/operations/COM_PreviewOperation.cpp136
-rw-r--r--source/blender/compositor/operations/COM_PreviewOperation.h56
-rw-r--r--source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.cpp77
-rw-r--r--source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.h64
-rw-r--r--source/blender/compositor/operations/COM_QualityStepHelper.cpp71
-rw-r--r--source/blender/compositor/operations/COM_QualityStepHelper.h53
-rw-r--r--source/blender/compositor/operations/COM_ReadBufferOperation.cpp77
-rw-r--r--source/blender/compositor/operations/COM_ReadBufferOperation.h51
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersAOOperation.cpp29
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersAOOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersAlphaProg.cpp49
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersAlphaProg.h35
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersBaseProg.cpp138
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersBaseProg.h99
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersColorOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersColorOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersCyclesOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersCyclesOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersDepthProg.cpp29
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersDepthProg.h34
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersEmitOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersEmitOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersImageProg.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersImageProg.h34
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersIndirectOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersIndirectOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersMistOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersMistOperation.h11
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersNormalOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersNormalOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersReflectionOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersReflectionOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersRefractionOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersRefractionOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersShadowOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersShadowOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersSpecularOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersSpecularOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersSpeedOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersSpeedOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersUVOperation.cpp28
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersUVOperation.h33
-rw-r--r--source/blender/compositor/operations/COM_RotateOperation.cpp99
-rw-r--r--source/blender/compositor/operations/COM_RotateOperation.h46
-rw-r--r--source/blender/compositor/operations/COM_ScaleOperation.cpp212
-rw-r--r--source/blender/compositor/operations/COM_ScaleOperation.h77
-rw-r--r--source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp172
-rw-r--r--source/blender/compositor/operations/COM_ScreenLensDistortionOperation.h74
-rw-r--r--source/blender/compositor/operations/COM_SeparateChannelOperation.cpp47
-rw-r--r--source/blender/compositor/operations/COM_SeparateChannelOperation.h42
-rw-r--r--source/blender/compositor/operations/COM_SetAlphaOperation.cpp55
-rw-r--r--source/blender/compositor/operations/COM_SetAlphaOperation.h51
-rw-r--r--source/blender/compositor/operations/COM_SetColorOperation.cpp42
-rw-r--r--source/blender/compositor/operations/COM_SetColorOperation.h64
-rw-r--r--source/blender/compositor/operations/COM_SetSamplerOperation.cpp43
-rw-r--r--source/blender/compositor/operations/COM_SetSamplerOperation.h51
-rw-r--r--source/blender/compositor/operations/COM_SetValueOperation.cpp39
-rw-r--r--source/blender/compositor/operations/COM_SetValueOperation.h54
-rw-r--r--source/blender/compositor/operations/COM_SetVectorOperation.cpp49
-rw-r--r--source/blender/compositor/operations/COM_SetVectorOperation.h68
-rw-r--r--source/blender/compositor/operations/COM_SocketProxyOperation.cpp45
-rw-r--r--source/blender/compositor/operations/COM_SocketProxyOperation.h39
-rw-r--r--source/blender/compositor/operations/COM_SplitViewerOperation.cpp109
-rw-r--r--source/blender/compositor/operations/COM_SplitViewerOperation.h44
-rw-r--r--source/blender/compositor/operations/COM_TextureOperation.cpp109
-rw-r--r--source/blender/compositor/operations/COM_TextureOperation.h81
-rw-r--r--source/blender/compositor/operations/COM_TonemapOperation.cpp171
-rw-r--r--source/blender/compositor/operations/COM_TonemapOperation.h103
-rw-r--r--source/blender/compositor/operations/COM_TranslateOperation.cpp72
-rw-r--r--source/blender/compositor/operations/COM_TranslateOperation.h47
-rw-r--r--source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp149
-rw-r--r--source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h62
-rw-r--r--source/blender/compositor/operations/COM_VectorBlurOperation.cpp121
-rw-r--r--source/blender/compositor/operations/COM_VectorBlurOperation.h73
-rw-r--r--source/blender/compositor/operations/COM_VectorCurveOperation.cpp60
-rw-r--r--source/blender/compositor/operations/COM_VectorCurveOperation.h52
-rw-r--r--source/blender/compositor/operations/COM_ViewerBaseOperation.cpp99
-rw-r--r--source/blender/compositor/operations/COM_ViewerBaseOperation.h71
-rw-r--r--source/blender/compositor/operations/COM_ViewerOperation.cpp114
-rw-r--r--source/blender/compositor/operations/COM_ViewerOperation.h41
-rw-r--r--source/blender/compositor/operations/COM_WriteBufferOperation.cpp169
-rw-r--r--source/blender/compositor/operations/COM_WriteBufferOperation.h52
-rw-r--r--source/blender/compositor/operations/COM_ZCombineOperation.cpp94
-rw-r--r--source/blender/compositor/operations/COM_ZCombineOperation.h57
-rw-r--r--source/blender/editors/animation/anim_filter.c8
-rw-r--r--source/blender/editors/armature/editarmature.c6
-rw-r--r--source/blender/editors/armature/editarmature_retarget.c6
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c2
-rw-r--r--source/blender/editors/armature/meshlaplacian.c10
-rw-r--r--source/blender/editors/armature/reeb.c4
-rw-r--r--source/blender/editors/curve/editcurve.c6
-rw-r--r--source/blender/editors/datafiles/startup.blend.c16859
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c29
-rw-r--r--source/blender/editors/include/BIF_gl.h14
-rw-r--r--source/blender/editors/include/BIF_glutil.h252
-rw-r--r--source/blender/editors/include/ED_anim_api.h268
-rw-r--r--source/blender/editors/include/ED_armature.h57
-rw-r--r--source/blender/editors/include/ED_clip.h3
-rw-r--r--source/blender/editors/include/ED_curve.h34
-rw-r--r--source/blender/editors/include/ED_fileselect.h15
-rw-r--r--source/blender/editors/include/ED_fluidsim.h6
-rw-r--r--source/blender/editors/include/ED_gpencil.h4
-rw-r--r--source/blender/editors/include/ED_keyframes_draw.h34
-rw-r--r--source/blender/editors/include/ED_keyframes_edit.h114
-rw-r--r--source/blender/editors/include/ED_keyframing.h82
-rw-r--r--source/blender/editors/include/ED_markers.h5
-rw-r--r--source/blender/editors/include/ED_mesh.h12
-rw-r--r--source/blender/editors/include/ED_numinput.h10
-rw-r--r--source/blender/editors/include/ED_object.h30
-rw-r--r--source/blender/editors/include/ED_render.h20
-rw-r--r--source/blender/editors/include/ED_screen.h214
-rw-r--r--source/blender/editors/include/ED_screen_types.h42
-rw-r--r--source/blender/editors/include/ED_sculpt.h2
-rw-r--r--source/blender/editors/include/ED_sequencer.h2
-rw-r--r--source/blender/editors/include/ED_space_api.h10
-rw-r--r--source/blender/editors/include/ED_transform.h45
-rw-r--r--source/blender/editors/include/ED_types.h5
-rw-r--r--source/blender/editors/include/ED_util.h52
-rw-r--r--source/blender/editors/include/ED_view3d.h4
-rw-r--r--source/blender/editors/include/UI_interface.h492
-rw-r--r--source/blender/editors/include/UI_interface_icons.h4
-rw-r--r--source/blender/editors/include/UI_resources.h48
-rw-r--r--source/blender/editors/include/UI_view2d.h46
-rw-r--r--source/blender/editors/interface/interface_draw.c38
-rw-r--r--source/blender/editors/interface/interface_handlers.c17
-rw-r--r--source/blender/editors/interface/interface_icons.c3
-rw-r--r--source/blender/editors/interface/interface_intern.h3
-rw-r--r--source/blender/editors/interface/interface_ops.c4
-rw-r--r--source/blender/editors/interface/interface_panel.c5
-rw-r--r--source/blender/editors/interface/interface_regions.c23
-rw-r--r--source/blender/editors/mesh/editface.c2
-rw-r--r--source/blender/editors/mesh/editmesh_bvh.c9
-rw-r--r--source/blender/editors/mesh/editmesh_knife.c62
-rw-r--r--source/blender/editors/mesh/editmesh_select.c10
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c602
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c46
-rw-r--r--source/blender/editors/mesh/mesh_ops.c2
-rw-r--r--source/blender/editors/mesh/meshtools.c14
-rw-r--r--source/blender/editors/metaball/mball_edit.c2
-rw-r--r--source/blender/editors/object/object_add.c4
-rw-r--r--source/blender/editors/object/object_constraint.c21
-rw-r--r--source/blender/editors/object/object_select.c4
-rw-r--r--source/blender/editors/object/object_transform.c31
-rw-r--r--source/blender/editors/physics/particle_edit.c4
-rw-r--r--source/blender/editors/render/render_update.c2
-rw-r--r--source/blender/editors/screen/screen_ops.c2
-rw-r--r--source/blender/editors/sculpt_paint/paint_cursor.c12
-rw-r--r--source/blender/editors/sculpt_paint/paint_hide.c2
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c85
-rw-r--r--source/blender/editors/sculpt_paint/paint_ops.c6
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c4
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c363
-rw-r--r--source/blender/editors/space_api/spacetypes.c44
-rw-r--r--source/blender/editors/space_clip/clip_editor.c28
-rw-r--r--source/blender/editors/space_clip/clip_intern.h1
-rw-r--r--source/blender/editors/space_clip/space_clip.c6
-rw-r--r--source/blender/editors/space_clip/tracking_ops.c91
-rw-r--r--source/blender/editors/space_file/file_ops.c10
-rw-r--r--source/blender/editors/space_file/fsmenu.c222
-rw-r--r--source/blender/editors/space_file/fsmenu.h5
-rw-r--r--source/blender/editors/space_file/space_file.c5
-rw-r--r--source/blender/editors/space_image/image_ops.c2
-rw-r--r--source/blender/editors/space_logic/logic_buttons.c5
-rw-r--r--source/blender/editors/space_node/drawnode.c290
-rw-r--r--source/blender/editors/space_node/node_draw.c7
-rw-r--r--source/blender/editors/space_node/node_edit.c336
-rw-r--r--source/blender/editors/space_node/node_intern.h8
-rw-r--r--source/blender/editors/space_node/node_ops.c2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c2
-rw-r--r--source/blender/editors/space_view3d/drawobject.c30
-rw-r--r--source/blender/editors/space_view3d/drawvolume.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c7
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c11
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h4
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c22
-rw-r--r--source/blender/editors/space_view3d/view3d_snap.c16
-rw-r--r--source/blender/editors/transform/transform.c192
-rw-r--r--source/blender/editors/transform/transform.h6
-rw-r--r--source/blender/editors/transform/transform_conversions.c55
-rw-r--r--source/blender/editors/transform/transform_generics.c2
-rw-r--r--source/blender/editors/transform/transform_manipulator.c2
-rw-r--r--source/blender/editors/transform/transform_ops.c81
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c31
-rw-r--r--source/blender/editors/uvedit/uvedit_parametrizer.c13
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c45
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c4
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c6
-rw-r--r--source/blender/gpu/intern/gpu_extensions.c2
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl.c18
-rw-r--r--source/blender/ikplugin/intern/itasc_plugin.cpp6
-rw-r--r--source/blender/imbuf/intern/IMB_anim.h41
-rw-r--r--source/blender/imbuf/intern/IMB_metadata.h10
-rw-r--r--source/blender/imbuf/intern/allocimbuf.c122
-rw-r--r--source/blender/imbuf/intern/anim_movie.c471
-rw-r--r--source/blender/imbuf/intern/bmp.c52
-rw-r--r--source/blender/imbuf/intern/cache.c130
-rw-r--r--source/blender/imbuf/intern/cineon/cineon_dpx.c2
-rw-r--r--source/blender/imbuf/intern/divers.c284
-rw-r--r--source/blender/imbuf/intern/filetype.c30
-rw-r--r--source/blender/imbuf/intern/filter.c341
-rw-r--r--source/blender/imbuf/intern/imageprocess.c340
-rw-r--r--source/blender/imbuf/intern/indexer.c378
-rw-r--r--source/blender/imbuf/intern/indexer_dv.c78
-rw-r--r--source/blender/imbuf/intern/iris.c362
-rw-r--r--source/blender/imbuf/intern/jp2.c494
-rw-r--r--source/blender/imbuf/intern/jpeg.c142
-rw-r--r--source/blender/imbuf/intern/metadata.c20
-rw-r--r--source/blender/imbuf/intern/moviecache.c32
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_multi.h36
-rw-r--r--source/blender/imbuf/intern/png.c3
-rw-r--r--source/blender/imbuf/intern/radiance_hdr.c136
-rw-r--r--source/blender/imbuf/intern/readimage.c34
-rw-r--r--source/blender/imbuf/intern/rotate.c54
-rw-r--r--source/blender/imbuf/intern/scaling.c503
-rw-r--r--source/blender/imbuf/intern/targa.c195
-rw-r--r--source/blender/imbuf/intern/thumbs.c74
-rw-r--r--source/blender/imbuf/intern/thumbs_blend.c56
-rw-r--r--source/blender/imbuf/intern/tiff.c202
-rw-r--r--source/blender/imbuf/intern/util.c98
-rw-r--r--source/blender/imbuf/intern/writeimage.c4
-rw-r--r--source/blender/makesdna/DNA_ID.h6
-rw-r--r--source/blender/makesdna/DNA_meshdata_types.h6
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h10
-rw-r--r--source/blender/makesdna/DNA_movieclip_types.h2
-rw-r--r--source/blender/makesdna/DNA_node_types.h78
-rw-r--r--source/blender/makesdna/DNA_scene_types.h5
-rw-r--r--source/blender/makesdna/DNA_texture_types.h3
-rw-r--r--source/blender/makesdna/intern/dna_genfile.c790
-rw-r--r--source/blender/makesdna/intern/makesdna.c494
-rw-r--r--source/blender/makesrna/RNA_types.h96
-rw-r--r--source/blender/makesrna/intern/makesrna.c675
-rw-r--r--source/blender/makesrna/intern/rna_ID.c128
-rw-r--r--source/blender/makesrna/intern/rna_access.c1048
-rw-r--r--source/blender/makesrna/intern/rna_action.c106
-rw-r--r--source/blender/makesrna/intern/rna_actuator.c247
-rw-r--r--source/blender/makesrna/intern/rna_animation.c143
-rw-r--r--source/blender/makesrna/intern/rna_animation_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_animviz.c69
-rw-r--r--source/blender/makesrna/intern/rna_armature.c132
-rw-r--r--source/blender/makesrna/intern/rna_armature_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_boid.c58
-rw-r--r--source/blender/makesrna/intern/rna_brush.c36
-rw-r--r--source/blender/makesrna/intern/rna_camera.c68
-rw-r--r--source/blender/makesrna/intern/rna_cloth.c95
-rw-r--r--source/blender/makesrna/intern/rna_color.c102
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c628
-rw-r--r--source/blender/makesrna/intern/rna_context.c33
-rw-r--r--source/blender/makesrna/intern/rna_controller.c70
-rw-r--r--source/blender/makesrna/intern/rna_curve.c220
-rw-r--r--source/blender/makesrna/intern/rna_define.c239
-rw-r--r--source/blender/makesrna/intern/rna_dynamicpaint.c246
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c285
-rw-r--r--source/blender/makesrna/intern/rna_fluidsim.c40
-rw-r--r--source/blender/makesrna/intern/rna_gpencil.c39
-rw-r--r--source/blender/makesrna/intern/rna_group.c18
-rw-r--r--source/blender/makesrna/intern/rna_image.c117
-rw-r--r--source/blender/makesrna/intern/rna_image_api.c32
-rw-r--r--source/blender/makesrna/intern/rna_key.c99
-rw-r--r--source/blender/makesrna/intern/rna_lamp.c101
-rw-r--r--source/blender/makesrna/intern/rna_lattice.c53
-rw-r--r--source/blender/makesrna/intern/rna_main.c97
-rw-r--r--source/blender/makesrna/intern/rna_main_api.c105
-rw-r--r--source/blender/makesrna/intern/rna_material.c203
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c321
-rw-r--r--source/blender/makesrna/intern/rna_mesh_api.c4
-rw-r--r--source/blender/makesrna/intern/rna_meta.c31
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c374
-rw-r--r--source/blender/makesrna/intern/rna_movieclip.c29
-rw-r--r--source/blender/makesrna/intern/rna_nla.c130
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c442
-rw-r--r--source/blender/makesrna/intern/rna_nodetree_types.h7
-rw-r--r--source/blender/makesrna/intern/rna_object.c605
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c274
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c141
-rw-r--r--source/blender/makesrna/intern/rna_packedfile.c3
-rw-r--r--source/blender/makesrna/intern/rna_particle.c187
-rw-r--r--source/blender/makesrna/intern/rna_pose.c292
-rw-r--r--source/blender/makesrna/intern/rna_pose_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_property.c19
-rw-r--r--source/blender/makesrna/intern/rna_render.c57
-rw-r--r--source/blender/makesrna/intern/rna_rna.c271
-rw-r--r--source/blender/makesrna/intern/rna_scene_api.c4
-rw-r--r--source/blender/makesrna/intern/rna_screen.c41
-rw-r--r--source/blender/makesrna/intern/rna_sculpt_paint.c58
-rw-r--r--source/blender/makesrna/intern/rna_sensor.c40
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c12
-rw-r--r--source/blender/makesrna/intern/rna_sequencer_api.c29
-rw-r--r--source/blender/makesrna/intern/rna_smoke.c80
-rw-r--r--source/blender/makesrna/intern/rna_sound.c8
-rw-r--r--source/blender/makesrna/intern/rna_space.c727
-rw-r--r--source/blender/makesrna/intern/rna_text.c18
-rw-r--r--source/blender/makesrna/intern/rna_text_api.c4
-rw-r--r--source/blender/makesrna/intern/rna_texture.c169
-rw-r--r--source/blender/makesrna/intern/rna_texture_api.c6
-rw-r--r--source/blender/makesrna/intern/rna_timeline.c6
-rw-r--r--source/blender/makesrna/intern/rna_tracking.c2
-rw-r--r--source/blender/makesrna/intern/rna_ui.c93
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c95
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c133
-rw-r--r--source/blender/makesrna/intern/rna_wm.c256
-rw-r--r--source/blender/makesrna/intern/rna_wm_api.c58
-rw-r--r--source/blender/makesrna/intern/rna_world.c43
-rw-r--r--source/blender/modifiers/intern/MOD_boolean_util.c2
-rw-r--r--source/blender/modifiers/intern/MOD_build.c9
-rw-r--r--source/blender/modifiers/intern/MOD_cast.c6
-rw-r--r--source/blender/modifiers/intern/MOD_mask.c10
-rw-r--r--source/blender/modifiers/intern/MOD_mirror.c2
-rw-r--r--source/blender/modifiers/intern/MOD_remesh.c11
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c6
-rw-r--r--source/blender/modifiers/intern/MOD_solidify.c7
-rw-r--r--source/blender/modifiers/intern/MOD_util.c2
-rw-r--r--source/blender/nodes/CMakeLists.txt8
-rw-r--r--source/blender/nodes/NOD_composite.h8
-rw-r--r--source/blender/nodes/SConscript1
-rw-r--r--source/blender/nodes/composite/node_composite_tree.c70
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_bilateralblur.c2
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_bokehblur.c60
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_bokehimage.c66
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_boxmask.c75
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_brightness.c8
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_colorcorrection.c89
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_displace.c2
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_ellipsemask.c75
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_image.c96
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_switch.c58
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_viewer.c2
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c18
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_squeeze.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_environment.c7
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_image.c7
-rw-r--r--source/blender/nodes/texture/node_texture_tree.c18
-rw-r--r--source/blender/opencl/CMakeLists.txt39
-rw-r--r--source/blender/opencl/OCL_opencl.h37
-rw-r--r--source/blender/opencl/SConscript8
-rw-r--r--source/blender/opencl/intern/OCL_opencl.c37
-rw-r--r--source/blender/opencl/intern/clew.c311
-rw-r--r--source/blender/opencl/intern/clew.h1317
-rw-r--r--source/blender/python/intern/bpy_interface.c9
-rw-r--r--source/blender/python/intern/bpy_rna.c6
-rw-r--r--source/blender/python/intern/bpy_rna_callback.c2
-rw-r--r--source/blender/quicktime/apple/quicktime_export.c339
-rw-r--r--source/blender/quicktime/apple/quicktime_import.c278
-rw-r--r--source/blender/render/intern/include/strand.h2
-rw-r--r--source/blender/render/intern/raytrace/bvh.h155
-rw-r--r--source/blender/render/intern/raytrace/rayobject.cpp144
-rw-r--r--source/blender/render/intern/raytrace/rayobject_blibvh.cpp34
-rw-r--r--source/blender/render/intern/raytrace/rayobject_hint.h14
-rw-r--r--source/blender/render/intern/raytrace/rayobject_qbvh.cpp33
-rw-r--r--source/blender/render/intern/raytrace/rayobject_rtbuild.cpp190
-rw-r--r--source/blender/render/intern/raytrace/rayobject_rtbuild.h17
-rw-r--r--source/blender/render/intern/raytrace/rayobject_svbvh.cpp40
-rw-r--r--source/blender/render/intern/raytrace/rayobject_vbvh.cpp46
-rw-r--r--source/blender/render/intern/raytrace/reorganize.h117
-rw-r--r--source/blender/render/intern/raytrace/svbvh.h96
-rw-r--r--source/blender/render/intern/raytrace/vbvh.h35
-rw-r--r--source/blender/render/intern/source/convertblender.c12
-rw-r--r--source/blender/render/intern/source/occlusion.c4
-rw-r--r--source/blender/render/intern/source/pipeline.c4
-rw-r--r--source/blender/render/intern/source/rayshade.c4
-rw-r--r--source/blender/render/intern/source/shadeinput.c2
-rw-r--r--source/blender/render/intern/source/sss.c6
-rw-r--r--source/blender/render/intern/source/strand.c19
-rw-r--r--source/blender/render/intern/source/sunsky.c121
-rw-r--r--source/blender/render/intern/source/texture_ocean.c12
-rw-r--r--source/blender/render/intern/source/volume_precache.c2
-rw-r--r--source/blender/render/intern/source/zbuf.c55
-rw-r--r--source/blender/windowmanager/WM_api.h1
-rw-r--r--source/blender/windowmanager/intern/wm.c2
-rw-r--r--source/blender/windowmanager/intern/wm_gesture.c26
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c43
-rw-r--r--source/blender/windowmanager/intern/wm_window.c2
-rw-r--r--source/blender/windowmanager/wm_cursors.h10
-rw-r--r--source/blenderplayer/bad_level_call_stubs/stubs.c4
-rw-r--r--source/creator/CMakeLists.txt3
-rw-r--r--source/creator/buildinfo.c26
-rw-r--r--source/creator/creator.c4
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp15
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_RandomNumberGenerator.h2
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp15
-rw-r--r--source/gameengine/VideoTexture/CMakeLists.txt4
1103 files changed, 74372 insertions, 32227 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a299470b172..69812be1e50 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -291,8 +291,9 @@ if(APPLE)
message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
endif()
else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
- execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILDNR )
- STRING(SUBSTRING ${XCODE_VERS_BUILDNR} 6 3 XCODE_VERSION) # truncate away build-nr
+ execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
+ string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
+ unset(XCODE_VERS_BUILD_NR)
endif()
message(STATUS "Detected Xcode-version: " ${XCODE_VERSION})
@@ -370,10 +371,6 @@ if(MINGW)
"because it is currently unsupported, remove this "
"line if youre a developer who wants to add support.")
endif()
-
- if((WITH_MINGW64) AND (WITH_OPENCOLLADA))
- message(FATAL_ERROR "MINGW64 still doesn't support: WITH_OPENCOLLADA/WITH_CODEC_FFMPEG")
- endif()
endif()
TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
@@ -841,6 +838,17 @@ elseif(WIN32)
set(GETTEXT_LIBPATH ${GETTEXT}/lib)
set(GETTEXT_LIBRARIES gnu_gettext)
endif()
+
+ if(WITH_MOD_CLOTH_ELTOPO)
+ set(LAPACK ${LIBDIR}/lapack)
+ # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
+ set_lib_path(LAPACK_LIBPATH ${LAPACK}/lib)
+ set(LAPACK_LIBRARIES
+ ${LIBDIR}/lapack/lib/libf2c.lib
+ ${LIBDIR}/lapack/lib/clapack_nowrap.lib
+ ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
+ )
+ endif()
set(PNG_LIBRARIES libpng)
set(JPEG_LIBRARIES libjpeg)
@@ -1015,8 +1023,10 @@ elseif(WIN32)
set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
if(WITH_MINGW64)
- #Yes, the point for MinGW64 is moar optimization by default :)
- set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -mmmx -msse -msse2 -ftree-vectorize")
+ #We need to take care though not to have these on debug builds because they may play funky with gdb
+ if(CMAKE_BUILD_TYPE MATCHES "Release")
+ set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -mmmx -ftree-vectorize")
+ endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -lpthread")
@@ -1081,7 +1091,11 @@ elseif(WIN32)
${LIBDIR}/opencollada/include/GeneratedSaxParser/include
)
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib ${OPENCOLLADA}/lib)
- set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
+ if(WITH_MINGW64)
+ set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre buffer ftoa xml)
+ else()
+ set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
+ endif()
set(PCRE_LIBRARIES pcre)
endif()
diff --git a/GNUmakefile b/GNUmakefile
index ebd2db60e0a..f2ac0285407 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -216,7 +216,7 @@ test_deprecated:
test_style:
# run our own checks on C/C++ style
- PYTHONIOENCODING=utf_8 python3.2 $(BLENDER_DIR)/source/tools/check_style_c.py $(BLENDER_DIR)/source/blender $(BLENDER_DIR)/source/creator
+ PYTHONIOENCODING=utf_8 python3.2 $(BLENDER_DIR)/source/tools/check_style_c.py $(BLENDER_DIR)/source/blender $(BLENDER_DIR)/source/creator --no-length-check
# -----------------------------------------------------------------------------
# Project Files
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index eeefcf730c8..fbd28cc2398 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -214,7 +214,8 @@ macro(setup_liblinks
${OPENGL_glu_LIBRARY}
${PNG_LIBRARIES}
${ZLIB_LIBRARIES}
- ${FREETYPE_LIBRARY})
+ ${FREETYPE_LIBRARY}
+ ${LAPACK_LIBRARIES})
# since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions
if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs
diff --git a/build_files/cmake/packaging.cmake b/build_files/cmake/packaging.cmake
index c0124fe8199..8a534bc530e 100644
--- a/build_files/cmake/packaging.cmake
+++ b/build_files/cmake/packaging.cmake
@@ -1,5 +1,5 @@
set(PROJECT_DESCRIPTION "Blender is a very fast and versatile 3D modeller/renderer.")
-set(PROJECT_COPYRIGHT "Copyright (C) 2001-2011 Blender Foundation")
+set(PROJECT_COPYRIGHT "Copyright (C) 2001-2012 Blender Foundation")
set(PROJECT_CONTACT "foundation@blender.org")
set(PROJECT_VENDOR "Blender Foundation")
set(ORG_WEBSITE "www.blender.org")
@@ -31,7 +31,7 @@ set(BUILD_REV ${MY_WC_REVISION})
# Force Package Name
-set(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${BLENDER_VERSION}-r${BUILD_REV}-${CMAKE_SYSTEM_PROCESSOR})
+set(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-1.r${BUILD_REV}-${CMAKE_SYSTEM_PROCESSOR})
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
# RPM packages
diff --git a/build_files/package_spec/rpm/blender.spec.in b/build_files/package_spec/rpm/blender.spec.in
index 25ad5344721..85a689031a3 100644
--- a/build_files/package_spec/rpm/blender.spec.in
+++ b/build_files/package_spec/rpm/blender.spec.in
@@ -1,5 +1,11 @@
# -*- rpm-spec -*-
%global __python %{__python3}
+%global blender_api @CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@
+
+%define _rpmdir @CPACK_RPM_DIRECTORY@
+%define _rpmfilename @CPACK_RPM_FILE_NAME@
+%define _unpackaged_files_terminate_build 0
+%define _topdir @CPACK_RPM_DIRECTORY@
BuildRoot: @CPACK_RPM_DIRECTORY@/@CPACK_PACKAGE_FILE_NAME@@CPACK_RPM_PACKAGE_COMPONENT_PART_PATH@
Summary: @CPACK_RPM_PACKAGE_SUMMARY@
@@ -9,12 +15,17 @@ Release: @CPACK_RPM_PACKAGE_RELEASE@%{?dist}
License: @CPACK_RPM_PACKAGE_LICENSE@
Group: @CPACK_RPM_PACKAGE_GROUP@
Vendor: @CPACK_RPM_PACKAGE_VENDOR@
-Epoch: 1
+Epoch: 1
-%define _rpmdir @CPACK_RPM_DIRECTORY@
-%define _rpmfilename @CPACK_RPM_FILE_NAME@
-%define _unpackaged_files_terminate_build 0
-%define _topdir @CPACK_RPM_DIRECTORY@
+Requires(post): desktop-file-utils
+Requires(post): shared-mime-info
+Requires(postun): desktop-file-utils
+Requires(postun): shared-mime-info
+
+Provides: blender(ABI) = %{blender_api}
+Provides: blender-fonts = %{?epoch:%{epoch}:}%{version}-%{release}
+
+Obsoletes: blender-fonts <= 2.49a-9
%description
Blender is an integrated 3d suite for modelling, animation, rendering,
@@ -40,6 +51,10 @@ then
fi
mv "@CPACK_TOPLEVEL_DIRECTORY@/tmpBBroot" ${RPM_BUILD_ROOT}
+rm -f ${RPM_BUILD_ROOT}%{_bindir}/blender-thumbnailer.py
+
+%find_lang %{name}
+
%clean
rm -rf ${RPM_BUILD_ROOT}
@@ -57,14 +72,15 @@ if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor
fi || :
-%files
+%files -f blender.lang
%defattr(-,root,root,-)
%{_bindir}/%{name}
-%{_datadir}/%{name}/@CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@
+%{_datadir}/%{name}/%{blender_api}/datafiles/fonts
+%{_datadir}/%{name}/%{blender_api}/scripts
%{_datadir}/icons/hicolor/*/apps/%{name}.*
%{_datadir}/applications/%{name}.desktop
-%{_datadir}/doc/blender
-%{_mandir}/man1/blender.*
+%{_datadir}/doc/%{name}
+%{_mandir}/man1/%{name}.*
%changelog
@CPACK_RPM_SPEC_CHANGELOG@
diff --git a/build_files/scons/config/win32-vc-config.py b/build_files/scons/config/win32-vc-config.py
index d7af0eb549d..5d52f0e34b6 100644
--- a/build_files/scons/config/win32-vc-config.py
+++ b/build_files/scons/config/win32-vc-config.py
@@ -165,7 +165,7 @@ BF_BOOST_LIBPATH = '${BF_BOOST}/lib'
#CUDA
WITH_BF_CYCLES_CUDA_BINARIES = False
#BF_CYCLES_CUDA_NVCC = "" # Path to the nvidia compiler
-BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_13', 'sm_20', 'sm_21']
+BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21'] # don't build sm_13 until the compile can fit in 32bit process again :)
#Ray trace optimization
WITH_BF_RAYOPTIMIZATION = True
diff --git a/build_files/scons/config/win64-mingw-config.py b/build_files/scons/config/win64-mingw-config.py
index 541574e0f63..cecf91e48a8 100644
--- a/build_files/scons/config/win64-mingw-config.py
+++ b/build_files/scons/config/win64-mingw-config.py
@@ -167,9 +167,10 @@ BF_BOOST_LIBPATH = BF_BOOST + '/lib'
#Ray trace optimization
WITH_BF_RAYOPTIMIZATION = True
-BF_RAYOPTIMIZATION_SSE_FLAGS = ['-mmmx', '-msse', '-msse2', '-ftree-vectorize']
+BF_RAYOPTIMIZATION_SSE_FLAGS = ['-mmmx', '-msse', '-msse2']
-WITH_BF_OPENMP = True
+#Produces errors while rendering with subsurf/multires,
+WITH_BF_OPENMP = False
##
CC = 'gcc'
@@ -178,10 +179,10 @@ CXX = 'g++'
CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ]
CXXFLAGS = [ '-fpermissive' ]
-CPPFLAGS = ['-DWIN32', '-DMS_WIN64', '-DFREE_WINDOWS', '-DFREE_WINDOWS64', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE64_SOURCE', '-DBOOST_ALL_NO_LIB', '-DBOOST_THREAD_USE_LIB', '-DGLEW_STATIC', '-D_SSIZE_T_']
+CPPFLAGS = ['-DWIN32', '-DMS_WIN64', '-DFREE_WINDOWS', '-DFREE_WINDOWS64', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE64_SOURCE', '-DBOOST_ALL_NO_LIB', '-DBOOST_THREAD_USE_LIB', '-DGLEW_STATIC']
REL_CFLAGS = []
REL_CXXFLAGS = []
-REL_CCFLAGS = ['-DNDEBUG', '-O2', '-ftree-vectorize', '-mmmx', '-msse', '-msse2']
+REL_CCFLAGS = ['-DNDEBUG', '-O2', '-ftree-vectorize']
C_WARN = ['-Wno-char-subscripts', '-Wdeclaration-after-statement', '-Wstrict-prototypes']
diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py
index 65593d559ed..1ad0b886cc4 100644
--- a/build_files/scons/tools/btools.py
+++ b/build_files/scons/tools/btools.py
@@ -177,6 +177,7 @@ def validate_arguments(args, bc):
'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
'C_WARN', 'CC_WARN', 'CXX_WARN',
'LLIBS', 'PLATFORM_LINKFLAGS','MACOSX_ARCHITECTURE', 'MACOSX_SDK_CHECK', 'XCODE_CUR_VER',
+ 'BF_CYCLES_CUDA_BINARIES_ARCH',
]
diff --git a/extern/bullet2/patches/make_id.patch b/extern/bullet2/patches/make_id.patch
new file mode 100644
index 00000000000..959e578ad0e
--- /dev/null
+++ b/extern/bullet2/patches/make_id.patch
@@ -0,0 +1,42 @@
+Index: src/LinearMath/btSerializer.h
+===================================================================
+--- src/LinearMath/btSerializer.h (revision 46625)
++++ src/LinearMath/btSerializer.h (working copy)
+@@ -106,23 +106,23 @@
+
+ #define BT_HEADER_LENGTH 12
+ #if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
+-# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
++# define BT_MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
+ #else
+-# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
++# define BT_MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
+ #endif
+
+-#define BT_SOFTBODY_CODE MAKE_ID('S','B','D','Y')
+-#define BT_COLLISIONOBJECT_CODE MAKE_ID('C','O','B','J')
+-#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y')
+-#define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S')
+-#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S')
+-#define BT_QUANTIZED_BVH_CODE MAKE_ID('Q','B','V','H')
+-#define BT_TRIANLGE_INFO_MAP MAKE_ID('T','M','A','P')
+-#define BT_SHAPE_CODE MAKE_ID('S','H','A','P')
+-#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y')
+-#define BT_SBMATERIAL_CODE MAKE_ID('S','B','M','T')
+-#define BT_SBNODE_CODE MAKE_ID('S','B','N','D')
+-#define BT_DNA_CODE MAKE_ID('D','N','A','1')
++#define BT_SOFTBODY_CODE BT_MAKE_ID('S','B','D','Y')
++#define BT_COLLISIONOBJECT_CODE BT_MAKE_ID('C','O','B','J')
++#define BT_RIGIDBODY_CODE BT_MAKE_ID('R','B','D','Y')
++#define BT_CONSTRAINT_CODE BT_MAKE_ID('C','O','N','S')
++#define BT_BOXSHAPE_CODE BT_MAKE_ID('B','O','X','S')
++#define BT_QUANTIZED_BVH_CODE BT_MAKE_ID('Q','B','V','H')
++#define BT_TRIANLGE_INFO_MAP BT_MAKE_ID('T','M','A','P')
++#define BT_SHAPE_CODE BT_MAKE_ID('S','H','A','P')
++#define BT_ARRAY_CODE BT_MAKE_ID('A','R','A','Y')
++#define BT_SBMATERIAL_CODE BT_MAKE_ID('S','B','M','T')
++#define BT_SBNODE_CODE BT_MAKE_ID('S','B','N','D')
++#define BT_DNA_CODE BT_MAKE_ID('D','N','A','1')
+
+
+ struct btPointerUid
diff --git a/extern/bullet2/readme.txt b/extern/bullet2/readme.txt
index 02430cb5c0e..e2546b049e3 100644
--- a/extern/bullet2/readme.txt
+++ b/extern/bullet2/readme.txt
@@ -15,3 +15,7 @@ Once that is done all build systems can be updated to use/build extern/bullet2 f
Questions? mail blender at erwincoumans.com, or check the bf-blender mailing list.
Thanks,
Erwin
+
+Apply patches/make_id.patch to prevent duplicated define of MAKE_ID macro in blender
+side and bullet side.
+Sergey
diff --git a/extern/bullet2/src/LinearMath/btSerializer.h b/extern/bullet2/src/LinearMath/btSerializer.h
index 8a89374c612..52520d72b9e 100644
--- a/extern/bullet2/src/LinearMath/btSerializer.h
+++ b/extern/bullet2/src/LinearMath/btSerializer.h
@@ -106,23 +106,23 @@ public:
#define BT_HEADER_LENGTH 12
#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
-# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
+# define BT_MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
#else
-# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
+# define BT_MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
#endif
-#define BT_SOFTBODY_CODE MAKE_ID('S','B','D','Y')
-#define BT_COLLISIONOBJECT_CODE MAKE_ID('C','O','B','J')
-#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y')
-#define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S')
-#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S')
-#define BT_QUANTIZED_BVH_CODE MAKE_ID('Q','B','V','H')
-#define BT_TRIANLGE_INFO_MAP MAKE_ID('T','M','A','P')
-#define BT_SHAPE_CODE MAKE_ID('S','H','A','P')
-#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y')
-#define BT_SBMATERIAL_CODE MAKE_ID('S','B','M','T')
-#define BT_SBNODE_CODE MAKE_ID('S','B','N','D')
-#define BT_DNA_CODE MAKE_ID('D','N','A','1')
+#define BT_SOFTBODY_CODE BT_MAKE_ID('S','B','D','Y')
+#define BT_COLLISIONOBJECT_CODE BT_MAKE_ID('C','O','B','J')
+#define BT_RIGIDBODY_CODE BT_MAKE_ID('R','B','D','Y')
+#define BT_CONSTRAINT_CODE BT_MAKE_ID('C','O','N','S')
+#define BT_BOXSHAPE_CODE BT_MAKE_ID('B','O','X','S')
+#define BT_QUANTIZED_BVH_CODE BT_MAKE_ID('Q','B','V','H')
+#define BT_TRIANLGE_INFO_MAP BT_MAKE_ID('T','M','A','P')
+#define BT_SHAPE_CODE BT_MAKE_ID('S','H','A','P')
+#define BT_ARRAY_CODE BT_MAKE_ID('A','R','A','Y')
+#define BT_SBMATERIAL_CODE BT_MAKE_ID('S','B','M','T')
+#define BT_SBNODE_CODE BT_MAKE_ID('S','B','N','D')
+#define BT_DNA_CODE BT_MAKE_ID('D','N','A','1')
struct btPointerUid
diff --git a/intern/audaspace/CMakeLists.txt b/intern/audaspace/CMakeLists.txt
index c3a4c130f88..dc4ca7903cd 100644
--- a/intern/audaspace/CMakeLists.txt
+++ b/intern/audaspace/CMakeLists.txt
@@ -193,6 +193,12 @@ if(WITH_CODEC_FFMPEG)
ffmpeg/AUD_FFMPEGReader.h
ffmpeg/AUD_FFMPEGWriter.h
)
+
+ remove_strict_flags_file(
+ ffmpeg/AUD_FFMPEGFactory.cpp
+ ffmpeg/AUD_FFMPEGReader.cpp
+ ffmpeg/AUD_FFMPEGWriter.cpp
+ )
endif()
if(WITH_SDL)
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index f79b9995165..997909f1b92 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -220,6 +220,7 @@ void BlenderSession::render()
buffer_params.passes = passes;
scene->film->passes = passes;
scene->film->tag_update(scene);
+ scene->integrator->tag_update(scene);
/* update scene */
sync->sync_data(b_v3d, b_engine.camera_override(), b_iter->name().c_str());
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 87f255e54e7..b17abac2a1b 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -53,6 +53,7 @@ public:
int num;
bool display_device;
bool advanced_shading;
+ bool pack_images;
vector<DeviceInfo> multi_devices;
DeviceInfo()
@@ -62,6 +63,7 @@ public:
num = 0;
display_device = false;
advanced_shading = true;
+ pack_images = false;
}
};
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 07988d32aff..5f422332cd2 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -260,6 +260,7 @@ void device_cpu_info(vector<DeviceInfo>& devices)
info.id = "CPU";
info.num = 0;
info.advanced_shading = true;
+ info.pack_images = false;
devices.insert(devices.begin(), info);
}
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 0a780e5f576..937dbf2d87c 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -877,6 +877,7 @@ void device_cuda_info(vector<DeviceInfo>& devices)
int major, minor;
cuDeviceComputeCapability(&major, &minor, num);
info.advanced_shading = (major >= 2);
+ info.pack_images = false;
/* if device has a kernel timeout, assume it is used for display */
if(cuDeviceGetAttribute(&attr, CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT, num) == CUDA_SUCCESS && attr == 1) {
diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp
index 9f7d65e640b..83e69b98f5d 100644
--- a/intern/cycles/device/device_multi.cpp
+++ b/intern/cycles/device/device_multi.cpp
@@ -304,6 +304,7 @@ static bool device_multi_add(vector<DeviceInfo>& devices, DeviceType type, bool
int num_added = 0, num_display = 0;
info.advanced_shading = with_advanced_shading;
+ info.pack_images = false;
foreach(DeviceInfo& subinfo, devices) {
if(subinfo.type == type) {
@@ -326,6 +327,7 @@ static bool device_multi_add(vector<DeviceInfo>& devices, DeviceType type, bool
info.multi_devices.push_back(subinfo);
if(subinfo.display_device)
info.display_device = true;
+ info.pack_images = info.pack_images || subinfo.pack_images;
num_added++;
}
}
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 322b7ad3eb9..09235506048 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -212,7 +212,7 @@ public:
{
char version[256];
- int major, minor, req_major = 1, req_minor = 1;
+ int major, minor, req_major = 1, req_minor = 0;
clGetPlatformInfo(cpPlatform, CL_PLATFORM_VERSION, sizeof(version), &version, NULL);
@@ -300,15 +300,15 @@ public:
/* Multi Closure for nVidia cards */
if(platform_name == "NVIDIA CUDA")
- build_options += "-D__KERNEL_SHADING__ -D__MULTI_CLOSURE__ -cl-nv-maxrregcount=24 -cl-nv-verbose ";
+ build_options += "-D__KERNEL_SHADING__ -D__KERNEL_OPENCL_NVIDIA__ -cl-nv-maxrregcount=24 -cl-nv-verbose ";
/* No Float3 for Apple */
else if(platform_name == "Apple")
- build_options += "-D__CL_NO_FLOAT3__ ";
+ build_options += "-D__CL_NO_FLOAT3__ -D__KERNEL_OPENCL_APPLE__ ";
/* Basic shading for AMD cards (non Apple) */
else if(platform_name == "AMD Accelerated Parallel Processing")
- build_options += "-D__KERNEL_SHADING__ -D__CL_NO_FLOAT3__ ";
+ build_options += "-D__CL_NO_FLOAT3__ -D__KERNEL_OPENCL_AMD__ ";
return build_options;
}
@@ -743,6 +743,7 @@ void device_opencl_info(vector<DeviceInfo>& devices)
/* we don't know if it's used for display, but assume it is */
info.display_device = true;
info.advanced_shading = false;
+ info.pack_images = true;
devices.push_back(info);
}
diff --git a/intern/cycles/kernel/kernel_compat_cpu.h b/intern/cycles/kernel/kernel_compat_cpu.h
index 79f894bfdac..2bd0b61b4fa 100644
--- a/intern/cycles/kernel/kernel_compat_cpu.h
+++ b/intern/cycles/kernel/kernel_compat_cpu.h
@@ -146,6 +146,7 @@ typedef texture<float> texture_float;
typedef texture<uint> texture_uint;
typedef texture<int> texture_int;
typedef texture<uint4> texture_uint4;
+typedef texture<uchar4> texture_uchar4;
typedef texture_image<float4> texture_image_float4;
typedef texture_image<uchar4> texture_image_uchar4;
diff --git a/intern/cycles/kernel/kernel_compat_cuda.h b/intern/cycles/kernel/kernel_compat_cuda.h
index cc719bfadbc..2f9f2c45e88 100644
--- a/intern/cycles/kernel/kernel_compat_cuda.h
+++ b/intern/cycles/kernel/kernel_compat_cuda.h
@@ -50,6 +50,7 @@ typedef texture<float, 1> texture_float;
typedef texture<uint, 1> texture_uint;
typedef texture<int, 1> texture_int;
typedef texture<uint4, 1> texture_uint4;
+typedef texture<uchar4, 1> texture_uchar4;
typedef texture<float4, 2> texture_image_float4;
typedef texture<uchar4, 2, cudaReadModeNormalizedFloat> texture_image_uchar4;
diff --git a/intern/cycles/kernel/kernel_light.h b/intern/cycles/kernel/kernel_light.h
index cd9557bd0bf..e9e7fbd4ca1 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -59,6 +59,7 @@ __device float3 area_light_sample(float3 axisu, float3 axisv, float randu, float
return axisu*randu + axisv*randv;
}
+#ifdef __BACKGROUND_MIS__
__device float3 background_light_sample(KernelGlobals *kg, float randu, float randv, float *pdf)
{
/* for the following, the CDF values are actually a pair of floats, with the
@@ -165,6 +166,7 @@ __device float background_light_pdf(KernelGlobals *kg, float3 direction)
return pdf * kernel_data.integrator.pdf_lights;
}
+#endif
__device void regular_light_sample(KernelGlobals *kg, int point,
float randu, float randv, float3 P, LightSample *ls, float *pdf)
diff --git a/intern/cycles/kernel/kernel_textures.h b/intern/cycles/kernel/kernel_textures.h
index f4de4c100c4..4ab2574c8ad 100644
--- a/intern/cycles/kernel/kernel_textures.h
+++ b/intern/cycles/kernel/kernel_textures.h
@@ -7,7 +7,6 @@
#define KERNEL_IMAGE_TEX(type, ttype, name)
#endif
-
/* bvh */
KERNEL_TEX(float4, texture_float4, __bvh_nodes)
KERNEL_TEX(float4, texture_float4, __tri_woop)
@@ -151,6 +150,10 @@ KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_097)
KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_098)
KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_099)
+/* packed image (opencl) */
+KERNEL_TEX(uchar4, texture_uchar4, __tex_image_packed)
+KERNEL_TEX(uint4, texture_uint4, __tex_image_packed_info)
+
#undef KERNEL_TEX
#undef KERNEL_IMAGE_TEX
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index edca9f8d34d..a64c850d35a 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -49,8 +49,30 @@ CCL_NAMESPACE_BEGIN
#endif
#ifdef __KERNEL_OPENCL__
-//#define __KERNEL_SHADING__
-//#define __KERNEL_ADV_SHADING__
+
+#ifdef __KERNEL_OPENCL_NVIDIA__
+#define __KERNEL_SHADING__
+#define __MULTI_CLOSURE__
+#endif
+
+#ifdef __KERNEL_OPENCL_APPLE__
+//#define __SVM__
+//#define __EMISSION__
+//#define __IMAGE_TEXTURES__
+//#define __HOLDOUT__
+//#define __PROCEDURAL_TEXTURES__
+//#define __EXTRA_NODES__
+#endif
+
+#ifdef __KERNEL_OPENCL_AMD__
+#define __SVM__
+#define __EMISSION__
+#define __IMAGE_TEXTURES__
+#define __HOLDOUT__
+#define __PROCEDURAL_TEXTURES__
+#define __EXTRA_NODES__
+#endif
+
#endif
/* kernel features */
@@ -69,7 +91,9 @@ CCL_NAMESPACE_BEGIN
#ifdef __KERNEL_SHADING__
#define __SVM__
#define __EMISSION__
-#define __TEXTURES__
+#define __PROCEDURAL_TEXTURES__
+#define __IMAGE_TEXTURES__
+#define __EXTRA_NODES__
#define __HOLDOUT__
#endif
@@ -85,7 +109,6 @@ CCL_NAMESPACE_BEGIN
//#define __MULTI_LIGHT__
//#define __OSL__
//#define __SOBOL_FULL_SCREEN__
-//#define __MODIFY_TP__
//#define __QBVH__
/* Shader Evaluation */
diff --git a/intern/cycles/kernel/osl/nodes/node_camera.osl b/intern/cycles/kernel/osl/nodes/node_camera.osl
index 0b50084db0f..898ebd2bbb2 100644
--- a/intern/cycles/kernel/osl/nodes/node_camera.osl
+++ b/intern/cycles/kernel/osl/nodes/node_camera.osl
@@ -26,7 +26,7 @@ shader node_camera(
ViewVector = (vector)transform("world", "camera", P);
ViewZDepth = fabs(ViewVector[2]);
- ViewDistance = lenght(ViewVector);
+ ViewDistance = length(ViewVector);
ViewVector = normalize(ViewVector);
}
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index 5f4d7bbd0c4..12ed61673d1 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -216,13 +216,15 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_JUMP:
offset = node.y;
break;
-#ifdef __TEXTURES__
+#ifdef __IMAGE_TEXTURES__
case NODE_TEX_IMAGE:
svm_node_tex_image(kg, sd, stack, node);
break;
case NODE_TEX_ENVIRONMENT:
svm_node_tex_environment(kg, sd, stack, node);
break;
+#endif
+#ifdef __PROCEDURAL_TEXTURES__
case NODE_TEX_SKY:
svm_node_tex_sky(kg, sd, stack, node.y, node.z);
break;
@@ -254,6 +256,7 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_GEOMETRY:
svm_node_geometry(sd, stack, node.y, node.z);
break;
+#ifdef __EXTRA_NODES__
case NODE_GEOMETRY_BUMP_DX:
svm_node_geometry_bump_dx(sd, stack, node.y, node.z);
break;
@@ -263,6 +266,7 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_LIGHT_PATH:
svm_node_light_path(sd, stack, node.y, node.z, path_flag);
break;
+#endif
case NODE_CONVERT:
svm_node_convert(sd, stack, node.y, node.z, node.w);
break;
@@ -272,6 +276,7 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_VALUE_V:
svm_node_value_v(kg, sd, stack, node.y, &offset);
break;
+#ifdef __EXTRA_NODES__
case NODE_INVERT:
svm_node_invert(sd, stack, node.y, node.z, node.w);
break;
@@ -293,21 +298,25 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_HSV:
svm_node_hsv(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
+#endif
case NODE_ATTR:
svm_node_attr(kg, sd, stack, node);
break;
+#ifdef __EXTRA_NODES__
case NODE_ATTR_BUMP_DX:
svm_node_attr_bump_dx(kg, sd, stack, node);
break;
case NODE_ATTR_BUMP_DY:
svm_node_attr_bump_dy(kg, sd, stack, node);
break;
+#endif
case NODE_FRESNEL:
svm_node_fresnel(sd, stack, node.y, node.z, node.w);
break;
case NODE_LAYER_WEIGHT:
svm_node_layer_weight(sd, stack, node);
break;
+#ifdef __EXTRA_NODES__
case NODE_SET_DISPLACEMENT:
svm_node_set_displacement(sd, stack, node.y);
break;
@@ -323,6 +332,7 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_NORMAL:
svm_node_normal(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
+#endif
case NODE_MAPPING:
svm_node_mapping(kg, sd, stack, node.y, node.z, &offset);
break;
@@ -332,15 +342,18 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_TEX_COORD:
svm_node_tex_coord(kg, sd, stack, node.y, node.z);
break;
+#ifdef __EXTRA_NODES__
case NODE_TEX_COORD_BUMP_DX:
svm_node_tex_coord_bump_dx(kg, sd, stack, node.y, node.z);
break;
case NODE_TEX_COORD_BUMP_DY:
svm_node_tex_coord_bump_dy(kg, sd, stack, node.y, node.z);
break;
+#endif
case NODE_EMISSION_SET_WEIGHT_TOTAL:
svm_node_emission_set_weight_total(kg, sd, node.y, node.z, node.w);
break;
+#ifdef __EXTRA_NODES__
case NODE_RGB_RAMP:
svm_node_rgb_ramp(kg, sd, stack, node, &offset);
break;
@@ -350,6 +363,7 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT
case NODE_LIGHT_FALLOFF:
svm_node_light_falloff(sd, stack, node);
break;
+#endif
case NODE_END:
default:
#ifndef __MULTI_CLOSURE__
diff --git a/intern/cycles/kernel/svm/svm_attribute.h b/intern/cycles/kernel/svm/svm_attribute.h
index 3a94f08d42f..ed70a6dc423 100644
--- a/intern/cycles/kernel/svm/svm_attribute.h
+++ b/intern/cycles/kernel/svm/svm_attribute.h
@@ -22,7 +22,7 @@ CCL_NAMESPACE_BEGIN
__device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
uint4 node, NodeAttributeType *type,
- NodeAttributeType *mesh_type, AttributeElement *elem, uint *offset, uint *out_offset)
+ NodeAttributeType *mesh_type, AttributeElement *elem, int *offset, uint *out_offset)
{
if(sd->object != ~0) {
/* find attribute by unique id */
@@ -35,7 +35,7 @@ __device void svm_node_attr_init(KernelGlobals *kg, ShaderData *sd,
/* return result */
*elem = (AttributeElement)attr_map.y;
- *offset = attr_map.z;
+ *offset = as_int(attr_map.z);
*mesh_type = (NodeAttributeType)attr_map.w;
}
else {
@@ -53,7 +53,8 @@ __device void svm_node_attr(KernelGlobals *kg, ShaderData *sd, float *stack, uin
{
NodeAttributeType type, mesh_type;
AttributeElement elem;
- uint offset, out_offset;
+ uint out_offset;
+ int offset;
svm_node_attr_init(kg, sd, node, &type, &mesh_type, &elem, &offset, &out_offset);
@@ -84,7 +85,8 @@ __device void svm_node_attr_bump_dx(KernelGlobals *kg, ShaderData *sd, float *st
{
NodeAttributeType type, mesh_type;
AttributeElement elem;
- uint offset, out_offset;
+ uint out_offset;
+ int offset;
svm_node_attr_init(kg, sd, node, &type, &mesh_type, &elem, &offset, &out_offset);
@@ -119,7 +121,8 @@ __device void svm_node_attr_bump_dy(KernelGlobals *kg, ShaderData *sd, float *st
{
NodeAttributeType type, mesh_type;
AttributeElement elem;
- uint offset, out_offset;
+ uint out_offset;
+ int offset;
svm_node_attr_init(kg, sd, node, &type, &mesh_type, &elem, &offset, &out_offset);
diff --git a/intern/cycles/kernel/svm/svm_image.h b/intern/cycles/kernel/svm/svm_image.h
index eddd0f7034a..388f006c40f 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -18,6 +18,75 @@
CCL_NAMESPACE_BEGIN
+#ifdef __KERNEL_OPENCL__
+
+/* For OpenCL all images are packed in a single array, and we do manual lookup
+ * and interpolation. */
+
+__device_inline float4 svm_image_texture_read(KernelGlobals *kg, int offset)
+{
+ uchar4 r = kernel_tex_fetch(__tex_image_packed, offset);
+ float f = 1.0f/255.0f;
+ return make_float4(r.x*f, r.y*f, r.z*f, r.w*f);
+}
+
+__device_inline int svm_image_texture_wrap_periodic(int x, int width)
+{
+ x %= width;
+ if(x < 0)
+ x += width;
+ return x;
+}
+
+__device_inline int svm_image_texture_wrap_clamp(int x, int width)
+{
+ return clamp(x, 0, width-1);
+}
+
+__device_inline float svm_image_texture_frac(float x, int *ix)
+{
+ int i = (int)x - ((x < 0.0f)? 1: 0);
+ *ix = i;
+ return x - (float)i;
+}
+
+__device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y)
+{
+ uint4 info = kernel_tex_fetch(__tex_image_packed_info, id);
+ uint width = info.x;
+ uint height = info.y;
+ uint offset = info.z;
+ uint periodic = info.w;
+
+ int ix, iy, nix, niy;
+ float tx = svm_image_texture_frac(x*width, &ix);
+ float ty = svm_image_texture_frac(y*height, &iy);
+
+ if(periodic) {
+ ix = svm_image_texture_wrap_periodic(ix, width);
+ iy = svm_image_texture_wrap_periodic(iy, height);
+
+ nix = svm_image_texture_wrap_periodic(ix+1, width);
+ niy = svm_image_texture_wrap_periodic(iy+1, height);
+ }
+ else {
+ ix = svm_image_texture_wrap_clamp(ix, width);
+ iy = svm_image_texture_wrap_clamp(iy, height);
+
+ nix = svm_image_texture_wrap_clamp(ix+1, width);
+ niy = svm_image_texture_wrap_clamp(iy+1, height);
+ }
+
+ float4 r = (1.0f - ty)*(1.0f - tx)*svm_image_texture_read(kg, offset + ix + iy*width);
+ r += (1.0f - ty)*tx*svm_image_texture_read(kg, offset + nix + iy*width);
+ r += ty*(1.0f - tx)*svm_image_texture_read(kg, offset + ix + niy*width);
+ r += ty*tx*svm_image_texture_read(kg, offset + nix + niy*width);
+
+ return r;
+}
+
+#else
+
__device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y)
{
float4 r;
@@ -31,9 +100,6 @@ __device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y)
also note that cuda has 128 textures limit, we use 100 now, since
we still need some for other storage */
-#ifdef __KERNEL_OPENCL__
- r = make_float4(0.0f, 0.0f, 0.0f, 0.0f); /* todo */
-#else
switch(id) {
case 0: r = kernel_tex_image_interp(__tex_image_000, x, y); break;
case 1: r = kernel_tex_image_interp(__tex_image_001, x, y); break;
@@ -139,11 +205,12 @@ __device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y)
kernel_assert(0);
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
}
-#endif
return r;
}
+#endif
+
__device void svm_node_tex_image(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node)
{
uint id = node.y;
diff --git a/intern/cycles/kernel/svm/svm_tex_coord.h b/intern/cycles/kernel/svm/svm_tex_coord.h
index aa924bcc38b..9952557d614 100644
--- a/intern/cycles/kernel/svm/svm_tex_coord.h
+++ b/intern/cycles/kernel/svm/svm_tex_coord.h
@@ -87,7 +87,7 @@ __device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, float *stack
}
case NODE_TEXCO_REFLECTION: {
if(sd->object != ~0)
- data = sd->I - 2.0f*dot(sd->N, sd->I)*sd->N;
+ data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
else
data = sd->I;
break;
@@ -136,7 +136,7 @@ __device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, floa
}
case NODE_TEXCO_REFLECTION: {
if(sd->object != ~0)
- data = sd->I - 2.0f*dot(sd->N, sd->I)*sd->N;
+ data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
else
data = sd->I;
break;
@@ -188,7 +188,7 @@ __device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, floa
}
case NODE_TEXCO_REFLECTION: {
if(sd->object != ~0)
- data = sd->I - 2.0f*dot(sd->N, sd->I)*sd->N;
+ data = 2.0f*dot(sd->N, sd->I)*sd->N - sd->I;
else
data = sd->I;
break;
diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index 55c89b7b1b2..878aa87510e 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -298,7 +298,6 @@ bool Film::modified(const Film& film)
void Film::tag_update(Scene *scene)
{
- scene->integrator->tag_update(scene);
need_update = true;
}
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index b9e02467450..6417d0e2103 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -34,6 +34,7 @@ CCL_NAMESPACE_BEGIN
ImageManager::ImageManager()
{
need_update = true;
+ pack_images = false;
osl_texture_system = NULL;
}
@@ -45,6 +46,11 @@ ImageManager::~ImageManager()
assert(!float_images[slot]);
}
+void ImageManager::set_pack_images(bool pack_images_)
+{
+ pack_images = pack_images_;
+}
+
void ImageManager::set_osl_texture_system(void *texture_system)
{
osl_texture_system = texture_system;
@@ -84,7 +90,7 @@ int ImageManager::add_image(const string& filename, bool& is_float)
size_t slot;
/* load image info and find out if we need a float texture */
- is_float = is_float_image(filename);
+ is_float = (pack_images)? false: is_float_image(filename);
if(is_float) {
/* find existing image */
@@ -361,7 +367,8 @@ void ImageManager::device_load_image(Device *device, DeviceScene *dscene, int sl
if(slot >= 10) name = string_printf("__tex_image_float_0%d", slot);
else name = string_printf("__tex_image_float_00%d", slot);
- device->tex_alloc(name.c_str(), tex_img, true, true);
+ if(!pack_images)
+ device->tex_alloc(name.c_str(), tex_img, true, true);
}
else {
string filename = path_filename(images[slot]->filename);
@@ -387,7 +394,8 @@ void ImageManager::device_load_image(Device *device, DeviceScene *dscene, int sl
if(slot >= 10) name = string_printf("__tex_image_0%d", slot);
else name = string_printf("__tex_image_00%d", slot);
- device->tex_alloc(name.c_str(), tex_img, true, true);
+ if(!pack_images)
+ device->tex_alloc(name.c_str(), tex_img, true, true);
}
img->need_load = false;
@@ -466,9 +474,49 @@ void ImageManager::device_update(Device *device, DeviceScene *dscene, Progress&
pool.wait_work();
+ if(pack_images)
+ device_pack_images(device, dscene, progress);
+
need_update = false;
}
+void ImageManager::device_pack_images(Device *device, DeviceScene *dscene, Progress& progess)
+{
+ /* for OpenCL, we pack all image textures inside a single big texture, and
+ will do our own interpolation in the kernel */
+ size_t size = 0;
+
+ for(size_t slot = 0; slot < images.size(); slot++) {
+ if(!images[slot])
+ continue;
+
+ device_vector<uchar4>& tex_img = dscene->tex_image[slot];
+ size += tex_img.size();
+ }
+
+ uint4 *info = dscene->tex_image_packed_info.resize(images.size());
+ uchar4 *pixels = dscene->tex_image_packed.resize(size);
+
+ size_t offset = 0;
+
+ for(size_t slot = 0; slot < images.size(); slot++) {
+ if(!images[slot])
+ continue;
+
+ device_vector<uchar4>& tex_img = dscene->tex_image[slot];
+
+ info[slot] = make_uint4(tex_img.data_width, tex_img.data_height, offset, 1);
+
+ memcpy(pixels+offset, (void*)tex_img.data_pointer, tex_img.memory_size());
+ offset += tex_img.size();
+ }
+
+ if(dscene->tex_image_packed.size())
+ device->tex_alloc("__tex_image_packed", dscene->tex_image_packed);
+ if(dscene->tex_image_packed_info.size())
+ device->tex_alloc("__tex_image_packed_info", dscene->tex_image_packed_info);
+}
+
void ImageManager::device_free(Device *device, DeviceScene *dscene)
{
for(size_t slot = 0; slot < images.size(); slot++)
@@ -476,6 +524,12 @@ void ImageManager::device_free(Device *device, DeviceScene *dscene)
for(size_t slot = 0; slot < float_images.size(); slot++)
device_free_image(device, dscene, slot + TEX_IMAGE_FLOAT_START);
+ device->tex_free(dscene->tex_image_packed);
+ dscene->tex_image_packed.clear();
+
+ device->tex_free(dscene->tex_image_packed_info);
+ dscene->tex_image_packed_info.clear();
+
images.clear();
float_images.clear();
}
diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
index cc01b4a8e4c..2b5e53cabe1 100644
--- a/intern/cycles/render/image.h
+++ b/intern/cycles/render/image.h
@@ -47,6 +47,7 @@ public:
void device_free(Device *device, DeviceScene *dscene);
void set_osl_texture_system(void *texture_system);
+ void set_pack_images(bool pack_images_);
bool need_update;
@@ -61,12 +62,15 @@ private:
vector<Image*> images;
vector<Image*> float_images;
void *osl_texture_system;
+ bool pack_images;
bool file_load_image(Image *img, device_vector<uchar4>& tex_img);
bool file_load_float_image(Image *img, device_vector<float4>& tex_img);
void device_load_image(Device *device, DeviceScene *dscene, int slot, Progress *progess);
void device_free_image(Device *device, DeviceScene *dscene, int slot);
+
+ void device_pack_images(Device *device, DeviceScene *dscene, Progress& progess);
};
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 0422f97a706..cabbd5760c2 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -421,7 +421,7 @@ void MeshManager::update_svm_attributes(Device *device, DeviceScene *dscene, Sce
attr_map[index].x = id;
attr_map[index].y = req.element;
- attr_map[index].z = req.offset;
+ attr_map[index].z = as_uint(req.offset);
if(req.type == TypeDesc::TypeFloat)
attr_map[index].w = NODE_ATTR_FLOAT;
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp
index b6453339d41..a5f90bfe34b 100644
--- a/intern/cycles/render/scene.cpp
+++ b/intern/cycles/render/scene.cpp
@@ -111,6 +111,8 @@ void Scene::device_update(Device *device_, Progress& progress)
* - Displacement shader must have all shader data available.
* - Light manager needs final mesh data to compute emission CDF.
*/
+
+ image_manager->set_pack_images(device->info.pack_images);
progress.set_status("Updating Background");
background->device_update(device, &dscene, this);
diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h
index ca4d9fc9625..90bc47d5c8e 100644
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@ -97,6 +97,10 @@ public:
device_vector<uchar4> tex_image[TEX_NUM_IMAGES];
device_vector<float4> tex_float_image[TEX_NUM_FLOAT_IMAGES];
+ /* opencl images */
+ device_vector<uchar4> tex_image_packed;
+ device_vector<uint4> tex_image_packed_info;
+
KernelData data;
};
diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h
index 8c0e7105b22..fee2f10085b 100644
--- a/intern/cycles/util/util_math.h
+++ b/intern/cycles/util/util_math.h
@@ -965,6 +965,20 @@ __device_inline void print_int4(const char *label, const int4& a)
#ifndef __KERNEL_OPENCL__
+__device_inline unsigned int as_int(uint i)
+{
+ union { unsigned int ui; int i; } u;
+ u.ui = i;
+ return u.i;
+}
+
+__device_inline unsigned int as_uint(int i)
+{
+ union { unsigned int ui; int i; } u;
+ u.i = i;
+ return u.ui;
+}
+
__device_inline unsigned int as_uint(float f)
{
union { unsigned int i; float f; } u;
diff --git a/intern/elbeem/CMakeLists.txt b/intern/elbeem/CMakeLists.txt
index a3c106ff465..064269b02bc 100644
--- a/intern/elbeem/CMakeLists.txt
+++ b/intern/elbeem/CMakeLists.txt
@@ -86,6 +86,7 @@ set(SRC
intern/solver_interface.h
intern/solver_relax.h
intern/utilities.h
+ intern/globals.h
)
add_definitions(
diff --git a/intern/elbeem/intern/globals.h b/intern/elbeem/intern/globals.h
new file mode 100644
index 00000000000..cbfd4d0b752
--- /dev/null
+++ b/intern/elbeem/intern/globals.h
@@ -0,0 +1,10 @@
+/** \file elbeem/intern/globals.h
+ * \ingroup elbeem
+ */
+
+// required globals
+
+extern bool glob_mpactive;
+
+extern int glob_mpnum;
+extern int glob_mpindex;
diff --git a/intern/elbeem/intern/ntl_blenderdumper.cpp b/intern/elbeem/intern/ntl_blenderdumper.cpp
index f3e8ecc1c31..4efff4337a6 100644
--- a/intern/elbeem/intern/ntl_blenderdumper.cpp
+++ b/intern/elbeem/intern/ntl_blenderdumper.cpp
@@ -18,6 +18,7 @@
#include "ntl_blenderdumper.h"
#include "ntl_world.h"
#include "solver_interface.h"
+#include "globals.h"
#include <zlib.h>
@@ -46,10 +47,6 @@ ntlBlenderDumper::~ntlBlenderDumper()
debMsgStd("ntlBlenderDumper",DM_NOTIFY, "ntlBlenderDumper done", 10);
}
-// required globals
-extern bool glob_mpactive;
-extern int glob_mpnum, glob_mpindex;
-
/******************************************************************************
* Only dump time dep. objects to file
*****************************************************************************/
diff --git a/intern/elbeem/intern/ntl_geometryobject.cpp b/intern/elbeem/intern/ntl_geometryobject.cpp
index 43c6b1f9456..4f640253f0f 100644
--- a/intern/elbeem/intern/ntl_geometryobject.cpp
+++ b/intern/elbeem/intern/ntl_geometryobject.cpp
@@ -125,7 +125,7 @@ void ntlGeometryObject::initialize(ntlRenderGlobals *glob)
}
if(!gotit) {
- errFatal("ntlGeometryObject::initialize","Obj '"<<mName<<"', Unkown 'geoinittype' value: '"<< ginitStr <<"' ", SIMWORLD_INITERROR);
+ errFatal("ntlGeometryObject::initialize","Obj '"<<mName<<"', Unknown 'geoinittype' value: '"<< ginitStr <<"' ", SIMWORLD_INITERROR);
return;
}
}
diff --git a/intern/elbeem/intern/ntl_vector3dim.h b/intern/elbeem/intern/ntl_vector3dim.h
index 1e9728d7658..e3e492c396e 100644
--- a/intern/elbeem/intern/ntl_vector3dim.h
+++ b/intern/elbeem/intern/ntl_vector3dim.h
@@ -17,6 +17,11 @@
// under windos there seem to be strange
// errors when including the STL header too
// late...
+
+#ifdef _MSC_VER
+#define _USE_MATH_DEFINES 1
+#endif
+
#include <iostream>
#include <map>
#include <vector>
@@ -63,14 +68,11 @@ using std::string;
#ifndef snprintf
#define snprintf _snprintf
#endif
-#ifndef bool
-#define bool int
-#endif
-#ifndef false
-#define false 0
+
+#ifdef _MSC_VER
+#if _MSC_VER >= 1300
+#include <float.h>
#endif
-#ifndef true
-#define true 1
#endif
#else // WIN32
@@ -102,6 +104,9 @@ using std::string;
#ifndef M_PI
#define M_PI 3.1415926536
+#endif
+
+#ifndef M_E
#define M_E 2.7182818284
#endif
diff --git a/intern/elbeem/intern/ntl_world.cpp b/intern/elbeem/intern/ntl_world.cpp
index 3b649c9f5b9..0b36f724985 100644
--- a/intern/elbeem/intern/ntl_world.cpp
+++ b/intern/elbeem/intern/ntl_world.cpp
@@ -496,9 +496,6 @@ void ntlWorld::singleStepSims(double targetTime) {
-extern bool glob_mpactive;
-extern int glob_mpindex;
-
/******************************************************************************
* Render the current scene
* uses the global variables from the parser
diff --git a/intern/elbeem/intern/particletracer.cpp b/intern/elbeem/intern/particletracer.cpp
index b939f9e51ef..d6bc450198f 100644
--- a/intern/elbeem/intern/particletracer.cpp
+++ b/intern/elbeem/intern/particletracer.cpp
@@ -19,6 +19,7 @@
#include "ntl_matrices.h"
#include "ntl_ray.h"
#include "ntl_matrices.h"
+#include "globals.h"
#include <zlib.h>
@@ -155,9 +156,6 @@ void ParticleTracer::cleanup() {
}
}
-extern bool glob_mpactive;
-extern int glob_mpindex,glob_mpnum;
-
/******************************************************************************
*! dump particles if desired
*****************************************************************************/
diff --git a/intern/elbeem/intern/solver_adap.cpp b/intern/elbeem/intern/solver_adap.cpp
index de5099f4416..aaf558c4762 100644
--- a/intern/elbeem/intern/solver_adap.cpp
+++ b/intern/elbeem/intern/solver_adap.cpp
@@ -928,9 +928,6 @@ void LbmFsgrSolver::interpolateCellFromCoarse(int lev, int i, int j,int k, int d
-// required globals
-extern bool glob_mpactive;
-extern int glob_mpnum, glob_mpindex;
#define MPTADAP_INTERV 4
/*****************************************************************************/
diff --git a/intern/elbeem/intern/solver_init.cpp b/intern/elbeem/intern/solver_init.cpp
index 7e9f5e7f420..aede617a4d3 100644
--- a/intern/elbeem/intern/solver_init.cpp
+++ b/intern/elbeem/intern/solver_init.cpp
@@ -15,6 +15,8 @@
#include "solver_relax.h"
// for geo init FGI_ defines
#include "elbeem.h"
+#include "globals.h"
+
// helper for 2d init
#define SWAPYZ(vec) { \
@@ -296,9 +298,6 @@
#endif // LBMDIM==2
-// required globals
-extern bool glob_mpactive;
-extern int glob_mpnum, glob_mpindex;
/******************************************************************************
diff --git a/intern/elbeem/intern/solver_main.cpp b/intern/elbeem/intern/solver_main.cpp
index 8ec0f95a366..b9436e84922 100644
--- a/intern/elbeem/intern/solver_main.cpp
+++ b/intern/elbeem/intern/solver_main.cpp
@@ -14,6 +14,8 @@
#include "solver_relax.h"
#include "particletracer.h"
#include "loop_tools.h"
+#include "globals.h"
+
#include <stdlib.h>
/*****************************************************************************/
@@ -24,8 +26,6 @@ double globdfcnt;
double globdfavg[19];
double globdfmax[19];
double globdfmin[19];
-extern int glob_mpindex,glob_mpnum;
-extern bool globOutstrForce;
// simulation object interface
void LbmFsgrSolver::step() {
diff --git a/intern/elbeem/intern/solver_relax.h b/intern/elbeem/intern/solver_relax.h
index 370d8ea182b..ad88b3c37c5 100644
--- a/intern/elbeem/intern/solver_relax.h
+++ b/intern/elbeem/intern/solver_relax.h
@@ -390,7 +390,7 @@
#define DEFAULT_STREAM \
m[dC] = RAC(ccel,dC); \
\
- if(((!nbored) & CFBnd)) { \
+ if(0 /* ((!nbored) & CFBnd) */) { \
\
m[dN ] = CSRC_N ; m[dS ] = CSRC_S ; \
m[dE ] = CSRC_E ; m[dW ] = CSRC_W ; \
diff --git a/intern/elbeem/intern/solver_util.cpp b/intern/elbeem/intern/solver_util.cpp
index 0a80b234ad3..935a910e7d5 100644
--- a/intern/elbeem/intern/solver_util.cpp
+++ b/intern/elbeem/intern/solver_util.cpp
@@ -18,6 +18,8 @@
#include "ntl_world.h"
#include "simulation_object.h"
+#include "globals.h"
+
#include <stdlib.h>
#include <zlib.h>
#ifndef sqrtf
@@ -31,10 +33,6 @@
// try to enhance surface?
#define SURFACE_ENH 2
-extern bool glob_mpactive;
-extern bool glob_mpnum;
-extern bool glob_mpindex;
-
//! for raytracing
void LbmFsgrSolver::prepareVisualization( void ) {
int lev = mMaxRefine;
diff --git a/intern/ghost/intern/GHOST_DisplayManagerX11.cpp b/intern/ghost/intern/GHOST_DisplayManagerX11.cpp
index b8fe271fd4d..d719a4caa55 100644
--- a/intern/ghost/intern/GHOST_DisplayManagerX11.cpp
+++ b/intern/ghost/intern/GHOST_DisplayManagerX11.cpp
@@ -43,30 +43,29 @@
GHOST_DisplayManagerX11::
GHOST_DisplayManagerX11(
- GHOST_SystemX11 *system
-) :
+ GHOST_SystemX11 *system
+ ) :
GHOST_DisplayManager(),
m_system(system)
{
//nothing to do.
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
-getNumDisplays(
- GHOST_TUns8& numDisplays
-) const{
+getNumDisplays(GHOST_TUns8& numDisplays) const
+{
numDisplays = m_system->getNumDisplays();
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
getNumDisplaySettings(
- GHOST_TUns8 display,
- GHOST_TInt32& numSettings
-) const{
+ GHOST_TUns8 display,
+ GHOST_TInt32& numSettings) const
+{
#ifdef WITH_X11_XF86VMODE
int majorVersion, minorVersion;
XF86VidModeModeInfo **vidmodes;
@@ -96,13 +95,13 @@ getNumDisplaySettings(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
getDisplaySetting(
- GHOST_TUns8 display,
- GHOST_TInt32 index,
- GHOST_DisplaySetting& setting
-) const {
+ GHOST_TUns8 display,
+ GHOST_TInt32 index,
+ GHOST_DisplaySetting& setting) const
+{
#ifdef WITH_X11_XF86VMODE
int majorVersion, minorVersion;
@@ -128,13 +127,13 @@ getDisplaySetting(
setting.xPixels = vidmodes[index]->hdisplay;
setting.yPixels = vidmodes[index]->vdisplay;
- setting.bpp = DefaultDepth(dpy,DefaultScreen(dpy));
+ setting.bpp = DefaultDepth(dpy, DefaultScreen(dpy));
#else
GHOST_ASSERT(display < 1, "Only single display systems are currently supported.\n");
GHOST_ASSERT(index < 1, "Requested setting outside of valid range.\n");
- Display * x_display = m_system->getXDisplay();
+ Display *x_display = m_system->getXDisplay();
if (x_display == NULL) {
return GHOST_kFailure;
@@ -142,7 +141,7 @@ getDisplaySetting(
setting.xPixels = DisplayWidth(x_display, DefaultScreen(x_display));
setting.yPixels = DisplayHeight(x_display, DefaultScreen(x_display));
- setting.bpp = DefaultDepth(x_display,DefaultScreen(x_display));
+ setting.bpp = DefaultDepth(x_display, DefaultScreen(x_display));
#endif
// Don't think it's possible to get this value from X!
@@ -152,25 +151,25 @@ getDisplaySetting(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
getCurrentDisplaySetting(
- GHOST_TUns8 display,
- GHOST_DisplaySetting& setting
-) const {
+ GHOST_TUns8 display,
+ GHOST_DisplaySetting& setting) const
+{
/* According to the xf86vidmodegetallmodelines man page,
* "The first element of the array corresponds to the current video mode."
*/
- return getDisplaySetting(display,GHOST_TInt32(0),setting);
+ return getDisplaySetting(display, GHOST_TInt32(0), setting);
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
setCurrentDisplaySetting(
- GHOST_TUns8 display,
- const GHOST_DisplaySetting& setting
-){
+ GHOST_TUns8 display,
+ const GHOST_DisplaySetting& setting)
+{
#ifdef WITH_X11_XF86VMODE
//
// Mode switching code ported from Quake 2:
@@ -196,7 +195,7 @@ setCurrentDisplaySetting(
}
# ifdef _DEBUG
printf("Using XFree86-VidModeExtension Version %d.%d\n",
- majorVersion, minorVersion);
+ majorVersion, minorVersion);
# endif
/* The X11 man page says vidmodes needs to be freed, but doing so causes a
@@ -208,7 +207,7 @@ setCurrentDisplaySetting(
for (int i = 0; i < num_vidmodes; i++) {
if (setting.xPixels > vidmodes[i]->hdisplay ||
- setting.yPixels > vidmodes[i]->vdisplay)
+ setting.yPixels > vidmodes[i]->vdisplay)
continue;
x = setting.xPixels - vidmodes[i]->hdisplay;
@@ -226,7 +225,7 @@ setCurrentDisplaySetting(
actualWidth = vidmodes[best_fit]->hdisplay;
actualHeight = vidmodes[best_fit]->vdisplay;
printf("Switching to video mode %dx%d\n",
- actualWidth, actualHeight);
+ actualWidth, actualHeight);
# endif
// change to the mode
@@ -234,7 +233,8 @@ setCurrentDisplaySetting(
// Move the viewport to top left
XF86VidModeSetViewPort(dpy, scrnum, 0, 0);
- } else
+ }
+ else
return GHOST_kFailure;
XFlush(dpy);
diff --git a/intern/ghost/intern/GHOST_DisplayManagerX11.h b/intern/ghost/intern/GHOST_DisplayManagerX11.h
index c4d2b6dbb0a..61b4578cac3 100644
--- a/intern/ghost/intern/GHOST_DisplayManagerX11.h
+++ b/intern/ghost/intern/GHOST_DisplayManagerX11.h
@@ -50,18 +50,18 @@ public:
* Constructor.
*/
GHOST_DisplayManagerX11(
- GHOST_SystemX11 *system
- );
+ GHOST_SystemX11 *system
+ );
/**
* Returns the number of display devices on this system.
* @param numDisplays The number of displays on this system.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getNumDisplays(
- GHOST_TUns8& numDisplays
- ) const;
+ GHOST_TUns8& numDisplays
+ ) const;
/**
* Returns the number of display settings for this display device.
@@ -69,11 +69,11 @@ public:
* @param setting The number of settings of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getNumDisplaySettings(
- GHOST_TUns8 display,
- GHOST_TInt32& numSettings
- ) const;
+ GHOST_TUns8 display,
+ GHOST_TInt32& numSettings
+ ) const;
/**
* Returns the current setting for this display device.
@@ -82,12 +82,12 @@ public:
* @param setting The setting of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getDisplaySetting(
- GHOST_TUns8 display,
- GHOST_TInt32 index,
- GHOST_DisplaySetting& setting
- ) const;
+ GHOST_TUns8 display,
+ GHOST_TInt32 index,
+ GHOST_DisplaySetting& setting
+ ) const;
/**
* Returns the current setting for this display device.
@@ -95,11 +95,11 @@ public:
* @param setting The current setting of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getCurrentDisplaySetting(
- GHOST_TUns8 display,
- GHOST_DisplaySetting& setting
- ) const;
+ GHOST_TUns8 display,
+ GHOST_DisplaySetting& setting
+ ) const;
/**
* Changes the current setting for this display device.
@@ -107,15 +107,15 @@ public:
* @param setting The current setting of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setCurrentDisplaySetting(
- GHOST_TUns8 display,
- const GHOST_DisplaySetting& setting
- );
+ GHOST_TUns8 display,
+ const GHOST_DisplaySetting& setting
+ );
-private :
+private:
- GHOST_SystemX11 * m_system;
+ GHOST_SystemX11 *m_system;
};
diff --git a/intern/ghost/intern/GHOST_DropTargetX11.cpp b/intern/ghost/intern/GHOST_DropTargetX11.cpp
index 2239ac63d33..c1cc55b332a 100644
--- a/intern/ghost/intern/GHOST_DropTargetX11.cpp
+++ b/intern/ghost/intern/GHOST_DropTargetX11.cpp
@@ -37,8 +37,8 @@
bool GHOST_DropTargetX11::m_xdndInitialized = false;
DndClass GHOST_DropTargetX11::m_dndClass;
-Atom * GHOST_DropTargetX11::m_dndTypes = NULL;
-Atom * GHOST_DropTargetX11::m_dndActions = NULL;
+Atom *GHOST_DropTargetX11::m_dndTypes = NULL;
+Atom *GHOST_DropTargetX11::m_dndActions = NULL;
const char *GHOST_DropTargetX11::m_dndMimeTypes[] = {"url/url", "text/uri-list", "text/plain", "application/octet-stream"};
int GHOST_DropTargetX11::m_refCounter = 0;
@@ -55,13 +55,13 @@ int GHOST_DropTargetX11::m_refCounter = 0;
void GHOST_DropTargetX11::Initialize(void)
{
Display *display = m_system->getXDisplay();
- int dndTypesCount = sizeof(m_dndMimeTypes) / sizeof(char*);
+ int dndTypesCount = sizeof(m_dndMimeTypes) / sizeof(char *);
int counter;
xdnd_init(&m_dndClass, display);
m_dndTypes = new Atom[dndTypesCount + 1];
- XInternAtoms(display, (char**)m_dndMimeTypes, dndTypesCount, 0, m_dndTypes);
+ XInternAtoms(display, (char **)m_dndMimeTypes, dndTypesCount, 0, m_dndTypes);
m_dndTypes[dndTypesCount] = 0;
m_dndActions = new Atom[8];
@@ -86,10 +86,10 @@ void GHOST_DropTargetX11::Uninitialize(void)
xdnd_shut(&m_dndClass);
}
-GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 * window, GHOST_SystemX11 * system)
-:
-m_window(window),
-m_system(system)
+GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system)
+ :
+ m_window(window),
+ m_system(system)
{
if (!m_xdndInitialized) {
Initialize();
@@ -177,7 +177,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char
assert(strlen(decodedOut) < bufferSize);
// Concatenate this character onto the output
- strncat(decodedOut, (char*)&asciiCharacter, 1);
+ strncat(decodedOut, (char *)&asciiCharacter, 1);
// Skip the next character
i++;
@@ -188,7 +188,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char
char *GHOST_DropTargetX11::FileUrlDecode(char *fileUrl)
{
- if(!strncpy(fileUrl, "file://", 7) == 0) {
+ if (!strncpy(fileUrl, "file://", 7) == 0) {
/* assume one character of encoded URL can be expanded to 4 chars max */
int decodedSize = 4 * strlen(fileUrl) + 1;
char *decodedPath = (char *)malloc(decodedSize);
@@ -217,9 +217,9 @@ void *GHOST_DropTargetX11::getURIListGhostData(unsigned char *dropBuffer, int dr
else curLength++;
}
- strArray = (GHOST_TStringArray*)malloc(sizeof(GHOST_TStringArray));
+ strArray = (GHOST_TStringArray *)malloc(sizeof(GHOST_TStringArray));
strArray->count = 0;
- strArray->strings = (GHOST_TUns8**)malloc(totPaths*sizeof(GHOST_TUns8*));
+ strArray->strings = (GHOST_TUns8 **)malloc(totPaths * sizeof(GHOST_TUns8 *));
curLength = 0;
for (int i = 0; i <= dropBufferSize; i++) {
@@ -228,12 +228,12 @@ void *GHOST_DropTargetX11::getURIListGhostData(unsigned char *dropBuffer, int dr
char *curPath = (char *)malloc(curLength + 1);
char *decodedPath;
- strncpy(curPath, (char*)dropBuffer + i - curLength, curLength);
+ strncpy(curPath, (char *)dropBuffer + i - curLength, curLength);
curPath[curLength] = 0;
decodedPath = FileUrlDecode(curPath);
- if(decodedPath) {
- strArray->strings[strArray->count] = (GHOST_TUns8*)decodedPath;
+ if (decodedPath) {
+ strArray->strings[strArray->count] = (GHOST_TUns8 *)decodedPath;
strArray->count++;
}
diff --git a/intern/ghost/intern/GHOST_DropTargetX11.h b/intern/ghost/intern/GHOST_DropTargetX11.h
index b9e17dcc93b..10d76bbb165 100644
--- a/intern/ghost/intern/GHOST_DropTargetX11.h
+++ b/intern/ghost/intern/GHOST_DropTargetX11.h
@@ -47,7 +47,7 @@ public:
* @param window The window to register as drop target.
* @param system The associated system.
*/
- GHOST_DropTargetX11(GHOST_WindowX11 * window, GHOST_SystemX11 * system);
+ GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system);
/**
* Destructor
@@ -55,8 +55,8 @@ public:
~GHOST_DropTargetX11();
/**
- * Handler of ClientMessage X11 event
- */
+ * Handler of ClientMessage X11 event
+ */
bool GHOST_HandleClientMessage(XEvent *event);
/**
@@ -73,42 +73,42 @@ private:
/* Internal helper functions */
/**
- * Initiailize XDND and all related X atoms
- */
+ * Initiailize XDND and all related X atoms
+ */
void Initialize(void);
/**
- * Uninitiailize XDND and all related X atoms
- */
+ * Uninitiailize XDND and all related X atoms
+ */
void Uninitialize(void);
/**
- * Get data to be passed to event from text/uri-list mime type
- * @param dropBuffer - buffer returned from source application
- * @param dropBufferSize - size of dropped buffer
- * @return pointer to newly created GHOST data
- */
- void * getURIListGhostData(unsigned char *dropBuffer, int dropBufferSize);
+ * Get data to be passed to event from text/uri-list mime type
+ * @param dropBuffer - buffer returned from source application
+ * @param dropBufferSize - size of dropped buffer
+ * @return pointer to newly created GHOST data
+ */
+ void *getURIListGhostData(unsigned char *dropBuffer, int dropBufferSize);
/**
- * Decode URL (i.e. converts "file:///a%20b/test" to "file:///a b/test")
- * @param decodedOut - buffer for decoded URL
- * @param bufferSize - size of output buffer
- * @param encodedIn - input encoded buffer to be decoded
- */
+ * Decode URL (i.e. converts "file:///a%20b/test" to "file:///a b/test")
+ * @param decodedOut - buffer for decoded URL
+ * @param bufferSize - size of output buffer
+ * @param encodedIn - input encoded buffer to be decoded
+ */
void UrlDecode(char *decodedOut, int bufferSize, const char *encodedIn);
/**
- * Fully decode file URL (i.e. converts "file:///a%20b/test" to "/a b/test")
- * @param fileUrl - file path URL to be fully decoded
- * @return decoded file path (resutl shold be free-d)
- */
+ * Fully decode file URL (i.e. converts "file:///a%20b/test" to "/a b/test")
+ * @param fileUrl - file path URL to be fully decoded
+ * @return decoded file path (resutl shold be free-d)
+ */
char *FileUrlDecode(char *fileUrl);
/* The associated GHOST_WindowWin32. */
- GHOST_WindowX11 * m_window;
+ GHOST_WindowX11 *m_window;
/* The System. */
- GHOST_SystemX11 * m_system;
+ GHOST_SystemX11 *m_system;
/* Data type of the dragged object */
GHOST_TDragnDropTypes m_draggedObjectType;
@@ -120,10 +120,10 @@ private:
static DndClass m_dndClass;
/* list of supported types to eb draggeg into */
- static Atom * m_dndTypes;
+ static Atom *m_dndTypes;
/* list of supported dran'n'drop actions */
- static Atom * m_dndActions;
+ static Atom *m_dndActions;
/* List of supported MIME types to be dragged into */
static const char *m_dndMimeTypes[];
diff --git a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
index 565324ae211..bd285bc7a27 100644
--- a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
+++ b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
@@ -30,9 +30,9 @@
GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys)
- :
- GHOST_NDOFManager(sys),
- m_available(false)
+ :
+ GHOST_NDOFManager(sys),
+ m_available(false)
{
setDeadZone(0.1f); /* how to calibrate on Linux? throw away slight motion! */
@@ -44,7 +44,7 @@ GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys)
#define MAX_LINE_LENGTH 100
/* look for USB devices with Logitech's vendor ID */
- FILE* command_output = popen("lsusb -d 046d:","r");
+ FILE *command_output = popen("lsusb -d 046d:", "r");
if (command_output) {
char line[MAX_LINE_LENGTH] = {0};
while (fgets(line, MAX_LINE_LENGTH, command_output)) {
diff --git a/intern/ghost/intern/GHOST_SystemPathsX11.cpp b/intern/ghost/intern/GHOST_SystemPathsX11.cpp
index 6dad3661a57..c148a16d5fc 100644
--- a/intern/ghost/intern/GHOST_SystemPathsX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemPathsX11.cpp
@@ -47,9 +47,9 @@
#endif
#ifdef PREFIX
-static const char *static_path= PREFIX "/share";
+static const char *static_path = PREFIX "/share";
#else
-static const char *static_path= NULL;
+static const char *static_path = NULL;
#endif
GHOST_SystemPathsX11::GHOST_SystemPathsX11()
@@ -60,18 +60,18 @@ GHOST_SystemPathsX11::~GHOST_SystemPathsX11()
{
}
-const GHOST_TUns8* GHOST_SystemPathsX11::getSystemDir() const
+const GHOST_TUns8 *GHOST_SystemPathsX11::getSystemDir() const
{
/* no prefix assumes a portable build which only uses bundled scripts */
return (const GHOST_TUns8 *)static_path;
}
-const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
+const GHOST_TUns8 *GHOST_SystemPathsX11::getUserDir() const
{
#ifndef WITH_XDG_USER_DIRS
return (const GHOST_TUns8 *)getenv("HOME");
#else /* WITH_XDG_USER_DIRS */
- const char *home= getenv("XDG_CONFIG_HOME");
+ const char *home = getenv("XDG_CONFIG_HOME");
if (home) {
return (const GHOST_TUns8 *)home;
@@ -79,10 +79,10 @@ const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
else {
static char user_path[PATH_MAX];
- home= getenv("HOME");
+ home = getenv("HOME");
if (home == NULL) {
- home= getpwuid(getuid())->pw_dir;
+ home = getpwuid(getuid())->pw_dir;
}
snprintf(user_path, sizeof(user_path), "%s/.config", home);
@@ -91,12 +91,12 @@ const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
#endif /* WITH_XDG_USER_DIRS */
}
-const GHOST_TUns8* GHOST_SystemPathsX11::getBinaryDir() const
+const GHOST_TUns8 *GHOST_SystemPathsX11::getBinaryDir() const
{
return NULL;
}
-void GHOST_SystemPathsX11::addToSystemRecentFiles(const char* filename) const
+void GHOST_SystemPathsX11::addToSystemRecentFiles(const char *filename) const
{
/* XXXXX TODO: Implementation for X11 if possible */
diff --git a/intern/ghost/intern/GHOST_SystemPathsX11.h b/intern/ghost/intern/GHOST_SystemPathsX11.h
index d05cab5de75..8ded9a35276 100644
--- a/intern/ghost/intern/GHOST_SystemPathsX11.h
+++ b/intern/ghost/intern/GHOST_SystemPathsX11.h
@@ -55,25 +55,25 @@ public:
* "unpack and run" path, then look for properly installed path, not including versioning.
* @return Unsigned char string pointing to system dir (eg /usr/share/blender/).
*/
- const GHOST_TUns8* getSystemDir() const;
+ const GHOST_TUns8 *getSystemDir() const;
/**
* Determine the base dir in which user configuration is stored, not including versioning.
* If needed, it will create the base directory.
* @return Unsigned char string pointing to user dir (eg ~/.blender/).
*/
- const GHOST_TUns8* getUserDir() const;
+ const GHOST_TUns8 *getUserDir() const;
/**
- * Determine the directory of the current binary
- * @return Unsigned char string pointing to the binary dir
- */
- const GHOST_TUns8* getBinaryDir() const;
+ * Determine the directory of the current binary
+ * @return Unsigned char string pointing to the binary dir
+ */
+ const GHOST_TUns8 *getBinaryDir() const;
/**
* Add the file to the operating system most recently used files
*/
- void addToSystemRecentFiles(const char* filename) const;
+ void addToSystemRecentFiles(const char *filename) const;
};
#endif
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index cabec06301a..c58ed93425d 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -75,14 +75,14 @@ static GHOST_TKey
convertXKey(KeySym key);
//these are for copy and select copy
-static char *txt_cut_buffer= NULL;
-static char *txt_select_buffer= NULL;
+static char *txt_cut_buffer = NULL;
+static char *txt_select_buffer = NULL;
using namespace std;
GHOST_SystemX11::
GHOST_SystemX11(
-) :
+ ) :
GHOST_System(),
m_start_time(0)
{
@@ -99,40 +99,40 @@ GHOST_SystemX11(
#endif
m_delete_window_atom
- = XInternAtom(m_display, "WM_DELETE_WINDOW", True);
-
- m_wm_protocols= XInternAtom(m_display, "WM_PROTOCOLS", False);
- m_wm_take_focus= XInternAtom(m_display, "WM_TAKE_FOCUS", False);
- m_wm_state= XInternAtom(m_display, "WM_STATE", False);
- m_wm_change_state= XInternAtom(m_display, "WM_CHANGE_STATE", False);
- m_net_state= XInternAtom(m_display, "_NET_WM_STATE", False);
- m_net_max_horz= XInternAtom(m_display,
- "_NET_WM_STATE_MAXIMIZED_HORZ", False);
- m_net_max_vert= XInternAtom(m_display,
- "_NET_WM_STATE_MAXIMIZED_VERT", False);
- m_net_fullscreen= XInternAtom(m_display,
- "_NET_WM_STATE_FULLSCREEN", False);
- m_motif= XInternAtom(m_display, "_MOTIF_WM_HINTS", False);
- m_targets= XInternAtom(m_display, "TARGETS", False);
- m_string= XInternAtom(m_display, "STRING", False);
- m_compound_text= XInternAtom(m_display, "COMPOUND_TEXT", False);
- m_text= XInternAtom(m_display, "TEXT", False);
- m_clipboard= XInternAtom(m_display, "CLIPBOARD", False);
- m_primary= XInternAtom(m_display, "PRIMARY", False);
- m_xclip_out= XInternAtom(m_display, "XCLIP_OUT", False);
- m_incr= XInternAtom(m_display, "INCR", False);
- m_utf8_string= XInternAtom(m_display, "UTF8_STRING", False);
+ = XInternAtom(m_display, "WM_DELETE_WINDOW", True);
+
+ m_wm_protocols = XInternAtom(m_display, "WM_PROTOCOLS", False);
+ m_wm_take_focus = XInternAtom(m_display, "WM_TAKE_FOCUS", False);
+ m_wm_state = XInternAtom(m_display, "WM_STATE", False);
+ m_wm_change_state = XInternAtom(m_display, "WM_CHANGE_STATE", False);
+ m_net_state = XInternAtom(m_display, "_NET_WM_STATE", False);
+ m_net_max_horz = XInternAtom(m_display,
+ "_NET_WM_STATE_MAXIMIZED_HORZ", False);
+ m_net_max_vert = XInternAtom(m_display,
+ "_NET_WM_STATE_MAXIMIZED_VERT", False);
+ m_net_fullscreen = XInternAtom(m_display,
+ "_NET_WM_STATE_FULLSCREEN", False);
+ m_motif = XInternAtom(m_display, "_MOTIF_WM_HINTS", False);
+ m_targets = XInternAtom(m_display, "TARGETS", False);
+ m_string = XInternAtom(m_display, "STRING", False);
+ m_compound_text = XInternAtom(m_display, "COMPOUND_TEXT", False);
+ m_text = XInternAtom(m_display, "TEXT", False);
+ m_clipboard = XInternAtom(m_display, "CLIPBOARD", False);
+ m_primary = XInternAtom(m_display, "PRIMARY", False);
+ m_xclip_out = XInternAtom(m_display, "XCLIP_OUT", False);
+ m_incr = XInternAtom(m_display, "INCR", False);
+ m_utf8_string = XInternAtom(m_display, "UTF8_STRING", False);
m_last_warp = 0;
// compute the initial time
timeval tv;
- if (gettimeofday(&tv,NULL) == -1) {
- GHOST_ASSERT(false,"Could not instantiate timer!");
+ if (gettimeofday(&tv, NULL) == -1) {
+ GHOST_ASSERT(false, "Could not instantiate timer!");
}
// Taking care not to overflow the tv.tv_sec*1000
- m_start_time = GHOST_TUns64(tv.tv_sec)*1000 + tv.tv_usec/1000;
+ m_start_time = GHOST_TUns64(tv.tv_sec) * 1000 + tv.tv_usec / 1000;
/* use detectable autorepeate, mac and windows also do this */
@@ -158,10 +158,10 @@ GHOST_SystemX11::
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
-init(
-){
+init()
+{
GHOST_TSuccess success = GHOST_System::init();
if (success) {
@@ -178,82 +178,82 @@ init(
return GHOST_kFailure;
}
- GHOST_TUns64
+GHOST_TUns64
GHOST_SystemX11::
-getMilliSeconds(
-) const {
+getMilliSeconds() const
+{
timeval tv;
- if (gettimeofday(&tv,NULL) == -1) {
- GHOST_ASSERT(false,"Could not compute time!");
+ if (gettimeofday(&tv, NULL) == -1) {
+ GHOST_ASSERT(false, "Could not compute time!");
}
// Taking care not to overflow the tv.tv_sec*1000
- return GHOST_TUns64(tv.tv_sec)*1000 + tv.tv_usec/1000 - m_start_time;
+ return GHOST_TUns64(tv.tv_sec) * 1000 + tv.tv_usec / 1000 - m_start_time;
}
- GHOST_TUns8
+GHOST_TUns8
GHOST_SystemX11::
-getNumDisplays(
-) const {
+getNumDisplays() const
+{
return GHOST_TUns8(1);
}
- /**
- * Returns the dimensions of the main display on this system.
- * @return The dimension of the main display.
- */
- void
+/**
+ * Returns the dimensions of the main display on this system.
+ * @return The dimension of the main display.
+ */
+void
GHOST_SystemX11::
getMainDisplayDimensions(
- GHOST_TUns32& width,
- GHOST_TUns32& height
-) const {
+ GHOST_TUns32& width,
+ GHOST_TUns32& height) const
+{
if (m_display) {
width = DisplayWidth(m_display, DefaultScreen(m_display));
height = DisplayHeight(m_display, DefaultScreen(m_display));
}
}
- /**
- * Create a new window.
- * The new window is added to the list of windows managed.
- * Never explicitly delete the window, use disposeWindow() instead.
- * @param title The name of the window (displayed in the title bar of the window if the OS supports it).
- * @param left The coordinate of the left edge of the window.
- * @param top The coordinate of the top edge of the window.
- * @param width The width the window.
- * @param height The height the window.
- * @param state The state of the window when opened.
- * @param type The type of drawing context installed in this window.
- * @param stereoVisual Stereo visual for quad buffered stereo.
- * @param numOfAASamples Number of samples used for AA (zero if no AA)
- * @param parentWindow Parent (embedder) window
- * @return The new window (or 0 if creation failed).
- */
- GHOST_IWindow*
+/**
+ * Create a new window.
+ * The new window is added to the list of windows managed.
+ * Never explicitly delete the window, use disposeWindow() instead.
+ * @param title The name of the window (displayed in the title bar of the window if the OS supports it).
+ * @param left The coordinate of the left edge of the window.
+ * @param top The coordinate of the top edge of the window.
+ * @param width The width the window.
+ * @param height The height the window.
+ * @param state The state of the window when opened.
+ * @param type The type of drawing context installed in this window.
+ * @param stereoVisual Stereo visual for quad buffered stereo.
+ * @param numOfAASamples Number of samples used for AA (zero if no AA)
+ * @param parentWindow Parent (embedder) window
+ * @return The new window (or 0 if creation failed).
+ */
+GHOST_IWindow *
GHOST_SystemX11::
createWindow(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- bool stereoVisual,
- const GHOST_TUns16 numOfAASamples,
- const GHOST_TEmbedderWindowID parentWindow
-){
- GHOST_WindowX11 * window = 0;
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ GHOST_TDrawingContextType type,
+ bool stereoVisual,
+ const GHOST_TUns16 numOfAASamples,
+ const GHOST_TEmbedderWindowID parentWindow)
+{
+ GHOST_WindowX11 *window = 0;
if (!m_display) return 0;
- window = new GHOST_WindowX11 (
- this,m_display,title, left, top, width, height, state, parentWindow, type, stereoVisual
- );
+ window = new GHOST_WindowX11(
+ this, m_display, title, left, top, width, height, state, parentWindow, type, stereoVisual
+ );
if (window) {
// Both are now handle in GHOST_WindowX11.cpp
@@ -263,7 +263,7 @@ createWindow(
// Store the pointer to the window
m_windowManager->addWindow(window);
m_windowManager->setActiveWindow(window);
- pushEvent( new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) );
+ pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) );
}
else {
delete window;
@@ -273,11 +273,11 @@ createWindow(
return window;
}
- GHOST_WindowX11 *
+GHOST_WindowX11 *
GHOST_SystemX11::
findGhostWindow(
- Window xwind
-) const {
+ Window xwind) const
+{
if (xwind == 0) return NULL;
@@ -292,7 +292,7 @@ findGhostWindow(
vector<GHOST_IWindow *>::const_iterator win_end = win_vec.end();
for (; win_it != win_end; ++win_it) {
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
if (window->getXWindow() == xwind) {
return window;
}
@@ -315,8 +315,8 @@ static void SleepTillEvent(Display *display, GHOST_TInt64 maxSleep)
else {
timeval tv;
- tv.tv_sec = maxSleep/1000;
- tv.tv_usec = (maxSleep - tv.tv_sec*1000)*1000;
+ tv.tv_sec = maxSleep / 1000;
+ tv.tv_usec = (maxSleep - tv.tv_sec * 1000) * 1000;
select(fd + 1, &fds, NULL, NULL, &tv);
}
@@ -325,78 +325,78 @@ static void SleepTillEvent(Display *display, GHOST_TInt64 maxSleep)
/* This function borrowed from Qt's X11 support
* qclipboard_x11.cpp
* */
-struct init_timestamp_data
-{
- Time timestamp;
+struct init_timestamp_data {
+ Time timestamp;
};
-static Bool init_timestamp_scanner(Display*, XEvent *event, XPointer arg)
+static Bool init_timestamp_scanner(Display *, XEvent *event, XPointer arg)
{
init_timestamp_data *data =
- reinterpret_cast<init_timestamp_data*>(arg);
- switch(event->type)
- {
- case ButtonPress:
- case ButtonRelease:
- data->timestamp = event->xbutton.time;
- break;
- case MotionNotify:
- data->timestamp = event->xmotion.time;
- break;
- case KeyPress:
- case KeyRelease:
- data->timestamp = event->xkey.time;
- break;
- case PropertyNotify:
- data->timestamp = event->xproperty.time;
- break;
- case EnterNotify:
- case LeaveNotify:
- data->timestamp = event->xcrossing.time;
- break;
- case SelectionClear:
- data->timestamp = event->xselectionclear.time;
- break;
- default:
- break;
- }
-
- return false;
+ reinterpret_cast<init_timestamp_data *>(arg);
+ switch (event->type)
+ {
+ case ButtonPress:
+ case ButtonRelease:
+ data->timestamp = event->xbutton.time;
+ break;
+ case MotionNotify:
+ data->timestamp = event->xmotion.time;
+ break;
+ case KeyPress:
+ case KeyRelease:
+ data->timestamp = event->xkey.time;
+ break;
+ case PropertyNotify:
+ data->timestamp = event->xproperty.time;
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ data->timestamp = event->xcrossing.time;
+ break;
+ case SelectionClear:
+ data->timestamp = event->xselectionclear.time;
+ break;
+ default:
+ break;
+ }
+
+ return false;
}
Time
GHOST_SystemX11::
lastEventTime(Time default_time) {
- init_timestamp_data data;
- data.timestamp = default_time;
- XEvent ev;
- XCheckIfEvent(m_display, &ev, &init_timestamp_scanner, (XPointer)&data);
+ init_timestamp_data data;
+ data.timestamp = default_time;
+ XEvent ev;
+ XCheckIfEvent(m_display, &ev, &init_timestamp_scanner, (XPointer) & data);
- return data.timestamp;
+ return data.timestamp;
}
- bool
+bool
GHOST_SystemX11::
processEvents(
- bool waitForEvent
-){
+ bool waitForEvent)
+{
// Get all the current events -- translate them into
// ghost events and call base class pushEvent() method.
bool anyProcessed = false;
do {
- GHOST_TimerManager* timerMgr = getTimerManager();
+ GHOST_TimerManager *timerMgr = getTimerManager();
if (waitForEvent && m_dirty_windows.empty() && !XPending(m_display)) {
GHOST_TUns64 next = timerMgr->nextFireTime();
- if (next==GHOST_kFireTimeNever) {
+ if (next == GHOST_kFireTimeNever) {
SleepTillEvent(m_display, -1);
- } else {
+ }
+ else {
GHOST_TInt64 maxSleep = next - getMilliSeconds();
- if(maxSleep >= 0)
+ if (maxSleep >= 0)
SleepTillEvent(m_display, next - getMilliSeconds());
}
}
@@ -417,7 +417,7 @@ processEvents(
}
#ifdef WITH_INPUT_NDOF
- if (dynamic_cast<GHOST_NDOFManagerX11*>(m_ndofManager)->processEvents()) {
+ if (dynamic_cast<GHOST_NDOFManagerX11 *>(m_ndofManager)->processEvents()) {
anyProcessed = true;
}
#endif
@@ -430,20 +430,20 @@ processEvents(
#ifdef WITH_X11_XINPUT
/* set currently using tablet mode (stylus or eraser) depending on device ID */
-static void setTabletMode(GHOST_WindowX11 * window, XID deviceid)
+static void setTabletMode(GHOST_WindowX11 *window, XID deviceid)
{
- if(deviceid == window->GetXTablet().StylusID)
- window->GetXTablet().CommonData.Active= GHOST_kTabletModeStylus;
- else if(deviceid == window->GetXTablet().EraserID)
- window->GetXTablet().CommonData.Active= GHOST_kTabletModeEraser;
+ if (deviceid == window->GetXTablet().StylusID)
+ window->GetXTablet().CommonData.Active = GHOST_kTabletModeStylus;
+ else if (deviceid == window->GetXTablet().EraserID)
+ window->GetXTablet().CommonData.Active = GHOST_kTabletModeEraser;
}
#endif /* WITH_X11_XINPUT */
- void
+void
GHOST_SystemX11::processEvent(XEvent *xe)
{
- GHOST_WindowX11 * window = findGhostWindow(xe->xany.window);
- GHOST_Event * g_event = NULL;
+ GHOST_WindowX11 *window = findGhostWindow(xe->xany.window);
+ GHOST_Event *g_event = NULL;
if (!window) {
return;
@@ -459,11 +459,11 @@ GHOST_SystemX11::processEvent(XEvent *xe)
// per read of the event queue.
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowUpdate,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowUpdate,
+ window
+ );
}
break;
}
@@ -479,13 +479,13 @@ GHOST_SystemX11::processEvent(XEvent *xe)
#endif
if (is_tablet == false && window->getCursorGrabModeIsWarp()) {
- GHOST_TInt32 x_new= xme.x_root;
- GHOST_TInt32 y_new= xme.y_root;
+ GHOST_TInt32 x_new = xme.x_root;
+ GHOST_TInt32 y_new = xme.y_root;
GHOST_TInt32 x_accum, y_accum;
GHOST_Rect bounds;
/* fallback to window bounds */
- if(window->getCursorGrabBounds(bounds)==GHOST_kFailure)
+ if (window->getCursorGrabBounds(bounds) == GHOST_kFailure)
window->getClientBounds(bounds);
/* could also clamp to screen bounds
@@ -493,37 +493,38 @@ GHOST_SystemX11::processEvent(XEvent *xe)
bounds.wrapPoint(x_new, y_new, 8); /* offset of one incase blender is at screen bounds */
window->getCursorGrabAccum(x_accum, y_accum);
- if(x_new != xme.x_root || y_new != xme.y_root) {
+ if (x_new != xme.x_root || y_new != xme.y_root) {
if (xme.time > m_last_warp) {
/* when wrapping we don't need to add an event because the
* setCursorPosition call will cause a new event after */
setCursorPosition(x_new, y_new); /* wrap */
window->setCursorGrabAccum(x_accum + (xme.x_root - x_new), y_accum + (xme.y_root - y_new));
m_last_warp = lastEventTime(xme.time);
- } else {
+ }
+ else {
setCursorPosition(x_new, y_new); /* wrap but don't accumulate */
}
}
else {
g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xme.x_root + x_accum,
- xme.y_root + y_accum
- );
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xme.x_root + x_accum,
+ xme.y_root + y_accum
+ );
}
}
else {
g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xme.x_root,
- xme.y_root
- );
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xme.x_root,
+ xme.y_root
+ );
}
break;
}
@@ -532,13 +533,13 @@ GHOST_SystemX11::processEvent(XEvent *xe)
case KeyRelease:
{
XKeyEvent *xke = &(xe->xkey);
- KeySym key_sym = XLookupKeysym(xke,0);
+ KeySym key_sym = XLookupKeysym(xke, 0);
char ascii;
char utf8_buf[6]; /* 6 is enough for a utf8 char */
GHOST_TKey gkey = convertXKey(key_sym);
GHOST_TEventType type = (xke->type == KeyPress) ?
- GHOST_kEventKeyDown : GHOST_kEventKeyUp;
+ GHOST_kEventKeyDown : GHOST_kEventKeyUp;
if (!XLookupString(xke, &ascii, 1, NULL, NULL)) {
ascii = '\0';
@@ -551,8 +552,8 @@ GHOST_SystemX11::processEvent(XEvent *xe)
int len;
/* use utf8 because its not locale depentant, from xorg docs */
- if (!(len= Xutf8LookupString(window->getX11_XIC(), xke, utf8_buf, sizeof(utf8_buf), &key_sym, &status))) {
- utf8_buf[0]= '\0';
+ if (!(len = Xutf8LookupString(window->getX11_XIC(), xke, utf8_buf, sizeof(utf8_buf), &key_sym, &status))) {
+ utf8_buf[0] = '\0';
}
if ((status == XLookupChars || status == XLookupBoth)) {
@@ -560,7 +561,7 @@ GHOST_SystemX11::processEvent(XEvent *xe)
/* do nothing for now, this is valid utf8 */
}
else {
- utf8_buf[0]= '\0';
+ utf8_buf[0] = '\0';
}
}
else if (status == XLookupKeySym) {
@@ -569,33 +570,33 @@ GHOST_SystemX11::processEvent(XEvent *xe)
}
else {
printf("Bad keycode lookup. Keysym 0x%x Status: %s\n",
- (unsigned int) key_sym,
- (status == XBufferOverflow ? "BufferOverflow" :
- status == XLookupNone ? "XLookupNone" :
- status == XLookupKeySym ? "XLookupKeySym" :
- "Unknown status"));
+ (unsigned int) key_sym,
+ (status == XBufferOverflow ? "BufferOverflow" :
+ status == XLookupNone ? "XLookupNone" :
+ status == XLookupKeySym ? "XLookupKeySym" :
+ "Unknown status"));
printf("'%.*s' %p %p\n", len, utf8_buf, window->getX11_XIC(), m_xim);
}
}
else {
- utf8_buf[0]= '\0';
+ utf8_buf[0] = '\0';
}
#else
- utf8_buf[0]= '\0';
+ utf8_buf[0] = '\0';
#endif
g_event = new
- GHOST_EventKey(
- getMilliSeconds(),
- type,
- window,
- gkey,
- ascii,
+ GHOST_EventKey(
+ getMilliSeconds(),
+ type,
+ window,
+ gkey,
+ ascii,
utf8_buf
- );
+ );
- break;
+ break;
}
case ButtonPress:
@@ -604,59 +605,59 @@ GHOST_SystemX11::processEvent(XEvent *xe)
XButtonEvent & xbe = xe->xbutton;
GHOST_TButtonMask gbmask = GHOST_kButtonMaskLeft;
GHOST_TEventType type = (xbe.type == ButtonPress) ?
- GHOST_kEventButtonDown : GHOST_kEventButtonUp;
+ GHOST_kEventButtonDown : GHOST_kEventButtonUp;
/* process wheel mouse events and break, only pass on press events */
- if(xbe.button == Button4) {
- if(xbe.type == ButtonPress)
+ if (xbe.button == Button4) {
+ if (xbe.type == ButtonPress)
g_event = new GHOST_EventWheel(getMilliSeconds(), window, 1);
break;
}
- else if(xbe.button == Button5) {
- if(xbe.type == ButtonPress)
+ else if (xbe.button == Button5) {
+ if (xbe.type == ButtonPress)
g_event = new GHOST_EventWheel(getMilliSeconds(), window, -1);
break;
}
/* process rest of normal mouse buttons */
- if(xbe.button == Button1)
+ if (xbe.button == Button1)
gbmask = GHOST_kButtonMaskLeft;
- else if(xbe.button == Button2)
+ else if (xbe.button == Button2)
gbmask = GHOST_kButtonMaskMiddle;
- else if(xbe.button == Button3)
+ else if (xbe.button == Button3)
gbmask = GHOST_kButtonMaskRight;
/* It seems events 6 and 7 are for horizontal scrolling.
- * you can re-order button mapping like this... (swaps 6,7 with 8,9)
- * xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"
- */
- else if(xbe.button == 8)
+ * you can re-order button mapping like this... (swaps 6,7 with 8,9)
+ * xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"
+ */
+ else if (xbe.button == 8)
gbmask = GHOST_kButtonMaskButton4;
- else if(xbe.button == 9)
+ else if (xbe.button == 9)
gbmask = GHOST_kButtonMaskButton5;
else
break;
g_event = new
- GHOST_EventButton(
- getMilliSeconds(),
- type,
- window,
- gbmask
- );
+ GHOST_EventButton(
+ getMilliSeconds(),
+ type,
+ window,
+ gbmask
+ );
break;
}
- // change of size, border, layer etc.
+ // change of size, border, layer etc.
case ConfigureNotify:
{
/* XConfigureEvent & xce = xe->xconfigure; */
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowSize,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowSize,
+ window
+ );
break;
}
@@ -672,14 +673,14 @@ GHOST_SystemX11::processEvent(XEvent *xe)
// out.
GHOST_TEventType gtype = (xfe.type == FocusIn) ?
- GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate;
+ GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate;
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- gtype,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ gtype,
+ window
+ );
break;
}
@@ -689,11 +690,11 @@ GHOST_SystemX11::processEvent(XEvent *xe)
if (((Atom)xcme.data.l[0]) == m_delete_window_atom) {
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowClose,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowClose,
+ window
+ );
}
else if (((Atom)xcme.data.l[0]) == m_wm_take_focus) {
XWindowAttributes attr;
@@ -718,7 +719,8 @@ GHOST_SystemX11::processEvent(XEvent *xe)
}
}
}
- } else {
+ }
+ else {
#ifdef WITH_XDND
/* try to handle drag event (if there's no such events, GHOST_HandleClientMessage will return zero) */
if (window->getDropTarget()->GHOST_HandleClientMessage(xe) == false) {
@@ -735,8 +737,8 @@ GHOST_SystemX11::processEvent(XEvent *xe)
case DestroyNotify:
::exit(-1);
// We're not interested in the following things.(yet...)
- case NoExpose :
- case GraphicsExpose :
+ case NoExpose:
+ case GraphicsExpose:
break;
case EnterNotify:
@@ -748,17 +750,17 @@ GHOST_SystemX11::processEvent(XEvent *xe)
we only do moves when the crossing mode is 'normal'
(really crossing between windows) since some windowmanagers
also send grab/ungrab crossings for mousewheel events.
- */
+ */
XCrossingEvent &xce = xe->xcrossing;
- if( xce.mode == NotifyNormal ) {
+ if (xce.mode == NotifyNormal) {
g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xce.x_root,
- xce.y_root
- );
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xce.x_root,
+ xce.y_root
+ );
}
// printf("X: %s window %d\n", xce.type == EnterNotify ? "entering" : "leaving", (int) xce.window);
@@ -785,7 +787,7 @@ GHOST_SystemX11::processEvent(XEvent *xe)
* Now we are sure that the window is
* mapped, so only need change the state.
*/
- window->setState (window->m_post_state);
+ window->setState(window->m_post_state);
window->m_post_init = False;
}
break;
@@ -820,15 +822,17 @@ GHOST_SystemX11::processEvent(XEvent *xe)
nxe.xselection.time = xse->time;
/*Check to see if the requestor is asking for String*/
- if(xse->target == utf8_string || xse->target == string || xse->target == compound_text || xse->target == c_string) {
+ if (xse->target == utf8_string || xse->target == string || xse->target == compound_text || xse->target == c_string) {
if (xse->selection == XInternAtom(m_display, "PRIMARY", False)) {
XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 8, PropModeReplace,
- (unsigned char*)txt_select_buffer, strlen(txt_select_buffer));
- } else if (xse->selection == XInternAtom(m_display, "CLIPBOARD", False)) {
+ (unsigned char *)txt_select_buffer, strlen(txt_select_buffer));
+ }
+ else if (xse->selection == XInternAtom(m_display, "CLIPBOARD", False)) {
XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 8, PropModeReplace,
- (unsigned char*)txt_cut_buffer, strlen(txt_cut_buffer));
+ (unsigned char *)txt_cut_buffer, strlen(txt_cut_buffer));
}
- } else if (xse->target == target) {
+ }
+ else if (xse->target == target) {
Atom alist[5];
alist[0] = target;
alist[1] = utf8_string;
@@ -836,9 +840,10 @@ GHOST_SystemX11::processEvent(XEvent *xe)
alist[3] = compound_text;
alist[4] = c_string;
XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 32, PropModeReplace,
- (unsigned char*)alist, 5);
+ (unsigned char *)alist, 5);
XFlush(m_display);
- } else {
+ }
+ else {
//Change property to None because we do not support anything but STRING
nxe.xselection.property = None;
}
@@ -851,33 +856,33 @@ GHOST_SystemX11::processEvent(XEvent *xe)
default: {
#ifdef WITH_X11_XINPUT
- if(xe->type == window->GetXTablet().MotionEvent)
+ if (xe->type == window->GetXTablet().MotionEvent)
{
- XDeviceMotionEvent* data = (XDeviceMotionEvent*)xe;
+ XDeviceMotionEvent *data = (XDeviceMotionEvent *)xe;
/* stroke might begin without leading ProxyIn event,
* this happens when window is opened when stylus is already hovering
* around tablet surface */
setTabletMode(window, data->deviceid);
- window->GetXTablet().CommonData.Pressure=
- data->axis_data[2]/((float)window->GetXTablet().PressureLevels);
+ window->GetXTablet().CommonData.Pressure =
+ data->axis_data[2] / ((float)window->GetXTablet().PressureLevels);
- /* the (short) cast and the &0xffff is bizarre and unexplained anywhere,
- * but I got garbage data without it. Found it in the xidump.c source --matt */
- window->GetXTablet().CommonData.Xtilt=
- (short)(data->axis_data[3]&0xffff)/((float)window->GetXTablet().XtiltLevels);
- window->GetXTablet().CommonData.Ytilt=
- (short)(data->axis_data[4]&0xffff)/((float)window->GetXTablet().YtiltLevels);
+ /* the (short) cast and the &0xffff is bizarre and unexplained anywhere,
+ * but I got garbage data without it. Found it in the xidump.c source --matt */
+ window->GetXTablet().CommonData.Xtilt =
+ (short)(data->axis_data[3] & 0xffff) / ((float)window->GetXTablet().XtiltLevels);
+ window->GetXTablet().CommonData.Ytilt =
+ (short)(data->axis_data[4] & 0xffff) / ((float)window->GetXTablet().YtiltLevels);
}
- else if(xe->type == window->GetXTablet().ProxInEvent)
+ else if (xe->type == window->GetXTablet().ProxInEvent)
{
- XProximityNotifyEvent* data = (XProximityNotifyEvent*)xe;
+ XProximityNotifyEvent *data = (XProximityNotifyEvent *)xe;
setTabletMode(window, data->deviceid);
}
- else if(xe->type == window->GetXTablet().ProxOutEvent)
- window->GetXTablet().CommonData.Active= GHOST_kTabletModeNone;
+ else if (xe->type == window->GetXTablet().ProxOutEvent)
+ window->GetXTablet().CommonData.Active = GHOST_kTabletModeNone;
#endif // WITH_X11_XINPUT
break;
}
@@ -888,29 +893,29 @@ GHOST_SystemX11::processEvent(XEvent *xe)
}
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
getModifierKeys(
- GHOST_ModifierKeys& keys
-) const {
+ GHOST_ModifierKeys& keys) const
+{
// analyse the masks retuned from XQueryPointer.
- memset((void *)m_keyboard_vector,0,sizeof(m_keyboard_vector));
+ memset((void *)m_keyboard_vector, 0, sizeof(m_keyboard_vector));
- XQueryKeymap(m_display,(char *)m_keyboard_vector);
+ XQueryKeymap(m_display, (char *)m_keyboard_vector);
// now translate key symobols into keycodes and
// test with vector.
- const static KeyCode shift_l = XKeysymToKeycode(m_display,XK_Shift_L);
- const static KeyCode shift_r = XKeysymToKeycode(m_display,XK_Shift_R);
- const static KeyCode control_l = XKeysymToKeycode(m_display,XK_Control_L);
- const static KeyCode control_r = XKeysymToKeycode(m_display,XK_Control_R);
- const static KeyCode alt_l = XKeysymToKeycode(m_display,XK_Alt_L);
- const static KeyCode alt_r = XKeysymToKeycode(m_display,XK_Alt_R);
- const static KeyCode super_l = XKeysymToKeycode(m_display,XK_Super_L);
- const static KeyCode super_r = XKeysymToKeycode(m_display,XK_Super_R);
+ const static KeyCode shift_l = XKeysymToKeycode(m_display, XK_Shift_L);
+ const static KeyCode shift_r = XKeysymToKeycode(m_display, XK_Shift_R);
+ const static KeyCode control_l = XKeysymToKeycode(m_display, XK_Control_L);
+ const static KeyCode control_r = XKeysymToKeycode(m_display, XK_Control_R);
+ const static KeyCode alt_l = XKeysymToKeycode(m_display, XK_Alt_L);
+ const static KeyCode alt_r = XKeysymToKeycode(m_display, XK_Alt_R);
+ const static KeyCode super_l = XKeysymToKeycode(m_display, XK_Super_L);
+ const static KeyCode super_r = XKeysymToKeycode(m_display, XK_Super_R);
// shift
keys.set(GHOST_kModifierKeyLeftShift, ((m_keyboard_vector[shift_l >> 3] >> (shift_l & 7)) & 1) != 0);
@@ -928,22 +933,21 @@ getModifierKeys(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
getButtons(
- GHOST_Buttons& buttons
-) const {
-
+ GHOST_Buttons& buttons) const
+{
Window root_return, child_return;
- int rx,ry,wx,wy;
+ int rx, ry, wx, wy;
unsigned int mask_return;
if (XQueryPointer(m_display,
- RootWindow(m_display,DefaultScreen(m_display)),
+ RootWindow(m_display, DefaultScreen(m_display)),
&root_return,
&child_return,
- &rx,&ry,
- &wx,&wy,
+ &rx, &ry,
+ &wx, &wy,
&mask_return) == True)
{
buttons.set(GHOST_kButtonMaskLeft, (mask_return & Button1Mask) != 0);
@@ -958,28 +962,29 @@ getButtons(
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
getCursorPosition(
- GHOST_TInt32& x,
- GHOST_TInt32& y
-) const {
+ GHOST_TInt32& x,
+ GHOST_TInt32& y) const
+{
Window root_return, child_return;
- int rx,ry,wx,wy;
+ int rx, ry, wx, wy;
unsigned int mask_return;
if (XQueryPointer(
- m_display,
- RootWindow(m_display,DefaultScreen(m_display)),
- &root_return,
- &child_return,
- &rx,&ry,
- &wx,&wy,
- &mask_return
- ) == False) {
+ m_display,
+ RootWindow(m_display, DefaultScreen(m_display)),
+ &root_return,
+ &child_return,
+ &rx, &ry,
+ &wx, &wy,
+ &mask_return
+ ) == False) {
return GHOST_kFailure;
- } else {
+ }
+ else {
x = rx;
y = ry;
}
@@ -987,60 +992,58 @@ getCursorPosition(
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
setCursorPosition(
- GHOST_TInt32 x,
- GHOST_TInt32 y
-) {
+ GHOST_TInt32 x,
+ GHOST_TInt32 y
+ ) {
// This is a brute force move in screen coordinates
// XWarpPointer does relative moves so first determine the
// current pointer position.
- int cx,cy;
- if (getCursorPosition(cx,cy) == GHOST_kFailure) {
+ int cx, cy;
+ if (getCursorPosition(cx, cy) == GHOST_kFailure) {
return GHOST_kFailure;
}
- int relx = x-cx;
- int rely = y-cy;
+ int relx = x - cx;
+ int rely = y - cy;
- XWarpPointer(m_display,None,None,0,0,0,0,relx,rely);
+ XWarpPointer(m_display, None, None, 0, 0, 0, 0, relx, rely);
XSync(m_display, 0); /* Sync to process all requests */
return GHOST_kSuccess;
}
- void
+void
GHOST_SystemX11::
addDirtyWindow(
- GHOST_WindowX11 * bad_wind
-){
-
+ GHOST_WindowX11 *bad_wind)
+{
GHOST_ASSERT((bad_wind != NULL), "addDirtyWindow() NULL ptr trapped (window)");
m_dirty_windows.push_back(bad_wind);
}
- bool
+bool
GHOST_SystemX11::
-generateWindowExposeEvents(
-){
-
+generateWindowExposeEvents()
+{
vector<GHOST_WindowX11 *>::iterator w_start = m_dirty_windows.begin();
vector<GHOST_WindowX11 *>::const_iterator w_end = m_dirty_windows.end();
bool anyProcessed = false;
- for (;w_start != w_end; ++w_start) {
- GHOST_Event * g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowUpdate,
- *w_start
- );
+ for (; w_start != w_end; ++w_start) {
+ GHOST_Event *g_event = new
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowUpdate,
+ *w_start
+ );
(*w_start)->validate();
@@ -1054,7 +1057,7 @@ generateWindowExposeEvents(
return anyProcessed;
}
-#define GXMAP(k,x,y) case x: k = y; break;
+#define GXMAP(k, x, y) case x: k = y; break
static GHOST_TKey
convertXKey(KeySym key)
@@ -1062,12 +1065,15 @@ convertXKey(KeySym key)
GHOST_TKey type;
if ((key >= XK_A) && (key <= XK_Z)) {
- type = GHOST_TKey( key - XK_A + int(GHOST_kKeyA));
- } else if ((key >= XK_a) && (key <= XK_z)) {
+ type = GHOST_TKey(key - XK_A + int(GHOST_kKeyA));
+ }
+ else if ((key >= XK_a) && (key <= XK_z)) {
type = GHOST_TKey(key - XK_a + int(GHOST_kKeyA));
- } else if ((key >= XK_0) && (key <= XK_9)) {
+ }
+ else if ((key >= XK_0) && (key <= XK_9)) {
type = GHOST_TKey(key - XK_0 + int(GHOST_kKey0));
- } else if ((key >= XK_F1) && (key <= XK_F24)) {
+ }
+ else if ((key >= XK_F1) && (key <= XK_F24)) {
type = GHOST_TKey(key - XK_F1 + int(GHOST_kKeyF1));
#if defined(__sun) || defined(__sun__)
/* This is a bit of a hack, but it looks like sun
@@ -1076,121 +1082,124 @@ convertXKey(KeySym key)
following link has documentation on it:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4734408
also from /usr/include/X11/Sunkeysym.h
-#define SunXK_F36 0x1005FF10 // Labeled F11
-#define SunXK_F37 0x1005FF11 // Labeled F12
+ #define SunXK_F36 0x1005FF10 // Labeled F11
+ #define SunXK_F37 0x1005FF11 // Labeled F12
- mein@cs.umn.edu
+ mein@cs.umn.edu
*/
- } else if (key == 268828432) {
+ }
+ else if (key == 268828432) {
type = GHOST_kKeyF11;
- } else if (key == 268828433) {
+ }
+ else if (key == 268828433) {
type = GHOST_kKeyF12;
#endif
- } else {
- switch(key) {
- GXMAP(type,XK_BackSpace, GHOST_kKeyBackSpace);
- GXMAP(type,XK_Tab, GHOST_kKeyTab);
- GXMAP(type,XK_Return, GHOST_kKeyEnter);
- GXMAP(type,XK_Escape, GHOST_kKeyEsc);
- GXMAP(type,XK_space, GHOST_kKeySpace);
-
- GXMAP(type,XK_Linefeed, GHOST_kKeyLinefeed);
- GXMAP(type,XK_semicolon, GHOST_kKeySemicolon);
- GXMAP(type,XK_period, GHOST_kKeyPeriod);
- GXMAP(type,XK_comma, GHOST_kKeyComma);
- GXMAP(type,XK_quoteright, GHOST_kKeyQuote);
- GXMAP(type,XK_quoteleft, GHOST_kKeyAccentGrave);
- GXMAP(type,XK_minus, GHOST_kKeyMinus);
- GXMAP(type,XK_slash, GHOST_kKeySlash);
- GXMAP(type,XK_backslash, GHOST_kKeyBackslash);
- GXMAP(type,XK_equal, GHOST_kKeyEqual);
- GXMAP(type,XK_bracketleft, GHOST_kKeyLeftBracket);
- GXMAP(type,XK_bracketright, GHOST_kKeyRightBracket);
- GXMAP(type,XK_Pause, GHOST_kKeyPause);
-
- GXMAP(type,XK_Shift_L, GHOST_kKeyLeftShift);
- GXMAP(type,XK_Shift_R, GHOST_kKeyRightShift);
- GXMAP(type,XK_Control_L, GHOST_kKeyLeftControl);
- GXMAP(type,XK_Control_R, GHOST_kKeyRightControl);
- GXMAP(type,XK_Alt_L, GHOST_kKeyLeftAlt);
- GXMAP(type,XK_Alt_R, GHOST_kKeyRightAlt);
- GXMAP(type,XK_Super_L, GHOST_kKeyOS);
- GXMAP(type,XK_Super_R, GHOST_kKeyOS);
-
- GXMAP(type,XK_Insert, GHOST_kKeyInsert);
- GXMAP(type,XK_Delete, GHOST_kKeyDelete);
- GXMAP(type,XK_Home, GHOST_kKeyHome);
- GXMAP(type,XK_End, GHOST_kKeyEnd);
- GXMAP(type,XK_Page_Up, GHOST_kKeyUpPage);
- GXMAP(type,XK_Page_Down, GHOST_kKeyDownPage);
-
- GXMAP(type,XK_Left, GHOST_kKeyLeftArrow);
- GXMAP(type,XK_Right, GHOST_kKeyRightArrow);
- GXMAP(type,XK_Up, GHOST_kKeyUpArrow);
- GXMAP(type,XK_Down, GHOST_kKeyDownArrow);
-
- GXMAP(type,XK_Caps_Lock, GHOST_kKeyCapsLock);
- GXMAP(type,XK_Scroll_Lock, GHOST_kKeyScrollLock);
- GXMAP(type,XK_Num_Lock, GHOST_kKeyNumLock);
-
- /* keypad events */
-
- GXMAP(type,XK_KP_0, GHOST_kKeyNumpad0);
- GXMAP(type,XK_KP_1, GHOST_kKeyNumpad1);
- GXMAP(type,XK_KP_2, GHOST_kKeyNumpad2);
- GXMAP(type,XK_KP_3, GHOST_kKeyNumpad3);
- GXMAP(type,XK_KP_4, GHOST_kKeyNumpad4);
- GXMAP(type,XK_KP_5, GHOST_kKeyNumpad5);
- GXMAP(type,XK_KP_6, GHOST_kKeyNumpad6);
- GXMAP(type,XK_KP_7, GHOST_kKeyNumpad7);
- GXMAP(type,XK_KP_8, GHOST_kKeyNumpad8);
- GXMAP(type,XK_KP_9, GHOST_kKeyNumpad9);
- GXMAP(type,XK_KP_Decimal, GHOST_kKeyNumpadPeriod);
-
- GXMAP(type,XK_KP_Insert, GHOST_kKeyNumpad0);
- GXMAP(type,XK_KP_End, GHOST_kKeyNumpad1);
- GXMAP(type,XK_KP_Down, GHOST_kKeyNumpad2);
- GXMAP(type,XK_KP_Page_Down, GHOST_kKeyNumpad3);
- GXMAP(type,XK_KP_Left, GHOST_kKeyNumpad4);
- GXMAP(type,XK_KP_Begin, GHOST_kKeyNumpad5);
- GXMAP(type,XK_KP_Right, GHOST_kKeyNumpad6);
- GXMAP(type,XK_KP_Home, GHOST_kKeyNumpad7);
- GXMAP(type,XK_KP_Up, GHOST_kKeyNumpad8);
- GXMAP(type,XK_KP_Page_Up, GHOST_kKeyNumpad9);
- GXMAP(type,XK_KP_Delete, GHOST_kKeyNumpadPeriod);
-
- GXMAP(type,XK_KP_Enter, GHOST_kKeyNumpadEnter);
- GXMAP(type,XK_KP_Add, GHOST_kKeyNumpadPlus);
- GXMAP(type,XK_KP_Subtract, GHOST_kKeyNumpadMinus);
- GXMAP(type,XK_KP_Multiply, GHOST_kKeyNumpadAsterisk);
- GXMAP(type,XK_KP_Divide, GHOST_kKeyNumpadSlash);
+ }
+ else {
+ switch (key) {
+ GXMAP(type, XK_BackSpace, GHOST_kKeyBackSpace);
+ GXMAP(type, XK_Tab, GHOST_kKeyTab);
+ GXMAP(type, XK_Return, GHOST_kKeyEnter);
+ GXMAP(type, XK_Escape, GHOST_kKeyEsc);
+ GXMAP(type, XK_space, GHOST_kKeySpace);
+
+ GXMAP(type, XK_Linefeed, GHOST_kKeyLinefeed);
+ GXMAP(type, XK_semicolon, GHOST_kKeySemicolon);
+ GXMAP(type, XK_period, GHOST_kKeyPeriod);
+ GXMAP(type, XK_comma, GHOST_kKeyComma);
+ GXMAP(type, XK_quoteright, GHOST_kKeyQuote);
+ GXMAP(type, XK_quoteleft, GHOST_kKeyAccentGrave);
+ GXMAP(type, XK_minus, GHOST_kKeyMinus);
+ GXMAP(type, XK_slash, GHOST_kKeySlash);
+ GXMAP(type, XK_backslash, GHOST_kKeyBackslash);
+ GXMAP(type, XK_equal, GHOST_kKeyEqual);
+ GXMAP(type, XK_bracketleft, GHOST_kKeyLeftBracket);
+ GXMAP(type, XK_bracketright, GHOST_kKeyRightBracket);
+ GXMAP(type, XK_Pause, GHOST_kKeyPause);
+
+ GXMAP(type, XK_Shift_L, GHOST_kKeyLeftShift);
+ GXMAP(type, XK_Shift_R, GHOST_kKeyRightShift);
+ GXMAP(type, XK_Control_L, GHOST_kKeyLeftControl);
+ GXMAP(type, XK_Control_R, GHOST_kKeyRightControl);
+ GXMAP(type, XK_Alt_L, GHOST_kKeyLeftAlt);
+ GXMAP(type, XK_Alt_R, GHOST_kKeyRightAlt);
+ GXMAP(type, XK_Super_L, GHOST_kKeyOS);
+ GXMAP(type, XK_Super_R, GHOST_kKeyOS);
+
+ GXMAP(type, XK_Insert, GHOST_kKeyInsert);
+ GXMAP(type, XK_Delete, GHOST_kKeyDelete);
+ GXMAP(type, XK_Home, GHOST_kKeyHome);
+ GXMAP(type, XK_End, GHOST_kKeyEnd);
+ GXMAP(type, XK_Page_Up, GHOST_kKeyUpPage);
+ GXMAP(type, XK_Page_Down, GHOST_kKeyDownPage);
+
+ GXMAP(type, XK_Left, GHOST_kKeyLeftArrow);
+ GXMAP(type, XK_Right, GHOST_kKeyRightArrow);
+ GXMAP(type, XK_Up, GHOST_kKeyUpArrow);
+ GXMAP(type, XK_Down, GHOST_kKeyDownArrow);
+
+ GXMAP(type, XK_Caps_Lock, GHOST_kKeyCapsLock);
+ GXMAP(type, XK_Scroll_Lock, GHOST_kKeyScrollLock);
+ GXMAP(type, XK_Num_Lock, GHOST_kKeyNumLock);
+
+ /* keypad events */
+
+ GXMAP(type, XK_KP_0, GHOST_kKeyNumpad0);
+ GXMAP(type, XK_KP_1, GHOST_kKeyNumpad1);
+ GXMAP(type, XK_KP_2, GHOST_kKeyNumpad2);
+ GXMAP(type, XK_KP_3, GHOST_kKeyNumpad3);
+ GXMAP(type, XK_KP_4, GHOST_kKeyNumpad4);
+ GXMAP(type, XK_KP_5, GHOST_kKeyNumpad5);
+ GXMAP(type, XK_KP_6, GHOST_kKeyNumpad6);
+ GXMAP(type, XK_KP_7, GHOST_kKeyNumpad7);
+ GXMAP(type, XK_KP_8, GHOST_kKeyNumpad8);
+ GXMAP(type, XK_KP_9, GHOST_kKeyNumpad9);
+ GXMAP(type, XK_KP_Decimal, GHOST_kKeyNumpadPeriod);
+
+ GXMAP(type, XK_KP_Insert, GHOST_kKeyNumpad0);
+ GXMAP(type, XK_KP_End, GHOST_kKeyNumpad1);
+ GXMAP(type, XK_KP_Down, GHOST_kKeyNumpad2);
+ GXMAP(type, XK_KP_Page_Down, GHOST_kKeyNumpad3);
+ GXMAP(type, XK_KP_Left, GHOST_kKeyNumpad4);
+ GXMAP(type, XK_KP_Begin, GHOST_kKeyNumpad5);
+ GXMAP(type, XK_KP_Right, GHOST_kKeyNumpad6);
+ GXMAP(type, XK_KP_Home, GHOST_kKeyNumpad7);
+ GXMAP(type, XK_KP_Up, GHOST_kKeyNumpad8);
+ GXMAP(type, XK_KP_Page_Up, GHOST_kKeyNumpad9);
+ GXMAP(type, XK_KP_Delete, GHOST_kKeyNumpadPeriod);
+
+ GXMAP(type, XK_KP_Enter, GHOST_kKeyNumpadEnter);
+ GXMAP(type, XK_KP_Add, GHOST_kKeyNumpadPlus);
+ GXMAP(type, XK_KP_Subtract, GHOST_kKeyNumpadMinus);
+ GXMAP(type, XK_KP_Multiply, GHOST_kKeyNumpadAsterisk);
+ GXMAP(type, XK_KP_Divide, GHOST_kKeyNumpadSlash);
/* Media keys in some keyboards and laptops with XFree86/Xorg */
#ifdef WITH_XF86KEYSYM
- GXMAP(type,XF86XK_AudioPlay, GHOST_kKeyMediaPlay);
- GXMAP(type,XF86XK_AudioStop, GHOST_kKeyMediaStop);
- GXMAP(type,XF86XK_AudioPrev, GHOST_kKeyMediaFirst);
- GXMAP(type,XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
- GXMAP(type,XF86XK_AudioNext, GHOST_kKeyMediaLast);
+ GXMAP(type, XF86XK_AudioPlay, GHOST_kKeyMediaPlay);
+ GXMAP(type, XF86XK_AudioStop, GHOST_kKeyMediaStop);
+ GXMAP(type, XF86XK_AudioPrev, GHOST_kKeyMediaFirst);
+ GXMAP(type, XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
+ GXMAP(type, XF86XK_AudioNext, GHOST_kKeyMediaLast);
#ifdef XF86XK_AudioForward /* Debian lenny's XF86keysym.h has no XF86XK_AudioForward define */
- GXMAP(type,XF86XK_AudioForward, GHOST_kKeyMediaLast);
+ GXMAP(type, XF86XK_AudioForward, GHOST_kKeyMediaLast);
#endif
#endif
- /* some extra sun cruft (NICE KEYBOARD!) */
+ /* some extra sun cruft (NICE KEYBOARD!) */
#ifdef __sun__
- GXMAP(type,0xffde, GHOST_kKeyNumpad1);
- GXMAP(type,0xffe0, GHOST_kKeyNumpad3);
- GXMAP(type,0xffdc, GHOST_kKeyNumpad5);
- GXMAP(type,0xffd8, GHOST_kKeyNumpad7);
- GXMAP(type,0xffda, GHOST_kKeyNumpad9);
-
- GXMAP(type,0xffd6, GHOST_kKeyNumpadSlash);
- GXMAP(type,0xffd7, GHOST_kKeyNumpadAsterisk);
+ GXMAP(type, 0xffde, GHOST_kKeyNumpad1);
+ GXMAP(type, 0xffe0, GHOST_kKeyNumpad3);
+ GXMAP(type, 0xffdc, GHOST_kKeyNumpad5);
+ GXMAP(type, 0xffd8, GHOST_kKeyNumpad7);
+ GXMAP(type, 0xffda, GHOST_kKeyNumpad9);
+
+ GXMAP(type, 0xffd6, GHOST_kKeyNumpadSlash);
+ GXMAP(type, 0xffd7, GHOST_kKeyNumpadAsterisk);
#endif
- default :
+ default:
type = GHOST_kKeyUnknown;
break;
}
@@ -1203,28 +1212,28 @@ convertXKey(KeySym key)
/* from xclip.c xcout() v0.11 */
-#define XCLIB_XCOUT_NONE 0 /* no context */
-#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */
-#define XCLIB_XCOUT_INCR 2 /* in an incr loop */
-#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */
-#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */
-#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */
-#define XCLIB_XCOUT_FALLBACK_TEXT 6
+#define XCLIB_XCOUT_NONE 0 /* no context */
+#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */
+#define XCLIB_XCOUT_INCR 2 /* in an incr loop */
+#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */
+#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */
+#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */
+#define XCLIB_XCOUT_FALLBACK_TEXT 6
// Retrieves the contents of a selections.
void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
- Atom sel, Atom target, unsigned char **txt,
- unsigned long *len, unsigned int *context) const
+ Atom sel, Atom target, unsigned char **txt,
+ unsigned long *len, unsigned int *context) const
{
Atom pty_type;
int pty_format;
unsigned char *buffer;
unsigned long pty_size, pty_items;
- unsigned char *ltxt= *txt;
+ unsigned char *ltxt = *txt;
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
Window win = window->getXWindow();
switch (*context) {
@@ -1246,22 +1255,22 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
return;
if (target == m_utf8_string && evt.xselection.property == None) {
- *context= XCLIB_XCOUT_FALLBACK_UTF8;
+ *context = XCLIB_XCOUT_FALLBACK_UTF8;
return;
}
else if (target == m_compound_text && evt.xselection.property == None) {
- *context= XCLIB_XCOUT_FALLBACK_COMP;
+ *context = XCLIB_XCOUT_FALLBACK_COMP;
return;
}
else if (target == m_text && evt.xselection.property == None) {
- *context= XCLIB_XCOUT_FALLBACK_TEXT;
+ *context = XCLIB_XCOUT_FALLBACK_TEXT;
return;
}
// find the size and format of the data in property
XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False,
- AnyPropertyType, &pty_type, &pty_format,
- &pty_items, &pty_size, &buffer);
+ AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, &buffer);
XFree(buffer);
if (pty_type == m_incr) {
@@ -1282,8 +1291,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
// not using INCR mechanism, just read the property
XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size,
- False, AnyPropertyType, &pty_type,
- &pty_format, &pty_items, &pty_size, &buffer);
+ False, AnyPropertyType, &pty_type,
+ &pty_format, &pty_items, &pty_size, &buffer);
// finished with property, delete it
XDeleteProperty(m_display, win, m_xclip_out);
@@ -1320,8 +1329,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
// check size and format of the property
XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False,
- AnyPropertyType, &pty_type, &pty_format,
- &pty_items, &pty_size, (unsigned char **) &buffer);
+ AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, (unsigned char **) &buffer);
if (pty_format != 8) {
// property does not contain text, delete it
@@ -1348,8 +1357,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
// if we have come this far, the propery contains
// text, we know the size.
XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size,
- False, AnyPropertyType, &pty_type, &pty_format,
- &pty_items, &pty_size, (unsigned char **) &buffer);
+ False, AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, (unsigned char **) &buffer);
// allocate memory to accommodate data in *txt
if (*len == 0) {
@@ -1378,37 +1387,37 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
{
Atom sseln;
- Atom target= m_utf8_string;
+ Atom target = m_utf8_string;
Window owner;
// from xclip.c doOut() v0.11
unsigned char *sel_buf;
- unsigned long sel_len= 0;
+ unsigned long sel_len = 0;
XEvent evt;
- unsigned int context= XCLIB_XCOUT_NONE;
+ unsigned int context = XCLIB_XCOUT_NONE;
if (selection == True)
- sseln= m_primary;
+ sseln = m_primary;
else
- sseln= m_clipboard;
+ sseln = m_clipboard;
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
Window win = window->getXWindow();
/* check if we are the owner. */
- owner= XGetSelectionOwner(m_display, sseln);
+ owner = XGetSelectionOwner(m_display, sseln);
if (owner == win) {
if (sseln == m_clipboard) {
- sel_buf= (unsigned char *)malloc(strlen(txt_cut_buffer)+1);
+ sel_buf = (unsigned char *)malloc(strlen(txt_cut_buffer) + 1);
strcpy((char *)sel_buf, txt_cut_buffer);
- return((GHOST_TUns8*)sel_buf);
+ return((GHOST_TUns8 *)sel_buf);
}
else {
- sel_buf= (unsigned char *)malloc(strlen(txt_select_buffer)+1);
+ sel_buf = (unsigned char *)malloc(strlen(txt_select_buffer) + 1);
strcpy((char *)sel_buf, txt_select_buffer);
- return((GHOST_TUns8*)sel_buf);
+ return((GHOST_TUns8 *)sel_buf);
}
}
else if (owner == None)
@@ -1424,20 +1433,20 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
/* fallback is needed. set XA_STRING to target and restart the loop. */
if (context == XCLIB_XCOUT_FALLBACK) {
- context= XCLIB_XCOUT_NONE;
- target= m_string;
+ context = XCLIB_XCOUT_NONE;
+ target = m_string;
continue;
}
else if (context == XCLIB_XCOUT_FALLBACK_UTF8) {
/* utf8 fail, move to compouned text. */
- context= XCLIB_XCOUT_NONE;
- target= m_compound_text;
+ context = XCLIB_XCOUT_NONE;
+ target = m_compound_text;
continue;
}
else if (context == XCLIB_XCOUT_FALLBACK_COMP) {
/* compouned text faile, move to text. */
- context= XCLIB_XCOUT_NONE;
- target= m_text;
+ context = XCLIB_XCOUT_NONE;
+ target = m_text;
continue;
}
@@ -1450,8 +1459,8 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
/* only print the buffer out, and free it, if it's not
* empty
*/
- unsigned char *tmp_data = (unsigned char*) malloc(sel_len+1);
- memcpy((char*)tmp_data, (char*)sel_buf, sel_len);
+ unsigned char *tmp_data = (unsigned char *) malloc(sel_len + 1);
+ memcpy((char *)tmp_data, (char *)sel_buf, sel_len);
tmp_data[sel_len] = '\0';
if (sseln == m_string)
@@ -1459,7 +1468,7 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
else
free(sel_buf);
- return (GHOST_TUns8*)tmp_data;
+ return (GHOST_TUns8 *)tmp_data;
}
return(NULL);
}
@@ -1470,25 +1479,26 @@ void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
m_window = window->getXWindow();
if (buffer) {
if (selection == False) {
XSetSelectionOwner(m_display, m_clipboard, m_window, CurrentTime);
- owner= XGetSelectionOwner(m_display, m_clipboard);
+ owner = XGetSelectionOwner(m_display, m_clipboard);
if (txt_cut_buffer)
- free((void*)txt_cut_buffer);
+ free((void *)txt_cut_buffer);
- txt_cut_buffer = (char*) malloc(strlen(buffer)+1);
+ txt_cut_buffer = (char *) malloc(strlen(buffer) + 1);
strcpy(txt_cut_buffer, buffer);
- } else {
+ }
+ else {
XSetSelectionOwner(m_display, m_primary, m_window, CurrentTime);
- owner= XGetSelectionOwner(m_display, m_primary);
+ owner = XGetSelectionOwner(m_display, m_primary);
if (txt_select_buffer)
- free((void*)txt_select_buffer);
+ free((void *)txt_select_buffer);
- txt_select_buffer = (char*) malloc(strlen(buffer)+1);
+ txt_select_buffer = (char *) malloc(strlen(buffer) + 1);
strcpy(txt_select_buffer, buffer);
}
@@ -1499,16 +1509,16 @@ void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const
#ifdef WITH_XDND
GHOST_TSuccess GHOST_SystemX11::pushDragDropEvent(GHOST_TEventType eventType,
- GHOST_TDragnDropTypes draggedObjectType,
- GHOST_IWindow* window,
- int mouseX, int mouseY,
- void* data)
+ GHOST_TDragnDropTypes draggedObjectType,
+ GHOST_IWindow *window,
+ int mouseX, int mouseY,
+ void *data)
{
- GHOST_SystemX11* system = ((GHOST_SystemX11*)getSystem());
+ GHOST_SystemX11 *system = ((GHOST_SystemX11 *)getSystem());
return system->pushEvent(new GHOST_EventDragnDrop(system->getMilliSeconds(),
- eventType,
- draggedObjectType,
- window,mouseX,mouseY,data)
- );
+ eventType,
+ draggedObjectType,
+ window, mouseX, mouseY, data)
+ );
}
#endif
diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h
index d236c73dabd..fd5a33c02d7 100644
--- a/intern/ghost/intern/GHOST_SystemX11.h
+++ b/intern/ghost/intern/GHOST_SystemX11.h
@@ -63,7 +63,7 @@ public:
*/
GHOST_SystemX11(
- );
+ );
/**
* Destructor.
@@ -71,9 +71,9 @@ public:
virtual ~GHOST_SystemX11();
- GHOST_TSuccess
+ GHOST_TSuccess
init(
- );
+ );
/**
@@ -85,28 +85,28 @@ public:
* Returns the number of milliseconds since the start of the system process.
* @return The number of milliseconds.
*/
- GHOST_TUns64
+ GHOST_TUns64
getMilliSeconds(
- ) const;
+ ) const;
/**
* Returns the number of displays on this system.
* @return The number of displays.
*/
- GHOST_TUns8
+ GHOST_TUns8
getNumDisplays(
- ) const;
+ ) const;
/**
* Returns the dimensions of the main display on this system.
* @return The dimension of the main display.
*/
- void
+ void
getMainDisplayDimensions(
- GHOST_TUns32& width,
- GHOST_TUns32& height
- ) const;
+ GHOST_TUns32& width,
+ GHOST_TUns32& height
+ ) const;
/**
* Create a new window.
@@ -120,22 +120,22 @@ public:
* @param state The state of the window when opened.
* @param type The type of drawing context installed in this window.
* @param stereoVisual Create a stereo visual for quad buffered stereo.
- * @param parentWindow Parent (embedder) window
+ * @param parentWindow Parent (embedder) window
* @return The new window (or 0 if creation failed).
*/
- GHOST_IWindow*
+ GHOST_IWindow *
createWindow(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- const bool stereoVisual,
- const GHOST_TUns16 numOfAASamples = 0,
- const GHOST_TEmbedderWindowID parentWindow = 0
- );
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ GHOST_TDrawingContextType type,
+ const bool stereoVisual,
+ const GHOST_TUns16 numOfAASamples = 0,
+ const GHOST_TEmbedderWindowID parentWindow = 0
+ );
/**
* @section Interface Inherited from GHOST_ISystem
@@ -146,45 +146,45 @@ public:
* @param waitForEvent Flag to wait for an event (or return immediately).
* @return Indication of the presence of events.
*/
- bool
+ bool
processEvents(
- bool waitForEvent
- );
+ bool waitForEvent
+ );
/**
* @section Interface Inherited from GHOST_System
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getCursorPosition(
- GHOST_TInt32& x,
- GHOST_TInt32& y
- ) const;
+ GHOST_TInt32& x,
+ GHOST_TInt32& y
+ ) const;
- GHOST_TSuccess
+ GHOST_TSuccess
setCursorPosition(
- GHOST_TInt32 x,
- GHOST_TInt32 y
- );
+ GHOST_TInt32 x,
+ GHOST_TInt32 y
+ );
/**
* Returns the state of all modifier keys.
* @param keys The state of all modifier keys (true == pressed).
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getModifierKeys(
- GHOST_ModifierKeys& keys
- ) const;
+ GHOST_ModifierKeys& keys
+ ) const;
/**
* Returns the state of the mouse buttons (ouside the message queue).
* @param buttons The state of the buttons.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getButtons(
- GHOST_Buttons& buttons
- ) const;
+ GHOST_Buttons& buttons
+ ) const;
/**
* @section Interface Dirty
@@ -192,26 +192,26 @@ public:
* generate a GHOST window update event on a call to processEvents()
*/
- void
+ void
addDirtyWindow(
- GHOST_WindowX11 * bad_wind
- );
+ GHOST_WindowX11 *bad_wind
+ );
/**
* return a pointer to the X11 display structure
*/
- Display *
+ Display *
getXDisplay(
- ) {
+ ) {
return m_display;
}
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
- XIM
+ XIM
getX11_XIM(
- ) {
+ ) {
return m_xim;
}
#endif
@@ -246,13 +246,15 @@ public:
* @param window The window on which the event occurred
* @return Indication whether the event was handled.
*/
- static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType,GHOST_IWindow* window, int mouseX, int mouseY, void* data);
+ static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_IWindow *window, int mouseX, int mouseY, void *data);
#endif
/**
* @see GHOST_ISystem
*/
- int toggleConsole(int action) { return 0; }
+ int toggleConsole(int action) {
+ return 0;
+ }
/**
* Atom used for ICCCM, WM-spec and Motif.
@@ -282,9 +284,9 @@ public:
Atom m_incr;
Atom m_utf8_string;
-private :
+private:
- Display * m_display;
+ Display *m_display;
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
XIM m_xim;
#endif
@@ -307,24 +309,24 @@ private :
* X11 window xwind
*/
- GHOST_WindowX11 *
+ GHOST_WindowX11 *
findGhostWindow(
- Window xwind
- ) const;
+ Window xwind
+ ) const;
- void
+ void
processEvent(
- XEvent *xe
- );
+ XEvent *xe
+ );
- Time
+ Time
lastEventTime(
- Time default_time
- );
+ Time default_time
+ );
- bool
+ bool
generateWindowExposeEvents(
- );
+ );
};
#endif
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index 85a9163ec91..12990064621 100644
--- a/intern/ghost/intern/GHOST_WindowX11.cpp
+++ b/intern/ghost/intern/GHOST_WindowX11.cpp
@@ -43,7 +43,7 @@
#include <X11/cursorfont.h>
#include <X11/Xatom.h>
-#if defined(__sun__) || defined( __sun ) || defined (__sparc) || defined (__sparc__) || defined (_AIX)
+#if defined(__sun__) || defined(__sun) || defined(__sparc) || defined(__sparc__) || defined(_AIX)
#include <strings.h>
#endif
@@ -79,13 +79,13 @@ typedef struct {
#define _NET_WM_STATE_TOGGLE 2
/*
-import bpy
-I = bpy.data.images['blender.png'] # the 48x48 icon
+ import bpy
+ I = bpy.data.images['blender.png'] # the 48x48 icon
-# Write to a file that can be
-# used within static unsigned char BLENDER_ICON_48x48x24[] = {...}
-f = open('/myicon.txt', 'w')
-for j in xrange(48):
+ # Write to a file that can be
+ # used within static unsigned char BLENDER_ICON_48x48x24[] = {...}
+ f = open('/myicon.txt', 'w')
+ for j in xrange(48):
for k in xrange(48):
v = I.getPixelI(j,47-k)
v.pop()
@@ -93,60 +93,60 @@ for j in xrange(48):
f.write(str(hex(p))+',')
f.write('\n')
-*/
+ */
// See the python script above to regenerate the 48x48 icon within blender
#define BLENDER_ICON_WIDTH 48
#define BLENDER_ICON_HEIGHT 48
static unsigned char BLENDER_ICON_48x48x24[] = {
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x2a,0xd,0xa7,0x5b,0x1f,0xb8,0x66,0x22,0x6c,0x3b,0x14,0x5,0x3,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x6f,0x3a,0x13,0xea,0x7f,0x2c,0xee,0x7e,0x2b,0xee,0x7e,0x2b,0xef,0x85,0x2e,0x5f,0x35,0x12,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x43,0x22,0xb,0xed,0x7f,0x2c,0xed,0x7c,0x2b,0xee,0x7f,0x2c,0xee,0x80,0x2c,0xee,0x80,0x2c,0xa8,0x5f,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x2e,0x16,0x6,0xd0,0x6f,0x26,0xed,0x7b,0x2a,0xed,0x7d,0x2b,0xee,0x7f,0x2c,0xee,0x80,0x2c,0xee,0x82,0x2d,0x9a,0x57,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x17,0xb,0x4,0xb9,0x60,0x21,0xed,0x7a,0x2a,0xed,0x7b,0x2a,0xed,0x7e,0x2b,0xee,0x7f,0x2c,0xee,0x7f,0x2c,0xee,0x86,0x2e,0x4e,0x2b,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1,0x0,0x0,0x96,0x4d,0x19,0xee,0x7a,0x2a,0xed,0x79,0x2a,0xed,0x7c,0x2b,0xed,0x7e,0x2b,0xed,0x7e,0x2b,0xef,0x83,0x2d,0x98,0x55,0x1c,0x3,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x20,0xf,0x5,0x4b,0x27,0xe,0x21,0x11,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x67,0x34,0x11,0xed,0x7b,0x2a,0xec,0x79,0x29,0xed,0x7b,0x2a,0xed,0x7c,0x2b,0xed,0x7d,0x2b,0xee,0x7f,0x2c,0xbb,0x69,0x24,0x11,0x9,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x38,0x1c,0x9,0xc9,0x6d,0x2c,0xf1,0x86,0x36,0xd7,0x79,0x2a,0x22,0x12,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x3b,0x1d,0x9,0xe0,0x74,0x27,0xed,0x7a,0x2a,0xed,0x7c,0x2a,0xed,0x7d,0x2b,0xed,0x7d,0x2b,0xed,0x7d,0x2b,0xdc,0x7a,0x2a,0x1e,0xf,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xa6,0x56,0x23,0xee,0x83,0x3b,0xed,0x7d,0x2c,0xf0,0x85,0x2e,0x75,0x43,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x25,0x12,0x5,0xc9,0x68,0x24,0xed,0x7b,0x2a,0xed,0x7d,0x2b,0xed,0x7e,0x2b,0xee,0x7e,0x2c,0xed,0x7d,0x2b,0xe3,0x7d,0x2b,0x3b,0x1f,0xa,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1c,0xd,0x4,0xd9,0x74,0x35,0xee,0x83,0x3a,0xee,0x7f,0x2b,0xf0,0x86,0x2e,0x83,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xa,0x5,0x1,0xa1,0x54,0x1c,0xee,0x7e,0x2c,0xed,0x7e,0x2c,0xed,0x7f,0x2c,0xed,0x80,0x2c,0xed,0x7f,0x2b,0xec,0x81,0x2d,0x60,0x33,0x11,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7a,0x38,0xee,0x84,0x3a,0xee,0x82,0x2c,0xf0,0x88,0x2f,0x82,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x6f,0x39,0x13,0xef,0x82,0x30,0xed,0x82,0x2f,0xee,0x82,0x2e,0xee,0x82,0x2d,0xee,0x81,0x2c,0xf0,0x83,0x2d,0x88,0x49,0x18,0x3,0x2,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7c,0x3a,0xee,0x86,0x3b,0xee,0x84,0x2d,0xf1,0x8b,0x30,0x82,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0x54,0x2b,0xf,0xe9,0x80,0x30,0xee,0x87,0x33,0xef,0x88,0x32,0xef,0x88,0x30,0xee,0x85,0x2f,0xef,0x83,0x2e,0xae,0x5f,0x20,0x4,0x2,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7e,0x3d,0xef,0x8a,0x3d,0xef,0x88,0x2e,0xf1,0x8d,0x31,0x81,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0x29,0x15,0x7,0xd2,0x74,0x2d,0xf0,0x8b,0x36,0xf0,0x8d,0x35,0xef,0x8d,0x35,0xef,0x8b,0x33,0xef,0x88,0x30,0xc4,0x6d,0x26,0x18,0xc,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe1,0x80,0x3f,0xf0,0x8d,0x3f,0xef,0x8a,0x2f,0xf1,0x8f,0x32,0x81,0x4e,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x3,0x0,0xb1,0x61,0x26,0xf1,0x8e,0x3a,0xf1,0x90,0x3a,0xf0,0x90,0x38,0xf0,0x90,0x36,0xef,0x8e,0x35,0xd3,0x7a,0x2c,0x22,0x11,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x12,0x5,0xe1,0x83,0x42,0xf0,0x90,0x42,0xf0,0x8d,0x30,0xf2,0x92,0x33,0x80,0x4e,0x1b,0x0,0x0,0x0,0x3,0x2,0x0,0x81,0x45,0x1b,0xf1,0x90,0x3e,0xf1,0x94,0x3d,0xf1,0x95,0x3c,0xf0,0x94,0x3b,0xf0,0x92,0x39,0xf0,0x90,0x35,0xd0,0x7b,0x2b,0xc2,0x6e,0x26,0xbe,0x6c,0x25,0x94,0x54,0x1c,0x5b,0x33,0x11,0x1a,0xe,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x25,0x14,0x6,0xe2,0x86,0x44,0xf1,0x94,0x45,0xf0,0x90,0x31,0xf2,0x94,0x33,0x80,0x4e,0x1b,0x0,0x0,0x0,0x60,0x34,0x14,0xed,0x8c,0x3e,0xf0,0x96,0x42,0xf1,0x97,0x40,0xf1,0x95,0x3f,0xf0,0x91,0x39,0xef,0x8e,0x33,0xef,0x8d,0x31,0xf0,0x8d,0x31,0xef,0x8c,0x30,0xef,0x8c,0x30,0xf0,0x8d,0x31,0xf1,0x8e,0x31,0xe1,0x85,0x2e,0x92,0x55,0x1d,0x25,0x14,0x7,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe2,0x89,0x46,0xf2,0x97,0x47,0xf1,0x92,0x32,0xf2,0x96,0x34,0x80,0x4e,0x1a,0x32,0x1a,0xa,0xe3,0x87,0x3d,0xf1,0x97,0x45,0xf1,0x98,0x44,0xf1,0x95,0x41,0xf0,0x90,0x39,0xef,0x8d,0x30,0xef,0x8f,0x31,0xf0,0x90,0x32,0xf0,0x92,0x33,0xf1,0x93,0x33,0xf1,0x94,0x34,0xf1,0x94,0x34,0xf0,0x93,0x34,0xf0,0x91,0x32,0xf1,0x91,0x33,0xe2,0x8a,0x30,0x6b,0x3f,0x15,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe3,0x8b,0x49,0xf2,0x9a,0x49,0xf1,0x93,0x32,0xf2,0x98,0x35,0x8f,0x57,0x1d,0xcf,0x7c,0x38,0xf2,0x99,0x48,0xf1,0x98,0x47,0xf1,0x96,0x44,0xf0,0x90,0x39,0xef,0x8d,0x31,0xf0,0x90,0x31,0xf0,0x92,0x33,0xf1,0x94,0x33,0xf1,0x96,0x35,0xf1,0x98,0x35,0xf1,0x9a,0x36,0xf1,0x9c,0x37,0xf2,0x9d,0x37,0xf2,0x9c,0x37,0xf2,0x99,0x36,0xf0,0x94,0x34,0xf3,0x97,0x35,0x9f,0x60,0x21,0x13,0xb,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe3,0x8d,0x4b,0xf2,0x9b,0x4c,0xf1,0x93,0x32,0xf1,0x97,0x35,0xea,0x98,0x43,0xf2,0x9d,0x4d,0xf1,0x9a,0x4b,0xf1,0x99,0x49,0xf0,0x93,0x3d,0xf0,0x8d,0x30,0xf0,0x90,0x32,0xf0,0x92,0x32,0xf0,0x94,0x34,0xf1,0x96,0x34,0xf1,0x98,0x36,0xf1,0x9a,0x36,0xf2,0x9c,0x38,0xf2,0x9f,0x38,0xf2,0xa2,0x39,0xf3,0xa2,0x39,0xf3,0xa2,0x39,0xf2,0x9f,0x38,0xf1,0x99,0x35,0xf2,0x97,0x35,0xba,0x74,0x29,0x13,0xb,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x8e,0x4d,0xf2,0x9d,0x4e,0xf1,0x93,0x32,0xf2,0x9d,0x3f,0xf3,0xa4,0x54,0xf2,0x9d,0x50,0xf1,0x9b,0x4d,0xf2,0x98,0x46,0xef,0x8d,0x31,0xf0,0x8f,0x31,0xf0,0x91,0x32,0xf0,0x93,0x32,0xf1,0x94,0x32,0xf1,0x95,0x32,0xf1,0x98,0x34,0xf1,0x9b,0x36,0xf2,0x9e,0x38,0xf2,0xa1,0x39,0xf2,0xa4,0x3a,0xf3,0xa6,0x3b,0xf4,0xa8,0x3c,0xf3,0xa7,0x3c,0xf3,0xa4,0x3a,0xf2,0x9c,0x37,0xf2,0x99,0x36,0xa9,0x69,0x25,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x90,0x50,0xf2,0x9e,0x51,0xf1,0x95,0x35,0xf4,0xa6,0x54,0xf3,0xa2,0x55,0xf2,0x9e,0x51,0xf2,0x9c,0x4e,0xf0,0x8f,0x35,0xf0,0x8e,0x31,0xf0,0x90,0x32,0xf3,0xa5,0x56,0xf7,0xc4,0x8e,0xfa,0xd8,0xb6,0xfb,0xdf,0xc2,0xfa,0xd8,0xb2,0xf7,0xc4,0x89,0xf4,0xae,0x59,0xf2,0xa1,0x38,0xf3,0xa5,0x3b,0xf4,0xa8,0x3c,0xf4,0xab,0x3d,0xf4,0xac,0x3e,0xf4,0xab,0x3d,0xf3,0xa7,0x3b,0xf2,0x9e,0x38,0xf4,0x9e,0x38,0x6f,0x45,0x17,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x19,0xc,0x5,0x63,0x36,0x18,0x3f,0x20,0x9,0x2,0x1,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x91,0x52,0xf3,0xa2,0x55,0xf2,0x9d,0x43,0xf4,0xa7,0x5b,0xf3,0xa2,0x57,0xf3,0xa0,0x55,0xf1,0x97,0x43,0xf0,0x8d,0x30,0xf2,0x9d,0x4c,0xfa,0xda,0xbc,0xfe,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfb,0xf6,0xfa,0xdc,0xb5,0xf4,0xae,0x4e,0xf4,0xa9,0x3c,0xf4,0xac,0x3d,0xf4,0xae,0x3f,0xf4,0xaf,0x3f,0xf4,0xad,0x3f,0xf3,0xa8,0x3d,0xf2,0x9d,0x38,0xe2,0x94,0x34,0x23,0x14,0x6,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x11,0x8,0x3,0x9e,0x62,0x39,0xf2,0x91,0x4e,0xe7,0x79,0x29,0x48,0x25,0xc,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0x27,0x13,0x6,0xe5,0x93,0x54,0xf3,0xa7,0x59,0xf4,0xa6,0x56,0xf4,0xa7,0x5d,0xf3,0xa4,0x59,0xf3,0xa2,0x57,0xf1,0x90,0x36,0xf4,0xa7,0x5d,0xfe,0xf4,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf2,0xe3,0xf6,0xb8,0x5f,0xf4,0xac,0x3e,0xf4,0xaf,0x3f,0xf4,0xb1,0x40,0xf4,0xb2,0x40,0xf5,0xaf,0x3f,0xf3,0xa6,0x3c,0xf3,0x9f,0x38,0x90,0x5d,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x3d,0x1f,0xf,0xed,0x9c,0x6a,0xef,0x8b,0x4a,0xec,0x78,0x29,0xe4,0x79,0x2a,0x29,0x15,0x7,0x0,0x0,0x0,0xff,0x0,0xff,0x28,0x14,0x6,0xe6,0x97,0x57,0xf5,0xad,0x63,0xf5,0xac,0x62,0xf4,0xa8,0x5f,0xf4,0xa6,0x5c,0xf3,0xa0,0x53,0xf4,0xa9,0x64,0xfe,0xf8,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xf2,0xf7,0xfa,0xed,0xf4,0xf8,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xed,0xf5,0xb5,0x53,0xf5,0xb0,0x3f,0xf5,0xb3,0x41,0xf5,0xb4,0x42,0xf5,0xb3,0x41,0xf4,0xad,0x3f,0xf3,0xa1,0x39,0xe4,0x98,0x37,0x1d,0x11,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x43,0x23,0x10,0xf2,0xa1,0x70,0xf1,0x99,0x61,0xec,0x78,0x2a,0xed,0x7b,0x2a,0xc4,0x69,0x23,0x15,0xa,0x3,0x0,0x0,0x0,0x1d,0xf,0x5,0xe7,0x9b,0x5b,0xf5,0xb1,0x68,0xf5,0xad,0x65,0xf4,0xaa,0x62,0xf4,0xa8,0x5f,0xf3,0xa4,0x59,0xfd,0xec,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfd,0xfe,0xc3,0xda,0xe9,0x5c,0x9a,0xc5,0x2a,0x7b,0xb4,0x17,0x6f,0xae,0x36,0x81,0xb8,0x91,0xbb,0xd9,0xf0,0xf6,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe7,0xc7,0xf5,0xb2,0x43,0xf6,0xb3,0x41,0xf5,0xb5,0x43,0xf5,0xb6,0x43,0xf5,0xb3,0x42,0xf4,0xa8,0x3c,0xf4,0xa2,0x3a,0x66,0x41,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x22,0x10,0x7,0xd6,0x88,0x5b,0xf2,0xa5,0x76,0xee,0x84,0x3f,0xed,0x7a,0x2a,0xee,0x80,0x2c,0xa5,0x59,0x1e,0x7,0x3,0x1,0x19,0xd,0x4,0xe7,0x9e,0x5e,0xf6,0xb2,0x6b,0xf5,0xae,0x67,0xf5,0xac,0x65,0xf4,0xa9,0x61,0xf8,0xcc,0xa1,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xfe,0xfe,0x97,0xbf,0xdb,0x33,0x83,0xbb,0x24,0x7e,0xb9,0x3,0x6a,0xae,0x0,0x66,0xab,0x0,0x64,0xa9,0x1,0x63,0xa9,0x3c,0x87,0xbd,0xee,0xf5,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xf8,0xc7,0x76,0xf6,0xb4,0x41,0xf5,0xb7,0x43,0xf6,0xb8,0x44,0xf6,0xb6,0x43,0xf5,0xae,0x3f,0xf3,0xa2,0x3a,0xac,0x71,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x52,0x2c,0x16,0xf0,0xa1,0x71,0xf2,0xa2,0x6f,0xed,0x7e,0x32,0xed,0x7e,0x2b,0xef,0x82,0x2d,0x8a,0x49,0x18,0x1b,0xe,0x4,0xe7,0xa2,0x61,0xf6,0xb3,0x6e,0xf6,0xb0,0x6a,0xf5,0xae,0x67,0xf5,0xab,0x64,0xfe,0xf4,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xb4,0xd1,0xe5,0x3e,0x8d,0xc3,0x37,0x8e,0xc5,0x16,0x7a,0xb9,0x0,0x6b,0xaf,0x0,0x68,0xac,0x0,0x65,0xaa,0x0,0x65,0xab,0x0,0x66,0xac,0x4d,0x93,0xc4,0xf8,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe7,0xc5,0xf6,0xb3,0x40,0xf6,0xb7,0x43,0xf6,0xb9,0x44,0xf6,0xb8,0x45,0xf5,0xb2,0x41,0xf3,0xa5,0x3b,0xe2,0x98,0x37,0x3,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x86,0x4e,0x2e,0xf3,0xa6,0x77,0xf1,0x9e,0x66,0xed,0x7e,0x2d,0xee,0x82,0x2c,0xf0,0x85,0x2d,0x7e,0x47,0x17,0xe8,0xa6,0x64,0xf6,0xb5,0x70,0xf6,0xb2,0x6d,0xf5,0xb0,0x6a,0xf7,0xbb,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xfb,0xfd,0x5b,0x9c,0xca,0x42,0x96,0xcb,0x3c,0x93,0xc9,0x9,0x73,0xb6,0x0,0x6b,0xb0,0x0,0x69,0xad,0x0,0x66,0xab,0x0,0x66,0xab,0x0,0x67,0xad,0x4,0x6a,0xaf,0xbb,0xd7,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf8,0xee,0xf6,0xb9,0x4f,0xf6,0xb7,0x44,0xf6,0xba,0x45,0xf6,0xba,0x45,0xf5,0xb5,0x43,0xf4,0xa8,0x3d,0xf5,0xa7,0x3d,0x1b,0xf,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x11,0x8,0x3,0xb0,0x6d,0x45,0xf4,0xaa,0x7b,0xf1,0x9a,0x5b,0xee,0x82,0x2d,0xef,0x86,0x2e,0xee,0x91,0x36,0xf5,0xb5,0x70,0xf6,0xb7,0x73,0xf6,0xb4,0x70,0xf5,0xb1,0x6c,0xf9,0xcc,0xa1,0xff,0xff,0xff,0xff,0xff,0xff,0xd1,0xe2,0xef,0x4b,0x97,0xca,0x47,0x9a,0xce,0x3f,0x95,0xcb,0x3,0x71,0xb5,0x0,0x6c,0xb0,0x0,0x69,0xae,0x0,0x67,0xac,0x0,0x66,0xac,0x0,0x67,0xad,0x0,0x69,0xaf,0x66,0xa5,0xcf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfa,0xf8,0xc3,0x67,0xf6,0xb8,0x44,0xf6,0xba,0x45,0xf6,0xbb,0x46,0xf6,0xb7,0x44,0xf4,0xab,0x3e,0xf8,0xab,0x3f,0x2a,0x19,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x2b,0x15,0x9,0xd4,0x8a,0x5c,0xf4,0xac,0x7c,0xf1,0x98,0x54,0xee,0x85,0x2e,0xf1,0x93,0x38,0xf6,0xba,0x75,0xf6,0xb9,0x75,0xf6,0xb6,0x72,0xf6,0xb3,0x6f,0xfa,0xd5,0xb1,0xff,0xff,0xff,0xff,0xff,0xff,0xb0,0xcf,0xe5,0x51,0x9e,0xcf,0x4b,0x9d,0xd0,0x43,0x97,0xcc,0x3,0x71,0xb5,0x0,0x6d,0xb1,0x0,0x6a,0xae,0x0,0x67,0xac,0x0,0x67,0xad,0x0,0x68,0xae,0x0,0x6a,0xb0,0x3b,0x8c,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf9,0xc9,0x77,0xf6,0xb8,0x44,0xf6,0xba,0x45,0xf6,0xbc,0x46,0xf6,0xb8,0x44,0xf4,0xad,0x3f,0xf8,0xac,0x3f,0x2a,0x1a,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x47,0x26,0x12,0xee,0xa3,0x72,0xf4,0xae,0x7b,0xf1,0x97,0x4e,0xf1,0x92,0x38,0xf6,0xbb,0x78,0xf6,0xbb,0x78,0xf6,0xb7,0x75,0xf6,0xb5,0x71,0xfa,0xd6,0xb2,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xcd,0xe4,0x54,0xa0,0xd1,0x4e,0xa0,0xd1,0x48,0x9b,0xce,0xb,0x76,0xb8,0x0,0x6d,0xb2,0x0,0x6a,0xaf,0x0,0x68,0xad,0x0,0x68,0xad,0x0,0x69,0xae,0x0,0x6b,0xb1,0x36,0x89,0xc1,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xf9,0xc9,0x76,0xf6,0xb9,0x44,0xf6,0xbb,0x46,0xf6,0xbc,0x47,0xf6,0xb9,0x44,0xf4,0xad,0x3f,0xf8,0xad,0x40,0x2a,0x1a,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x70,0x42,0x26,0xf4,0xad,0x7b,0xf5,0xb1,0x7d,0xf3,0x9f,0x50,0xf7,0xbc,0x7b,0xf7,0xbc,0x7b,0xf6,0xb9,0x78,0xf6,0xb7,0x74,0xf9,0xd0,0xa6,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xda,0xeb,0x56,0xa0,0xd0,0x51,0xa1,0xd2,0x4a,0x9c,0xcf,0x20,0x82,0xbf,0x0,0x6e,0xb2,0x0,0x6b,0xb0,0x0,0x68,0xae,0x0,0x68,0xae,0x0,0x69,0xaf,0x0,0x6b,0xb1,0x50,0x98,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf9,0xf8,0xc3,0x66,0xf6,0xb9,0x45,0xf7,0xbb,0x46,0xf6,0xbc,0x47,0xf6,0xb8,0x45,0xf4,0xad,0x3f,0xf8,0xac,0x3f,0x2a,0x19,0x7,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xc,0x5,0x0,0xa5,0x67,0x40,0xf5,0xb1,0x7f,0xf5,0xb7,0x7e,0xf7,0xbf,0x80,0xf7,0xbe,0x7d,0xf7,0xbb,0x7b,0xf6,0xb9,0x78,0xf8,0xc2,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xf5,0xf9,0x5b,0xa0,0xce,0x53,0xa2,0xd2,0x4c,0x9e,0xd0,0x3c,0x93,0xc8,0x6,0x71,0xb4,0x0,0x6c,0xb0,0x0,0x69,0xae,0x0,0x69,0xae,0x0,0x6a,0xaf,0x0,0x6b,0xb1,0x9b,0xc5,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xec,0xf6,0xba,0x4e,0xf6,0xb9,0x45,0xf7,0xbb,0x46,0xf6,0xbc,0x47,0xf5,0xb7,0x44,0xf4,0xab,0x3e,0xf5,0xa8,0x3e,0x18,0xd,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1f,0x10,0x7,0xc9,0x84,0x56,0xf5,0xb5,0x81,0xf7,0xbf,0x82,0xf8,0xc0,0x80,0xf7,0xbd,0x7d,0xf7,0xba,0x7a,0xf6,0xb8,0x77,0xfe,0xf5,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0x9a,0xc2,0xdf,0x55,0x9f,0xd0,0x4e,0x9f,0xd0,0x47,0x99,0xcc,0x2a,0x87,0xc1,0x3,0x6d,0xb1,0x0,0x69,0xaf,0x0,0x6a,0xaf,0x0,0x6a,0xb0,0x27,0x80,0xbc,0xec,0xf4,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe5,0xbf,0xf6,0xb6,0x42,0xf6,0xba,0x46,0xf7,0xbb,0x46,0xf7,0xbb,0x47,0xf5,0xb5,0x43,0xf3,0xa8,0x3d,0xdd,0x97,0x37,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x32,0x1a,0xb,0xe4,0x9d,0x6a,0xf7,0xbd,0x84,0xf8,0xc1,0x83,0xf8,0xbe,0x80,0xf7,0xbd,0x7d,0xf7,0xba,0x79,0xfa,0xd9,0xb6,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xf6,0xfa,0x74,0xac,0xd4,0x4f,0x9b,0xcd,0x48,0x99,0xcc,0x41,0x94,0xc8,0x2c,0x85,0xbe,0xb,0x70,0xb3,0x1,0x6a,0xb0,0xb,0x6e,0xb2,0xbf,0xd9,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xf8,0xc8,0x74,0xf6,0xb7,0x44,0xf6,0xba,0x46,0xf7,0xbb,0x46,0xf7,0xb9,0x46,0xf6,0xb2,0x42,0xf4,0xa7,0x3d,0xa6,0x70,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x2e,0x18,0xef,0xaf,0x78,0xf8,0xc1,0x85,0xf8,0xc0,0x82,0xf7,0xbe,0x7f,0xf7,0xbc,0x7d,0xf7,0xbe,0x81,0xfe,0xf3,0xe8,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xf7,0xfa,0x91,0xbd,0xdb,0x4f,0x97,0xc8,0x40,0x8e,0xc3,0x37,0x8a,0xc0,0x34,0x88,0xbf,0x57,0x9c,0xca,0xcc,0xe1,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe4,0xbf,0xf5,0xb6,0x45,0xf6,0xb8,0x45,0xf6,0xba,0x46,0xf7,0xba,0x46,0xf6,0xb7,0x45,0xf5,0xad,0x3f,0xf4,0xa9,0x40,0x5c,0x3d,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x85,0x55,0x31,0xf7,0xbd,0x84,0xf8,0xc2,0x85,0xf8,0xc0,0x82,0xf7,0xbe,0x80,0xf7,0xbc,0x7d,0xf9,0xcb,0x99,0xfe,0xf9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xfe,0xe5,0xef,0xf6,0xc1,0xda,0xeb,0xba,0xd5,0xe9,0xd8,0xe8,0xf2,0xf9,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf3,0xe4,0xf6,0xb9,0x51,0xf5,0xb5,0x43,0xf6,0xb8,0x45,0xf6,0xb9,0x46,0xf6,0xb8,0x46,0xf6,0xb3,0x43,0xf4,0xa7,0x3e,0xdf,0x9d,0x43,0x17,0xd,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x14,0xa,0x4,0xb2,0x7b,0x4b,0xf8,0xc2,0x88,0xf8,0xc1,0x85,0xf7,0xbf,0x82,0xf7,0xbe,0x80,0xf7,0xbd,0x7d,0xf9,0xca,0x97,0xfe,0xf9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf2,0xe1,0xf7,0xbc,0x5d,0xf5,0xb3,0x42,0xf5,0xb6,0x44,0xf5,0xb7,0x45,0xf6,0xb8,0x45,0xf6,0xb5,0x44,0xf5,0xad,0x40,0xf6,0xae,0x4c,0x88,0x5d,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1d,0x10,0x6,0xdb,0xa0,0x68,0xf8,0xc3,0x88,0xf7,0xc1,0x85,0xf7,0xc0,0x82,0xf7,0xbf,0x80,0xf7,0xbe,0x7e,0xf8,0xc4,0x88,0xfc,0xe6,0xcc,0xfe,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfa,0xf3,0xfa,0xda,0xa9,0xf5,0xb3,0x4a,0xf5,0xb2,0x42,0xf5,0xb3,0x43,0xf5,0xb6,0x44,0xf5,0xb7,0x45,0xf5,0xb5,0x44,0xf5,0xb0,0x42,0xf5,0xad,0x4d,0xdd,0x9e,0x4a,0x19,0xf,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x50,0x33,0x19,0xec,0xb4,0x7a,0xf8,0xc2,0x87,0xf7,0xc1,0x85,0xf7,0xc1,0x83,0xf7,0xc0,0x80,0xf7,0xc0,0x7f,0xf7,0xc0,0x7c,0xf7,0xc2,0x7e,0xf8,0xcc,0x92,0xfa,0xda,0xb0,0xfb,0xdf,0xb9,0xfa,0xd9,0xad,0xf7,0xc8,0x84,0xf5,0xb4,0x54,0xf4,0xad,0x3f,0xf4,0xaf,0x41,0xf5,0xb2,0x42,0xf5,0xb4,0x43,0xf5,0xb5,0x44,0xf5,0xb4,0x44,0xf5,0xb2,0x46,0xf5,0xb2,0x54,0xf5,0xb4,0x5a,0x5e,0x3e,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x71,0x4b,0x29,0xf8,0xc0,0x86,0xf7,0xc3,0x87,0xf7,0xc2,0x85,0xf7,0xc1,0x83,0xf7,0xc2,0x82,0xf7,0xc2,0x7f,0xf7,0xc2,0x7e,0xf6,0xc0,0x76,0xf4,0xb4,0x59,0xf3,0xa8,0x3e,0xf3,0xa7,0x39,0xf3,0xa9,0x3d,0xf4,0xab,0x3e,0xf4,0xad,0x40,0xf4,0xb0,0x41,0xf4,0xb2,0x42,0xf5,0xb2,0x42,0xf5,0xb3,0x45,0xf6,0xb7,0x54,0xf6,0xb7,0x60,0xf6,0xb5,0x5f,0x9d,0x6b,0x31,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x8b,0x5f,0x36,0xf9,0xc1,0x87,0xf7,0xc3,0x88,0xf8,0xc3,0x86,0xf7,0xc3,0x84,0xf8,0xc3,0x81,0xf7,0xc4,0x80,0xf7,0xc4,0x7e,0xf7,0xc4,0x7d,0xf7,0xc3,0x7a,0xf6,0xbd,0x6c,0xf5,0xb7,0x5c,0xf5,0xb5,0x54,0xf5,0xb4,0x50,0xf5,0xb6,0x52,0xf6,0xb9,0x58,0xf6,0xbd,0x62,0xf7,0xbf,0x6a,0xf6,0xba,0x66,0xf6,0xb6,0x63,0xab,0x78,0x39,0xa,0x6,0x2,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x83,0x58,0x32,0xf0,0xb9,0x7f,0xf7,0xc3,0x88,0xf7,0xc3,0x86,0xf8,0xc4,0x84,0xf7,0xc5,0x82,0xf7,0xc5,0x80,0xf7,0xc5,0x7f,0xf8,0xc5,0x7d,0xf7,0xc4,0x7b,0xf7,0xc4,0x79,0xf7,0xc4,0x78,0xf7,0xc3,0x76,0xf7,0xc3,0x74,0xf7,0xc2,0x71,0xf6,0xbe,0x6d,0xf6,0xba,0x6a,0xf4,0xb6,0x65,0x8a,0x5e,0x2c,0xc,0x7,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x33,0x1a,0xd2,0x99,0x60,0xf8,0xc4,0x89,0xf8,0xc3,0x86,0xf8,0xc4,0x84,0xf7,0xc5,0x82,0xf7,0xc5,0x80,0xf7,0xc5,0x7f,0xf7,0xc4,0x7e,0xf7,0xc4,0x7b,0xf7,0xc3,0x79,0xf7,0xc2,0x77,0xf6,0xc0,0x74,0xf6,0xbd,0x71,0xf6,0xbb,0x6e,0xe1,0xa4,0x59,0x5c,0x3d,0x1b,0x1,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xe,0x6,0x0,0x72,0x4b,0x28,0xd0,0x9a,0x62,0xf7,0xbf,0x80,0xf8,0xc4,0x85,0xf7,0xc3,0x82,0xf7,0xc3,0x80,0xf7,0xc3,0x7e,0xf7,0xc1,0x7c,0xf6,0xc0,0x7a,0xf7,0xbf,0x78,0xf8,0xbc,0x72,0xde,0xa2,0x5d,0x80,0x57,0x2b,0x13,0xb,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x19,0xe,0x5,0x44,0x2c,0x15,0x81,0x59,0x32,0xb2,0x80,0x4c,0xcb,0x95,0x5b,0xd2,0x9c,0x5f,0xcd,0x97,0x5a,0xb9,0x86,0x4d,0x8b,0x61,0x34,0x4a,0x30,0x17,0x15,0xc,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x0,0x0,0x0,0x1,0x0,0x0,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x2a, 0xd, 0xa7, 0x5b, 0x1f, 0xb8, 0x66, 0x22, 0x6c, 0x3b, 0x14, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x6f, 0x3a, 0x13, 0xea, 0x7f, 0x2c, 0xee, 0x7e, 0x2b, 0xee, 0x7e, 0x2b, 0xef, 0x85, 0x2e, 0x5f, 0x35, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x43, 0x22, 0xb, 0xed, 0x7f, 0x2c, 0xed, 0x7c, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x80, 0x2c, 0xee, 0x80, 0x2c, 0xa8, 0x5f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x2e, 0x16, 0x6, 0xd0, 0x6f, 0x26, 0xed, 0x7b, 0x2a, 0xed, 0x7d, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x80, 0x2c, 0xee, 0x82, 0x2d, 0x9a, 0x57, 0x1d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x17, 0xb, 0x4, 0xb9, 0x60, 0x21, 0xed, 0x7a, 0x2a, 0xed, 0x7b, 0x2a, 0xed, 0x7e, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x7f, 0x2c, 0xee, 0x86, 0x2e, 0x4e, 0x2b, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1, 0x0, 0x0, 0x96, 0x4d, 0x19, 0xee, 0x7a, 0x2a, 0xed, 0x79, 0x2a, 0xed, 0x7c, 0x2b, 0xed, 0x7e, 0x2b, 0xed, 0x7e, 0x2b, 0xef, 0x83, 0x2d, 0x98, 0x55, 0x1c, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x20, 0xf, 0x5, 0x4b, 0x27, 0xe, 0x21, 0x11, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x67, 0x34, 0x11, 0xed, 0x7b, 0x2a, 0xec, 0x79, 0x29, 0xed, 0x7b, 0x2a, 0xed, 0x7c, 0x2b, 0xed, 0x7d, 0x2b, 0xee, 0x7f, 0x2c, 0xbb, 0x69, 0x24, 0x11, 0x9, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x38, 0x1c, 0x9, 0xc9, 0x6d, 0x2c, 0xf1, 0x86, 0x36, 0xd7, 0x79, 0x2a, 0x22, 0x12, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x3b, 0x1d, 0x9, 0xe0, 0x74, 0x27, 0xed, 0x7a, 0x2a, 0xed, 0x7c, 0x2a, 0xed, 0x7d, 0x2b, 0xed, 0x7d, 0x2b, 0xed, 0x7d, 0x2b, 0xdc, 0x7a, 0x2a, 0x1e, 0xf, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xa6, 0x56, 0x23, 0xee, 0x83, 0x3b, 0xed, 0x7d, 0x2c, 0xf0, 0x85, 0x2e, 0x75, 0x43, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x25, 0x12, 0x5, 0xc9, 0x68, 0x24, 0xed, 0x7b, 0x2a, 0xed, 0x7d, 0x2b, 0xed, 0x7e, 0x2b, 0xee, 0x7e, 0x2c, 0xed, 0x7d, 0x2b, 0xe3, 0x7d, 0x2b, 0x3b, 0x1f, 0xa, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1c, 0xd, 0x4, 0xd9, 0x74, 0x35, 0xee, 0x83, 0x3a, 0xee, 0x7f, 0x2b, 0xf0, 0x86, 0x2e, 0x83, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xa, 0x5, 0x1, 0xa1, 0x54, 0x1c, 0xee, 0x7e, 0x2c, 0xed, 0x7e, 0x2c, 0xed, 0x7f, 0x2c, 0xed, 0x80, 0x2c, 0xed, 0x7f, 0x2b, 0xec, 0x81, 0x2d, 0x60, 0x33, 0x11, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7a, 0x38, 0xee, 0x84, 0x3a, 0xee, 0x82, 0x2c, 0xf0, 0x88, 0x2f, 0x82, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x6f, 0x39, 0x13, 0xef, 0x82, 0x30, 0xed, 0x82, 0x2f, 0xee, 0x82, 0x2e, 0xee, 0x82, 0x2d, 0xee, 0x81, 0x2c, 0xf0, 0x83, 0x2d, 0x88, 0x49, 0x18, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7c, 0x3a, 0xee, 0x86, 0x3b, 0xee, 0x84, 0x2d, 0xf1, 0x8b, 0x30, 0x82, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x54, 0x2b, 0xf, 0xe9, 0x80, 0x30, 0xee, 0x87, 0x33, 0xef, 0x88, 0x32, 0xef, 0x88, 0x30, 0xee, 0x85, 0x2f, 0xef, 0x83, 0x2e, 0xae, 0x5f, 0x20, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7e, 0x3d, 0xef, 0x8a, 0x3d, 0xef, 0x88, 0x2e, 0xf1, 0x8d, 0x31, 0x81, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x29, 0x15, 0x7, 0xd2, 0x74, 0x2d, 0xf0, 0x8b, 0x36, 0xf0, 0x8d, 0x35, 0xef, 0x8d, 0x35, 0xef, 0x8b, 0x33, 0xef, 0x88, 0x30, 0xc4, 0x6d, 0x26, 0x18, 0xc, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe1, 0x80, 0x3f, 0xf0, 0x8d, 0x3f, 0xef, 0x8a, 0x2f, 0xf1, 0x8f, 0x32, 0x81, 0x4e, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x3, 0x0, 0xb1, 0x61, 0x26, 0xf1, 0x8e, 0x3a, 0xf1, 0x90, 0x3a, 0xf0, 0x90, 0x38, 0xf0, 0x90, 0x36, 0xef, 0x8e, 0x35, 0xd3, 0x7a, 0x2c, 0x22, 0x11, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x12, 0x5, 0xe1, 0x83, 0x42, 0xf0, 0x90, 0x42, 0xf0, 0x8d, 0x30, 0xf2, 0x92, 0x33, 0x80, 0x4e, 0x1b, 0x0, 0x0, 0x0, 0x3, 0x2, 0x0, 0x81, 0x45, 0x1b, 0xf1, 0x90, 0x3e, 0xf1, 0x94, 0x3d, 0xf1, 0x95, 0x3c, 0xf0, 0x94, 0x3b, 0xf0, 0x92, 0x39, 0xf0, 0x90, 0x35, 0xd0, 0x7b, 0x2b, 0xc2, 0x6e, 0x26, 0xbe, 0x6c, 0x25, 0x94, 0x54, 0x1c, 0x5b, 0x33, 0x11, 0x1a, 0xe, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x25, 0x14, 0x6, 0xe2, 0x86, 0x44, 0xf1, 0x94, 0x45, 0xf0, 0x90, 0x31, 0xf2, 0x94, 0x33, 0x80, 0x4e, 0x1b, 0x0, 0x0, 0x0, 0x60, 0x34, 0x14, 0xed, 0x8c, 0x3e, 0xf0, 0x96, 0x42, 0xf1, 0x97, 0x40, 0xf1, 0x95, 0x3f, 0xf0, 0x91, 0x39, 0xef, 0x8e, 0x33, 0xef, 0x8d, 0x31, 0xf0, 0x8d, 0x31, 0xef, 0x8c, 0x30, 0xef, 0x8c, 0x30, 0xf0, 0x8d, 0x31, 0xf1, 0x8e, 0x31, 0xe1, 0x85, 0x2e, 0x92, 0x55, 0x1d, 0x25, 0x14, 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe2, 0x89, 0x46, 0xf2, 0x97, 0x47, 0xf1, 0x92, 0x32, 0xf2, 0x96, 0x34, 0x80, 0x4e, 0x1a, 0x32, 0x1a, 0xa, 0xe3, 0x87, 0x3d, 0xf1, 0x97, 0x45, 0xf1, 0x98, 0x44, 0xf1, 0x95, 0x41, 0xf0, 0x90, 0x39, 0xef, 0x8d, 0x30, 0xef, 0x8f, 0x31, 0xf0, 0x90, 0x32, 0xf0, 0x92, 0x33, 0xf1, 0x93, 0x33, 0xf1, 0x94, 0x34, 0xf1, 0x94, 0x34, 0xf0, 0x93, 0x34, 0xf0, 0x91, 0x32, 0xf1, 0x91, 0x33, 0xe2, 0x8a, 0x30, 0x6b, 0x3f, 0x15, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe3, 0x8b, 0x49, 0xf2, 0x9a, 0x49, 0xf1, 0x93, 0x32, 0xf2, 0x98, 0x35, 0x8f, 0x57, 0x1d, 0xcf, 0x7c, 0x38, 0xf2, 0x99, 0x48, 0xf1, 0x98, 0x47, 0xf1, 0x96, 0x44, 0xf0, 0x90, 0x39, 0xef, 0x8d, 0x31, 0xf0, 0x90, 0x31, 0xf0, 0x92, 0x33, 0xf1, 0x94, 0x33, 0xf1, 0x96, 0x35, 0xf1, 0x98, 0x35, 0xf1, 0x9a, 0x36, 0xf1, 0x9c, 0x37, 0xf2, 0x9d, 0x37, 0xf2, 0x9c, 0x37, 0xf2, 0x99, 0x36, 0xf0, 0x94, 0x34, 0xf3, 0x97, 0x35, 0x9f, 0x60, 0x21, 0x13, 0xb, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe3, 0x8d, 0x4b, 0xf2, 0x9b, 0x4c, 0xf1, 0x93, 0x32, 0xf1, 0x97, 0x35, 0xea, 0x98, 0x43, 0xf2, 0x9d, 0x4d, 0xf1, 0x9a, 0x4b, 0xf1, 0x99, 0x49, 0xf0, 0x93, 0x3d, 0xf0, 0x8d, 0x30, 0xf0, 0x90, 0x32, 0xf0, 0x92, 0x32, 0xf0, 0x94, 0x34, 0xf1, 0x96, 0x34, 0xf1, 0x98, 0x36, 0xf1, 0x9a, 0x36, 0xf2, 0x9c, 0x38, 0xf2, 0x9f, 0x38, 0xf2, 0xa2, 0x39, 0xf3, 0xa2, 0x39, 0xf3, 0xa2, 0x39, 0xf2, 0x9f, 0x38, 0xf1, 0x99, 0x35, 0xf2, 0x97, 0x35, 0xba, 0x74, 0x29, 0x13, 0xb, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x8e, 0x4d, 0xf2, 0x9d, 0x4e, 0xf1, 0x93, 0x32, 0xf2, 0x9d, 0x3f, 0xf3, 0xa4, 0x54, 0xf2, 0x9d, 0x50, 0xf1, 0x9b, 0x4d, 0xf2, 0x98, 0x46, 0xef, 0x8d, 0x31, 0xf0, 0x8f, 0x31, 0xf0, 0x91, 0x32, 0xf0, 0x93, 0x32, 0xf1, 0x94, 0x32, 0xf1, 0x95, 0x32, 0xf1, 0x98, 0x34, 0xf1, 0x9b, 0x36, 0xf2, 0x9e, 0x38, 0xf2, 0xa1, 0x39, 0xf2, 0xa4, 0x3a, 0xf3, 0xa6, 0x3b, 0xf4, 0xa8, 0x3c, 0xf3, 0xa7, 0x3c, 0xf3, 0xa4, 0x3a, 0xf2, 0x9c, 0x37, 0xf2, 0x99, 0x36, 0xa9, 0x69, 0x25, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x90, 0x50, 0xf2, 0x9e, 0x51, 0xf1, 0x95, 0x35, 0xf4, 0xa6, 0x54, 0xf3, 0xa2, 0x55, 0xf2, 0x9e, 0x51, 0xf2, 0x9c, 0x4e, 0xf0, 0x8f, 0x35, 0xf0, 0x8e, 0x31, 0xf0, 0x90, 0x32, 0xf3, 0xa5, 0x56, 0xf7, 0xc4, 0x8e, 0xfa, 0xd8, 0xb6, 0xfb, 0xdf, 0xc2, 0xfa, 0xd8, 0xb2, 0xf7, 0xc4, 0x89, 0xf4, 0xae, 0x59, 0xf2, 0xa1, 0x38, 0xf3, 0xa5, 0x3b, 0xf4, 0xa8, 0x3c, 0xf4, 0xab, 0x3d, 0xf4, 0xac, 0x3e, 0xf4, 0xab, 0x3d, 0xf3, 0xa7, 0x3b, 0xf2, 0x9e, 0x38, 0xf4, 0x9e, 0x38, 0x6f, 0x45, 0x17, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x19, 0xc, 0x5, 0x63, 0x36, 0x18, 0x3f, 0x20, 0x9, 0x2, 0x1, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x91, 0x52, 0xf3, 0xa2, 0x55, 0xf2, 0x9d, 0x43, 0xf4, 0xa7, 0x5b, 0xf3, 0xa2, 0x57, 0xf3, 0xa0, 0x55, 0xf1, 0x97, 0x43, 0xf0, 0x8d, 0x30, 0xf2, 0x9d, 0x4c, 0xfa, 0xda, 0xbc, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xf6, 0xfa, 0xdc, 0xb5, 0xf4, 0xae, 0x4e, 0xf4, 0xa9, 0x3c, 0xf4, 0xac, 0x3d, 0xf4, 0xae, 0x3f, 0xf4, 0xaf, 0x3f, 0xf4, 0xad, 0x3f, 0xf3, 0xa8, 0x3d, 0xf2, 0x9d, 0x38, 0xe2, 0x94, 0x34, 0x23, 0x14, 0x6, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x11, 0x8, 0x3, 0x9e, 0x62, 0x39, 0xf2, 0x91, 0x4e, 0xe7, 0x79, 0x29, 0x48, 0x25, 0xc, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x27, 0x13, 0x6, 0xe5, 0x93, 0x54, 0xf3, 0xa7, 0x59, 0xf4, 0xa6, 0x56, 0xf4, 0xa7, 0x5d, 0xf3, 0xa4, 0x59, 0xf3, 0xa2, 0x57, 0xf1, 0x90, 0x36, 0xf4, 0xa7, 0x5d, 0xfe, 0xf4, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf2, 0xe3, 0xf6, 0xb8, 0x5f, 0xf4, 0xac, 0x3e, 0xf4, 0xaf, 0x3f, 0xf4, 0xb1, 0x40, 0xf4, 0xb2, 0x40, 0xf5, 0xaf, 0x3f, 0xf3, 0xa6, 0x3c, 0xf3, 0x9f, 0x38, 0x90, 0x5d, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x3d, 0x1f, 0xf, 0xed, 0x9c, 0x6a, 0xef, 0x8b, 0x4a, 0xec, 0x78, 0x29, 0xe4, 0x79, 0x2a, 0x29, 0x15, 0x7, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x28, 0x14, 0x6, 0xe6, 0x97, 0x57, 0xf5, 0xad, 0x63, 0xf5, 0xac, 0x62, 0xf4, 0xa8, 0x5f, 0xf4, 0xa6, 0x5c, 0xf3, 0xa0, 0x53, 0xf4, 0xa9, 0x64, 0xfe, 0xf8, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf2, 0xf7, 0xfa, 0xed, 0xf4, 0xf8, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xed, 0xf5, 0xb5, 0x53, 0xf5, 0xb0, 0x3f, 0xf5, 0xb3, 0x41, 0xf5, 0xb4, 0x42, 0xf5, 0xb3, 0x41, 0xf4, 0xad, 0x3f, 0xf3, 0xa1, 0x39, 0xe4, 0x98, 0x37, 0x1d, 0x11, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x43, 0x23, 0x10, 0xf2, 0xa1, 0x70, 0xf1, 0x99, 0x61, 0xec, 0x78, 0x2a, 0xed, 0x7b, 0x2a, 0xc4, 0x69, 0x23, 0x15, 0xa, 0x3, 0x0, 0x0, 0x0, 0x1d, 0xf, 0x5, 0xe7, 0x9b, 0x5b, 0xf5, 0xb1, 0x68, 0xf5, 0xad, 0x65, 0xf4, 0xaa, 0x62, 0xf4, 0xa8, 0x5f, 0xf3, 0xa4, 0x59, 0xfd, 0xec, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfe, 0xc3, 0xda, 0xe9, 0x5c, 0x9a, 0xc5, 0x2a, 0x7b, 0xb4, 0x17, 0x6f, 0xae, 0x36, 0x81, 0xb8, 0x91, 0xbb, 0xd9, 0xf0, 0xf6, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe7, 0xc7, 0xf5, 0xb2, 0x43, 0xf6, 0xb3, 0x41, 0xf5, 0xb5, 0x43, 0xf5, 0xb6, 0x43, 0xf5, 0xb3, 0x42, 0xf4, 0xa8, 0x3c, 0xf4, 0xa2, 0x3a, 0x66, 0x41, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x22, 0x10, 0x7, 0xd6, 0x88, 0x5b, 0xf2, 0xa5, 0x76, 0xee, 0x84, 0x3f, 0xed, 0x7a, 0x2a, 0xee, 0x80, 0x2c, 0xa5, 0x59, 0x1e, 0x7, 0x3, 0x1, 0x19, 0xd, 0x4, 0xe7, 0x9e, 0x5e, 0xf6, 0xb2, 0x6b, 0xf5, 0xae, 0x67, 0xf5, 0xac, 0x65, 0xf4, 0xa9, 0x61, 0xf8, 0xcc, 0xa1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0x97, 0xbf, 0xdb, 0x33, 0x83, 0xbb, 0x24, 0x7e, 0xb9, 0x3, 0x6a, 0xae, 0x0, 0x66, 0xab, 0x0, 0x64, 0xa9, 0x1, 0x63, 0xa9, 0x3c, 0x87, 0xbd, 0xee, 0xf5, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf8, 0xc7, 0x76, 0xf6, 0xb4, 0x41, 0xf5, 0xb7, 0x43, 0xf6, 0xb8, 0x44, 0xf6, 0xb6, 0x43, 0xf5, 0xae, 0x3f, 0xf3, 0xa2, 0x3a, 0xac, 0x71, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x52, 0x2c, 0x16, 0xf0, 0xa1, 0x71, 0xf2, 0xa2, 0x6f, 0xed, 0x7e, 0x32, 0xed, 0x7e, 0x2b, 0xef, 0x82, 0x2d, 0x8a, 0x49, 0x18, 0x1b, 0xe, 0x4, 0xe7, 0xa2, 0x61, 0xf6, 0xb3, 0x6e, 0xf6, 0xb0, 0x6a, 0xf5, 0xae, 0x67, 0xf5, 0xab, 0x64, 0xfe, 0xf4, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xd1, 0xe5, 0x3e, 0x8d, 0xc3, 0x37, 0x8e, 0xc5, 0x16, 0x7a, 0xb9, 0x0, 0x6b, 0xaf, 0x0, 0x68, 0xac, 0x0, 0x65, 0xaa, 0x0, 0x65, 0xab, 0x0, 0x66, 0xac, 0x4d, 0x93, 0xc4, 0xf8, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe7, 0xc5, 0xf6, 0xb3, 0x40, 0xf6, 0xb7, 0x43, 0xf6, 0xb9, 0x44, 0xf6, 0xb8, 0x45, 0xf5, 0xb2, 0x41, 0xf3, 0xa5, 0x3b, 0xe2, 0x98, 0x37, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x86, 0x4e, 0x2e, 0xf3, 0xa6, 0x77, 0xf1, 0x9e, 0x66, 0xed, 0x7e, 0x2d, 0xee, 0x82, 0x2c, 0xf0, 0x85, 0x2d, 0x7e, 0x47, 0x17, 0xe8, 0xa6, 0x64, 0xf6, 0xb5, 0x70, 0xf6, 0xb2, 0x6d, 0xf5, 0xb0, 0x6a, 0xf7, 0xbb, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xfb, 0xfd, 0x5b, 0x9c, 0xca, 0x42, 0x96, 0xcb, 0x3c, 0x93, 0xc9, 0x9, 0x73, 0xb6, 0x0, 0x6b, 0xb0, 0x0, 0x69, 0xad, 0x0, 0x66, 0xab, 0x0, 0x66, 0xab, 0x0, 0x67, 0xad, 0x4, 0x6a, 0xaf, 0xbb, 0xd7, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xee, 0xf6, 0xb9, 0x4f, 0xf6, 0xb7, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xba, 0x45, 0xf5, 0xb5, 0x43, 0xf4, 0xa8, 0x3d, 0xf5, 0xa7, 0x3d, 0x1b, 0xf, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x11, 0x8, 0x3, 0xb0, 0x6d, 0x45, 0xf4, 0xaa, 0x7b, 0xf1, 0x9a, 0x5b, 0xee, 0x82, 0x2d, 0xef, 0x86, 0x2e, 0xee, 0x91, 0x36, 0xf5, 0xb5, 0x70, 0xf6, 0xb7, 0x73, 0xf6, 0xb4, 0x70, 0xf5, 0xb1, 0x6c, 0xf9, 0xcc, 0xa1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xe2, 0xef, 0x4b, 0x97, 0xca, 0x47, 0x9a, 0xce, 0x3f, 0x95, 0xcb, 0x3, 0x71, 0xb5, 0x0, 0x6c, 0xb0, 0x0, 0x69, 0xae, 0x0, 0x67, 0xac, 0x0, 0x66, 0xac, 0x0, 0x67, 0xad, 0x0, 0x69, 0xaf, 0x66, 0xa5, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfa, 0xf8, 0xc3, 0x67, 0xf6, 0xb8, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xbb, 0x46, 0xf6, 0xb7, 0x44, 0xf4, 0xab, 0x3e, 0xf8, 0xab, 0x3f, 0x2a, 0x19, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x2b, 0x15, 0x9, 0xd4, 0x8a, 0x5c, 0xf4, 0xac, 0x7c, 0xf1, 0x98, 0x54, 0xee, 0x85, 0x2e, 0xf1, 0x93, 0x38, 0xf6, 0xba, 0x75, 0xf6, 0xb9, 0x75, 0xf6, 0xb6, 0x72, 0xf6, 0xb3, 0x6f, 0xfa, 0xd5, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xcf, 0xe5, 0x51, 0x9e, 0xcf, 0x4b, 0x9d, 0xd0, 0x43, 0x97, 0xcc, 0x3, 0x71, 0xb5, 0x0, 0x6d, 0xb1, 0x0, 0x6a, 0xae, 0x0, 0x67, 0xac, 0x0, 0x67, 0xad, 0x0, 0x68, 0xae, 0x0, 0x6a, 0xb0, 0x3b, 0x8c, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xc9, 0x77, 0xf6, 0xb8, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xbc, 0x46, 0xf6, 0xb8, 0x44, 0xf4, 0xad, 0x3f, 0xf8, 0xac, 0x3f, 0x2a, 0x1a, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x47, 0x26, 0x12, 0xee, 0xa3, 0x72, 0xf4, 0xae, 0x7b, 0xf1, 0x97, 0x4e, 0xf1, 0x92, 0x38, 0xf6, 0xbb, 0x78, 0xf6, 0xbb, 0x78, 0xf6, 0xb7, 0x75, 0xf6, 0xb5, 0x71, 0xfa, 0xd6, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xcd, 0xe4, 0x54, 0xa0, 0xd1, 0x4e, 0xa0, 0xd1, 0x48, 0x9b, 0xce, 0xb, 0x76, 0xb8, 0x0, 0x6d, 0xb2, 0x0, 0x6a, 0xaf, 0x0, 0x68, 0xad, 0x0, 0x68, 0xad, 0x0, 0x69, 0xae, 0x0, 0x6b, 0xb1, 0x36, 0x89, 0xc1, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xc9, 0x76, 0xf6, 0xb9, 0x44, 0xf6, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf6, 0xb9, 0x44, 0xf4, 0xad, 0x3f, 0xf8, 0xad, 0x40, 0x2a, 0x1a, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x70, 0x42, 0x26, 0xf4, 0xad, 0x7b, 0xf5, 0xb1, 0x7d, 0xf3, 0x9f, 0x50, 0xf7, 0xbc, 0x7b, 0xf7, 0xbc, 0x7b, 0xf6, 0xb9, 0x78, 0xf6, 0xb7, 0x74, 0xf9, 0xd0, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xda, 0xeb, 0x56, 0xa0, 0xd0, 0x51, 0xa1, 0xd2, 0x4a, 0x9c, 0xcf, 0x20, 0x82, 0xbf, 0x0, 0x6e, 0xb2, 0x0, 0x6b, 0xb0, 0x0, 0x68, 0xae, 0x0, 0x68, 0xae, 0x0, 0x69, 0xaf, 0x0, 0x6b, 0xb1, 0x50, 0x98, 0xc9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf9, 0xf8, 0xc3, 0x66, 0xf6, 0xb9, 0x45, 0xf7, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf6, 0xb8, 0x45, 0xf4, 0xad, 0x3f, 0xf8, 0xac, 0x3f, 0x2a, 0x19, 0x7, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xc, 0x5, 0x0, 0xa5, 0x67, 0x40, 0xf5, 0xb1, 0x7f, 0xf5, 0xb7, 0x7e, 0xf7, 0xbf, 0x80, 0xf7, 0xbe, 0x7d, 0xf7, 0xbb, 0x7b, 0xf6, 0xb9, 0x78, 0xf8, 0xc2, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xf5, 0xf9, 0x5b, 0xa0, 0xce, 0x53, 0xa2, 0xd2, 0x4c, 0x9e, 0xd0, 0x3c, 0x93, 0xc8, 0x6, 0x71, 0xb4, 0x0, 0x6c, 0xb0, 0x0, 0x69, 0xae, 0x0, 0x69, 0xae, 0x0, 0x6a, 0xaf, 0x0, 0x6b, 0xb1, 0x9b, 0xc5, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xec, 0xf6, 0xba, 0x4e, 0xf6, 0xb9, 0x45, 0xf7, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf5, 0xb7, 0x44, 0xf4, 0xab, 0x3e, 0xf5, 0xa8, 0x3e, 0x18, 0xd, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1f, 0x10, 0x7, 0xc9, 0x84, 0x56, 0xf5, 0xb5, 0x81, 0xf7, 0xbf, 0x82, 0xf8, 0xc0, 0x80, 0xf7, 0xbd, 0x7d, 0xf7, 0xba, 0x7a, 0xf6, 0xb8, 0x77, 0xfe, 0xf5, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xc2, 0xdf, 0x55, 0x9f, 0xd0, 0x4e, 0x9f, 0xd0, 0x47, 0x99, 0xcc, 0x2a, 0x87, 0xc1, 0x3, 0x6d, 0xb1, 0x0, 0x69, 0xaf, 0x0, 0x6a, 0xaf, 0x0, 0x6a, 0xb0, 0x27, 0x80, 0xbc, 0xec, 0xf4, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xbf, 0xf6, 0xb6, 0x42, 0xf6, 0xba, 0x46, 0xf7, 0xbb, 0x46, 0xf7, 0xbb, 0x47, 0xf5, 0xb5, 0x43, 0xf3, 0xa8, 0x3d, 0xdd, 0x97, 0x37, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x32, 0x1a, 0xb, 0xe4, 0x9d, 0x6a, 0xf7, 0xbd, 0x84, 0xf8, 0xc1, 0x83, 0xf8, 0xbe, 0x80, 0xf7, 0xbd, 0x7d, 0xf7, 0xba, 0x79, 0xfa, 0xd9, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf6, 0xfa, 0x74, 0xac, 0xd4, 0x4f, 0x9b, 0xcd, 0x48, 0x99, 0xcc, 0x41, 0x94, 0xc8, 0x2c, 0x85, 0xbe, 0xb, 0x70, 0xb3, 0x1, 0x6a, 0xb0, 0xb, 0x6e, 0xb2, 0xbf, 0xd9, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf8, 0xc8, 0x74, 0xf6, 0xb7, 0x44, 0xf6, 0xba, 0x46, 0xf7, 0xbb, 0x46, 0xf7, 0xb9, 0x46, 0xf6, 0xb2, 0x42, 0xf4, 0xa7, 0x3d, 0xa6, 0x70, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x2e, 0x18, 0xef, 0xaf, 0x78, 0xf8, 0xc1, 0x85, 0xf8, 0xc0, 0x82, 0xf7, 0xbe, 0x7f, 0xf7, 0xbc, 0x7d, 0xf7, 0xbe, 0x81, 0xfe, 0xf3, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf7, 0xfa, 0x91, 0xbd, 0xdb, 0x4f, 0x97, 0xc8, 0x40, 0x8e, 0xc3, 0x37, 0x8a, 0xc0, 0x34, 0x88, 0xbf, 0x57, 0x9c, 0xca, 0xcc, 0xe1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe4, 0xbf, 0xf5, 0xb6, 0x45, 0xf6, 0xb8, 0x45, 0xf6, 0xba, 0x46, 0xf7, 0xba, 0x46, 0xf6, 0xb7, 0x45, 0xf5, 0xad, 0x3f, 0xf4, 0xa9, 0x40, 0x5c, 0x3d, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x85, 0x55, 0x31, 0xf7, 0xbd, 0x84, 0xf8, 0xc2, 0x85, 0xf8, 0xc0, 0x82, 0xf7, 0xbe, 0x80, 0xf7, 0xbc, 0x7d, 0xf9, 0xcb, 0x99, 0xfe, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0xe5, 0xef, 0xf6, 0xc1, 0xda, 0xeb, 0xba, 0xd5, 0xe9, 0xd8, 0xe8, 0xf2, 0xf9, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf3, 0xe4, 0xf6, 0xb9, 0x51, 0xf5, 0xb5, 0x43, 0xf6, 0xb8, 0x45, 0xf6, 0xb9, 0x46, 0xf6, 0xb8, 0x46, 0xf6, 0xb3, 0x43, 0xf4, 0xa7, 0x3e, 0xdf, 0x9d, 0x43, 0x17, 0xd, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x14, 0xa, 0x4, 0xb2, 0x7b, 0x4b, 0xf8, 0xc2, 0x88, 0xf8, 0xc1, 0x85, 0xf7, 0xbf, 0x82, 0xf7, 0xbe, 0x80, 0xf7, 0xbd, 0x7d, 0xf9, 0xca, 0x97, 0xfe, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf2, 0xe1, 0xf7, 0xbc, 0x5d, 0xf5, 0xb3, 0x42, 0xf5, 0xb6, 0x44, 0xf5, 0xb7, 0x45, 0xf6, 0xb8, 0x45, 0xf6, 0xb5, 0x44, 0xf5, 0xad, 0x40, 0xf6, 0xae, 0x4c, 0x88, 0x5d, 0x27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1d, 0x10, 0x6, 0xdb, 0xa0, 0x68, 0xf8, 0xc3, 0x88, 0xf7, 0xc1, 0x85, 0xf7, 0xc0, 0x82, 0xf7, 0xbf, 0x80, 0xf7, 0xbe, 0x7e, 0xf8, 0xc4, 0x88, 0xfc, 0xe6, 0xcc, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfa, 0xf3, 0xfa, 0xda, 0xa9, 0xf5, 0xb3, 0x4a, 0xf5, 0xb2, 0x42, 0xf5, 0xb3, 0x43, 0xf5, 0xb6, 0x44, 0xf5, 0xb7, 0x45, 0xf5, 0xb5, 0x44, 0xf5, 0xb0, 0x42, 0xf5, 0xad, 0x4d, 0xdd, 0x9e, 0x4a, 0x19, 0xf, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x50, 0x33, 0x19, 0xec, 0xb4, 0x7a, 0xf8, 0xc2, 0x87, 0xf7, 0xc1, 0x85, 0xf7, 0xc1, 0x83, 0xf7, 0xc0, 0x80, 0xf7, 0xc0, 0x7f, 0xf7, 0xc0, 0x7c, 0xf7, 0xc2, 0x7e, 0xf8, 0xcc, 0x92, 0xfa, 0xda, 0xb0, 0xfb, 0xdf, 0xb9, 0xfa, 0xd9, 0xad, 0xf7, 0xc8, 0x84, 0xf5, 0xb4, 0x54, 0xf4, 0xad, 0x3f, 0xf4, 0xaf, 0x41, 0xf5, 0xb2, 0x42, 0xf5, 0xb4, 0x43, 0xf5, 0xb5, 0x44, 0xf5, 0xb4, 0x44, 0xf5, 0xb2, 0x46, 0xf5, 0xb2, 0x54, 0xf5, 0xb4, 0x5a, 0x5e, 0x3e, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x71, 0x4b, 0x29, 0xf8, 0xc0, 0x86, 0xf7, 0xc3, 0x87, 0xf7, 0xc2, 0x85, 0xf7, 0xc1, 0x83, 0xf7, 0xc2, 0x82, 0xf7, 0xc2, 0x7f, 0xf7, 0xc2, 0x7e, 0xf6, 0xc0, 0x76, 0xf4, 0xb4, 0x59, 0xf3, 0xa8, 0x3e, 0xf3, 0xa7, 0x39, 0xf3, 0xa9, 0x3d, 0xf4, 0xab, 0x3e, 0xf4, 0xad, 0x40, 0xf4, 0xb0, 0x41, 0xf4, 0xb2, 0x42, 0xf5, 0xb2, 0x42, 0xf5, 0xb3, 0x45, 0xf6, 0xb7, 0x54, 0xf6, 0xb7, 0x60, 0xf6, 0xb5, 0x5f, 0x9d, 0x6b, 0x31, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x8b, 0x5f, 0x36, 0xf9, 0xc1, 0x87, 0xf7, 0xc3, 0x88, 0xf8, 0xc3, 0x86, 0xf7, 0xc3, 0x84, 0xf8, 0xc3, 0x81, 0xf7, 0xc4, 0x80, 0xf7, 0xc4, 0x7e, 0xf7, 0xc4, 0x7d, 0xf7, 0xc3, 0x7a, 0xf6, 0xbd, 0x6c, 0xf5, 0xb7, 0x5c, 0xf5, 0xb5, 0x54, 0xf5, 0xb4, 0x50, 0xf5, 0xb6, 0x52, 0xf6, 0xb9, 0x58, 0xf6, 0xbd, 0x62, 0xf7, 0xbf, 0x6a, 0xf6, 0xba, 0x66, 0xf6, 0xb6, 0x63, 0xab, 0x78, 0x39, 0xa, 0x6, 0x2, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x83, 0x58, 0x32, 0xf0, 0xb9, 0x7f, 0xf7, 0xc3, 0x88, 0xf7, 0xc3, 0x86, 0xf8, 0xc4, 0x84, 0xf7, 0xc5, 0x82, 0xf7, 0xc5, 0x80, 0xf7, 0xc5, 0x7f, 0xf8, 0xc5, 0x7d, 0xf7, 0xc4, 0x7b, 0xf7, 0xc4, 0x79, 0xf7, 0xc4, 0x78, 0xf7, 0xc3, 0x76, 0xf7, 0xc3, 0x74, 0xf7, 0xc2, 0x71, 0xf6, 0xbe, 0x6d, 0xf6, 0xba, 0x6a, 0xf4, 0xb6, 0x65, 0x8a, 0x5e, 0x2c, 0xc, 0x7, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x33, 0x1a, 0xd2, 0x99, 0x60, 0xf8, 0xc4, 0x89, 0xf8, 0xc3, 0x86, 0xf8, 0xc4, 0x84, 0xf7, 0xc5, 0x82, 0xf7, 0xc5, 0x80, 0xf7, 0xc5, 0x7f, 0xf7, 0xc4, 0x7e, 0xf7, 0xc4, 0x7b, 0xf7, 0xc3, 0x79, 0xf7, 0xc2, 0x77, 0xf6, 0xc0, 0x74, 0xf6, 0xbd, 0x71, 0xf6, 0xbb, 0x6e, 0xe1, 0xa4, 0x59, 0x5c, 0x3d, 0x1b, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xe, 0x6, 0x0, 0x72, 0x4b, 0x28, 0xd0, 0x9a, 0x62, 0xf7, 0xbf, 0x80, 0xf8, 0xc4, 0x85, 0xf7, 0xc3, 0x82, 0xf7, 0xc3, 0x80, 0xf7, 0xc3, 0x7e, 0xf7, 0xc1, 0x7c, 0xf6, 0xc0, 0x7a, 0xf7, 0xbf, 0x78, 0xf8, 0xbc, 0x72, 0xde, 0xa2, 0x5d, 0x80, 0x57, 0x2b, 0x13, 0xb, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x19, 0xe, 0x5, 0x44, 0x2c, 0x15, 0x81, 0x59, 0x32, 0xb2, 0x80, 0x4c, 0xcb, 0x95, 0x5b, 0xd2, 0x9c, 0x5f, 0xcd, 0x97, 0x5a, 0xb9, 0x86, 0x4d, 0x8b, 0x61, 0x34, 0x4a, 0x30, 0x17, 0x15, 0xc, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
};
@@ -154,25 +154,25 @@ GLXContext GHOST_WindowX11::s_firstContext = NULL;
GHOST_WindowX11::
GHOST_WindowX11(
- GHOST_SystemX11 *system,
- Display * display,
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- const GHOST_TEmbedderWindowID parentWindow,
- GHOST_TDrawingContextType type,
- const bool stereoVisual,
- const GHOST_TUns16 numOfAASamples
-) :
- GHOST_Window(width,height,state,type,stereoVisual,numOfAASamples),
+ GHOST_SystemX11 *system,
+ Display *display,
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ const GHOST_TEmbedderWindowID parentWindow,
+ GHOST_TDrawingContextType type,
+ const bool stereoVisual,
+ const GHOST_TUns16 numOfAASamples
+ ) :
+ GHOST_Window(width, height, state, type, stereoVisual, numOfAASamples),
m_context(NULL),
m_display(display),
m_normal_state(GHOST_kWindowStateNormal),
- m_system (system),
- m_valid_setup (false),
+ m_system(system),
+ m_valid_setup(false),
m_invalid_window(false),
m_empty_cursor(None),
m_custom_cursor(None)
@@ -191,13 +191,13 @@ GHOST_WindowX11(
memset(&m_xtablet, 0, sizeof(m_xtablet));
#endif
- m_visual= NULL;
+ m_visual = NULL;
if (!glXQueryVersion(m_display, &glxVersionMajor, &glxVersionMinor)) {
printf("%s:%d: X11 glXQueryVersion() failed, verify working openGL system!\n", __FILE__, __LINE__);
/* exit if this is the first window */
- if(s_firstContext==NULL) {
+ if (s_firstContext == NULL) {
printf("initial window could not find the GLX extension, exit!\n");
exit(1);
}
@@ -209,7 +209,7 @@ GHOST_WindowX11(
for (samples = m_numOfAASamples; samples >= 0; samples--) {
i = 0; /* Reusing attributes array, so reset counter */
- if(m_stereoVisual)
+ if (m_stereoVisual)
attributes[i++] = GLX_STEREO;
attributes[i++] = GLX_RGBA;
@@ -219,7 +219,7 @@ GHOST_WindowX11(
attributes[i++] = GLX_GREEN_SIZE; attributes[i++] = 1;
attributes[i++] = GLX_DEPTH_SIZE; attributes[i++] = 1;
/* GLX >= 1.4 required for multi-sample */
- if(samples && (glxVersionMajor >= 1) && (glxVersionMinor >= 4)) {
+ if (samples && (glxVersionMajor >= 1) && (glxVersionMinor >= 4)) {
attributes[i++] = GLX_SAMPLE_BUFFERS; attributes[i++] = 1;
attributes[i++] = GLX_SAMPLES; attributes[i++] = samples;
}
@@ -234,14 +234,15 @@ GHOST_WindowX11(
/* All options exhausted, cannot continue */
printf("%s:%d: X11 glXChooseVisual() failed, verify working openGL system!\n", __FILE__, __LINE__);
- if(s_firstContext==NULL) {
+ if (s_firstContext == NULL) {
printf("initial window could not find the GLX extension, exit!\n");
exit(1);
}
return;
}
- } else {
+ }
+ else {
if (m_numOfAASamples && (m_numOfAASamples > samples)) {
printf("%s:%d: oversampling requested %i but using %i samples\n",
__FILE__, __LINE__, m_numOfAASamples, samples);
@@ -259,51 +260,49 @@ GHOST_WindowX11(
XSetWindowAttributes xattributes;
memset(&xattributes, 0, sizeof(xattributes));
- xattributes.colormap= XCreateColormap(
- m_display,
- RootWindow(m_display, m_visual->screen),
- m_visual->visual,
- AllocNone
- );
+ xattributes.colormap = XCreateColormap(m_display,
+ RootWindow(m_display, m_visual->screen),
+ m_visual->visual,
+ AllocNone
+ );
- xattributes.border_pixel= 0;
+ xattributes.border_pixel = 0;
// Specify which events we are interested in hearing.
- xattributes.event_mask=
- ExposureMask | StructureNotifyMask |
- KeyPressMask | KeyReleaseMask |
- EnterWindowMask | LeaveWindowMask |
- ButtonPressMask | ButtonReleaseMask |
- PointerMotionMask | FocusChangeMask | PropertyChangeMask;
+ xattributes.event_mask =
+ ExposureMask | StructureNotifyMask |
+ KeyPressMask | KeyReleaseMask |
+ EnterWindowMask | LeaveWindowMask |
+ ButtonPressMask | ButtonReleaseMask |
+ PointerMotionMask | FocusChangeMask | PropertyChangeMask;
// create the window!
;
if (parentWindow == 0) {
- m_window =
- XCreateWindow(
- m_display,
- RootWindow(m_display, m_visual->screen),
- left,
- top,
- width,
- height,
- 0, // no border.
- m_visual->depth,
- InputOutput,
- m_visual->visual,
- CWBorderPixel|CWColormap|CWEventMask,
- &xattributes
- );
- } else {
+ m_window = XCreateWindow(m_display,
+ RootWindow(m_display, m_visual->screen),
+ left,
+ top,
+ width,
+ height,
+ 0, // no border.
+ m_visual->depth,
+ InputOutput,
+ m_visual->visual,
+ CWBorderPixel | CWColormap | CWEventMask,
+ &xattributes
+ );
+ }
+ else {
Window root_return;
- int x_return,y_return;
- unsigned int w_return,h_return,border_w_return,depth_return;
+ int x_return, y_return;
+ unsigned int w_return, h_return, border_w_return, depth_return;
XGetGeometry(m_display, parentWindow, &root_return, &x_return, &y_return,
- &w_return, &h_return, &border_w_return, &depth_return );
+ &w_return, &h_return, &border_w_return, &depth_return);
left = 0;
top = 0;
@@ -311,22 +310,21 @@ GHOST_WindowX11(
height = h_return;
- m_window = XCreateWindow(
- m_display,
- parentWindow, // reparent against embedder
- left,
- top,
- width,
- height,
- 0, // no border.
- m_visual->depth,
- InputOutput,
- m_visual->visual,
- CWBorderPixel|CWColormap|CWEventMask,
- &xattributes
- );
-
- XSelectInput(m_display , parentWindow, SubstructureNotifyMask);
+ m_window = XCreateWindow(m_display,
+ parentWindow, // reparent against embedder
+ left,
+ top,
+ width,
+ height,
+ 0, // no border.
+ m_visual->depth,
+ InputOutput,
+ m_visual->visual,
+ CWBorderPixel | CWColormap | CWEventMask,
+ &xattributes
+ );
+
+ XSelectInput(m_display, parentWindow, SubstructureNotifyMask);
}
@@ -359,23 +357,23 @@ GHOST_WindowX11(
// Create some hints for the window manager on how
// we want this window treated.
- XSizeHints * xsizehints = XAllocSizeHints();
+ XSizeHints *xsizehints = XAllocSizeHints();
xsizehints->flags = PPosition | PSize | PMinSize | PMaxSize;
xsizehints->x = left;
xsizehints->y = top;
xsizehints->width = width;
xsizehints->height = height;
- xsizehints->min_width= 320; // size hints, could be made apart of the ghost api
- xsizehints->min_height= 240; // limits are also arbitrary, but should not allow 1x1 window
- xsizehints->max_width= 65535;
- xsizehints->max_height= 65535;
+ xsizehints->min_width = 320; // size hints, could be made apart of the ghost api
+ xsizehints->min_height = 240; // limits are also arbitrary, but should not allow 1x1 window
+ xsizehints->max_width = 65535;
+ xsizehints->max_height = 65535;
XSetWMNormalHints(m_display, m_window, xsizehints);
XFree(xsizehints);
- XClassHint * xclasshint = XAllocClassHint();
+ XClassHint *xclasshint = XAllocClassHint();
const int len = title.Length() + 1;
char *wmclass = (char *)malloc(sizeof(char) * len);
- strncpy(wmclass, (const char*)title, sizeof(char) * len);
+ strncpy(wmclass, (const char *)title, sizeof(char) * len);
xclasshint->res_name = wmclass;
xclasshint->res_class = wmclass;
XSetClassHint(m_display, m_window, xclasshint);
@@ -384,15 +382,15 @@ GHOST_WindowX11(
/* The basic for a good ICCCM "work" */
if (m_system->m_wm_protocols) {
- natom= 0;
+ natom = 0;
if (m_system->m_delete_window_atom) {
- atoms[natom]= m_system->m_delete_window_atom;
+ atoms[natom] = m_system->m_delete_window_atom;
natom++;
}
if (m_system->m_wm_take_focus) {
- atoms[natom]= m_system->m_wm_take_focus;
+ atoms[natom] = m_system->m_wm_take_focus;
natom++;
}
@@ -418,23 +416,24 @@ GHOST_WindowX11(
GC gc_icon = XCreateGC(display, icon_pixmap, 0, NULL);
GC gc_mask = XCreateGC(display, mask_pixmap, 0, NULL);
- x_image = XCreateImage( display, m_visual->visual, 24, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 32, 0 );
- mask_image = XCreateImage( display, m_visual->visual, 1, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 8, 0);
+ x_image = XCreateImage(display, m_visual->visual, 24, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 32, 0);
+ mask_image = XCreateImage(display, m_visual->visual, 1, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 8, 0);
x_image->data = (char *)malloc(x_image->bytes_per_line * BLENDER_ICON_HEIGHT);
- mask_image->data = (char *)malloc( mask_image->bytes_per_line * BLENDER_ICON_HEIGHT);
+ mask_image->data = (char *)malloc(mask_image->bytes_per_line * BLENDER_ICON_HEIGHT);
/* copy the BLENDER_ICON_48x48x24 into the XImage */
unsigned char *col = BLENDER_ICON_48x48x24;
int px, py;
- for (px=0; px<BLENDER_ICON_WIDTH; px++) {
- for (py=0; py<BLENDER_ICON_HEIGHT; py++, col+=3) {
+ for (px = 0; px < BLENDER_ICON_WIDTH; px++) {
+ for (py = 0; py < BLENDER_ICON_HEIGHT; py++, col += 3) {
/* mask out pink */
- if (col[0]==255 && col[1] == 0 && col[2]== 255) {
- XPutPixel(mask_image, px, py, 0 );
- } else {
- XPutPixel(x_image, px, py, (col[0]<<16)+(col[1]<<8)+col[2] );
- XPutPixel(mask_image, px, py, 1 );
+ if (col[0] == 255 && col[1] == 0 && col[2] == 255) {
+ XPutPixel(mask_image, px, py, 0);
+ }
+ else {
+ XPutPixel(x_image, px, py, (col[0] << 16) + (col[1] << 8) + col[2]);
+ XPutPixel(mask_image, px, py, 1);
}
}
}
@@ -445,15 +444,15 @@ GHOST_WindowX11(
// Now the pixmap is ok to assign to the window as a hint
xwmhints->icon_pixmap = icon_pixmap;
xwmhints->icon_mask = mask_pixmap;
- XFreeGC (display, gc_icon);
- XFreeGC (display, gc_mask);
- XDestroyImage( x_image ); /* frees x_image->data too */
- XDestroyImage( mask_image );
+ XFreeGC(display, gc_icon);
+ XFreeGC(display, gc_mask);
+ XDestroyImage(x_image); /* frees x_image->data too */
+ XDestroyImage(mask_image);
xwmhints->initial_state = NormalState;
- xwmhints->input= True;
- xwmhints->flags= InputHint|IconPixmapHint|IconMaskHint|StateHint;
- XSetWMHints(display, m_window, xwmhints );
+ xwmhints->input = True;
+ xwmhints->flags = InputHint | IconPixmapHint | IconMaskHint | StateHint;
+ XSetWMHints(display, m_window, xwmhints);
XFree(xwmhints);
// done setting the icon
@@ -477,15 +476,14 @@ GHOST_WindowX11(
#ifdef WITH_X11_XINPUT
/*
- Dummy function to get around IO Handler exiting if device invalid
- Basically it will not crash blender now if you have a X device that
- is configured but not plugged in.
-
-*/
+ * Dummy function to get around IO Handler exiting if device invalid
+ * Basically it will not crash blender now if you have a X device that
+ * is configured but not plugged in.
+ */
static int ApplicationErrorHandler(Display *display, XErrorEvent *theEvent)
{
fprintf(stderr, "Ignoring Xlib error: error code %d request code %d\n",
- theEvent->error_code, theEvent->request_code);
+ theEvent->error_code, theEvent->request_code);
/* No exit! - but keep lint happy */
return 0;
@@ -503,31 +501,31 @@ static bool match_token(const char *haystack, const char *needle)
{
while (*p && isspace(*p))
p++;
- if (! *p)
+ if (!*p)
break;
for (q = needle; *q && *p && tolower(*p) == tolower(*q); q++)
p++;
- if (! *q && (isspace(*p) || !*p))
+ if (!*q && (isspace(*p) || !*p))
return TRUE;
- while (*p && ! isspace(*p))
+ while (*p && !isspace(*p))
p++;
}
return FALSE;
}
-/* Determining if an X device is a Tablet style device is an imperfect science.
-** We rely on common conventions around device names as well as the type reported
-** by Wacom tablets. This code will likely need to be expanded for alternate tablet types
-**
-** Wintab refers to any device that interacts with the tablet as a cursor,
-** (stylus, eraser, tablet mouse, airbrush, etc)
-** this is not to be confused with wacom x11 configuration "cursor" device.
-** Wacoms x11 config "cursor" refers to its device slot (which we mirror with
-** our gSysCursors) for puck like devices (tablet mice essentially).
-*/
+/* Determining if an X device is a Tablet style device is an imperfect science.
+ * We rely on common conventions around device names as well as the type reported
+ * by Wacom tablets. This code will likely need to be expanded for alternate tablet types
+ *
+ * Wintab refers to any device that interacts with the tablet as a cursor,
+ * (stylus, eraser, tablet mouse, airbrush, etc)
+ * this is not to be confused with wacom x11 configuration "cursor" device.
+ * Wacoms x11 config "cursor" refers to its device slot (which we mirror with
+ * our gSysCursors) for puck like devices (tablet mice essentially).
+ */
#if 0 // unused
static BOOL is_tablet_cursor(const char *name, const char *type)
{
@@ -544,7 +542,7 @@ static BOOL is_tablet_cursor(const char *name, const char *type)
NULL
};
- for (i=0; tablet_cursor_whitelist[i] != NULL; i++) {
+ for (i = 0; tablet_cursor_whitelist[i] != NULL; i++) {
if (name && match_token(name, tablet_cursor_whitelist[i]))
return TRUE;
if (type && match_token(type, tablet_cursor_whitelist[i]))
@@ -556,14 +554,14 @@ static BOOL is_tablet_cursor(const char *name, const char *type)
static BOOL is_stylus(const char *name, const char *type)
{
int i;
- static const char* tablet_stylus_whitelist[] = {
+ static const char *tablet_stylus_whitelist[] = {
"stylus",
"wizardpen",
"acecad",
NULL
};
- for (i=0; tablet_stylus_whitelist[i] != NULL; i++) {
+ for (i = 0; tablet_stylus_whitelist[i] != NULL; i++) {
if (name && match_token(name, tablet_stylus_whitelist[i]))
return TRUE;
if (type && match_token(type, tablet_stylus_whitelist[i]))
@@ -591,35 +589,35 @@ void GHOST_WindowX11::initXInputDevices()
static XErrorHandler old_handler = (XErrorHandler) 0;
XExtensionVersion *version = XGetExtensionVersion(m_display, INAME);
- if(version && (version != (XExtensionVersion*)NoSuchExtension)) {
- if(version->present) {
+ if (version && (version != (XExtensionVersion *)NoSuchExtension)) {
+ if (version->present) {
int device_count;
- XDeviceInfo* device_info = XListInputDevices(m_display, &device_count);
+ XDeviceInfo *device_info = XListInputDevices(m_display, &device_count);
m_xtablet.StylusDevice = NULL;
m_xtablet.EraserDevice = NULL;
- m_xtablet.CommonData.Active= GHOST_kTabletModeNone;
+ m_xtablet.CommonData.Active = GHOST_kTabletModeNone;
/* Install our error handler to override Xlib's termination behavior */
old_handler = XSetErrorHandler(ApplicationErrorHandler);
- for(int i=0; i<device_count; ++i) {
+ for (int i = 0; i < device_count; ++i) {
char *device_type = device_info[i].type ? XGetAtomName(m_display, device_info[i].type) : NULL;
// printf("Tablet type:'%s', name:'%s', index:%d\n", device_type, device_info[i].name, i);
- if(m_xtablet.StylusDevice==NULL && is_stylus(device_info[i].name, device_type)) {
+ if (m_xtablet.StylusDevice == NULL && is_stylus(device_info[i].name, device_type)) {
// printf("\tfound stylus\n");
- m_xtablet.StylusID= device_info[i].id;
+ m_xtablet.StylusID = device_info[i].id;
m_xtablet.StylusDevice = XOpenDevice(m_display, m_xtablet.StylusID);
if (m_xtablet.StylusDevice != NULL) {
/* Find how many pressure levels tablet has */
XAnyClassPtr ici = device_info[i].inputclassinfo;
- for(int j=0; j<m_xtablet.StylusDevice->num_classes; ++j) {
- if(ici->c_class==ValuatorClass) {
+ for (int j = 0; j < m_xtablet.StylusDevice->num_classes; ++j) {
+ if (ici->c_class == ValuatorClass) {
// printf("\t\tfound ValuatorClass\n");
- XValuatorInfo* xvi = (XValuatorInfo*)ici;
+ XValuatorInfo *xvi = (XValuatorInfo *)ici;
m_xtablet.PressureLevels = xvi->axes[2].max_value;
/* this is assuming that the tablet has the same tilt resolution in both
@@ -631,19 +629,20 @@ void GHOST_WindowX11::initXInputDevices()
ici = (XAnyClassPtr)(((char *)ici) + ici->length);
}
- } else {
- m_xtablet.StylusID= 0;
+ }
+ else {
+ m_xtablet.StylusID = 0;
}
}
- else if(m_xtablet.EraserDevice==NULL && is_eraser(device_info[i].name, device_type)) {
+ else if (m_xtablet.EraserDevice == NULL && is_eraser(device_info[i].name, device_type)) {
// printf("\tfound eraser\n");
- m_xtablet.EraserID= device_info[i].id;
+ m_xtablet.EraserID = device_info[i].id;
m_xtablet.EraserDevice = XOpenDevice(m_display, m_xtablet.EraserID);
- if (m_xtablet.EraserDevice == NULL) m_xtablet.EraserID= 0;
+ if (m_xtablet.EraserDevice == NULL) m_xtablet.EraserID = 0;
}
- if(device_type) {
- XFree((void*)device_type);
+ if (device_type) {
+ XFree((void *)device_type);
}
}
@@ -656,21 +655,21 @@ void GHOST_WindowX11::initXInputDevices()
XEventClass xevents[10], ev;
int dcount = 0;
- if(m_xtablet.StylusDevice) {
+ if (m_xtablet.StylusDevice) {
DeviceMotionNotify(m_xtablet.StylusDevice, m_xtablet.MotionEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityIn(m_xtablet.StylusDevice, m_xtablet.ProxInEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityOut(m_xtablet.StylusDevice, m_xtablet.ProxOutEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
}
- if(m_xtablet.EraserDevice) {
+ if (m_xtablet.EraserDevice) {
DeviceMotionNotify(m_xtablet.EraserDevice, m_xtablet.MotionEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityIn(m_xtablet.EraserDevice, m_xtablet.ProxInEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityOut(m_xtablet.EraserDevice, m_xtablet.ProxOutEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
}
XSelectExtensionEvent(m_display, m_window, xevents, dcount);
@@ -681,73 +680,73 @@ void GHOST_WindowX11::initXInputDevices()
#endif /* WITH_X11_XINPUT */
- Window
+Window
GHOST_WindowX11::
-getXWindow(
-){
+getXWindow()
+{
return m_window;
}
- bool
+bool
GHOST_WindowX11::
-getValid(
-) const {
+getValid() const
+{
return m_valid_setup;
}
- void
+void
GHOST_WindowX11::
setTitle(
- const STR_String& title
-){
+ const STR_String& title)
+{
Atom name = XInternAtom(m_display, "_NET_WM_NAME", 0);
Atom utf8str = XInternAtom(m_display, "UTF8_STRING", 0);
XChangeProperty(m_display, m_window,
name, utf8str, 8, PropModeReplace,
- (const unsigned char*) title.ReadPtr(),
+ (const unsigned char *) title.ReadPtr(),
title.Length());
// This should convert to valid x11 string
// and getTitle would need matching change
- XStoreName(m_display,m_window,title);
+ XStoreName(m_display, m_window, title);
XFlush(m_display);
}
- void
+void
GHOST_WindowX11::
getTitle(
- STR_String& title
-) const {
+ STR_String& title) const
+{
char *name = NULL;
- XFetchName(m_display,m_window,&name);
- title= name?name:"untitled";
+ XFetchName(m_display, m_window, &name);
+ title = name ? name : "untitled";
XFree(name);
}
- void
+void
GHOST_WindowX11::
getWindowBounds(
- GHOST_Rect& bounds
-) const {
- // Getting the window bounds under X11 is not
- // really supported (nor should it be desired).
+ GHOST_Rect& bounds) const
+{
+ // Getting the window bounds under X11 is not
+ // really supported (nor should it be desired).
getClientBounds(bounds);
}
- void
+void
GHOST_WindowX11::
getClientBounds(
- GHOST_Rect& bounds
-) const {
+ GHOST_Rect& bounds) const
+{
Window root_return;
- int x_return,y_return;
- unsigned int w_return,h_return,border_w_return,depth_return;
+ int x_return, y_return;
+ unsigned int w_return, h_return, border_w_return, depth_return;
GHOST_TInt32 screen_x, screen_y;
- XGetGeometry(m_display,m_window,&root_return,&x_return,&y_return,
- &w_return,&h_return,&border_w_return,&depth_return);
+ XGetGeometry(m_display, m_window, &root_return, &x_return, &y_return,
+ &w_return, &h_return, &border_w_return, &depth_return);
clientToScreen(0, 0, screen_x, screen_y);
@@ -758,95 +757,88 @@ getClientBounds(
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setClientWidth(
- GHOST_TUns32 width
-){
+ GHOST_TUns32 width)
+{
XWindowChanges values;
- unsigned int value_mask= CWWidth;
+ unsigned int value_mask = CWWidth;
values.width = width;
- XConfigureWindow(m_display,m_window,value_mask,&values);
+ XConfigureWindow(m_display, m_window, value_mask, &values);
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setClientHeight(
- GHOST_TUns32 height
-){
+ GHOST_TUns32 height)
+{
XWindowChanges values;
- unsigned int value_mask= CWHeight;
+ unsigned int value_mask = CWHeight;
values.height = height;
- XConfigureWindow(m_display,m_window,value_mask,&values);
+ XConfigureWindow(m_display, m_window, value_mask, &values);
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setClientSize(
- GHOST_TUns32 width,
- GHOST_TUns32 height
-){
+ GHOST_TUns32 width,
+ GHOST_TUns32 height)
+{
XWindowChanges values;
- unsigned int value_mask= CWWidth | CWHeight;
+ unsigned int value_mask = CWWidth | CWHeight;
values.width = width;
values.height = height;
- XConfigureWindow(m_display,m_window,value_mask,&values);
+ XConfigureWindow(m_display, m_window, value_mask, &values);
return GHOST_kSuccess;
}
- void
+void
GHOST_WindowX11::
screenToClient(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
-) const {
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY) const
+{
// This is correct!
- int ax,ay;
+ int ax, ay;
Window temp;
- XTranslateCoordinates(
- m_display,
- RootWindow(m_display, m_visual->screen),
- m_window,
- inX,
- inY,
- &ax,
- &ay,
- &temp
- );
+ XTranslateCoordinates(m_display,
+ RootWindow(m_display, m_visual->screen),
+ m_window,
+ inX, inY,
+ &ax, &ay,
+ &temp);
outX = ax;
outY = ay;
}
- void
+void
GHOST_WindowX11::
clientToScreen(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
-) const {
- int ax,ay;
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY) const
+{
+ int ax, ay;
Window temp;
XTranslateCoordinates(
- m_display,
- m_window,
- RootWindow(m_display, m_visual->screen),
- inX,
- inY,
- &ax,
- &ay,
- &temp
- );
+ m_display,
+ m_window,
+ RootWindow(m_display, m_visual->screen),
+ inX, inY,
+ &ax, &ay,
+ &temp);
outX = ax;
outY = ay;
}
@@ -866,8 +858,8 @@ void GHOST_WindowX11::icccmSetState(int state)
xev.xclient.format = 32;
xev.xclient.message_type = m_system->m_wm_change_state;
xev.xclient.data.l[0] = state;
- XSendEvent (m_display, RootWindow(m_display, DefaultScreen(m_display)),
- False, SubstructureNotifyMask | SubstructureRedirectMask, &xev);
+ XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)),
+ False, SubstructureNotifyMask | SubstructureRedirectMask, &xev);
}
int GHOST_WindowX11::icccmGetState(void) const
@@ -879,8 +871,8 @@ int GHOST_WindowX11::icccmGetState(void) const
prop_ret = NULL;
st = XGetWindowProperty(m_display, m_window, m_system->m_wm_state, 0,
- 0x7fffffff, False, m_system->m_wm_state, &type_ret,
- &format_ret, &num_ret, &bytes_after, &prop_ret);
+ 0x7fffffff, False, m_system->m_wm_state, &type_ret,
+ &format_ret, &num_ret, &bytes_after, &prop_ret);
if ((st == Success) && (prop_ret) && (num_ret == 2))
st = prop_ret[0];
@@ -913,7 +905,7 @@ void GHOST_WindowX11::netwmMaximized(bool set)
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)),
- False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
+ False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
}
bool GHOST_WindowX11::netwmIsMaximized(void) const
@@ -927,8 +919,8 @@ bool GHOST_WindowX11::netwmIsMaximized(void) const
prop_ret = NULL;
st = False;
ret = XGetWindowProperty(m_display, m_window, m_system->m_net_state, 0,
- 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
- &num_ret, &bytes_after, &prop_ret);
+ 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
+ &num_ret, &bytes_after, &prop_ret);
if ((ret == Success) && (prop_ret) && (format_ret == 32)) {
count = 0;
for (i = 0; i < num_ret; i++) {
@@ -969,7 +961,7 @@ void GHOST_WindowX11::netwmFullScreen(bool set)
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)),
- False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
+ False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
}
bool GHOST_WindowX11::netwmIsFullScreen(void) const
@@ -983,8 +975,8 @@ bool GHOST_WindowX11::netwmIsFullScreen(void) const
prop_ret = NULL;
st = False;
ret = XGetWindowProperty(m_display, m_window, m_system->m_net_state, 0,
- 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
- &num_ret, &bytes_after, &prop_ret);
+ 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
+ &num_ret, &bytes_after, &prop_ret);
if ((ret == Success) && (prop_ret) && (format_ret == 32)) {
for (i = 0; i < num_ret; i++) {
if (((unsigned long *) prop_ret)[i] == m_system->m_net_fullscreen) {
@@ -1010,8 +1002,8 @@ void GHOST_WindowX11::motifFullScreen(bool set)
hints.decorations = 1;
XChangeProperty(m_display, m_window, m_system->m_motif,
- m_system->m_motif, 32, PropModeReplace,
- (unsigned char *) &hints, 4);
+ m_system->m_motif, 32, PropModeReplace,
+ (unsigned char *) &hints, 4);
}
bool GHOST_WindowX11::motifIsFullScreen(void) const
@@ -1026,9 +1018,9 @@ bool GHOST_WindowX11::motifIsFullScreen(void) const
prop_ret = NULL;
state = False;
st = XGetWindowProperty(m_display, m_window, m_system->m_motif, 0,
- 0x7fffffff, False, m_system->m_motif,
- &type_ret, &format_ret, &num_ret,
- &bytes_after, &prop_ret);
+ 0x7fffffff, False, m_system->m_motif,
+ &type_ret, &format_ret, &num_ret,
+ &bytes_after, &prop_ret);
if ((st == Success) && (prop_ret)) {
hints = (MotifWmHints *) prop_ret;
if (hints->flags & MWM_HINTS_DECORATIONS) {
@@ -1070,7 +1062,7 @@ GHOST_TSuccess GHOST_WindowX11::setState(GHOST_TWindowState state)
bool is_max, is_full, is_motif_full;
cur_state = getState();
- if (state == (int)cur_state)
+ if (state == (int)cur_state)
return GHOST_kSuccess;
if (cur_state != GHOST_kWindowStateMinimized) {
@@ -1153,11 +1145,11 @@ GHOST_TSuccess GHOST_WindowX11::setState(GHOST_TWindowState state)
#include <iostream>
using namespace std;
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setOrder(
- GHOST_TWindowOrder order
-){
+ GHOST_TWindowOrder order)
+{
if (order == GHOST_kWindowOrderTop) {
XWindowAttributes attr;
Atom atom;
@@ -1199,46 +1191,48 @@ setOrder(
/* iconized windows give bad match error */
if (attr.map_state == IsViewable)
XSetInputFocus(m_display, m_window, RevertToPointerRoot,
- CurrentTime);
+ CurrentTime);
XFlush(m_display);
- } else if (order == GHOST_kWindowOrderBottom) {
- XLowerWindow(m_display,m_window);
+ }
+ else if (order == GHOST_kWindowOrderBottom) {
+ XLowerWindow(m_display, m_window);
XFlush(m_display);
- } else {
+ }
+ else {
return GHOST_kFailure;
}
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-swapBuffers(
-){
+swapBuffers()
+{
if (getDrawingContextType() == GHOST_kDrawingContextTypeOpenGL) {
- glXSwapBuffers(m_display,m_window);
+ glXSwapBuffers(m_display, m_window);
return GHOST_kSuccess;
- } else {
+ }
+ else {
return GHOST_kFailure;
}
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-activateDrawingContext(
-){
- if (m_context !=NULL) {
- glXMakeCurrent(m_display, m_window,m_context);
+activateDrawingContext()
+{
+ if (m_context != NULL) {
+ glXMakeCurrent(m_display, m_window, m_context);
return GHOST_kSuccess;
}
return GHOST_kFailure;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-invalidate(
-){
-
+invalidate()
+{
// So the idea of this function is to generate an expose event
// for the window.
// Unfortunately X does not handle expose events for you and
@@ -1265,10 +1259,10 @@ invalidate(
* for the window have been pushed onto the GHOST queue
*/
- void
+void
GHOST_WindowX11::
-validate(
-){
+validate()
+{
m_invalid_window = false;
}
@@ -1280,7 +1274,7 @@ validate(
GHOST_WindowX11::
~GHOST_WindowX11(
-){
+ ){
static Atom Primary_atom, Clipboard_atom;
Window p_owner, c_owner;
/*Change the owner of the Atoms to None if we are the owner*/
@@ -1304,10 +1298,10 @@ GHOST_WindowX11::
#ifdef WITH_X11_XINPUT
/* close tablet devices */
- if(m_xtablet.StylusDevice)
+ if (m_xtablet.StylusDevice)
XCloseDevice(m_display, m_xtablet.StylusDevice);
- if(m_xtablet.EraserDevice)
+ if (m_xtablet.EraserDevice)
XCloseDevice(m_display, m_xtablet.EraserDevice);
#endif /* WITH_X11_XINPUT */
@@ -1344,36 +1338,37 @@ GHOST_WindowX11::
* @param type The type of rendering context installed.
* @return Indication as to whether installation has succeeded.
*/
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
installDrawingContext(
- GHOST_TDrawingContextType type
-){
+ GHOST_TDrawingContextType type)
+{
// only support openGL for now.
GHOST_TSuccess success;
switch (type) {
- case GHOST_kDrawingContextTypeOpenGL:
- m_context = glXCreateContext(m_display, m_visual, s_firstContext, True);
- if (m_context !=NULL) {
- if (!s_firstContext) {
- s_firstContext = m_context;
+ case GHOST_kDrawingContextTypeOpenGL:
+ m_context = glXCreateContext(m_display, m_visual, s_firstContext, True);
+ if (m_context != NULL) {
+ if (!s_firstContext) {
+ s_firstContext = m_context;
+ }
+ glXMakeCurrent(m_display, m_window, m_context);
+ glClearColor(0.447, 0.447, 0.447, 0);
+ glClear(GL_COLOR_BUFFER_BIT);
+ success = GHOST_kSuccess;
+ }
+ else {
+ success = GHOST_kFailure;
}
- glXMakeCurrent(m_display, m_window,m_context);
- glClearColor(0.447, 0.447, 0.447, 0);
- glClear(GL_COLOR_BUFFER_BIT);
- success = GHOST_kSuccess;
- } else {
- success = GHOST_kFailure;
- }
- break;
+ break;
- case GHOST_kDrawingContextTypeNone:
- success = GHOST_kSuccess;
- break;
+ case GHOST_kDrawingContextTypeNone:
+ success = GHOST_kSuccess;
+ break;
- default:
- success = GHOST_kFailure;
+ default:
+ success = GHOST_kFailure;
}
return success;
}
@@ -1384,55 +1379,56 @@ installDrawingContext(
* Removes the current drawing context.
* @return Indication as to whether removal has succeeded.
*/
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-removeDrawingContext(
-){
+removeDrawingContext()
+{
GHOST_TSuccess success;
if (m_context != NULL) {
glXDestroyContext(m_display, m_context);
success = GHOST_kSuccess;
- } else {
+ }
+ else {
success = GHOST_kFailure;
}
return success;
}
- Cursor
+Cursor
GHOST_WindowX11::
getStandardCursor(
- GHOST_TStandardCursor g_cursor
-){
+ GHOST_TStandardCursor g_cursor)
+{
unsigned int xcursor_id;
-#define GtoX(gcurs, xcurs) case gcurs: xcursor_id = xcurs
+#define GtoX(gcurs, xcurs) case gcurs: xcursor_id = xcurs
switch (g_cursor) {
- GtoX(GHOST_kStandardCursorRightArrow, XC_arrow); break;
- GtoX(GHOST_kStandardCursorLeftArrow, XC_top_left_arrow); break;
- GtoX(GHOST_kStandardCursorInfo, XC_hand1); break;
- GtoX(GHOST_kStandardCursorDestroy, XC_pirate); break;
- GtoX(GHOST_kStandardCursorHelp, XC_question_arrow); break;
- GtoX(GHOST_kStandardCursorCycle, XC_exchange); break;
- GtoX(GHOST_kStandardCursorSpray, XC_spraycan); break;
- GtoX(GHOST_kStandardCursorWait, XC_watch); break;
- GtoX(GHOST_kStandardCursorText, XC_xterm); break;
- GtoX(GHOST_kStandardCursorCrosshair, XC_crosshair); break;
- GtoX(GHOST_kStandardCursorUpDown, XC_sb_v_double_arrow); break;
- GtoX(GHOST_kStandardCursorLeftRight, XC_sb_h_double_arrow); break;
- GtoX(GHOST_kStandardCursorTopSide, XC_top_side); break;
- GtoX(GHOST_kStandardCursorBottomSide, XC_bottom_side); break;
- GtoX(GHOST_kStandardCursorLeftSide, XC_left_side); break;
- GtoX(GHOST_kStandardCursorRightSide, XC_right_side); break;
- GtoX(GHOST_kStandardCursorTopLeftCorner, XC_top_left_corner); break;
- GtoX(GHOST_kStandardCursorTopRightCorner, XC_top_right_corner); break;
- GtoX(GHOST_kStandardCursorBottomRightCorner, XC_bottom_right_corner); break;
- GtoX(GHOST_kStandardCursorBottomLeftCorner, XC_bottom_left_corner); break;
- GtoX(GHOST_kStandardCursorPencil, XC_pencil); break;
- GtoX(GHOST_kStandardCursorCopy, XC_arrow); break;
- default:
- xcursor_id = 0;
+ GtoX(GHOST_kStandardCursorRightArrow, XC_arrow); break;
+ GtoX(GHOST_kStandardCursorLeftArrow, XC_top_left_arrow); break;
+ GtoX(GHOST_kStandardCursorInfo, XC_hand1); break;
+ GtoX(GHOST_kStandardCursorDestroy, XC_pirate); break;
+ GtoX(GHOST_kStandardCursorHelp, XC_question_arrow); break;
+ GtoX(GHOST_kStandardCursorCycle, XC_exchange); break;
+ GtoX(GHOST_kStandardCursorSpray, XC_spraycan); break;
+ GtoX(GHOST_kStandardCursorWait, XC_watch); break;
+ GtoX(GHOST_kStandardCursorText, XC_xterm); break;
+ GtoX(GHOST_kStandardCursorCrosshair, XC_crosshair); break;
+ GtoX(GHOST_kStandardCursorUpDown, XC_sb_v_double_arrow); break;
+ GtoX(GHOST_kStandardCursorLeftRight, XC_sb_h_double_arrow); break;
+ GtoX(GHOST_kStandardCursorTopSide, XC_top_side); break;
+ GtoX(GHOST_kStandardCursorBottomSide, XC_bottom_side); break;
+ GtoX(GHOST_kStandardCursorLeftSide, XC_left_side); break;
+ GtoX(GHOST_kStandardCursorRightSide, XC_right_side); break;
+ GtoX(GHOST_kStandardCursorTopLeftCorner, XC_top_left_corner); break;
+ GtoX(GHOST_kStandardCursorTopRightCorner, XC_top_right_corner); break;
+ GtoX(GHOST_kStandardCursorBottomRightCorner, XC_bottom_right_corner); break;
+ GtoX(GHOST_kStandardCursorBottomLeftCorner, XC_bottom_left_corner); break;
+ GtoX(GHOST_kStandardCursorPencil, XC_pencil); break;
+ GtoX(GHOST_kStandardCursorCopy, XC_arrow); break;
+ default:
+ xcursor_id = 0;
}
#undef GtoX
@@ -1446,26 +1442,27 @@ getStandardCursor(
}
return xcursor;
- } else {
+ }
+ else {
return None;
}
}
- Cursor
+Cursor
GHOST_WindowX11::
getEmptyCursor(
-) {
+ ) {
if (!m_empty_cursor) {
Pixmap blank;
XColor dummy;
char data[1] = {0};
/* make a blank cursor */
- blank = XCreateBitmapFromData (
- m_display,
- RootWindow(m_display,DefaultScreen(m_display)),
- data, 1, 1
- );
+ blank = XCreateBitmapFromData(
+ m_display,
+ RootWindow(m_display, DefaultScreen(m_display)),
+ data, 1, 1
+ );
m_empty_cursor = XCreatePixmapCursor(m_display, blank, blank, &dummy, &dummy, 0, 0);
XFreePixmap(m_display, blank);
@@ -1474,16 +1471,17 @@ getEmptyCursor(
return m_empty_cursor;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCursorVisibility(
- bool visible
-){
+ bool visible)
+{
Cursor xcursor;
if (visible) {
- xcursor = getStandardCursor( getCursorShape() );
- } else {
+ xcursor = getStandardCursor(getCursorShape() );
+ }
+ else {
xcursor = getEmptyCursor();
}
@@ -1493,17 +1491,17 @@ setWindowCursorVisibility(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCursorGrab(
- GHOST_TGrabCursorMode mode
-){
- if(mode != GHOST_kGrabDisable) {
- if(mode != GHOST_kGrabNormal) {
+ GHOST_TGrabCursorMode mode)
+{
+ if (mode != GHOST_kGrabDisable) {
+ if (mode != GHOST_kGrabNormal) {
m_system->getCursorPosition(m_cursorGrabInitPos[0], m_cursorGrabInitPos[1]);
setCursorGrabAccum(0, 0);
- if(mode == GHOST_kGrabHide)
+ if (mode == GHOST_kGrabHide)
setWindowCursorVisibility(false);
}
@@ -1513,21 +1511,21 @@ setWindowCursorGrab(
#endif
}
else {
- if (m_cursorGrab==GHOST_kGrabHide) {
+ if (m_cursorGrab == GHOST_kGrabHide) {
m_system->setCursorPosition(m_cursorGrabInitPos[0], m_cursorGrabInitPos[1]);
setWindowCursorVisibility(true);
}
- if(m_cursorGrab != GHOST_kGrabNormal) {
+ if (m_cursorGrab != GHOST_kGrabNormal) {
/* use to generate a mouse move event, otherwise the last event
* blender gets can be outside the screen causing menus not to show
* properly unless the user moves the mouse */
- XWarpPointer(m_display,None,None,0,0,0,0,0,0);
+ XWarpPointer(m_display, None, None, 0, 0, 0, 0, 0, 0);
}
/* Almost works without but important otherwise the mouse GHOST location can be incorrect on exit */
setCursorGrabAccum(0, 0);
- m_cursorGrabBounds.m_l= m_cursorGrabBounds.m_r= -1; /* disable */
+ m_cursorGrabBounds.m_l = m_cursorGrabBounds.m_r = -1; /* disable */
#ifdef GHOST_X11_GRAB
XUngrabPointer(m_display, CurrentTime);
#endif
@@ -1538,12 +1536,12 @@ setWindowCursorGrab(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCursorShape(
- GHOST_TStandardCursor shape
-){
- Cursor xcursor = getStandardCursor( shape );
+ GHOST_TStandardCursor shape)
+{
+ Cursor xcursor = getStandardCursor(shape);
XDefineCursor(m_display, m_window, xcursor);
XFlush(m_display);
@@ -1551,45 +1549,44 @@ setWindowCursorShape(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCustomCursorShape(
- GHOST_TUns8 bitmap[16][2],
- GHOST_TUns8 mask[16][2],
- int hotX,
- int hotY
-){
-
-setWindowCustomCursorShape((GHOST_TUns8*)bitmap, (GHOST_TUns8*)mask,
- 16, 16, hotX, hotY, 0, 1);
+ GHOST_TUns8 bitmap[16][2],
+ GHOST_TUns8 mask[16][2],
+ int hotX,
+ int hotY)
+{
+ setWindowCustomCursorShape((GHOST_TUns8 *)bitmap, (GHOST_TUns8 *)mask,
+ 16, 16, hotX, hotY, 0, 1);
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCustomCursorShape(
- GHOST_TUns8 *bitmap,
- GHOST_TUns8 *mask,
- int sizex,
- int sizey,
- int hotX,
- int hotY,
- int fg_color,
- int bg_color
-){
- Colormap colormap= DefaultColormap(m_display, DefaultScreen(m_display));
+ GHOST_TUns8 *bitmap,
+ GHOST_TUns8 *mask,
+ int sizex,
+ int sizey,
+ int hotX,
+ int hotY,
+ int fg_color,
+ int bg_color)
+{
+ Colormap colormap = DefaultColormap(m_display, DefaultScreen(m_display));
Pixmap bitmap_pix, mask_pix;
XColor fg, bg;
- if(XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure;
- if(XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure;
+ if (XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure;
+ if (XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure;
if (m_custom_cursor) {
XFreeCursor(m_display, m_custom_cursor);
}
- bitmap_pix = XCreateBitmapFromData(m_display, m_window, (char*) bitmap, sizex, sizey);
- mask_pix = XCreateBitmapFromData(m_display, m_window, (char*) mask, sizex, sizey);
+ bitmap_pix = XCreateBitmapFromData(m_display, m_window, (char *) bitmap, sizex, sizey);
+ mask_pix = XCreateBitmapFromData(m_display, m_window, (char *) mask, sizex, sizey);
m_custom_cursor = XCreatePixmapCursor(m_display, bitmap_pix, mask_pix, &fg, &bg, hotX, hotY);
XDefineCursor(m_display, m_window, m_custom_cursor);
@@ -1598,8 +1595,8 @@ setWindowCustomCursorShape(
XFreePixmap(m_display, bitmap_pix);
XFreePixmap(m_display, mask_pix);
- XFreeColors(m_display, colormap, &fg.pixel, 1, 0L);
- XFreeColors(m_display, colormap, &bg.pixel, 1, 0L);
+ XFreeColors(m_display, colormap, &fg.pixel, 1, 0L);
+ XFreeColors(m_display, colormap, &bg.pixel, 1, 0L);
return GHOST_kSuccess;
}
diff --git a/intern/ghost/intern/GHOST_WindowX11.h b/intern/ghost/intern/GHOST_WindowX11.h
index cb3c1415a28..a04a43bc33a 100644
--- a/intern/ghost/intern/GHOST_WindowX11.h
+++ b/intern/ghost/intern/GHOST_WindowX11.h
@@ -70,110 +70,110 @@ public:
* @param width The width the window.
* @param height The height the window.
* @param state The state the window is initially opened with.
- * @param parentWindow Parent (embedder) window
+ * @param parentWindow Parent (embedder) window
* @param type The type of drawing context installed in this window.
* @param stereoVisual Stereo visual for quad buffered stereo.
* @param numOfAASamples Number of samples used for AA (zero if no AA)
*/
GHOST_WindowX11(
- GHOST_SystemX11 *system,
- Display * display,
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- const GHOST_TEmbedderWindowID parentWindow,
- GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
- const bool stereoVisual = false,
- const GHOST_TUns16 numOfAASamples = 0
- );
-
- bool
+ GHOST_SystemX11 *system,
+ Display *display,
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ const GHOST_TEmbedderWindowID parentWindow,
+ GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
+ const bool stereoVisual = false,
+ const GHOST_TUns16 numOfAASamples = 0
+ );
+
+ bool
getValid(
- ) const;
+ ) const;
- void
+ void
setTitle(const STR_String& title);
- void
+ void
getTitle(
- STR_String& title
- ) const;
+ STR_String& title
+ ) const;
- void
+ void
getWindowBounds(
- GHOST_Rect& bounds
- ) const;
+ GHOST_Rect& bounds
+ ) const;
- void
+ void
getClientBounds(
- GHOST_Rect& bounds
- ) const;
+ GHOST_Rect& bounds
+ ) const;
- GHOST_TSuccess
+ GHOST_TSuccess
setClientWidth(
- GHOST_TUns32 width
- );
+ GHOST_TUns32 width
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
setClientHeight(
- GHOST_TUns32 height
- );
+ GHOST_TUns32 height
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
setClientSize(
- GHOST_TUns32 width,
- GHOST_TUns32 height
- );
+ GHOST_TUns32 width,
+ GHOST_TUns32 height
+ );
- void
+ void
screenToClient(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
- ) const;
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY
+ ) const;
- void
+ void
clientToScreen(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
- ) const;
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY
+ ) const;
- GHOST_TWindowState
+ GHOST_TWindowState
getState(
- ) const;
+ ) const;
- GHOST_TSuccess
+ GHOST_TSuccess
setState(
- GHOST_TWindowState state
- );
+ GHOST_TWindowState state
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
setOrder(
- GHOST_TWindowOrder order
- );
+ GHOST_TWindowOrder order
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
swapBuffers(
- );
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
activateDrawingContext(
- );
- GHOST_TSuccess
+ );
+ GHOST_TSuccess
invalidate(
- );
+ );
/**
* Destructor.
* Closes the window and disposes resources allocated.
*/
- ~GHOST_WindowX11();
+ ~GHOST_WindowX11();
/**
* @section x11specific X11 system specific calls
@@ -185,24 +185,24 @@ public:
* the GHOST event queue.
*/
- void
+ void
validate(
- );
+ );
/**
* Return a handle to the x11 window type.
*/
- Window
+ Window
getXWindow(
- );
+ );
#ifdef WITH_X11_XINPUT
class XTablet
{
- public:
+public:
GHOST_TabletData CommonData;
- XDevice* StylusDevice;
- XDevice* EraserDevice;
+ XDevice *StylusDevice;
+ XDevice *EraserDevice;
XID StylusID, EraserID;
@@ -215,22 +215,32 @@ public:
};
XTablet& GetXTablet()
- { return m_xtablet; }
+ {
+ return m_xtablet;
+ }
- const GHOST_TabletData* GetTabletData()
- { return &m_xtablet.CommonData; }
+ const GHOST_TabletData *GetTabletData()
+ {
+ return &m_xtablet.CommonData;
+ }
#else // WITH_X11_XINPUT
- const GHOST_TabletData* GetTabletData()
- { return NULL; }
+ const GHOST_TabletData *GetTabletData()
+ {
+ return NULL;
+ }
#endif // WITH_X11_XINPUT
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
- XIC getX11_XIC() { return m_xic; }
+ XIC getX11_XIC() {
+ return m_xic;
+ }
#endif
#ifdef WITH_XDND
- GHOST_DropTargetX11* getDropTarget()
- { return m_dropTarget; }
+ GHOST_DropTargetX11 *getDropTarget()
+ {
+ return m_dropTarget;
+ }
#endif
/*
@@ -247,106 +257,106 @@ protected:
* @param type The type of rendering context installed.
* @return Indication as to whether installation has succeeded.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
installDrawingContext(
- GHOST_TDrawingContextType type
- );
+ GHOST_TDrawingContextType type
+ );
/**
* Removes the current drawing context.
* @return Indication as to whether removal has succeeded.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
removeDrawingContext(
- );
+ );
/**
* Sets the cursor visibility on the window using
* native window system calls.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCursorVisibility(
- bool visible
- );
+ bool visible
+ );
/**
* Sets the cursor grab on the window using
* native window system calls.
* @param warp Only used when grab is enabled, hides the mouse and allows gragging outside the screen.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCursorGrab(
- GHOST_TGrabCursorMode mode
- );
+ GHOST_TGrabCursorMode mode
+ );
- GHOST_TGrabCursorMode
+ GHOST_TGrabCursorMode
getWindowCursorGrab() const;
/**
* Sets the cursor shape on the window using
* native window system calls.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCursorShape(
- GHOST_TStandardCursor shape
- );
+ GHOST_TStandardCursor shape
+ );
/**
* Sets the cursor shape on the window using
* native window system calls.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCustomCursorShape(
- GHOST_TUns8 bitmap[16][2],
- GHOST_TUns8 mask[16][2],
- int hotX,
- int hotY
- );
+ GHOST_TUns8 bitmap[16][2],
+ GHOST_TUns8 mask[16][2],
+ int hotX,
+ int hotY
+ );
/**
* Sets the cursor shape on the window using
* native window system calls (Arbitrary size/color).
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCustomCursorShape(
- GHOST_TUns8 *bitmap,
- GHOST_TUns8 *mask,
- int sizex,
- int sizey,
- int hotX,
- int hotY,
- int fg_color,
- int bg_color
- );
-
-private :
+ GHOST_TUns8 *bitmap,
+ GHOST_TUns8 *mask,
+ int sizex,
+ int sizey,
+ int hotX,
+ int hotY,
+ int fg_color,
+ int bg_color
+ );
+
+private:
/// Force use of public constructor.
GHOST_WindowX11(
- );
+ );
GHOST_WindowX11(
- const GHOST_WindowX11 &
- );
+ const GHOST_WindowX11 &
+ );
- Cursor
+ Cursor
getStandardCursor(
- GHOST_TStandardCursor g_cursor
- );
+ GHOST_TStandardCursor g_cursor
+ );
- Cursor
+ Cursor
getEmptyCursor(
- );
+ );
#ifdef WITH_X11_XINPUT
void initXInputDevices();
#endif
- GLXContext m_context;
- Window m_window;
- Display *m_display;
- XVisualInfo *m_visual;
+ GLXContext m_context;
+ Window m_window;
+ Display *m_display;
+ XVisualInfo *m_visual;
GHOST_TWindowState m_normal_state;
/** The first created OpenGL context (for sharing display lists) */
@@ -354,7 +364,7 @@ private :
/// A pointer to the typed system class.
- GHOST_SystemX11 * m_system;
+ GHOST_SystemX11 *m_system;
bool m_valid_setup;
@@ -371,7 +381,7 @@ private :
std::map<unsigned int, Cursor> m_standard_cursors;
#ifdef WITH_XDND
- GHOST_DropTargetX11 * m_dropTarget;
+ GHOST_DropTargetX11 *m_dropTarget;
#endif
#ifdef WITH_X11_XINPUT
diff --git a/release/scripts/startup/bl_operators/console.py b/release/scripts/startup/bl_operators/console.py
index 099cb02564d..ff87f98658d 100644
--- a/release/scripts/startup/bl_operators/console.py
+++ b/release/scripts/startup/bl_operators/console.py
@@ -24,7 +24,9 @@ from bpy.props import StringProperty
def _lang_module_get(sc):
- return __import__("console_" + sc.language)
+ return __import__("console_" + sc.language,
+ # for python 3.3, maybe a bug???
+ level=0)
class ConsoleExec(Operator):
diff --git a/release/scripts/startup/bl_operators/image.py b/release/scripts/startup/bl_operators/image.py
index 6af6488e86b..f2e5e57fad8 100644
--- a/release/scripts/startup/bl_operators/image.py
+++ b/release/scripts/startup/bl_operators/image.py
@@ -121,12 +121,14 @@ class SaveDirty(Operator):
if image.packed_file:
if image.library:
self.report({'WARNING'},
- "Packed library image: %r from library %r can't be re-packed" %
+ "Packed library image: %r from library %r"
+ " can't be re-packed" %
(image.name, image.library.filepath))
else:
image.pack(as_png=True)
else:
- filepath = bpy.path.abspath(image.filepath, library=image.library)
+ filepath = bpy.path.abspath(image.filepath,
+ library=image.library)
if "\\" not in filepath and "/" not in filepath:
self.report({'WARNING'}, "Invalid path: " + filepath)
elif filepath in unique_paths:
diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py
index 8268d7a9514..358919ac888 100644
--- a/release/scripts/startup/bl_operators/object.py
+++ b/release/scripts/startup/bl_operators/object.py
@@ -104,24 +104,29 @@ class SelectPattern(Operator):
class SelectCamera(Operator):
- '''Select object matching a naming pattern'''
+ '''Select the active camera'''
bl_idname = "object.select_camera"
bl_label = "Select Camera"
bl_options = {'REGISTER', 'UNDO'}
- @classmethod
- def poll(cls, context):
- return context.scene.camera is not None
-
def execute(self, context):
scene = context.scene
- camera = scene.camera
- if camera.name not in scene.objects:
+ view = context.space_data
+ if view.type == 'VIEW_3D' and not view.lock_camera_and_layers:
+ camera = view.camera
+ else:
+ camera = scene.camera
+
+ if camera is None:
+ self.report({'WARNING'}, "No camera found")
+ elif camera.name not in scene.objects:
self.report({'WARNING'}, "Active camera is not in this scene")
+ else:
+ context.scene.objects.active = camera
+ camera.select = True
+ return {'FINISHED'}
- context.scene.objects.active = camera
- camera.select = True
- return {'FINISHED'}
+ return {'CANCELLED'}
class SelectHierarchy(Operator):
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index 6297945f8bd..05f7f3f0367 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -93,6 +93,29 @@ class AddPresetBase():
filepath,
preset_menu_class.preset_xml_map)
else:
+
+ def rna_recursive_attr_expand(value, rna_path_step, level):
+ if isinstance(value, bpy.types.PropertyGroup):
+ for sub_value_attr in value.bl_rna.properties.keys():
+ if sub_value_attr == "rna_type":
+ continue
+ sub_value = getattr(value, sub_value_attr)
+ rna_recursive_attr_expand(sub_value, "%s.%s" % (rna_path_step, sub_value_attr), level)
+ elif type(value).__name__ == "bpy_prop_collection_idprop": # could use nicer method
+ file_preset.write("%s.clear()\n" % rna_path_step)
+ for sub_value in value:
+ file_preset.write("item_sub_%d = %s.add()\n" % (level, rna_path_step))
+ rna_recursive_attr_expand(sub_value, "item_sub_%d" % level, level + 1)
+ else:
+ # convert thin wrapped sequences
+ # to simple lists to repr()
+ try:
+ value = value[:]
+ except:
+ pass
+
+ file_preset.write("%s = %r\n" % (rna_path_step, value))
+
file_preset = open(filepath, 'w')
file_preset.write("import bpy\n")
@@ -104,14 +127,7 @@ class AddPresetBase():
for rna_path in self.preset_values:
value = eval(rna_path)
- # convert thin wrapped sequences
- # to simple lists to repr()
- try:
- value = value[:]
- except:
- pass
-
- file_preset.write("%s = %r\n" % (rna_path, value))
+ rna_recursive_attr_expand(value, rna_path, 1)
file_preset.close()
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 926ad9b94f7..883bac84e78 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -764,6 +764,7 @@ class WM_OT_path_open(Operator):
filepath = StringProperty(
subtype='FILE_PATH',
+ options={'SKIP_SAVE'},
)
def execute(self, context):
@@ -771,7 +772,13 @@ class WM_OT_path_open(Operator):
import os
import subprocess
- filepath = bpy.path.abspath(self.filepath)
+ filepath = self.filepath
+
+ if not filepath:
+ self.report({'ERROR'}, "File path was not set")
+ return {'CANCELLED'}
+
+ filepath = bpy.path.abspath(filepath)
filepath = os.path.normpath(filepath)
if not os.path.exists(filepath):
@@ -1538,6 +1545,65 @@ class WM_OT_addon_disable(Operator):
addon_utils.disable(self.module)
return {'FINISHED'}
+class WM_OT_theme_install(Operator):
+ "Install a theme"
+ bl_idname = "wm.theme_install"
+ bl_label = "Install Theme..."
+
+ overwrite = BoolProperty(
+ name="Overwrite",
+ description="Remove existing theme file if exists",
+ default=True,
+ )
+ filepath = StringProperty(
+ subtype='FILE_PATH',
+ )
+ filter_folder = BoolProperty(
+ name="Filter folders",
+ default=True,
+ options={'HIDDEN'},
+ )
+ filter_glob = StringProperty(
+ default="*.xml",
+ options={'HIDDEN'},
+ )
+
+ def execute(self, context):
+ import os
+ import shutil
+ import traceback
+
+ xmlfile = self.filepath
+
+ path_themes = bpy.utils.user_resource('SCRIPTS','presets/interface_theme',create=True)
+
+ if not path_themes:
+ self.report({'ERROR'}, "Failed to get themes path")
+ return {'CANCELLED'}
+
+ path_dest = os.path.join(path_themes, os.path.basename(xmlfile))
+
+ if not self.overwrite:
+ if os.path.exists(path_dest):
+ self.report({'WARNING'}, "File already installed to %r\n" % path_dest)
+ return {'CANCELLED'}
+
+ try:
+ shutil.copyfile(xmlfile, path_dest)
+ bpy.ops.script.execute_preset(filepath=path_dest,menu_idname="USERPREF_MT_interface_theme_presets")
+
+ except:
+ traceback.print_exc()
+ return {'CANCELLED'}
+
+ return {'FINISHED'}
+
+
+ def invoke(self, context, event):
+ wm = context.window_manager
+ wm.fileselect_add(self)
+ return {'RUNNING_MODAL'}
+
class WM_OT_addon_install(Operator):
"Install an addon"
diff --git a/release/scripts/startup/bl_ui/properties_animviz.py b/release/scripts/startup/bl_ui/properties_animviz.py
index 1f798f46590..3c1f910814a 100644
--- a/release/scripts/startup/bl_ui/properties_animviz.py
+++ b/release/scripts/startup/bl_ui/properties_animviz.py
@@ -35,7 +35,7 @@ class MotionPathButtonsPanel():
layout = self.layout
mps = avs.motion_path
-
+
# Display Range
layout.prop(mps, "type", expand=True)
@@ -50,21 +50,21 @@ class MotionPathButtonsPanel():
elif (mps.type == 'RANGE'):
sub.prop(mps, "frame_start", text="Start")
sub.prop(mps, "frame_end", text="End")
-
+
sub.prop(mps, "frame_step", text="Step")
-
+
col = split.column()
if bones:
col.label(text="Cache for Bone:")
else:
col.label(text="Cache:")
-
+
if mpath:
sub = col.column(align=True)
sub.enabled = False
sub.prop(mpath, "frame_start", text="From")
sub.prop(mpath, "frame_end", text="To")
-
+
if bones:
col.operator("pose.paths_update", text="Update Paths", icon='BONE_DATA')
else:
@@ -72,15 +72,14 @@ class MotionPathButtonsPanel():
else:
col.label(text="Not available yet...", icon='ERROR')
col.label(text="Calculate Paths first", icon='INFO')
-
-
+
# Display Settings
split = layout.split()
-
+
col = split.column()
col.label(text="Show:")
col.prop(mps, "show_frame_numbers", text="Frame Numbers")
-
+
col = split.column()
col.prop(mps, "show_keyframe_highlight", text="Keyframes")
sub = col.column()
diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py
index 529d7c5f981..6bec652045e 100644
--- a/release/scripts/startup/bl_ui/properties_data_armature.py
+++ b/release/scripts/startup/bl_ui/properties_data_armature.py
@@ -305,10 +305,10 @@ class DATA_PT_motion_paths(MotionPathButtonsPanel, Panel):
ob = context.object
avs = ob.pose.animation_visualisation
-
+
pchan = context.active_pose_bone
mpath = pchan.motion_path if pchan else None
-
+
self.draw_settings(context, avs, mpath, bones=True)
diff --git a/release/scripts/startup/bl_ui/properties_data_bone.py b/release/scripts/startup/bl_ui/properties_data_bone.py
index 10c4c1fdd04..11524cf9c03 100644
--- a/release/scripts/startup/bl_ui/properties_data_bone.py
+++ b/release/scripts/startup/bl_ui/properties_data_bone.py
@@ -356,9 +356,6 @@ class BONE_PT_deform(BoneButtonsPanel, Panel):
sub.prop(bone, "bbone_in", text="Ease In")
sub.prop(bone, "bbone_out", text="Ease Out")
- col.label(text="Offset:")
- col.prop(bone, "use_cyclic_offset")
-
class BONE_PT_custom_props(BoneButtonsPanel, PropertyPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index b46f0fc8923..218585c320f 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -547,6 +547,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "angle")
col.prop(md, "steps")
col.prop(md, "render_steps")
+ col.prop(md, "use_smooth_shade")
col = split.column()
row = col.row()
@@ -838,6 +839,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
if md.mode == 'SHARP':
layout.prop(md, "sharpness")
+ layout.prop(md, "use_smooth_shade")
layout.prop(md, "remove_disconnected_pieces")
row = layout.row()
row.active = md.remove_disconnected_pieces
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index cdef7e703e5..4f3ca26725c 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -301,7 +301,7 @@ class OBJECT_PT_motion_paths(MotionPathButtonsPanel, Panel):
ob = context.object
avs = ob.animation_visualisation
mpath = ob.motion_path
-
+
self.draw_settings(context, avs, mpath)
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index 94df1ed6cf5..53cf640beb9 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -67,3 +67,37 @@ class UnifiedPaintPanel():
ups = context.tool_settings.unified_paint_settings
ptr = ups if ups.use_unified_weight else brush
parent.prop(ptr, prop_name, icon=icon, text=text, slider=slider)
+
+
+# Used in both the View3D toolbar and texture properties
+def sculpt_brush_texture_settings(layout, brush):
+ tex_slot = brush.texture_slot
+
+ layout.label(text="Brush Mapping:")
+
+ # map_mode
+ layout.row().prop(tex_slot, "map_mode", text="")
+ layout.separator()
+
+ # angle and texture_angle_source
+ col = layout.column()
+ col.active = brush.sculpt_capabilities.has_texture_angle_source
+ col.label(text="Angle:")
+ if brush.sculpt_capabilities.has_random_texture_angle:
+ col.prop(brush, "texture_angle_source_random", text="")
+ else:
+ col.prop(brush, "texture_angle_source_no_random", text="")
+
+ col = layout.column()
+ col.active = brush.sculpt_capabilities.has_texture_angle
+ col.prop(tex_slot, "angle", text="")
+
+ # scale and offset
+ split = layout.split()
+ split.prop(tex_slot, "offset")
+ split.prop(tex_slot, "scale")
+
+ # texture_sample_bias
+ col = layout.column(align=True)
+ col.label(text="Sample Bias:")
+ col.prop(brush, "texture_sample_bias", slider=True, text="")
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py
index 2229b9dc3da..2054215df4a 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -112,7 +112,6 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
col = split.column()
col.prop(field, "use_object_coords")
- col.prop(field, "use_root_coords")
col.prop(field, "use_2d_force")
else:
basic_force_field_settings_ui(self, context, field)
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 1c78549c086..af8fcc6cbdc 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -122,7 +122,7 @@ class SCENE_PT_keying_sets(SceneButtonsPanel, Panel):
subcol.operator_context = 'INVOKE_DEFAULT'
subcol.operator("anim.keying_set_export", text="Export to File").filepath = "keyingset.py"
- col = row.column()
+ col = row.column(align=True)
col.label(text="Keyframing Settings:")
col.prop(ks, "bl_options")
@@ -161,20 +161,25 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel, Panel):
col.template_any_ID(ksp, "id", "id_type")
col.template_path_builder(ksp, "data_path", ksp.id)
- row = layout.row()
+ row = col.row(align=True)
+ row.label(text="Array Target:")
+ row.prop(ksp, "use_entire_array", text="All Items")
+ if ksp.use_entire_array:
+ row.label(text=" ") # padding
+ else:
+ row.prop(ksp, "array_index", text="Index")
- col = row.column()
- col.label(text="Array Target:")
- col.prop(ksp, "use_entire_array")
- if ksp.use_entire_array is False:
- col.prop(ksp, "array_index")
+ layout.separator()
+ row = layout.row()
col = row.column()
col.label(text="F-Curve Grouping:")
- col.prop(ksp, "group_method")
+ col.prop(ksp, "group_method", text="")
if ksp.group_method == 'NAMED':
col.prop(ksp, "group")
-
+
+ col = row.column(align=True)
+ col.label(text="Keyframing Settings:")
col.prop(ksp, "bl_options")
diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py
index 32047581550..1d5e96cf701 100644
--- a/release/scripts/startup/bl_ui/properties_texture.py
+++ b/release/scripts/startup/bl_ui/properties_texture.py
@@ -29,6 +29,8 @@ from bpy.types import (Brush,
from rna_prop_ui import PropertyPanel
+from bl_ui.properties_paint_common import sculpt_brush_texture_settings
+
class TEXTURE_MT_specials(Menu):
bl_label = "Texture Specials"
@@ -856,12 +858,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
if isinstance(idblock, Brush):
if context.sculpt_object:
- layout.label(text="Brush Mapping:")
- layout.prop(tex, "map_mode", expand=True)
-
- row = layout.row()
- row.active = tex.map_mode in {'FIXED', 'TILED'}
- row.prop(tex, "angle")
+ sculpt_brush_texture_settings(layout, idblock)
else:
if isinstance(idblock, Material):
split = layout.split(percentage=0.3)
@@ -884,9 +881,9 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
row.prop(tex, "mapping_y", text="")
row.prop(tex, "mapping_z", text="")
- row = layout.row()
- row.column().prop(tex, "offset")
- row.column().prop(tex, "scale")
+ row = layout.row()
+ row.column().prop(tex, "offset")
+ row.column().prop(tex, "scale")
class TEXTURE_PT_influence(TextureSlotPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index bd3f087e38a..4ab23359fd8 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -101,6 +101,7 @@ class CLIP_PT_clip_view_panel:
return clip and sc.view == 'CLIP'
+
class CLIP_PT_tracking_panel:
@classmethod
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 0114f33928a..11c258ef689 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -205,5 +205,25 @@ class NODE_PT_properties(Panel):
col.prop(snode, "backdrop_y", text="Y")
col.operator("node.backimage_move", text="Move")
+class NODE_PT_quality(bpy.types.Panel):
+ bl_space_type = 'NODE_EDITOR'
+ bl_region_type = 'UI'
+ bl_label = "Quality"
+
+ @classmethod
+ def poll(cls, context):
+ snode = context.space_data
+ return snode.tree_type == 'COMPOSITING' and snode.node_tree is not None
+
+ def draw(self, context):
+ layout = self.layout
+ snode = context.space_data
+ tree = snode.node_tree
+
+ layout.prop(tree, "render_quality", text="Render")
+ layout.prop(tree, "edit_quality", text="Edit")
+ layout.prop(tree, "chunksize")
+ layout.prop(tree, "use_opencl")
+
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py
index d1daa4a5554..9c24e48300a 100644
--- a/release/scripts/startup/bl_ui/space_text.py
+++ b/release/scripts/startup/bl_ui/space_text.py
@@ -277,7 +277,7 @@ class TEXT_MT_edit(Menu):
layout.separator()
- layout.operator("text.move_lines",
+ layout.operator("text.move_lines",
text="Move line(s) up").direction = 'UP'
layout.operator("text.move_lines",
text="Move line(s) down").direction = 'DOWN'
diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py
index 8fb587e2634..0f573c46d69 100644
--- a/release/scripts/startup/bl_ui/space_time.py
+++ b/release/scripts/startup/bl_ui/space_time.py
@@ -83,7 +83,7 @@ class TIME_HT_header(Header):
row.prop(toolsettings, "use_keyframe_insert_auto", text="", toggle=True)
if toolsettings.use_keyframe_insert_auto:
row.prop(toolsettings, "use_keyframe_insert_keyingset", text="", toggle=True)
-
+
if screen.is_animation_playing:
subsub = row.row()
subsub.prop(toolsettings, "use_record_with_nla", toggle=True)
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 113c370e687..dec3960f376 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -96,6 +96,7 @@ class USERPREF_HT_header(Header):
layout.menu("USERPREF_MT_addons_dev_guides")
elif userpref.active_section == 'THEMES':
layout.operator("ui.reset_default_theme")
+ layout.operator("wm.theme_install")
class USERPREF_PT_tabs(Panel):
@@ -452,7 +453,7 @@ class USERPREF_PT_system(Panel):
col.separator()
col.separator()
- col.label(text="Sequencer:")
+ col.label(text="Sequencer / Clip Editor:")
col.prop(system, "prefetch_frames")
col.prop(system, "memory_cache_limit")
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 179a9d993d7..7f4b0b7a18c 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -93,7 +93,7 @@ class VIEW3D_HT_header(Header):
if snap_element != 'INCREMENT':
row.prop(toolsettings, "snap_target", text="")
if obj:
- if obj.mode == 'OBJECT' and snap_element != 'VOLUME':
+ if obj.mode in {'OBJECT', 'POSE'} and snap_element != 'VOLUME':
row.prop(toolsettings, "use_snap_align_rotation", text="")
elif obj.mode == 'EDIT':
row.prop(toolsettings, "use_snap_self", text="")
@@ -164,7 +164,7 @@ class VIEW3D_MT_transform(VIEW3D_MT_transform_base):
def draw(self, context):
# base menu
VIEW3D_MT_transform_base.draw(self, context)
-
+
# generic...
layout = self.layout
layout.separator()
@@ -178,16 +178,16 @@ class VIEW3D_MT_transform_object(VIEW3D_MT_transform_base):
def draw(self, context):
# base menu
VIEW3D_MT_transform_base.draw(self, context)
-
+
# object-specific option follow...
layout = self.layout
layout.separator()
layout.operator("transform.translate", text="Move Texture Space").texture_space = True
layout.operator("transform.resize", text="Scale Texture Space").texture_space = True
-
+
layout.separator()
-
+
layout.operator_context = 'EXEC_REGION_WIN'
layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working
@@ -214,13 +214,13 @@ class VIEW3D_MT_transform_armature(VIEW3D_MT_transform_base):
def draw(self, context):
# base menu
VIEW3D_MT_transform_base.draw(self, context)
-
+
# armature specific extensions follow...
layout = self.layout
layout.separator()
obj = context.object
- if (obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'} and
+ if (obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'} and
obj.data.draw_type in {'BBONE', 'ENVELOPE'}):
layout.operator("transform.transform", text="Scale Envelope/BBone").mode = 'BONE_SIZE'
@@ -612,6 +612,7 @@ class VIEW3D_MT_select_edit_curve(Menu):
layout.operator("curve.select_all", text="Inverse").action = 'INVERT'
layout.operator("curve.select_random")
layout.operator("curve.select_nth", text="Every Nth Number of Points")
+ layout.operator("curve.select_linked", text="Select Linked")
layout.separator()
@@ -641,6 +642,7 @@ class VIEW3D_MT_select_edit_surface(Menu):
layout.operator("curve.select_all", text="Inverse").action = 'INVERT'
layout.operator("curve.select_random")
layout.operator("curve.select_nth", text="Every Nth Number of Points")
+ layout.operator("curve.select_linked", text="Select Linked")
layout.separator()
@@ -1286,7 +1288,7 @@ class VIEW3D_MT_hide_mask(Menu):
op = layout.operator("paint.hide_show", text="Show Bounding Box")
op.action = 'SHOW'
op.area = 'INSIDE'
-
+
op = layout.operator("paint.hide_show", text="Hide Masked")
op.area = 'MASKED'
op.action = 'HIDE'
@@ -1795,6 +1797,11 @@ class VIEW3D_MT_edit_mesh_edges(Menu):
layout.separator()
+ layout.operator("transform.edge_crease")
+ layout.operator("transform.edge_bevelweight")
+
+ layout.separator()
+
layout.operator("mesh.mark_seam").clear = False
layout.operator("mesh.mark_seam", text="Clear Seam").clear = True
@@ -1947,8 +1954,8 @@ def draw_curve(self, context):
layout.separator()
- layout.operator("curve.extrude")
- layout.operator("curve.duplicate")
+ layout.operator("curve.extrude_move")
+ layout.operator("curve.duplicate_move")
layout.operator("curve.separate")
layout.operator("curve.make_segment")
layout.operator("curve.cyclic_toggle")
@@ -1994,7 +2001,7 @@ class VIEW3D_MT_edit_curve_ctrlpoints(Menu):
layout.separator()
- layout.menu("VIEW3D_MT_hook")
+ layout.menu("VIEW3D_MT_hook")
class VIEW3D_MT_edit_curve_segments(Menu):
@@ -2304,7 +2311,7 @@ class VIEW3D_PT_view3d_cursor(Panel):
@classmethod
def poll(cls, context):
view = context.space_data
- return (view)
+ return (view is not None)
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 31b6bf72f5d..d3a8427aa16 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Menu, Panel
from bl_ui.properties_paint_common import UnifiedPaintPanel
+from bl_ui.properties_paint_common import sculpt_brush_texture_settings
class View3DPanel():
@@ -231,7 +232,7 @@ class VIEW3D_PT_tools_curveedit(View3DPanel, Panel):
col = layout.column(align=True)
col.label(text="Curve:")
- col.operator("curve.duplicate")
+ col.operator("curve.duplicate_move", text="Duplicate")
col.operator("curve.delete")
col.operator("curve.cyclic_toggle")
col.operator("curve.switch_direction")
@@ -248,7 +249,7 @@ class VIEW3D_PT_tools_curveedit(View3DPanel, Panel):
col = layout.column(align=True)
col.label(text="Modeling:")
- col.operator("curve.extrude")
+ col.operator("curve.extrude_move", text="Extrude")
col.operator("curve.subdivide")
draw_repeat_tools(context, layout)
@@ -273,14 +274,14 @@ class VIEW3D_PT_tools_surfaceedit(View3DPanel, Panel):
col = layout.column(align=True)
col.label(text="Curve:")
- col.operator("curve.duplicate")
+ col.operator("curve.duplicate_move", text="Duplicate")
col.operator("curve.delete")
col.operator("curve.cyclic_toggle")
col.operator("curve.switch_direction")
col = layout.column(align=True)
col.label(text="Modeling:")
- col.operator("curve.extrude")
+ col.operator("curve.extrude", text="Extrude")
col.operator("curve.subdivide")
draw_repeat_tools(context, layout)
@@ -719,45 +720,11 @@ class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel):
col.prop(brush, "use_fixed_texture")
if context.sculpt_object:
- #XXX duplicated from properties_texture.py
-
- col.label(text="Brush Mapping:")
- col.row().prop(tex_slot, "map_mode", expand=True)
-
- col.separator()
-
- col = layout.column()
- col.active = tex_slot.map_mode in {'FIXED'}
- col.label(text="Angle:")
- if brush.sculpt_capabilities.has_random_texture_angle:
- col.prop(brush, "texture_angle_source_random", text="")
- else:
- col.prop(brush, "texture_angle_source_no_random", text="")
-
- #row = col.row(align=True)
- #row.label(text="Angle:")
- #row.active = tex_slot.map_mode in {'FIXED', 'TILED'}
-
- #row = col.row(align=True)
-
- #col = row.column()
- #col.active = tex_slot.map_mode in {'FIXED'}
- #col.prop(brush, "use_rake", toggle=True, icon='PARTICLEMODE', text="")
-
- col = layout.column()
- col.active = tex_slot.map_mode in {'FIXED', 'TILED'}
- col.prop(tex_slot, "angle", text="")
-
- split = layout.split()
- split.prop(tex_slot, "offset")
- split.prop(tex_slot, "scale")
-
- col = layout.column(align=True)
- col.label(text="Sample Bias:")
- col.prop(brush, "texture_sample_bias", slider=True, text="")
+ sculpt_brush_texture_settings(col, brush)
+ # use_texture_overlay and texture_overlay_alpha
col = layout.column(align=True)
- col.active = tex_slot.map_mode in {'FIXED', 'TILED'}
+ col.active = brush.sculpt_capabilities.has_overlay
col.label(text="Overlay:")
row = col.row()
@@ -766,7 +733,6 @@ class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel):
else:
row.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON')
sub = row.row()
- sub.active = tex_slot.map_mode in {'FIXED', 'TILED'} and brush.use_texture_overlay
sub.prop(brush, "texture_overlay_alpha", text="Alpha")
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index 09e915abe4c..4829647ce5f 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -95,11 +95,13 @@ add_subdirectory(blenkernel)
add_subdirectory(blenlib)
add_subdirectory(bmesh)
add_subdirectory(render)
+add_subdirectory(compositor)
add_subdirectory(blenfont)
add_subdirectory(blenloader)
add_subdirectory(blenpluginapi)
add_subdirectory(ikplugin)
add_subdirectory(gpu)
+add_subdirectory(opencl)
add_subdirectory(imbuf)
add_subdirectory(avi)
add_subdirectory(nodes)
diff --git a/source/blender/SConscript b/source/blender/SConscript
index 95c9d0925b6..81e43273cfc 100644
--- a/source/blender/SConscript
+++ b/source/blender/SConscript
@@ -9,10 +9,12 @@ SConscript(['avi/SConscript',
'blenloader/SConscript',
'blenpluginapi/SConscript',
'gpu/SConscript',
+ 'opencl/SConscript',
'editors/SConscript',
'freestyle/SConscript',
'imbuf/SConscript',
'makesdna/SConscript',
+ 'compositor/SConscript',
'render/SConscript',
'nodes/SConscript',
'modifiers/SConscript',
diff --git a/source/blender/avi/AVI_avi.h b/source/blender/avi/AVI_avi.h
index 76e11ebad08..bdfdbc117ed 100644
--- a/source/blender/avi/AVI_avi.h
+++ b/source/blender/avi/AVI_avi.h
@@ -201,7 +201,7 @@ typedef struct _AviMovie {
} AviMovie;
typedef enum {
- AVI_ERROR_NONE=0,
+ AVI_ERROR_NONE = 0,
AVI_ERROR_COMPRESSION,
AVI_ERROR_OPEN,
AVI_ERROR_READING,
@@ -214,7 +214,7 @@ typedef enum {
/* belongs to the option-setting function. */
typedef enum {
- AVI_OPTION_WIDTH=0,
+ AVI_OPTION_WIDTH = 0,
AVI_OPTION_HEIGHT,
AVI_OPTION_QUALITY,
AVI_OPTION_FRAMERATE
@@ -230,7 +230,7 @@ typedef enum {
/**
* This is a sort of MAKE_ID thing. Used in imbuf :( It is used
* through options in the AVI header (AviStreamHeader). */
-#define FCC(ch4) (ch4[0] | ch4[1]<<8 | ch4[2]<<16 | ch4[3] << 24)
+#define FCC(ch4) (ch4[0] | ch4[1] << 8 | ch4[2] << 16 | ch4[3] << 24)
/**
* Test whether this is an avi-format.
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 595a1e884d7..c7ddab47952 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -191,11 +191,11 @@ struct DerivedMesh {
* and freed on the next ->release(). consider using getVert/Edge/Face if
* you are only interested in a few verts/edges/faces.
*/
- struct MVert *(*getVertArray)(DerivedMesh *dm);
- struct MEdge *(*getEdgeArray)(DerivedMesh *dm);
- struct MFace *(*getTessFaceArray)(DerivedMesh *dm);
- struct MLoop *(*getLoopArray)(DerivedMesh *dm);
- struct MPoly *(*getPolyArray)(DerivedMesh *dm);
+ struct MVert *(*getVertArray)(DerivedMesh * dm);
+ struct MEdge *(*getEdgeArray)(DerivedMesh * dm);
+ struct MFace *(*getTessFaceArray)(DerivedMesh * dm);
+ struct MLoop *(*getLoopArray)(DerivedMesh * dm);
+ struct MPoly *(*getPolyArray)(DerivedMesh * dm);
/* copy all verts/edges/faces from the derived mesh into
* *{vert/edge/face}_r (must point to a buffer large enough)
@@ -209,35 +209,35 @@ struct DerivedMesh {
/* return a copy of all verts/edges/faces from the derived mesh
* it is the caller's responsibility to free the returned pointer
*/
- struct MVert *(*dupVertArray)(DerivedMesh *dm);
- struct MEdge *(*dupEdgeArray)(DerivedMesh *dm);
- struct MFace *(*dupTessFaceArray)(DerivedMesh *dm);
- struct MLoop *(*dupLoopArray)(DerivedMesh *dm);
- struct MPoly *(*dupPolyArray)(DerivedMesh *dm);
+ struct MVert *(*dupVertArray)(DerivedMesh * dm);
+ struct MEdge *(*dupEdgeArray)(DerivedMesh * dm);
+ struct MFace *(*dupTessFaceArray)(DerivedMesh * dm);
+ struct MLoop *(*dupLoopArray)(DerivedMesh * dm);
+ struct MPoly *(*dupPolyArray)(DerivedMesh * dm);
/* return a pointer to a single element of vert/edge/face custom data
* from the derived mesh (this gives a pointer to the actual data, not
* a copy)
*/
- void *(*getVertData)(DerivedMesh *dm, int index, int type);
- void *(*getEdgeData)(DerivedMesh *dm, int index, int type);
- void *(*getTessFaceData)(DerivedMesh *dm, int index, int type);
+ void *(*getVertData)(DerivedMesh * dm, int index, int type);
+ void *(*getEdgeData)(DerivedMesh * dm, int index, int type);
+ void *(*getTessFaceData)(DerivedMesh * dm, int index, int type);
/* return a pointer to the entire array of vert/edge/face custom data
* from the derived mesh (this gives a pointer to the actual data, not
* a copy)
*/
- void *(*getVertDataArray)(DerivedMesh *dm, int type);
- void *(*getEdgeDataArray)(DerivedMesh *dm, int type);
- void *(*getTessFaceDataArray)(DerivedMesh *dm, int type);
+ void *(*getVertDataArray)(DerivedMesh * dm, int type);
+ void *(*getEdgeDataArray)(DerivedMesh * dm, int type);
+ void *(*getTessFaceDataArray)(DerivedMesh * dm, int type);
/* retrieves the base CustomData structures for
* verts/edges/tessfaces/loops/facdes*/
- CustomData *(*getVertDataLayout)(DerivedMesh *dm);
- CustomData *(*getEdgeDataLayout)(DerivedMesh *dm);
- CustomData *(*getTessFaceDataLayout)(DerivedMesh *dm);
- CustomData *(*getLoopDataLayout)(DerivedMesh *dm);
- CustomData *(*getPolyDataLayout)(DerivedMesh *dm);
+ CustomData *(*getVertDataLayout)(DerivedMesh * dm);
+ CustomData *(*getEdgeDataLayout)(DerivedMesh * dm);
+ CustomData *(*getTessFaceDataLayout)(DerivedMesh * dm);
+ CustomData *(*getLoopDataLayout)(DerivedMesh * dm);
+ CustomData *(*getPolyDataLayout)(DerivedMesh * dm);
/*copies all customdata for an element source into dst at index dest*/
void (*copyFromVertCData)(DerivedMesh *dm, int source, CustomData *dst, int dest);
@@ -247,12 +247,12 @@ struct DerivedMesh {
/* optional grid access for subsurf */
int (*getNumGrids)(DerivedMesh *dm);
int (*getGridSize)(DerivedMesh *dm);
- struct CCGElem **(*getGridData)(DerivedMesh *dm);
- DMGridAdjacency *(*getGridAdjacency)(DerivedMesh *dm);
- int *(*getGridOffset)(DerivedMesh *dm);
+ struct CCGElem **(*getGridData)(DerivedMesh * dm);
+ DMGridAdjacency *(*getGridAdjacency)(DerivedMesh * dm);
+ int *(*getGridOffset)(DerivedMesh * dm);
void (*getGridKey)(DerivedMesh *dm, struct CCGKey *key);
- DMFlagMat *(*getGridFlagMats)(DerivedMesh *dm);
- unsigned int **(*getGridHidden)(DerivedMesh *dm);
+ DMFlagMat *(*getGridFlagMats)(DerivedMesh * dm);
+ unsigned int **(*getGridHidden)(DerivedMesh * dm);
/* Iterate over each mapped vertex in the derived mesh, calling the
@@ -335,15 +335,15 @@ struct DerivedMesh {
* Also called for *final* editmode DerivedMeshes
*/
void (*drawFacesSolid)(DerivedMesh *dm, float (*partial_redraw_planes)[4],
- int fast, DMSetMaterial setMaterial);
+ int fast, DMSetMaterial setMaterial);
/* Draw all faces using MTFace
* o Drawing options too complicated to enumerate, look at code.
*/
void (*drawFacesTex)(DerivedMesh *dm,
DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData);
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData);
/* Draw all faces with GLSL materials
* o setMaterial is called for every different material nr
@@ -365,19 +365,19 @@ struct DerivedMesh {
* smooth shaded.
*/
void (*drawMappedFaces)(DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- DMSetMaterial setMaterial,
- DMCompareDrawOptions compareDrawOptions,
- void *userData,
- DMDrawFlag flag);
+ DMSetDrawOptions setDrawOptions,
+ DMSetMaterial setMaterial,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData,
+ DMDrawFlag flag);
/* Draw mapped faces using MTFace
* o Drawing options too complicated to enumerate, look at code.
*/
void (*drawMappedFacesTex)(DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData);
+ DMSetDrawOptions setDrawOptions,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData);
/* Draw mapped faces with GLSL materials
* o setMaterial is called for every different material nr
@@ -385,17 +385,17 @@ struct DerivedMesh {
* o Only if setMaterial and setDrawOptions return true
*/
void (*drawMappedFacesGLSL)(DerivedMesh *dm,
- DMSetMaterial setMaterial,
- DMSetDrawOptions setDrawOptions,
- void *userData);
+ DMSetMaterial setMaterial,
+ DMSetDrawOptions setDrawOptions,
+ void *userData);
/* Draw mapped edges as lines
* o Only if !setDrawOptions or setDrawOptions(userData, mapped-edge)
* returns true
*/
void (*drawMappedEdges)(DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- void *userData);
+ DMSetDrawOptions setDrawOptions,
+ void *userData);
/* Draw mapped edges as lines with interpolation values
* o Only if !setDrawOptions or
@@ -405,17 +405,17 @@ struct DerivedMesh {
* NOTE: This routine is optional!
*/
void (*drawMappedEdgesInterp)(DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- DMSetDrawInterpOptions setDrawInterpOptions,
- void *userData);
+ DMSetDrawOptions setDrawOptions,
+ DMSetDrawInterpOptions setDrawInterpOptions,
+ void *userData);
/* Draw all faces with materials
* o setMaterial is called for every different material nr
* o setFace is called to verify if a face must be hidden
*/
void (*drawMappedFacesMat)(DerivedMesh *dm,
- void (*setMaterial)(void *userData, int, void *attribs),
- int (*setFace)(void *userData, int index), void *userData);
+ void (*setMaterial)(void *userData, int, void *attribs),
+ int (*setFace)(void *userData, int index), void *userData);
/* Release reference to the DerivedMesh. This function decides internally
* if the DerivedMesh will be freed, or cached for later use. */
@@ -438,9 +438,9 @@ void DM_init(DerivedMesh *dm, DerivedMeshType type, int numVerts, int numEdges,
* of vertices, edges and faces, with a layer setup copied from source
*/
void DM_from_template(DerivedMesh *dm, DerivedMesh *source,
- DerivedMeshType type,
- int numVerts, int numEdges, int numFaces,
- int numLoops, int numPolys);
+ DerivedMeshType type,
+ int numVerts, int numEdges, int numFaces,
+ int numLoops, int numPolys);
/* utility function to release a DerivedMesh's layers
* returns 1 if DerivedMesh has to be released by the backend, 0 otherwise
@@ -518,15 +518,15 @@ void DM_set_tessface_data(struct DerivedMesh *dm, int index, int type, void *dat
* these copy all layers for which the CD_FLAG_NOCOPY flag is not set
*/
void DM_copy_vert_data(struct DerivedMesh *source, struct DerivedMesh *dest,
- int source_index, int dest_index, int count);
+ int source_index, int dest_index, int count);
void DM_copy_edge_data(struct DerivedMesh *source, struct DerivedMesh *dest,
- int source_index, int dest_index, int count);
-void DM_copy_tessface_data(struct DerivedMesh *source, struct DerivedMesh *dest,
int source_index, int dest_index, int count);
+void DM_copy_tessface_data(struct DerivedMesh *source, struct DerivedMesh *dest,
+ int source_index, int dest_index, int count);
void DM_copy_loop_data(struct DerivedMesh *source, struct DerivedMesh *dest,
int source_index, int dest_index, int count);
void DM_copy_poly_data(struct DerivedMesh *source, struct DerivedMesh *dest,
- int source_index, int dest_index, int count);
+ int source_index, int dest_index, int count);
/* custom data free functions
* free count elements, starting at index
@@ -550,8 +550,8 @@ void DM_update_tessface_data(DerivedMesh *dm);
* indexed by dest_index in the dest mesh
*/
void DM_interp_vert_data(struct DerivedMesh *source, struct DerivedMesh *dest,
- int *src_indices, float *weights,
- int count, int dest_index);
+ int *src_indices, float *weights,
+ int count, int dest_index);
/* interpolates edge data from the edges indexed by src_indices in the
* source mesh using the given weights and stores the result in the edge indexed
@@ -562,9 +562,9 @@ void DM_interp_vert_data(struct DerivedMesh *source, struct DerivedMesh *dest,
*/
typedef float EdgeVertWeight[SUB_ELEMS_EDGE][SUB_ELEMS_EDGE];
void DM_interp_edge_data(struct DerivedMesh *source, struct DerivedMesh *dest,
- int *src_indices,
- float *weights, EdgeVertWeight *vert_weights,
- int count, int dest_index);
+ int *src_indices,
+ float *weights, EdgeVertWeight *vert_weights,
+ int count, int dest_index);
/* interpolates face data from the faces indexed by src_indices in the
* source mesh using the given weights and stores the result in the face indexed
@@ -575,9 +575,9 @@ void DM_interp_edge_data(struct DerivedMesh *source, struct DerivedMesh *dest,
*/
typedef float FaceVertWeight[SUB_ELEMS_FACE][SUB_ELEMS_FACE];
void DM_interp_tessface_data(struct DerivedMesh *source, struct DerivedMesh *dest,
- int *src_indices,
- float *weights, FaceVertWeight *vert_weights,
- int count, int dest_index);
+ int *src_indices,
+ float *weights, FaceVertWeight *vert_weights,
+ int count, int dest_index);
void DM_swap_tessface_data(struct DerivedMesh *dm, int index, const int *corner_indices);
@@ -597,54 +597,54 @@ void vDM_ColorBand_store(struct ColorBand *coba);
* In use now by vertex/weight paint and particles */
float *mesh_get_mapped_verts_nors(struct Scene *scene, struct Object *ob);
- /* */
+/* */
DerivedMesh *mesh_get_derived_final(struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ CustomDataMask dataMask);
DerivedMesh *mesh_get_derived_deform(struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_for_modifier(struct Scene *scene, struct Object *ob,
- struct ModifierData *md, int build_shapekey_layers);
+ struct ModifierData *md, int build_shapekey_layers);
DerivedMesh *mesh_create_derived_render(struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ CustomDataMask dataMask);
DerivedMesh *getEditDerivedBMesh(struct BMEditMesh *em, struct Object *ob,
- float (*vertexCos)[3]);
+ float (*vertexCos)[3]);
DerivedMesh *mesh_create_derived_index_render(struct Scene *scene, struct Object *ob, CustomDataMask dataMask, int index);
- /* same as above but wont use render settings */
+/* same as above but wont use render settings */
DerivedMesh *mesh_create_derived(struct Mesh *me, struct Object *ob, float (*vertCos)[3]);
DerivedMesh *mesh_create_derived_view(struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_no_deform(struct Scene *scene, struct Object *ob,
- float (*vertCos)[3],
- CustomDataMask dataMask);
+ float (*vertCos)[3],
+ CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_no_deform_render(struct Scene *scene, struct Object *ob,
- float (*vertCos)[3],
- CustomDataMask dataMask);
+ float (*vertCos)[3],
+ CustomDataMask dataMask);
/* for gameengine */
DerivedMesh *mesh_create_derived_no_virtual(struct Scene *scene, struct Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask);
+ CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_physics(struct Scene *scene, struct Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask);
+ CustomDataMask dataMask);
DerivedMesh *editbmesh_get_derived_base(struct Object *, struct BMEditMesh *em);
DerivedMesh *editbmesh_get_derived_cage(struct Scene *scene, struct Object *,
- struct BMEditMesh *em, CustomDataMask dataMask);
+ struct BMEditMesh *em, CustomDataMask dataMask);
DerivedMesh *editbmesh_get_derived_cage_and_final(struct Scene *scene, struct Object *,
- struct BMEditMesh *em, DerivedMesh **final_r,
- CustomDataMask dataMask);
+ struct BMEditMesh *em, DerivedMesh **final_r,
+ CustomDataMask dataMask);
float (*editbmesh_get_vertex_cos(struct BMEditMesh *em, int *numVerts_r))[3];
int editbmesh_modifier_is_enabled(struct Scene *scene, struct ModifierData *md, DerivedMesh *dm);
void makeDerivedMesh(struct Scene *scene, struct Object *ob, struct BMEditMesh *em,
- CustomDataMask dataMask, int build_shapekey_layers);
+ CustomDataMask dataMask, int build_shapekey_layers);
/* returns an array of deform matrices for crazyspace correction, and the
* number of modifiers left */
int editbmesh_get_first_deform_matrices(struct Scene *, struct Object *, struct BMEditMesh *em,
- float (**deformmats)[3][3], float (**deformcos)[3]);
+ float (**deformmats)[3][3], float (**deformcos)[3]);
void weight_to_rgb(float r_rgb[3], const float weight);
/* Update the weight MCOL preview layer.
@@ -684,7 +684,7 @@ typedef struct DMVertexAttribs {
} DMVertexAttribs;
void DM_vertex_attributes_from_gpu(DerivedMesh *dm,
- struct GPUVertexAttribs *gattribs, DMVertexAttribs *attribs);
+ struct GPUVertexAttribs *gattribs, DMVertexAttribs *attribs);
void DM_add_tangent_layer(DerivedMesh *dm);
void DM_calc_auto_bump_scale(DerivedMesh *dm);
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index a326b514f9a..c1361788379 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -71,24 +71,24 @@ void BKE_action_make_local(struct bAction *act);
/* Action API ----------------- */
/* types of transforms applied to the given item
- * - these are the return falgs for action_get_item_transforms()
+ * - these are the return falgs for action_get_item_transforms()
*/
typedef enum eAction_TransformFlags {
- /* location */
- ACT_TRANS_LOC = (1<<0),
- /* rotation */
- ACT_TRANS_ROT = (1<<1),
- /* scaling */
- ACT_TRANS_SCALE = (1<<2),
-
- /* strictly not a transform, but custom properties are also
- * quite often used in modern rigs
- */
- ACT_TRANS_PROP = (1<<3),
-
- /* all flags */
- ACT_TRANS_ONLY = (ACT_TRANS_LOC|ACT_TRANS_ROT|ACT_TRANS_SCALE),
- ACT_TRANS_ALL = (ACT_TRANS_ONLY|ACT_TRANS_PROP)
+ /* location */
+ ACT_TRANS_LOC = (1 << 0),
+ /* rotation */
+ ACT_TRANS_ROT = (1 << 1),
+ /* scaling */
+ ACT_TRANS_SCALE = (1 << 2),
+
+ /* strictly not a transform, but custom properties are also
+ * quite often used in modern rigs
+ */
+ ACT_TRANS_PROP = (1 << 3),
+
+ /* all flags */
+ ACT_TRANS_ONLY = (ACT_TRANS_LOC | ACT_TRANS_ROT | ACT_TRANS_SCALE),
+ ACT_TRANS_ALL = (ACT_TRANS_ONLY | ACT_TRANS_PROP)
} eAction_TransformFlags;
/* Return flags indicating which transforms the given object/posechannel has
@@ -182,7 +182,7 @@ struct bPoseChannel *BKE_pose_channel_active(struct Object *ob);
* already exists in this pose - if not a new one is
* allocated and initialized.
*/
-struct bPoseChannel *BKE_pose_channel_verify(struct bPose* pose, const char* name);
+struct bPoseChannel *BKE_pose_channel_verify(struct bPose *pose, const char *name);
/* Copy the data from the action-pose (src) into the pose */
void extract_pose_from_pose(struct bPose *pose, const struct bPose *src);
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index b8c2c42f8d5..44e47e779e7 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -46,28 +46,26 @@ struct Mesh;
struct PoseTree;
struct ListBase;
-typedef struct PoseTarget
-{
+typedef struct PoseTarget {
struct PoseTarget *next, *prev;
- struct bConstraint *con; /* the constrait of this target */
- int tip; /* index of tip pchan in PoseTree */
+ struct bConstraint *con; /* the constrait of this target */
+ int tip; /* index of tip pchan in PoseTree */
} PoseTarget;
-typedef struct PoseTree
-{
+typedef struct PoseTree {
struct PoseTree *next, *prev;
- int type; /* type of IK that this serves (CONSTRAINT_TYPE_KINEMATIC or ..._SPLINEIK) */
- int totchannel; /* number of pose channels */
+ int type; /* type of IK that this serves (CONSTRAINT_TYPE_KINEMATIC or ..._SPLINEIK) */
+ int totchannel; /* number of pose channels */
- struct ListBase targets; /* list of targets of the tree */
- struct bPoseChannel **pchan; /* array of pose channels */
- int *parent; /* and their parents */
-
- float (*basis_change)[3][3]; /* basis change result from solver */
- int iterations; /* iterations from the constraint */
- int stretch; /* disable stretching */
+ struct ListBase targets; /* list of targets of the tree */
+ struct bPoseChannel **pchan; /* array of pose channels */
+ int *parent; /* and their parents */
+
+ float (*basis_change)[3][3]; /* basis change result from solver */
+ int iterations; /* iterations from the constraint */
+ int stretch; /* disable stretching */
} PoseTree;
/* Core armature functionality */
@@ -77,7 +75,7 @@ extern "C" {
struct bArmature *BKE_armature_add(const char *name);
struct bArmature *BKE_armature_from_object(struct Object *ob);
-void BKE_armature_bonelist_free (struct ListBase *lb);
+void BKE_armature_bonelist_free(struct ListBase *lb);
void BKE_armature_free(struct bArmature *arm);
void BKE_armature_make_local(struct bArmature *arm);
struct bArmature *BKE_armature_copy(struct bArmature *arm);
@@ -85,9 +83,9 @@ struct bArmature *BKE_armature_copy(struct bArmature *arm);
/* Bounding box. */
struct BoundBox *BKE_armature_boundbox_get(struct Object *ob);
-int bone_autoside_name (char name[64], int strip_number, short axis, float head, float tail);
+int bone_autoside_name(char name[64], int strip_number, short axis, float head, float tail);
-struct Bone *BKE_armature_find_bone_name (struct bArmature *arm, const char *name);
+struct Bone *BKE_armature_find_bone_name(struct bArmature *arm, const char *name);
float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float r1, float r2, float rdist);
@@ -99,7 +97,7 @@ void BKE_pose_where_is_bone(struct Scene *scene, struct Object *ob, struct bPose
void BKE_pose_where_is_bone_tail(struct bPoseChannel *pchan);
/* get_objectspace_bone_matrix has to be removed still */
-void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[][4], int root, int posed);
+void get_objectspace_bone_matrix(struct Bone *bone, float M_accumulatedMatrix[][4], int root, int posed);
void vec_roll_to_mat3(const float vec[3], const float roll, float mat[][3]);
void mat3_to_vec_roll(float mat[][3], float *vec, float *roll);
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 29e02562be3..7cc5d16dcc1 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -41,17 +41,17 @@ 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 263
-#define BLENDER_SUBVERSION 5
+#define BLENDER_VERSION 263
+#define BLENDER_SUBVERSION 5
-#define BLENDER_MINVERSION 250
-#define BLENDER_MINSUBVERSION 0
+#define BLENDER_MINVERSION 250
+#define BLENDER_MINSUBVERSION 0
/* used by packaging tools */
- /* can be left blank, otherwise a,b,c... etc with no quotes */
+/* 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 alpha
+/* alpha/beta/rc/release, docs use this */
+#define BLENDER_VERSION_CYCLE alpha
extern char versionstr[]; /* from blender.c */
@@ -64,11 +64,11 @@ struct Main;
int BKE_read_file(struct bContext *C, const char *filepath, struct ReportList *reports);
-#define BKE_READ_FILE_FAIL 0 /* no load */
-#define BKE_READ_FILE_OK 1 /* OK */
-#define BKE_READ_FILE_OK_USERPREFS 2 /* OK, and with new user settings */
+#define BKE_READ_FILE_FAIL 0 /* no load */
+#define BKE_READ_FILE_OK 1 /* OK */
+#define BKE_READ_FILE_OK_USERPREFS 2 /* OK, and with new user settings */
-int BKE_read_file_from_memory(struct bContext *C, char* filebuf, int filelength, struct ReportList *reports);
+int BKE_read_file_from_memory(struct bContext *C, char *filebuf, int filelength, struct ReportList *reports);
int BKE_read_file_from_memfile(struct bContext *C, struct MemFile *memfile, struct ReportList *reports);
void free_blender(void);
diff --git a/source/blender/blenkernel/BKE_bmesh.h b/source/blender/blenkernel/BKE_bmesh.h
index bcb50a9c903..67b21eb764c 100644
--- a/source/blender/blenkernel/BKE_bmesh.h
+++ b/source/blender/blenkernel/BKE_bmesh.h
@@ -42,28 +42,28 @@
/* bevel tool defines */
/* element flags */
-#define BME_BEVEL_ORIG 1
-#define BME_BEVEL_BEVEL (1<<1)
-#define BME_BEVEL_NONMAN (1<<2)
-#define BME_BEVEL_WIRE (1<<3)
+#define BME_BEVEL_ORIG 1
+#define BME_BEVEL_BEVEL (1 << 1)
+#define BME_BEVEL_NONMAN (1 << 2)
+#define BME_BEVEL_WIRE (1 << 3)
/* tool options */
-#define BME_BEVEL_SELECT 1
-#define BME_BEVEL_VERT (1<<1)
-#define BME_BEVEL_RADIUS (1<<2)
-#define BME_BEVEL_ANGLE (1<<3)
-#define BME_BEVEL_WEIGHT (1<<4)
+#define BME_BEVEL_SELECT 1
+#define BME_BEVEL_VERT (1 << 1)
+#define BME_BEVEL_RADIUS (1 << 2)
+#define BME_BEVEL_ANGLE (1 << 3)
+#define BME_BEVEL_WEIGHT (1 << 4)
//~ #define BME_BEVEL_EWEIGHT (1<<4)
//~ #define BME_BEVEL_VWEIGHT (1<<5)
-#define BME_BEVEL_PERCENT (1<<6)
-#define BME_BEVEL_EMIN (1<<7)
-#define BME_BEVEL_EMAX (1<<8)
-#define BME_BEVEL_RUNNING (1<<9)
-#define BME_BEVEL_RES (1<<10)
+#define BME_BEVEL_PERCENT (1 << 6)
+#define BME_BEVEL_EMIN (1 << 7)
+#define BME_BEVEL_EMAX (1 << 8)
+#define BME_BEVEL_RUNNING (1 << 9)
+#define BME_BEVEL_RES (1 << 10)
-#define BME_BEVEL_EVEN (1<<11) /* this is a new setting not related to old (trunk bmesh bevel code) but adding
- * here because they are mixed - campbell */
-#define BME_BEVEL_DIST (1<<12) /* same as above */
+#define BME_BEVEL_EVEN (1 << 11) /* this is a new setting not related to old (trunk bmesh bevel code) but adding
+ * here because they are mixed - campbell */
+#define BME_BEVEL_DIST (1 << 12) /* same as above */
typedef struct BME_TransData {
struct BMesh *bm; /* the bmesh the vert belongs to */
@@ -74,11 +74,11 @@ typedef struct BME_TransData {
void *loc; /* a pointer to the data to transform (likely the vert's cos) */
float factor; /* primary scaling factor; also accumulates number of weighted edges for beveling tool */
float weight; /* another scaling factor; used primarily for propogating vertex weights to transforms; */
- /* weight is also used across recursive bevels to help with the math */
+ /* weight is also used across recursive bevels to help with the math */
float maxfactor; /* the unscaled, original factor (used only by "edge verts" in recursive beveling) */
float *max; /* the maximum distance this vert can be transformed; negative is infinite
- * it points to the "parent" maxfactor (where maxfactor makes little sense)
- * where the max limit is stored (limits are stored per-corner) */
+ * it points to the "parent" maxfactor (where maxfactor makes little sense)
+ * where the max limit is stored (limits are stored per-corner) */
} BME_TransData;
typedef struct BME_TransData_Head {
diff --git a/source/blender/blenkernel/BKE_bmfont.h b/source/blender/blenkernel/BKE_bmfont.h
index 6c0cbe3a51b..64daa311b9a 100644
--- a/source/blender/blenkernel/BKE_bmfont.h
+++ b/source/blender/blenkernel/BKE_bmfont.h
@@ -41,14 +41,14 @@ struct bmGlyph;
struct ImBuf;
struct bmFont;
-void printfGlyph(struct bmGlyph * glyph);
-void calcAlpha(struct ImBuf * ibuf);
-void readBitmapFontVersion0(struct ImBuf * ibuf,
- unsigned char * rect,
+void printfGlyph(struct bmGlyph *glyph);
+void calcAlpha(struct ImBuf *ibuf);
+void readBitmapFontVersion0(struct ImBuf *ibuf,
+ unsigned char *rect,
int step);
void detectBitmapFont(struct ImBuf *ibuf);
int locateGlyph(struct bmFont *bmfont, unsigned short unicode);
-void matrixGlyph(struct ImBuf * ibuf, unsigned short unicode,
+void matrixGlyph(struct ImBuf *ibuf, unsigned short unicode,
float *centerx, float *centery,
float *sizex, float *sizey,
float *transx, float *transy,
diff --git a/source/blender/blenkernel/BKE_booleanops_mesh.h b/source/blender/blenkernel/BKE_booleanops_mesh.h
index 2e48b664449..e8ffefe74ce 100644
--- a/source/blender/blenkernel/BKE_booleanops_mesh.h
+++ b/source/blender/blenkernel/BKE_booleanops_mesh.h
@@ -53,12 +53,9 @@ typedef struct CSG_MeshDescriptor {
} CSG_MeshDescriptor;
-extern
- int
-CSG_LoadBlenderMesh(
- struct Object * obj,
- CSG_MeshDescriptor *output
-);
+extern int
+CSG_LoadBlenderMesh(struct Object *obj,
+ CSG_MeshDescriptor *output);
/**
* Destroy the contents of a mesh descriptor.
@@ -67,11 +64,8 @@ CSG_LoadBlenderMesh(
* internal memory in the desriptor.
*/
-extern
- void
-CSG_DestroyMeshDescriptor(
- CSG_MeshDescriptor *mesh
-);
+extern void
+CSG_DestroyMeshDescriptor(CSG_MeshDescriptor *mesh);
/**
* Perform a boolean operation between 2 meshes and return the
@@ -82,14 +76,11 @@ CSG_DestroyMeshDescriptor(
* 3 = difference.
*/
-extern
- int
-CSG_PerformOp(
- CSG_MeshDescriptor *mesh1,
- CSG_MeshDescriptor *mesh2,
- int op_type,
- CSG_MeshDescriptor *output
-);
+extern int
+CSG_PerformOp(CSG_MeshDescriptor *mesh1,
+ CSG_MeshDescriptor *mesh2,
+ int op_type,
+ CSG_MeshDescriptor *output);
@@ -97,23 +88,17 @@ CSG_PerformOp(
* Add a mesh to blender as a new object.
*/
-extern
- int
-CSG_AddMeshToBlender(
- CSG_MeshDescriptor *mesh
-);
+extern int
+CSG_AddMeshToBlender(CSG_MeshDescriptor *mesh);
/**
* Test functionality.
*/
-extern
- int
-NewBooleanMeshTest(
- struct Base * base,
- struct Base * base_select,
- int op_type
-);
+extern int
+NewBooleanMeshTest(struct Base *base,
+ struct Base *base_select,
+ int op_type);
#endif
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index b5edc8f3e50..cbffb6c0cea 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -59,17 +59,17 @@ int BKE_brush_clone_image_delete(struct Brush *brush);
/* jitter */
void BKE_brush_jitter_pos(const struct Scene *scene, struct Brush *brush,
- const float pos[2], float jitterpos[2]);
+ const float pos[2], float jitterpos[2]);
/* brush curve */
-void BKE_brush_curve_preset(struct Brush *b, /*enum CurveMappingPreset*/int preset);
+void BKE_brush_curve_preset(struct Brush *b, /*enum CurveMappingPreset*/ int preset);
float BKE_brush_curve_strength_clamp(struct Brush *br, float p, const float len);
float BKE_brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */
/* sampling */
void BKE_brush_sample_tex(const struct Scene *scene, struct Brush *brush, const float xy[2], float rgba[4], const int thread);
void BKE_brush_imbuf_new(const struct Scene *scene, struct Brush *brush, short flt, short texfalloff, int size,
- struct ImBuf **imbuf, int use_color_correction);
+ struct ImBuf **imbuf, int use_color_correction);
/* painting */
struct BrushPainter;
@@ -78,9 +78,9 @@ typedef int (*BrushFunc)(void *user, struct ImBuf *ibuf, const float lastpos[2],
BrushPainter *BKE_brush_painter_new(struct Scene *scene, struct Brush *brush);
void BKE_brush_painter_require_imbuf(BrushPainter *painter, short flt,
- short texonly, int size);
+ short texonly, int size);
int BKE_brush_painter_paint(BrushPainter *painter, BrushFunc func, const float pos[2],
- double time, float pressure, void *user, int use_color_correction);
+ double time, float pressure, void *user, int use_color_correction);
void BKE_brush_painter_break_stroke(BrushPainter *painter);
void BKE_brush_painter_free(BrushPainter *painter);
@@ -108,13 +108,13 @@ int BKE_brush_use_size_pressure(const struct Scene *scene, struct Brush *brush)
/* scale unprojected radius to reflect a change in the brush's 2D size */
void BKE_brush_scale_unprojected_radius(float *unprojected_radius,
- int new_brush_size,
- int old_brush_size);
+ int new_brush_size,
+ int old_brush_size);
/* scale brush size to reflect a change in the brush's unprojected radius */
void BKE_brush_scale_size(int *BKE_brush_size_get,
- float new_unprojected_radius,
- float old_unprojected_radius);
+ float new_unprojected_radius,
+ float old_unprojected_radius);
/* debugging only */
void BKE_brush_debug_print_state(struct Brush *br);
diff --git a/source/blender/blenkernel/BKE_bullet.h b/source/blender/blenkernel/BKE_bullet.h
index 2103eea1041..dc522d1b22c 100644
--- a/source/blender/blenkernel/BKE_bullet.h
+++ b/source/blender/blenkernel/BKE_bullet.h
@@ -38,7 +38,7 @@ struct BulletSoftBody;
extern struct BulletSoftBody *bsbNew(void);
/* frees internal data and softbody itself */
-extern void bsbFree(struct BulletSoftBody *sb);
+extern void bsbFree(struct BulletSoftBody *sb);
#endif
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index ab3d751cc8e..eff5019a49c 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -44,20 +44,19 @@ struct MFace;
/*
* struct that kepts basic information about a BVHTree build from a mesh
*/
-typedef struct BVHTreeFromMesh
-{
+typedef struct BVHTreeFromMesh {
struct BVHTree *tree;
/* default callbacks to bvh nearest and raycast */
BVHTree_NearestPointCallback nearest_callback;
- BVHTree_RayCastCallback raycast_callback;
+ BVHTree_RayCastCallback raycast_callback;
/* Mesh represented on this BVHTree */
struct DerivedMesh *mesh;
/* Vertex array, so that callbacks have instante access to data */
struct MVert *vert;
- struct MEdge *edge; /* only used for BVHTreeFromMeshEdges */
+ struct MEdge *edge; /* only used for BVHTreeFromMeshEdges */
struct MFace *face;
/* radius for raycast */
@@ -65,7 +64,7 @@ typedef struct BVHTreeFromMesh
/* Private data */
int cached;
- void *em_evil; /* var only for snapping */
+ void *em_evil; /* var only for snapping */
} BVHTreeFromMesh;
@@ -80,7 +79,7 @@ typedef struct BVHTreeFromMesh
*
* free_bvhtree_from_mesh should be called when the tree is no longer needed.
*/
-BVHTree* bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree *bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
/*
* Builds a bvh tree where nodes are the faces of the given mesh.
@@ -96,9 +95,9 @@ BVHTree* bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMes
*
* free_bvhtree_from_mesh should be called when the tree is no longer needed.
*/
-BVHTree* bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree *bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
-BVHTree* bvhtree_from_mesh_edges(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree *bvhtree_from_mesh_edges(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
/*
* Frees data allocated by a call to bvhtree_from_mesh_*.
@@ -116,11 +115,11 @@ float nearest_point_in_tri_surface(const float v0[3], const float v1[3], const f
*/
//Using local coordinates
-#define BVHTREE_FROM_FACES 0
-#define BVHTREE_FROM_VERTICES 1
-#define BVHTREE_FROM_EDGES 2
+#define BVHTREE_FROM_FACES 0
+#define BVHTREE_FROM_VERTICES 1
+#define BVHTREE_FROM_EDGES 2
-typedef struct LinkNode* BVHCache;
+typedef struct LinkNode *BVHCache;
/*
diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h
index 8f68d7abcac..2a27934c038 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -112,13 +112,12 @@ void BKE_camera_params_compute_matrix(CameraParams *params);
/* Camera View Frame */
void BKE_camera_view_frame_ex(struct Scene *scene, struct Camera *camera, float drawsize, const short do_clip, const float scale[3],
- float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]);
+ float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]);
void BKE_camera_view_frame(struct Scene *scene, struct Camera *camera, float r_vec[4][3]);
-int BKE_camera_view_frame_fit_to_scene(
- struct Scene *scene, struct View3D *v3d, struct Object *camera_ob,
- float r_co[3]);
+int BKE_camera_view_frame_fit_to_scene(struct Scene *scene, struct View3D *v3d, struct Object *camera_ob,
+ float r_co[3]);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_ccg.h b/source/blender/blenkernel/BKE_ccg.h
index 079994450d5..6d39d42bde5 100644
--- a/source/blender/blenkernel/BKE_ccg.h
+++ b/source/blender/blenkernel/BKE_ccg.h
@@ -38,19 +38,19 @@
struct CCGSubSurf;
/* Each CCGElem is CCGSubSurf's representation of a subdivided
- vertex. All CCGElems in a particular CCGSubSurf have the same
- layout, but the layout can vary from one CCGSubSurf to another. For
- this reason, CCGElem is presented as an opaque pointer, and
- elements should always be accompanied by a CCGKey, which provides
- the necessary offsets to access components of a CCGElem.
-*/
+ * vertex. All CCGElems in a particular CCGSubSurf have the same
+ * layout, but the layout can vary from one CCGSubSurf to another. For
+ * this reason, CCGElem is presented as an opaque pointer, and
+ * elements should always be accompanied by a CCGKey, which provides
+ * the necessary offsets to access components of a CCGElem.
+ */
typedef struct CCGElem CCGElem;
typedef struct CCGKey {
int level;
/* number of bytes in each element (one float per layer, plus
- three floats for normals if enabled) */
+ * three floats for normals if enabled) */
int elem_size;
/* number of elements along each side of grid */
@@ -61,11 +61,11 @@ typedef struct CCGKey {
int grid_bytes;
/* currently always the last three floats, unless normals are
- disabled */
+ * disabled */
int normal_offset;
/* offset in bytes of mask value; only valid if 'has_mask' is
- true */
+ * true */
int mask_offset;
int num_layers;
@@ -104,24 +104,24 @@ BLI_INLINE CCGElem *CCG_elem_next(const CCGKey *key, CCGElem *elem);
BLI_INLINE float *CCG_elem_co(const CCGKey *UNUSED(key), CCGElem *elem)
{
- return (float*)elem;
+ return (float *)elem;
}
BLI_INLINE float *CCG_elem_no(const CCGKey *key, CCGElem *elem)
{
BLI_assert(key->has_normals);
- return (float*)((char*)elem + key->normal_offset);
+ return (float *)((char *)elem + key->normal_offset);
}
BLI_INLINE float *CCG_elem_mask(const CCGKey *key, CCGElem *elem)
{
BLI_assert(key->has_mask);
- return (float*)((char*)elem + (key->mask_offset));
+ return (float *)((char *)elem + (key->mask_offset));
}
BLI_INLINE CCGElem *CCG_elem_offset(const CCGKey *key, CCGElem *elem, int offset)
{
- return (CCGElem*)(((char*)elem) + key->elem_size * offset);
+ return (CCGElem *)(((char *)elem) + key->elem_size * offset);
}
BLI_INLINE CCGElem *CCG_grid_elem(const CCGKey *key, CCGElem *elem, int x, int y)
diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h
index bdfe7366f9e..37763003099 100644
--- a/source/blender/blenkernel/BKE_cdderivedmesh.h
+++ b/source/blender/blenkernel/BKE_cdderivedmesh.h
@@ -79,11 +79,11 @@ struct DerivedMesh *CDDM_copy_from_tessface(struct DerivedMesh *dm);
* elements are initialized to all zeros
*/
struct DerivedMesh *CDDM_from_template(struct DerivedMesh *source,
- int numVerts, int numEdges, int numFaces,
- int numLoops, int numPolys);
+ int numVerts, int numEdges, int numFaces,
+ int numLoops, int numPolys);
-/*converts mfaces to mpolys. note things may break if there are not valid
- *medges surrounding each mface.
+/* converts mfaces to mpolys. note things may break if there are not valid
+ * medges surrounding each mface.
*/
void CDDM_tessfaces_to_faces(struct DerivedMesh *dm);
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 24bce63ea3b..191056571c0 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -61,10 +61,10 @@ struct LinkNode;
/* COLLISION FLAGS */
typedef enum
{
- COLLISION_IN_FUTURE = (1 << 1),
+ COLLISION_IN_FUTURE = (1 << 1),
#ifdef WITH_ELTOPO
- COLLISION_USE_COLLFACE = (1 << 2),
- COLLISION_IS_EDGES = (1 << 3),
+ COLLISION_USE_COLLFACE = (1 << 2),
+ COLLISION_IS_EDGES = (1 << 3),
#endif
} COLLISION_FLAGS;
@@ -73,8 +73,7 @@ typedef enum
// used for collisions in collision.c
////////////////////////////////////////
/* used for collisions in collision.c */
-typedef struct CollPair
-{
+typedef struct CollPair {
unsigned int face1; // cloth face
unsigned int face2; // object face
double distance; // magnitude of vector
@@ -95,8 +94,7 @@ typedef struct CollPair
CollPair;
/* used for collisions in collision.c */
-typedef struct EdgeCollPair
-{
+typedef struct EdgeCollPair {
unsigned int p11, p12, p21, p22;
float normal[3];
float vector[3];
@@ -107,8 +105,7 @@ typedef struct EdgeCollPair
EdgeCollPair;
/* used for collisions in collision.c */
-typedef struct FaceCollPair
-{
+typedef struct FaceCollPair {
unsigned int p11, p12, p13, p21;
float normal[3];
float vector[3];
@@ -130,8 +127,8 @@ FaceCollPair;
// used in modifier.c from collision.c
/////////////////////////////////////////////////
-BVHTree *bvhtree_build_from_mvert(struct MFace *mfaces, unsigned int numfaces, struct MVert *x, unsigned int numverts, float epsilon );
-void bvhtree_update_from_mvert(BVHTree * bvhtree, struct MFace *faces, int numfaces, struct MVert *x, struct MVert *xnew, int numverts, int moving );
+BVHTree *bvhtree_build_from_mvert(struct MFace *mfaces, unsigned int numfaces, struct MVert *x, unsigned int numverts, float epsilon);
+void bvhtree_update_from_mvert(BVHTree *bvhtree, struct MFace *faces, int numfaces, struct MVert *x, struct MVert *xnew, int numverts, int moving);
/////////////////////////////////////////////////
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index 1da0caf97c2..d67e1a9118e 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -33,48 +33,51 @@
struct CurveMapping;
struct CurveMap;
+struct CurveMapPoint;
struct Scopes;
struct ImBuf;
struct rctf;
#if defined _WIN32
# define DO_INLINE __inline
-#elif defined (__sun) || defined (__sun__)
+#elif defined(__sun) || defined(__sun__)
# define DO_INLINE
#else
# define DO_INLINE static inline
#endif
-struct CurveMapping *curvemapping_add(int tot, float minx, float miny, float maxx, float maxy);
-void curvemapping_free(struct CurveMapping *cumap);
-struct CurveMapping *curvemapping_copy(struct CurveMapping *cumap);
-void curvemapping_set_black_white(struct CurveMapping *cumap, const float black[3], const float white[3]);
+struct CurveMapping *curvemapping_add(int tot, float minx, float miny, float maxx, float maxy);
+void curvemapping_free(struct CurveMapping *cumap);
+struct CurveMapping *curvemapping_copy(struct CurveMapping *cumap);
+void curvemapping_set_black_white(struct CurveMapping *cumap, const float black[3], const float white[3]);
-#define CURVEMAP_SLOPE_NEGATIVE 0
-#define CURVEMAP_SLOPE_POSITIVE 1
-void curvemap_reset(struct CurveMap *cuma, struct rctf *clipr, int preset, int slope);
-void curvemap_remove(struct CurveMap *cuma, int flag);
-void curvemap_insert(struct CurveMap *cuma, float x, float y);
-void curvemap_sethandle(struct CurveMap *cuma, int type);
+#define CURVEMAP_SLOPE_NEGATIVE 0
+#define CURVEMAP_SLOPE_POSITIVE 1
+void curvemap_reset(struct CurveMap *cuma, struct rctf *clipr, int preset, int slope);
+void curvemap_remove(struct CurveMap *cuma, int flag);
+void curvemap_remove_point(struct CurveMap *cuma, struct CurveMapPoint *cmp);
+struct CurveMapPoint *curvemap_insert(struct CurveMap *cuma, float x, float y);
+void curvemap_sethandle(struct CurveMap *cuma, int type);
-void curvemapping_changed(struct CurveMapping *cumap, int rem_doubles);
-
- /* single curve, no table check */
-float curvemap_evaluateF(struct CurveMap *cuma, float value);
- /* single curve, with table check */
-float curvemapping_evaluateF(struct CurveMapping *cumap, int cur, float value);
-void curvemapping_evaluate3F(struct CurveMapping *cumap, float vecout[3], const float vecin[3]);
-void curvemapping_evaluateRGBF(struct CurveMapping *cumap, float vecout[3], const float vecin[3]);
-void curvemapping_evaluate_premulRGBF(struct CurveMapping *cumap, float vecout[3], const float vecin[3]);
-void curvemapping_do_ibuf(struct CurveMapping *cumap, struct ImBuf *ibuf);
-void curvemapping_premultiply(struct CurveMapping *cumap, int restore);
-int curvemapping_RGBA_does_something(struct CurveMapping *cumap);
-void curvemapping_initialize(struct CurveMapping *cumap);
-void curvemapping_table_RGBA(struct CurveMapping *cumap, float **array, int *size);
+void curvemapping_changed(struct CurveMapping *cumap, int rem_doubles);
+void curvemapping_changed_all(struct CurveMapping *cumap);
-void scopes_update(struct Scopes *scopes, struct ImBuf *ibuf, int use_color_management);
-void scopes_free(struct Scopes *scopes);
-void scopes_new(struct Scopes *scopes);
+/* single curve, no table check */
+float curvemap_evaluateF(struct CurveMap *cuma, float value);
+/* single curve, with table check */
+float curvemapping_evaluateF(struct CurveMapping *cumap, int cur, float value);
+void curvemapping_evaluate3F(struct CurveMapping *cumap, float vecout[3], const float vecin[3]);
+void curvemapping_evaluateRGBF(struct CurveMapping *cumap, float vecout[3], const float vecin[3]);
+void curvemapping_evaluate_premulRGBF(struct CurveMapping *cumap, float vecout[3], const float vecin[3]);
+void curvemapping_do_ibuf(struct CurveMapping *cumap, struct ImBuf *ibuf);
+void curvemapping_premultiply(struct CurveMapping *cumap, int restore);
+int curvemapping_RGBA_does_something(struct CurveMapping *cumap);
+void curvemapping_initialize(struct CurveMapping *cumap);
+void curvemapping_table_RGBA(struct CurveMapping *cumap, float **array, int *size);
+
+void scopes_update(struct Scopes *scopes, struct ImBuf *ibuf, int use_color_management);
+void scopes_free(struct Scopes *scopes);
+void scopes_new(struct Scopes *scopes);
#endif
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index 35d07e7a7a7..686a60ab2c9 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -48,15 +48,15 @@ extern "C" {
/* special struct for use in constraint evaluation */
typedef struct bConstraintOb {
- struct Scene *scene; /* for system time, part of deglobalization, code nicer later with local time (ton) */
- struct Object *ob; /* if pchan, then armature that it comes from, otherwise constraint owner */
- struct bPoseChannel *pchan; /* pose channel that owns the constraints being evaluated */
+ struct Scene *scene; /* for system time, part of deglobalization, code nicer later with local time (ton) */
+ struct Object *ob; /* if pchan, then armature that it comes from, otherwise constraint owner */
+ struct bPoseChannel *pchan; /* pose channel that owns the constraints being evaluated */
- float matrix[4][4]; /* matrix where constraints are accumulated + solved */
- float startmat[4][4]; /* original matrix (before constraint solving) */
+ float matrix[4][4]; /* matrix where constraints are accumulated + solved */
+ float startmat[4][4]; /* original matrix (before constraint solving) */
- short type; /* type of owner */
- short rotOrder; /* rotation order for constraint owner (as defined in eEulerRotationOrders in BLI_math.h) */
+ short type; /* type of owner */
+ short rotOrder; /* rotation order for constraint owner (as defined in eEulerRotationOrders in BLI_math.h) */
} bConstraintOb;
/* ---------------------------------------------------------------------------- */
@@ -79,31 +79,31 @@ typedef void (*ConstraintIDFunc)(struct bConstraint *con, struct ID **idpoin, sh
*/
typedef struct bConstraintTypeInfo {
/* admin/ident */
- short type; /* CONSTRAINT_TYPE_### */
- short size; /* size in bytes of the struct */
- char name[32]; /* name of constraint in interface */
- char structName[32]; /* name of struct for SDNA */
+ short type; /* CONSTRAINT_TYPE_### */
+ short size; /* size in bytes of the struct */
+ char name[32]; /* name of constraint in interface */
+ char structName[32]; /* name of struct for SDNA */
/* data management function pointers - special handling */
- /* free any data that is allocated separately (optional) */
+ /* free any data that is allocated separately (optional) */
void (*free_data)(struct bConstraint *con);
- /* run the provided callback function on all the ID-blocks linked to the constraint */
+ /* run the provided callback function on all the ID-blocks linked to the constraint */
void (*id_looper)(struct bConstraint *con, ConstraintIDFunc func, void *userdata);
- /* copy any special data that is allocated separately (optional) */
+ /* copy any special data that is allocated separately (optional) */
void (*copy_data)(struct bConstraint *con, struct bConstraint *src);
- /* set settings for data that will be used for bConstraint.data (memory already allocated using MEM_callocN) */
+ /* set settings for data that will be used for bConstraint.data (memory already allocated using MEM_callocN) */
void (*new_data)(void *cdata);
/* target handling function pointers */
- /* for multi-target constraints: return that list; otherwise make a temporary list (returns number of targets) */
+ /* for multi-target constraints: return that list; otherwise make a temporary list (returns number of targets) */
int (*get_constraint_targets)(struct bConstraint *con, struct ListBase *list);
- /* for single-target constraints only: flush data back to source data, and the free memory used */
+ /* for single-target constraints only: flush data back to source data, and the free memory used */
void (*flush_constraint_targets)(struct bConstraint *con, struct ListBase *list, short nocopy);
/* evaluation */
- /* set the ct->matrix for the given constraint target (at the given ctime) */
+ /* set the ct->matrix for the given constraint target (at the given ctime) */
void (*get_target_matrix)(struct bConstraint *con, struct bConstraintOb *cob, struct bConstraintTarget *ct, float ctime);
- /* evaluate the constraint for the given time */
+ /* evaluate the constraint for the given time */
void (*evaluate_constraint)(struct bConstraint *con, struct bConstraintOb *cob, struct ListBase *targets);
} bConstraintTypeInfo;
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index b2bd840a09a..23df246b430 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -72,7 +72,7 @@ struct bContextDataResult;
typedef struct bContextDataResult bContextDataResult;
typedef int (*bContextDataCallback)(const bContext *C,
- const char *member, bContextDataResult *result);
+ const char *member, bContextDataResult *result);
typedef struct bContextStoreEntry {
struct bContextStoreEntry *next, *prev;
@@ -223,7 +223,7 @@ void CTX_data_list_add(bContextDataResult *result, void *data);
BLI_freelistN(&ctx_data_list); \
}
-int ctx_data_list_count(const bContext *C, int (*func)(const bContext*, ListBase*));
+int ctx_data_list_count(const bContext *C, int (*func)(const bContext *, ListBase *));
#define CTX_DATA_COUNT(C, member) \
ctx_data_list_count(C, CTX_data_##member)
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 6267104022c..a845ac10c9d 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -43,15 +43,15 @@ struct Nurb;
struct Object;
struct Scene;
-#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (((nu)->flagu & CU_NURB_CYCLIC) ? ((nu)->orderu-1) : 0) )
-#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (((nu)->flagv & CU_NURB_CYCLIC) ? ((nu)->orderv-1) : 0) )
+#define KNOTSU(nu) ( (nu)->orderu + (nu)->pntsu + (((nu)->flagu & CU_NURB_CYCLIC) ? ((nu)->orderu - 1) : 0) )
+#define KNOTSV(nu) ( (nu)->orderv + (nu)->pntsv + (((nu)->flagv & CU_NURB_CYCLIC) ? ((nu)->orderv - 1) : 0) )
/* Non cyclic nurbs have 1 less segment */
-#define SEGMENTSU(nu) ( ((nu)->flagu & CU_NURB_CYCLIC) ? (nu)->pntsu : (nu)->pntsu-1 )
-#define SEGMENTSV(nu) ( ((nu)->flagv & CU_NURB_CYCLIC) ? (nu)->pntsv : (nu)->pntsv-1 )
+#define SEGMENTSU(nu) ( ((nu)->flagu & CU_NURB_CYCLIC) ? (nu)->pntsu : (nu)->pntsu - 1)
+#define SEGMENTSV(nu) ( ((nu)->flagv & CU_NURB_CYCLIC) ? (nu)->pntsv : (nu)->pntsv - 1)
-#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)
+#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);
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index 4b52189d8b7..bbe68db8bfe 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -47,7 +47,7 @@ struct CustomDataLayer;
typedef uint64_t CustomDataMask;
/*a data type large enough to hold 1 element from any customdata layer type*/
-typedef struct {unsigned char data[64];} CDBlockBytes;
+typedef struct {unsigned char data[64]; } CDBlockBytes;
extern const CustomDataMask CD_MASK_BAREMESH;
extern const CustomDataMask CD_MASK_MESH;
@@ -97,7 +97,7 @@ void CustomData_data_add(int type, void *data1, void *data2);
* mask is a bitfield where (mask & (1 << (layer type))) indicates
* if a layer should be copied or not. alloctype must be one of the above. */
void CustomData_copy(const struct CustomData *source, struct CustomData *dest,
- CustomDataMask mask, int alloctype, int totelem);
+ CustomDataMask mask, int alloctype, int totelem);
/* BMESH_TODO, not really a public function but readfile.c needs it */
void CustomData_update_typemap(struct CustomData *data);
@@ -105,7 +105,7 @@ void CustomData_update_typemap(struct CustomData *data);
/* same as the above, except that this will preserve existing layers, and only
* add the layers that were not there yet */
void CustomData_merge(const struct CustomData *source, struct CustomData *dest,
- CustomDataMask mask, int alloctype, int totelem);
+ CustomDataMask mask, int alloctype, int totelem);
/* bmesh version of CustomData_merge; merges the layouts of source and dest,
* then goes through the mesh and makes sure all the customdata blocks are
@@ -128,10 +128,10 @@ void CustomData_free_temporary(struct CustomData *data, int totelem);
* in editmode, use EDBM_data_layer_add instead of this function
*/
void *CustomData_add_layer(struct CustomData *data, int type, int alloctype,
- void *layer, int totelem);
+ void *layer, int totelem);
/*same as above but accepts a name */
void *CustomData_add_layer_named(struct CustomData *data, int type, int alloctype,
- void *layer, int totelem, const char *name);
+ void *layer, int totelem, const char *name);
/* frees the active or first data layer with the give type.
* returns 1 on succes, 0 if no layer with the given type is found
@@ -160,7 +160,7 @@ int CustomData_number_of_layers(const struct CustomData *data, int type);
* returns the layer data */
void *CustomData_duplicate_referenced_layer(struct CustomData *data, const int type, const int totelem);
void *CustomData_duplicate_referenced_layer_named(struct CustomData *data,
- const int type, const char *name, const int totelem);
+ const int type, const char *name, const int totelem);
int CustomData_is_referenced_layer(struct CustomData *data, int type);
/* set the CD_FLAG_NOCOPY flag in custom data layers where the mask is
@@ -168,7 +168,7 @@ int CustomData_is_referenced_layer(struct CustomData *data, int type);
* will be copied
*/
void CustomData_set_only_copy(const struct CustomData *data,
- CustomDataMask mask);
+ CustomDataMask mask);
/* copies data from one CustomData object to another
* objects need not be compatible, each source layer is copied to the
@@ -176,8 +176,8 @@ void CustomData_set_only_copy(const struct CustomData *data,
* return 1 on success, 0 on failure
*/
void CustomData_copy_data(const struct CustomData *source,
- struct CustomData *dest, int source_index,
- int dest_index, int count);
+ struct CustomData *dest, int source_index,
+ int dest_index, int count);
void CustomData_copy_elements(int type, void *source, void *dest, int count);
void CustomData_bmesh_copy_data(const struct CustomData *source,
struct CustomData *dest, void *src_block,
@@ -203,11 +203,11 @@ void CustomData_free_elem(struct CustomData *data, int index, int count);
* returns 1 on success, 0 on failure
*/
void CustomData_interp(const struct CustomData *source, struct CustomData *dest,
- int *src_indices, float *weights, float *sub_weights,
- int count, int dest_index);
+ int *src_indices, float *weights, float *sub_weights,
+ int count, int dest_index);
void CustomData_bmesh_interp(struct CustomData *data, void **src_blocks,
- float *weights, float *sub_weights, int count,
- void *dest_block);
+ float *weights, float *sub_weights, int count,
+ void *dest_block);
/* swaps the data in the element corners, to new corners with indices as
@@ -235,7 +235,7 @@ int CustomData_set_layer_name(const struct CustomData *data, int type, int n, co
void *CustomData_get_layer(const struct CustomData *data, int type);
void *CustomData_get_layer_n(const struct CustomData *data, int type, int n);
void *CustomData_get_layer_named(const struct CustomData *data, int type,
- const char *name);
+ const char *name);
int CustomData_get_layer_index(const struct CustomData *data, int type);
int CustomData_get_layer_index_n(const struct CustomData *data, int type, int n);
@@ -254,18 +254,18 @@ int CustomData_get_stencil_layer(const struct CustomData *data, int type);
* no effect if there is no layer of type
*/
void CustomData_set(const struct CustomData *data, int index, int type,
- void *source);
+ void *source);
void CustomData_bmesh_set(const struct CustomData *data, void *block, int type,
- void *source);
+ void *source);
void CustomData_bmesh_set_n(struct CustomData *data, void *block, int type, int n,
- void *source);
-/*sets the data of the block at physical layer n. no real type checking
- *is performed.
+ void *source);
+/* sets the data of the block at physical layer n. no real type checking
+ * is performed.
*/
void CustomData_bmesh_set_layer_n(struct CustomData *data, void *block, int n,
- void *source);
+ void *source);
/* set the pointer of to the first layer of type. the old data is not freed.
* returns the value of ptr if the layer is found, NULL otherwise
@@ -294,9 +294,9 @@ void CustomData_bmesh_free_block(struct CustomData *data, void **block);
/* copy custom data to/from layers as in mesh/derivedmesh, to editmesh
* blocks of data. the CustomData's must not be compatible */
void CustomData_to_bmesh_block(const struct CustomData *source,
- struct CustomData *dest, int src_index, void **dest_block);
+ struct CustomData *dest, int src_index, void **dest_block);
void CustomData_from_bmesh_block(const struct CustomData *source,
- struct CustomData *dest, void *src_block, int dest_index);
+ struct CustomData *dest, void *src_block, int dest_index);
/* query info over types */
@@ -326,17 +326,17 @@ void CustomData_bmesh_init_pool(struct CustomData *data, int totelem, const char
/* External file storage */
void CustomData_external_add(struct CustomData *data,
- struct ID *id, int type, int totelem, const char *filename);
+ struct ID *id, int type, int totelem, const char *filename);
void CustomData_external_remove(struct CustomData *data,
- struct ID *id, int type, int totelem);
+ struct ID *id, int type, int totelem);
int CustomData_external_test(struct CustomData *data, int type);
void CustomData_external_write(struct CustomData *data,
- struct ID *id, CustomDataMask mask, int totelem, int free);
+ struct ID *id, CustomDataMask mask, int totelem, int free);
void CustomData_external_read(struct CustomData *data,
- struct ID *id, CustomDataMask mask, int totelem);
+ struct ID *id, CustomDataMask mask, int totelem);
void CustomData_external_reload(struct CustomData *data,
- struct ID *id, CustomDataMask mask, int totelem);
+ struct ID *id, CustomDataMask mask, int totelem);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_customdata_file.h b/source/blender/blenkernel/BKE_customdata_file.h
index c4c41c20d80..978db8a6c1a 100644
--- a/source/blender/blenkernel/BKE_customdata_file.h
+++ b/source/blender/blenkernel/BKE_customdata_file.h
@@ -25,10 +25,10 @@
* \ingroup bke
*/
-#define CDF_TYPE_IMAGE 0
-#define CDF_TYPE_MESH 1
+#define CDF_TYPE_IMAGE 0
+#define CDF_TYPE_MESH 1
-#define CDF_LAYER_NAME_MAX 64
+#define CDF_LAYER_NAME_MAX 64
typedef struct CDataFile CDataFile;
typedef struct CDataFileLayer CDataFileLayer;
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index 559dd4571f5..25677165fc2 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -40,17 +40,17 @@ struct ListBase;
struct bDeformGroup;
struct MDeformVert;
-void defgroup_copy_list(struct ListBase *lb1, struct ListBase *lb2);
+void defgroup_copy_list(struct ListBase *lb1, struct ListBase *lb2);
struct bDeformGroup *defgroup_duplicate(struct bDeformGroup *ingroup);
struct bDeformGroup *defgroup_find_name(struct Object *ob, const char *name);
-int *defgroup_flip_map(struct Object *ob, int *flip_map_len, int use_default);
-int *defgroup_flip_map_single(struct Object *ob, int *flip_map_len, int use_default, int defgroup);
-int defgroup_flip_index(struct Object *ob, int index, int use_default);
-int defgroup_name_index(struct Object *ob, const char *name);
-void defgroup_unique_name(struct bDeformGroup *dg, struct Object *ob);
+int *defgroup_flip_map(struct Object *ob, int *flip_map_len, int use_default);
+int *defgroup_flip_map_single(struct Object *ob, int *flip_map_len, int use_default, int defgroup);
+int defgroup_flip_index(struct Object *ob, int index, int use_default);
+int defgroup_name_index(struct Object *ob, const char *name);
+void defgroup_unique_name(struct bDeformGroup *dg, struct Object *ob);
-struct MDeformWeight *defvert_find_index(const struct MDeformVert *dv, const int defgroup);
-struct MDeformWeight *defvert_verify_index(struct MDeformVert *dv, const int defgroup);
+struct MDeformWeight *defvert_find_index(const struct MDeformVert *dv, const int defgroup);
+struct MDeformWeight *defvert_verify_index(struct MDeformVert *dv, const int defgroup);
void defvert_add_index_notest(struct MDeformVert *dv, int defgroup, const float weight);
void defvert_remove_group(struct MDeformVert *dvert, struct MDeformWeight *dw);
void defvert_clear(struct MDeformVert *dvert);
@@ -63,7 +63,7 @@ void defvert_copy_index(struct MDeformVert *dvert_dst, const struct MDeformVert
void defvert_sync(struct MDeformVert *dvert_dst, const struct MDeformVert *dvert_src, int use_verify);
void defvert_sync_mapped(struct MDeformVert *dvert_dst, const struct MDeformVert *dvert_src,
const int *flip_map, const int flip_map_len, const int use_verify);
-void defvert_remap (struct MDeformVert *dvert, int *map, const int map_len);
+void defvert_remap(struct MDeformVert *dvert, int *map, const int map_len);
void defvert_flip(struct MDeformVert *dvert, const int *flip_map, const int flip_map_len);
void defvert_flip_merged(struct MDeformVert *dvert, const int *flip_map, const int flip_map_len);
void defvert_normalize(struct MDeformVert *dvert);
diff --git a/source/blender/blenkernel/BKE_depsgraph.h b/source/blender/blenkernel/BKE_depsgraph.h
index b7edf04724d..cf7e4b24288 100644
--- a/source/blender/blenkernel/BKE_depsgraph.h
+++ b/source/blender/blenkernel/BKE_depsgraph.h
@@ -46,37 +46,37 @@ struct GHash;
/* **** DAG relation types *** */
- /* scene link to object */
-#define DAG_RL_SCENE (1<<0)
- /* object link to data */
-#define DAG_RL_DATA (1<<1)
+/* scene link to object */
+#define DAG_RL_SCENE (1 << 0)
+/* object link to data */
+#define DAG_RL_DATA (1 << 1)
- /* object changes object (parent, track, constraints) */
-#define DAG_RL_OB_OB (1<<2)
- /* object changes obdata (hooks, constraints) */
-#define DAG_RL_OB_DATA (1<<3)
- /* data changes object (vertex parent) */
-#define DAG_RL_DATA_OB (1<<4)
- /* data changes data (deformers) */
-#define DAG_RL_DATA_DATA (1<<5)
+/* object changes object (parent, track, constraints) */
+#define DAG_RL_OB_OB (1 << 2)
+/* object changes obdata (hooks, constraints) */
+#define DAG_RL_OB_DATA (1 << 3)
+/* data changes object (vertex parent) */
+#define DAG_RL_DATA_OB (1 << 4)
+/* data changes data (deformers) */
+#define DAG_RL_DATA_DATA (1 << 5)
-#define DAG_NO_RELATION (1<<6)
+#define DAG_NO_RELATION (1 << 6)
-#define DAG_RL_ALL_BUT_DATA (DAG_RL_SCENE|DAG_RL_OB_OB|DAG_RL_OB_DATA|DAG_RL_DATA_OB|DAG_RL_DATA_DATA)
-#define DAG_RL_ALL (DAG_RL_ALL_BUT_DATA|DAG_RL_DATA)
+#define DAG_RL_ALL_BUT_DATA (DAG_RL_SCENE | DAG_RL_OB_OB | DAG_RL_OB_DATA | DAG_RL_DATA_OB | DAG_RL_DATA_DATA)
+#define DAG_RL_ALL (DAG_RL_ALL_BUT_DATA | DAG_RL_DATA)
-typedef void (*graph_action_func)(void * ob, void **data);
+typedef void (*graph_action_func)(void *ob, void **data);
// queues are returned by all BFS & DFS queries
// opaque type
-void *pop_ob_queue(struct DagNodeQueue *queue);
-int queue_count(struct DagNodeQueue *queue);
-void queue_delete(struct DagNodeQueue *queue);
+void *pop_ob_queue(struct DagNodeQueue *queue);
+int queue_count(struct DagNodeQueue *queue);
+void queue_delete(struct DagNodeQueue *queue);
// queries
-struct DagForest *build_dag(struct Main *bmain, struct Scene *sce, short mask);
-void free_forest(struct DagForest *Dag);
+struct DagForest *build_dag(struct Main *bmain, struct Scene *sce, short mask);
+void free_forest(struct DagForest *Dag);
// note :
// the meanings of the 2 returning values is a bit different :
@@ -88,49 +88,49 @@ int pre_and_post_DFS(struct DagForest *dag, short mask, graph_action_func pre_fu
int pre_and_post_source_BFS(struct DagForest *dag, short mask, struct DagNode *source, graph_action_func pre_func, graph_action_func post_func, void **data);
int pre_and_post_source_DFS(struct DagForest *dag, short mask, struct DagNode *source, graph_action_func pre_func, graph_action_func post_func, void **data);
-struct DagNodeQueue *get_obparents(struct DagForest *dag, void *ob);
-struct DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob);
-struct DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob); //
-short are_obs_related(struct DagForest *dag, void *ob1, void *ob2);
-int is_acyclic(struct DagForest *dag); //
+struct DagNodeQueue *get_obparents(struct DagForest *dag, void *ob);
+struct DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob);
+struct DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob);
+short are_obs_related(struct DagForest *dag, void *ob1, void *ob2);
+int is_acyclic(struct DagForest *dag);
//int get_cycles(struct DagForest *dag, struct DagNodeQueue **queues, int *count); //
/* ********** API *************** */
/* Note that the DAG never executes changes in Objects, only sets flags in Objects */
- /* (re)-create dependency graph for scene */
-void DAG_scene_sort(struct Main *bmain, struct Scene *sce);
-
- /* flag all objects that need recalc because they're animated */
-void DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
- /* flushes all recalc flags in objects down the dependency tree */
-void DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
- /* tag objects for update on file load */
-void DAG_on_visible_update(struct Main *bmain, const short do_time);
-
- /* when setting manual RECALC flags, call this afterwards */
-void DAG_ids_flush_update(struct Main *bmain, int time);
-
- /* tag datablock to get updated for the next redraw */
-void DAG_id_tag_update(struct ID *id, short flag);
- /* flush all tagged updates */
-void DAG_ids_flush_tagged(struct Main *bmain);
- /* check and clear ID recalc flags */
-void DAG_ids_check_recalc(struct Main *bmain, struct Scene *scene, int time);
-void DAG_ids_clear_recalc(struct Main *bmain);
- /* test if any of this id type is tagged for update */
-void DAG_id_type_tag(struct Main *bmain, short idtype);
-int DAG_id_type_tagged(struct Main *bmain, short idtype);
-
- /* (re)-create dependency graph for armature pose */
-void DAG_pose_sort(struct Object *ob);
-
- /* callback for editors module to do updates */
-void DAG_editors_update_cb(void (*id_func)(struct Main *bmain, struct ID *id),
+/* (re)-create dependency graph for scene */
+void DAG_scene_sort(struct Main *bmain, struct Scene *sce);
+
+/* flag all objects that need recalc because they're animated */
+void DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
+/* flushes all recalc flags in objects down the dependency tree */
+void DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
+/* tag objects for update on file load */
+void DAG_on_visible_update(struct Main *bmain, const short do_time);
+
+/* when setting manual RECALC flags, call this afterwards */
+void DAG_ids_flush_update(struct Main *bmain, int time);
+
+/* tag datablock to get updated for the next redraw */
+void DAG_id_tag_update(struct ID *id, short flag);
+/* flush all tagged updates */
+void DAG_ids_flush_tagged(struct Main *bmain);
+/* check and clear ID recalc flags */
+void DAG_ids_check_recalc(struct Main *bmain, struct Scene *scene, int time);
+void DAG_ids_clear_recalc(struct Main *bmain);
+/* test if any of this id type is tagged for update */
+void DAG_id_type_tag(struct Main *bmain, short idtype);
+int DAG_id_type_tagged(struct Main *bmain, short idtype);
+
+/* (re)-create dependency graph for armature pose */
+void DAG_pose_sort(struct Object *ob);
+
+/* callback for editors module to do updates */
+void DAG_editors_update_cb(void (*id_func)(struct Main *bmain, struct ID *id),
void (*scene_func)(struct Main *bmain, struct Scene *scene, int updated));
- /* debugging */
-void DAG_print_dependencies(struct Main *bmain, struct Scene *scene, struct Object *ob);
+/* debugging */
+void DAG_print_dependencies(struct Main *bmain, struct Scene *scene, struct Object *ob);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index cb8ddbf0b00..758a2a8a2e8 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -42,13 +42,13 @@
#define DL_INDEX3 4
#define DL_INDEX4 5
#define DL_VERTCOL 6
-#define DL_VERTS 7
+#define DL_VERTS 7
/* dl->flag */
-#define DL_CYCL_U 1
-#define DL_CYCL_V 2
-#define DL_FRONT_CURVE 4
-#define DL_BACK_CURVE 8
+#define DL_CYCL_U 1
+#define DL_CYCL_V 2
+#define DL_FRONT_CURVE 4
+#define DL_BACK_CURVE 8
/* prototypes */
@@ -73,7 +73,7 @@ typedef struct DispList {
int *index;
unsigned int *col1, *col2;
int charidx;
- int totindex; /* indexed array drawing surfaces */
+ int totindex; /* indexed array drawing surfaces */
unsigned int *bevelSplitFlag;
} DispList;
diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h
index 59f8864bb21..ffce16f39ff 100644
--- a/source/blender/blenkernel/BKE_dynamicpaint.h
+++ b/source/blender/blenkernel/BKE_dynamicpaint.h
@@ -64,7 +64,7 @@ typedef struct PaintWavePoint {
} PaintWavePoint;
struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
-void dynamicPaint_Modifier_free (struct DynamicPaintModifierData *pmd);
+void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd);
void dynamicPaint_Modifier_copy(struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd);
int dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, struct Scene *scene);
@@ -87,7 +87,7 @@ struct DynamicPaintSurface *get_activeSurface(struct DynamicPaintCanvasSettings
/* image sequence baking */
int dynamicPaint_createUVSurface(struct DynamicPaintSurface *surface);
int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, struct Scene *scene, struct Object *cObject, int frame);
-void dynamicPaint_outputSurfaceImage(struct DynamicPaintSurface *surface, char* filename, short output_layer);
+void dynamicPaint_outputSurfaceImage(struct DynamicPaintSurface *surface, char *filename, short output_layer);
/* PaintPoint state */
#define DPAINT_PAINT_NONE -1
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index bb17c891020..e9d37fb4407 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -52,7 +52,7 @@ struct PartDeflect *object_add_collision_fields(int type);
typedef struct EffectedPoint {
float *loc;
float *vel;
- float *ave; /* angular velocity for particles with dynamic rotation */
+ float *ave; /* angular velocity for particles with dynamic rotation */
float *rot; /* rotation quaternion for particles with dynamic rotation */
float vel_to_frame;
float vel_to_sec;
@@ -63,7 +63,7 @@ typedef struct EffectedPoint {
unsigned int flag;
int index;
- struct ParticleSystem *psys; /* particle system the point belongs to */
+ struct ParticleSystem *psys; /* particle system the point belongs to */
} EffectedPoint;
typedef struct GuideEffectorData {
@@ -86,7 +86,7 @@ typedef struct EffectorData {
/* only for vortex effector with surface falloff */
float nor2[3], vec_to_point2[3];
- int *index; /* point index */
+ int *index; /* point index */
} EffectorData;
/* used for calculating the effector force */
@@ -109,10 +109,10 @@ typedef struct EffectorCache {
int flag;
} EffectorCache;
-void free_partdeflect(struct PartDeflect *pd);
+void free_partdeflect(struct PartDeflect *pd);
struct ListBase *pdInitEffectors(struct Scene *scene, struct Object *ob_src, struct ParticleSystem *psys_src, struct EffectorWeights *weights);
-void pdEndEffectors(struct ListBase **effectors);
-void pdDoEffectors(struct ListBase *effectors, struct ListBase *colliders, struct EffectorWeights *weights, struct EffectedPoint *point, float *force, float *impulse);
+void pdEndEffectors(struct ListBase **effectors);
+void pdDoEffectors(struct ListBase *effectors, struct ListBase *colliders, struct EffectorWeights *weights, struct EffectedPoint *point, float *force, float *impulse);
void pd_point_from_particle(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ParticleKey *state, struct EffectedPoint *point);
void pd_point_from_loc(struct Scene *scene, float *loc, float *vel, int index, struct EffectedPoint *point);
@@ -120,7 +120,7 @@ void pd_point_from_soft(struct Scene *scene, float *loc, float *vel, int index,
/* needed for boids */
float effector_falloff(struct EffectorCache *eff, struct EffectorData *efd, struct EffectedPoint *point, struct EffectorWeights *weights);
-int closest_point_on_surface(SurfaceModifierData *surmd, const float co[3], float surface_co[3], float surface_nor[3], float surface_vel[3]);
+int closest_point_on_surface(SurfaceModifierData * surmd, const float co[3], float surface_co[3], float surface_nor[3], float surface_vel[3]);
int get_effector_data(struct EffectorCache *eff, struct EffectorData *efd, struct EffectedPoint *point, int real_velocity);
/* required for particle_system.c */
@@ -128,12 +128,12 @@ int get_effector_data(struct EffectorCache *eff, struct EffectorData *efd, struc
//float effector_falloff(struct EffectorData *eff, struct EffectorPoint *point, struct EffectorWeights *weights);
/* EffectedPoint->flag */
-#define PE_WIND_AS_SPEED 1
-#define PE_DYNAMIC_ROTATION 2
-#define PE_USE_NORMAL_DATA 4
+#define PE_WIND_AS_SPEED 1
+#define PE_DYNAMIC_ROTATION 2
+#define PE_USE_NORMAL_DATA 4
/* EffectorData->flag */
-#define PE_VELOCITY_TO_IMPULSE 1
+#define PE_VELOCITY_TO_IMPULSE 1
#endif
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index b615ac60c3e..9dae38d0a65 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -70,15 +70,15 @@ void bezt_add_to_cfra_elem(ListBase *lb, struct BezTriple *bezt);
/* convenience looper over ALL driver targets for a given variable (even the unused ones) */
#define DRIVER_TARGETS_LOOPER(dvar) \
{ \
- DriverTarget *dtar= &dvar->targets[0]; \
- int tarIndex= 0; \
+ DriverTarget *dtar = &dvar->targets[0]; \
+ int tarIndex = 0; \
for (; tarIndex < MAX_DRIVER_TARGETS; tarIndex++, dtar++)
/* convenience looper over USED driver targets only */
#define DRIVER_TARGETS_USED_LOOPER(dvar) \
{ \
- DriverTarget *dtar= &dvar->targets[0]; \
- int tarIndex= 0; \
+ DriverTarget *dtar = &dvar->targets[0]; \
+ int tarIndex = 0; \
for (; tarIndex < dvar->num_targets; tarIndex++, dtar++)
/* tidy up for driver targets loopers */
@@ -94,7 +94,7 @@ void driver_free_variable(struct ChannelDriver *driver, struct DriverVar *dvar);
void driver_change_variable_type(struct DriverVar *dvar, int type);
struct DriverVar *driver_add_new_variable(struct ChannelDriver *driver);
-float driver_get_variable_value (struct ChannelDriver *driver, struct DriverVar *dvar);
+float driver_get_variable_value(struct ChannelDriver *driver, struct DriverVar *dvar);
/* ************** F-Curve Modifiers *************** */
@@ -111,52 +111,52 @@ float driver_get_variable_value (struct ChannelDriver *driver, struct DriverVar
*/
typedef struct FModifierTypeInfo {
/* admin/ident */
- short type; /* FMODIFIER_TYPE_### */
- short size; /* size in bytes of the struct */
- short acttype; /* eFMI_Action_Types */
- short requires; /* eFMI_Requirement_Flags */
- char name[64]; /* name of modifier in interface */
- char structName[64]; /* name of struct for SDNA */
+ short type; /* FMODIFIER_TYPE_### */
+ short size; /* size in bytes of the struct */
+ short acttype; /* eFMI_Action_Types */
+ short requires; /* eFMI_Requirement_Flags */
+ char name[64]; /* name of modifier in interface */
+ char structName[64]; /* name of struct for SDNA */
/* data management function pointers - special handling */
- /* free any data that is allocated separately (optional) */
+ /* free any data that is allocated separately (optional) */
void (*free_data)(struct FModifier *fcm);
- /* copy any special data that is allocated separately (optional) */
+ /* copy any special data that is allocated separately (optional) */
void (*copy_data)(struct FModifier *fcm, struct FModifier *src);
- /* set settings for data that will be used for FCuModifier.data (memory already allocated using MEM_callocN) */
+ /* set settings for data that will be used for FCuModifier.data (memory already allocated using MEM_callocN) */
void (*new_data)(void *mdata);
- /* verifies that the modifier settings are valid */
+ /* verifies that the modifier settings are valid */
void (*verify_data)(struct FModifier *fcm);
/* evaluation */
- /* evaluate time that the modifier requires the F-Curve to be evaluated at */
+ /* evaluate time that the modifier requires the F-Curve to be evaluated at */
float (*evaluate_modifier_time)(struct FCurve *fcu, struct FModifier *fcm, float cvalue, float evaltime);
- /* evaluate the modifier for the given time and 'accumulated' value */
+ /* evaluate the modifier for the given time and 'accumulated' value */
void (*evaluate_modifier)(struct FCurve *fcu, struct FModifier *fcm, float *cvalue, float evaltime);
} FModifierTypeInfo;
/* Values which describe the behavior of a FModifier Type */
typedef enum eFMI_Action_Types {
- /* modifier only modifies values outside of data range */
+ /* modifier only modifies values outside of data range */
FMI_TYPE_EXTRAPOLATION = 0,
- /* modifier leaves data-points alone, but adjusts the interpolation between and around them */
+ /* modifier leaves data-points alone, but adjusts the interpolation between and around them */
FMI_TYPE_INTERPOLATION,
- /* modifier only modifies the values of points (but times stay the same) */
+ /* modifier only modifies the values of points (but times stay the same) */
FMI_TYPE_REPLACE_VALUES,
- /* modifier generates a curve regardless of what came before */
+ /* modifier generates a curve regardless of what came before */
FMI_TYPE_GENERATE_CURVE
} eFMI_Action_Types;
/* Flags for the requirements of a FModifier Type */
typedef enum eFMI_Requirement_Flags {
- /* modifier requires original data-points (kindof beats the purpose of a modifier stack?) */
- FMI_REQUIRES_ORIGINAL_DATA = (1<<0),
- /* modifier doesn't require on any preceding data (i.e. it will generate a curve).
- * Use in conjunction with FMI_TYPE_GENRATE_CURVE
- */
- FMI_REQUIRES_NOTHING = (1<<1),
- /* refer to modifier instance */
- FMI_REQUIRES_RUNTIME_CHECK = (1<<2)
+ /* modifier requires original data-points (kindof beats the purpose of a modifier stack?) */
+ FMI_REQUIRES_ORIGINAL_DATA = (1 << 0),
+ /* modifier doesn't require on any preceding data (i.e. it will generate a curve).
+ * Use in conjunction with FMI_TYPE_GENRATE_CURVE
+ */
+ FMI_REQUIRES_NOTHING = (1 << 1),
+ /* refer to modifier instance */
+ FMI_REQUIRES_RUNTIME_CHECK = (1 << 2)
} eFMI_Requirement_Flags;
/* Function Prototypes for FModifierTypeInfo's */
@@ -194,7 +194,7 @@ void copy_fcurves(ListBase *dst, ListBase *src);
/* find matching F-Curve in the given list of F-Curves */
struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index);
-struct FCurve *iter_step_fcurve (struct FCurve *fcu_iter, const char rna_path[]);
+struct FCurve *iter_step_fcurve(struct FCurve *fcu_iter, const char rna_path[]);
/* high level function to get an fcurve from C without having the rna */
struct FCurve *id_data_find_fcurve(ID *id, void *data, struct StructRNA *type, const char *prop_name, int index, char *driven);
diff --git a/source/blender/blenkernel/BKE_fluidsim.h b/source/blender/blenkernel/BKE_fluidsim.h
index c2b1b1d6cad..c3fa6621c98 100644
--- a/source/blender/blenkernel/BKE_fluidsim.h
+++ b/source/blender/blenkernel/BKE_fluidsim.h
@@ -42,9 +42,9 @@ struct MVert;
/* old interface */
void initElbeemMesh(struct Scene *scene, struct Object *ob,
- int *numVertices, float **vertices,
- int *numTriangles, int **triangles,
- int useGlobalCoords, int modifierIndex);
+ int *numVertices, float **vertices,
+ int *numTriangles, int **triangles,
+ int useGlobalCoords, int modifierIndex);
/* bounding box & memory estimate */
void fluid_get_bb(struct MVert *mvert, int totvert, float obmat[][4],
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index 950c3c20b9b..593b4afb85c 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -64,8 +64,8 @@ typedef struct Global {
short afbreek, moving, file_loaded;
char background;
char factory_startup;
- short winpos, displaymode; /* used to be in Render */
- short rendering; /* to indicate render is busy, prevent renderwindow events etc */
+ short winpos, displaymode; /* used to be in Render */
+ short rendering; /* to indicate render is busy, prevent renderwindow events etc */
short rt;
int f;
@@ -75,7 +75,7 @@ typedef struct Global {
struct BME_Glob *editBMesh;
/* Frank's variables */
- int save_over;
+ int save_over;
/* Rob's variables (keep here for WM recode) */
int have_quicktime;
@@ -96,12 +96,12 @@ typedef struct Global {
/* **************** GLOBAL ********************* */
/* G.f */
-#define G_RENDER_OGL (1 << 0)
-#define G_SWAP_EXCHANGE (1 << 1)
+#define G_RENDER_OGL (1 << 0)
+#define G_SWAP_EXCHANGE (1 << 1)
/* also uses G_FILE_AUTOPLAY */
/* #define G_RENDER_SHADOW (1 << 3) */ /* temp flag, removed */
-#define G_BACKBUFSEL (1 << 4)
-#define G_PICKSEL (1 << 5)
+#define G_BACKBUFSEL (1 << 4)
+#define G_PICKSEL (1 << 5)
/* #define G_FACESELECT (1 << 8) use (mesh->editflag & ME_EDIT_PAINT_MASK) */
@@ -109,7 +109,7 @@ typedef struct Global {
#define G_SCRIPT_OVERRIDE_PREF (1 << 14) /* when this flag is set ignore the userprefs */
/* #define G_NOFROZEN (1 << 17) also removed */
-/* #define G_GREASEPENCIL (1 << 17) also removed */
+/* #define G_GREASEPENCIL (1 << 17) also removed */
/* #define G_AUTOMATKEYS (1 << 30) also removed */
@@ -130,39 +130,39 @@ enum {
#define G_AUTOPACK (1 << 0)
#define G_FILE_COMPRESS (1 << 1)
#define G_FILE_AUTOPLAY (1 << 2)
-#define G_FILE_ENABLE_ALL_FRAMES (1 << 3) /* deprecated */
-#define G_FILE_SHOW_DEBUG_PROPS (1 << 4) /* deprecated */
-#define G_FILE_SHOW_FRAMERATE (1 << 5) /* deprecated */
+#define G_FILE_ENABLE_ALL_FRAMES (1 << 3) /* deprecated */
+#define G_FILE_SHOW_DEBUG_PROPS (1 << 4) /* deprecated */
+#define G_FILE_SHOW_FRAMERATE (1 << 5) /* deprecated */
/* #define G_FILE_SHOW_PROFILE (1 << 6) */ /* deprecated */
#define G_FILE_LOCK (1 << 7)
#define G_FILE_SIGN (1 << 8)
/* #define G_FILE_PUBLISH (1 << 9) */ /* deprecated */
-#define G_FILE_NO_UI (1 << 10)
+#define G_FILE_NO_UI (1 << 10)
/* #define G_FILE_GAME_TO_IPO (1 << 11) */ /* deprecated */
-#define G_FILE_GAME_MAT (1 << 12) /* deprecated */
+#define G_FILE_GAME_MAT (1 << 12) /* deprecated */
/* #define G_FILE_DISPLAY_LISTS (1 << 13) */ /* deprecated */
-#define G_FILE_SHOW_PHYSICS (1 << 14) /* deprecated */
-#define G_FILE_GAME_MAT_GLSL (1 << 15) /* deprecated */
+#define G_FILE_SHOW_PHYSICS (1 << 14) /* deprecated */
+#define G_FILE_GAME_MAT_GLSL (1 << 15) /* deprecated */
/* #define G_FILE_GLSL_NO_LIGHTS (1 << 16) */ /* deprecated */
-#define G_FILE_GLSL_NO_SHADERS (1 << 17) /* deprecated */
-#define G_FILE_GLSL_NO_SHADOWS (1 << 18) /* deprecated */
-#define G_FILE_GLSL_NO_RAMPS (1 << 19) /* deprecated */
-#define G_FILE_GLSL_NO_NODES (1 << 20) /* deprecated */
-#define G_FILE_GLSL_NO_EXTRA_TEX (1 << 21) /* deprecated */
-#define G_FILE_IGNORE_DEPRECATION_WARNINGS (1 << 22) /* deprecated */
-#define G_FILE_RECOVER (1 << 23)
-#define G_FILE_RELATIVE_REMAP (1 << 24)
-#define G_FILE_HISTORY (1 << 25)
-#define G_FILE_MESH_COMPAT (1 << 26) /* BMesh option to save as older mesh format */
+#define G_FILE_GLSL_NO_SHADERS (1 << 17) /* deprecated */
+#define G_FILE_GLSL_NO_SHADOWS (1 << 18) /* deprecated */
+#define G_FILE_GLSL_NO_RAMPS (1 << 19) /* deprecated */
+#define G_FILE_GLSL_NO_NODES (1 << 20) /* deprecated */
+#define G_FILE_GLSL_NO_EXTRA_TEX (1 << 21) /* deprecated */
+#define G_FILE_IGNORE_DEPRECATION_WARNINGS (1 << 22) /* deprecated */
+#define G_FILE_RECOVER (1 << 23)
+#define G_FILE_RELATIVE_REMAP (1 << 24)
+#define G_FILE_HISTORY (1 << 25)
+#define G_FILE_MESH_COMPAT (1 << 26) /* BMesh option to save as older mesh format */
/* G.windowstate */
-#define G_WINDOWSTATE_USERDEF 0
-#define G_WINDOWSTATE_BORDER 1
-#define G_WINDOWSTATE_FULLSCREEN 2
+#define G_WINDOWSTATE_USERDEF 0
+#define G_WINDOWSTATE_BORDER 1
+#define G_WINDOWSTATE_FULLSCREEN 2
/* ENDIAN_ORDER: indicates what endianness the platform where the file was
* written had. */
-#if !defined( __BIG_ENDIAN__ ) && !defined( __LITTLE_ENDIAN__ )
+#if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
# error Either __BIG_ENDIAN__ or __LITTLE_ENDIAN__ must be defined.
#endif
@@ -171,8 +171,8 @@ enum {
# error "Mingw requires GCC 4.6 minimum"
#endif
-#define L_ENDIAN 1
-#define B_ENDIAN 0
+#define L_ENDIAN 1
+#define B_ENDIAN 0
#ifdef __BIG_ENDIAN__
# define ENDIAN_ORDER B_ENDIAN
@@ -181,10 +181,10 @@ enum {
#endif
/* G.moving, signals drawing in (3d) window to denote transform */
-#define G_TRANSFORM_OBJ 1
-#define G_TRANSFORM_EDIT 2
-#define G_TRANSFORM_MANIP 4
-#define G_TRANSFORM_PARTICLE 8
+#define G_TRANSFORM_OBJ 1
+#define G_TRANSFORM_EDIT 2
+#define G_TRANSFORM_MANIP 4
+#define G_TRANSFORM_PARTICLE 8
/* G.special1 */
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index ccf9e0cef5b..67cdee9fa07 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -40,21 +40,21 @@ struct Object;
struct bAction;
struct Scene;
-void BKE_group_free(struct Group *group);
-void BKE_group_unlink(struct Group *group);
+void BKE_group_free(struct Group *group);
+void BKE_group_unlink(struct Group *group);
struct Group *add_group(const char *name);
struct Group *BKE_group_copy(struct Group *group);
-int add_to_group(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
-int rem_from_group(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
+int add_to_group(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
+int rem_from_group(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
struct Group *find_group(struct Object *ob, struct Group *group);
-int object_in_group(struct Object *ob, struct Group *group);
-int group_is_animated(struct Object *parent, struct Group *group);
+int object_in_group(struct Object *ob, struct Group *group);
+int group_is_animated(struct Object *parent, struct Group *group);
-void group_tag_recalc(struct Group *group);
-void group_handle_recalc_and_update(struct Scene *scene, struct Object *parent, struct Group *group);
+void group_tag_recalc(struct Group *group);
+void group_handle_recalc_and_update(struct Scene *scene, struct Object *parent, struct Group *group);
#if 0 /* UNUSED */
struct Object *group_get_member_with_action(struct Group *group, struct bAction *act);
-void group_relink_nla_objects(struct Object *ob);
+void group_relink_nla_objects(struct Object *ob);
#endif
#endif
diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h
index e1f8df941cb..ebfbe94802a 100644
--- a/source/blender/blenkernel/BKE_icons.h
+++ b/source/blender/blenkernel/BKE_icons.h
@@ -36,10 +36,9 @@
* Resizable Icons for Blender
*/
-typedef void (*DrawInfoFreeFP) (void *drawinfo);
+typedef void (*DrawInfoFreeFP)(void *drawinfo);
-struct Icon
-{
+struct Icon {
void *drawinfo;
void *obj;
short type;
@@ -54,17 +53,17 @@ struct ID;
void BKE_icons_init(int first_dyn_id);
/* return icon id for library object or create new icon if not found */
-int BKE_icon_getid(struct ID* id);
+int BKE_icon_getid(struct ID *id);
/* retrieve icon for id */
-struct Icon* BKE_icon_get(int icon_id);
+struct Icon *BKE_icon_get(int icon_id);
/* set icon for id if not already defined */
/* used for inserting the internal icons */
-void BKE_icon_set(int icon_id, struct Icon* icon);
+void BKE_icon_set(int icon_id, struct Icon *icon);
/* remove icon and free date if library object becomes invalid */
-void BKE_icon_delete(struct ID* id);
+void BKE_icon_delete(struct ID *id);
/* report changes - icon needs to be recalculated */
void BKE_icon_changed(int icon_id);
@@ -82,12 +81,12 @@ void BKE_previewimg_free(struct PreviewImage **prv);
void BKE_previewimg_free_id(struct ID *id);
/* create a new preview image */
-struct PreviewImage* BKE_previewimg_create(void);
+struct PreviewImage *BKE_previewimg_create(void);
/* create a copy of the preview image */
-struct PreviewImage* BKE_previewimg_copy(struct PreviewImage *prv);
+struct PreviewImage *BKE_previewimg_copy(struct PreviewImage *prv);
/* retrieve existing or create new preview image */
-struct PreviewImage* BKE_previewimg_get(struct ID *id);
+struct PreviewImage *BKE_previewimg_get(struct ID *id);
#endif /* __BKE_ICONS_H__ */
diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index 173adcc295b..2436ada9eaf 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -77,8 +77,8 @@ void IDP_ResizeArray(struct IDProperty *prop, int newlen);
void IDP_FreeArray(struct IDProperty *prop);
/* ---------- String Type ------------ */
-IDProperty *IDP_NewString(const char *st, const char *name, int maxlen);/* maxlen excludes '\0' */
-void IDP_AssignString(struct IDProperty *prop, const char *st, int maxlen); /* maxlen excludes '\0' */
+IDProperty *IDP_NewString(const char *st, const char *name, int maxlen); /* maxlen excludes '\0' */
+void IDP_AssignString(struct IDProperty *prop, const char *st, int maxlen); /* maxlen excludes '\0' */
void IDP_ConcatStringC(struct IDProperty *prop, const char *st);
void IDP_ConcatString(struct IDProperty *str1, struct IDProperty *append);
void IDP_FreeString(struct IDProperty *prop);
@@ -122,7 +122,7 @@ int IDP_AddToGroup(struct IDProperty *group, struct IDProperty *prop);
/** this is the same as IDP_AddToGroup, only you pass an item
* in the group list to be inserted after. */
int IDP_InsertToGroup(struct IDProperty *group, struct IDProperty *previous,
- struct IDProperty *pnew);
+ struct IDProperty *pnew);
/** \note this does not free the property!!
*
@@ -201,10 +201,10 @@ void IDP_FreeProperty(struct IDProperty *prop);
void IDP_UnlinkProperty(struct IDProperty *prop);
#define IDP_Int(prop) ((prop)->data.val)
-#define IDP_Float(prop) (*(float*)&(prop)->data.val)
-#define IDP_String(prop) ((char*)(prop)->data.pointer)
+#define IDP_Float(prop) (*(float *)&(prop)->data.val)
+#define IDP_String(prop) ((char *)(prop)->data.pointer)
#define IDP_Array(prop) ((prop)->data.pointer)
-#define IDP_IDPArray(prop) ((IDProperty*)(prop)->data.pointer)
-#define IDP_Double(prop) (*(double*)&(prop)->data.val)
+#define IDP_IDPArray(prop) ((IDProperty *)(prop)->data.pointer)
+#define IDP_Double(prop) (*(double *)&(prop)->data.val)
#endif /* __BKE_IDPROP_H__ */
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 563f066bda6..91e3e9edbf0 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -46,25 +46,25 @@ struct Object;
struct ImageFormatData;
/* call from library */
-void BKE_image_free(struct Image *me);
+void BKE_image_free(struct Image *me);
-void BKE_imbuf_stamp_info(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf);
-void BKE_stamp_buf(struct Scene *scene, struct Object *camera, unsigned char *rect, float *rectf, int width, int height, int channels);
-int BKE_imbuf_alpha_test(struct ImBuf *ibuf);
-int BKE_imbuf_write_stamp(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf, const char *name, struct ImageFormatData *imf);
-int BKE_imbuf_write(struct ImBuf *ibuf, const char *name, struct ImageFormatData *imf);
+void BKE_imbuf_stamp_info(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf);
+void BKE_stamp_buf(struct Scene *scene, struct Object *camera, unsigned char *rect, float *rectf, int width, int height, int channels);
+int BKE_imbuf_alpha_test(struct ImBuf *ibuf);
+int BKE_imbuf_write_stamp(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf, const char *name, struct ImageFormatData *imf);
+int BKE_imbuf_write(struct ImBuf *ibuf, const char *name, struct ImageFormatData *imf);
int BKE_imbuf_write_as(struct ImBuf *ibuf, const char *name, struct ImageFormatData *imf, const short is_copy);
-void BKE_makepicstring(char *string, const char *base, const char *relbase, int frame, const char imtype, const short use_ext, const short use_frames);
-int BKE_add_image_extension(char *string, const char imtype);
-char BKE_ftype_to_imtype(const int ftype);
-int BKE_imtype_to_ftype(const char imtype);
-
-int BKE_imtype_is_movie(const char imtype);
-int BKE_imtype_supports_zbuf(const char imtype);
-int BKE_imtype_supports_compress(const char imtype);
-int BKE_imtype_supports_quality(const char imtype);
+void BKE_makepicstring(char *string, const char *base, const char *relbase, int frame, const char imtype, const short use_ext, const short use_frames);
+int BKE_add_image_extension(char *string, const char imtype);
+char BKE_ftype_to_imtype(const int ftype);
+int BKE_imtype_to_ftype(const char imtype);
+
+int BKE_imtype_is_movie(const char imtype);
+int BKE_imtype_supports_zbuf(const char imtype);
+int BKE_imtype_supports_compress(const char imtype);
+int BKE_imtype_supports_quality(const char imtype);
char BKE_imtype_valid_channels(const char imtype);
-char BKE_imtype_valid_depths(const char imtype);
+char BKE_imtype_valid_depths(const char imtype);
char BKE_imtype_from_arg(const char *arg);
@@ -72,12 +72,12 @@ void BKE_imformat_defaults(struct ImageFormatData *im_format);
struct anim *openanim(const char *name, int flags, int streamindex);
-void BKE_image_de_interlace(struct Image *ima, int odd);
+void BKE_image_de_interlace(struct Image *ima, int odd);
-void BKE_image_make_local(struct Image *ima);
+void BKE_image_make_local(struct Image *ima);
-void BKE_image_tag_time(struct Image *ima);
-void free_old_images(void);
+void BKE_image_tag_time(struct Image *ima);
+void free_old_images(void);
/* ********************************** NEW IMAGE API *********************** */
@@ -88,34 +88,34 @@ struct RenderPass;
struct RenderResult;
/* ima->source; where image comes from */
-#define IMA_SRC_CHECK 0
-#define IMA_SRC_FILE 1
-#define IMA_SRC_SEQUENCE 2
-#define IMA_SRC_MOVIE 3
-#define IMA_SRC_GENERATED 4
-#define IMA_SRC_VIEWER 5
+#define IMA_SRC_CHECK 0
+#define IMA_SRC_FILE 1
+#define IMA_SRC_SEQUENCE 2
+#define IMA_SRC_MOVIE 3
+#define IMA_SRC_GENERATED 4
+#define IMA_SRC_VIEWER 5
/* ima->type, how to handle/generate it */
-#define IMA_TYPE_IMAGE 0
-#define IMA_TYPE_MULTILAYER 1
- /* generated */
-#define IMA_TYPE_UV_TEST 2
- /* viewers */
+#define IMA_TYPE_IMAGE 0
+#define IMA_TYPE_MULTILAYER 1
+/* generated */
+#define IMA_TYPE_UV_TEST 2
+/* viewers */
#define IMA_TYPE_R_RESULT 4
-#define IMA_TYPE_COMPOSITE 5
+#define IMA_TYPE_COMPOSITE 5
/* ima->ok */
-#define IMA_OK 1
-#define IMA_OK_LOADED 2
+#define IMA_OK 1
+#define IMA_OK_LOADED 2
/* signals */
- /* reload only frees, doesn't read until image_get_ibuf() called */
-#define IMA_SIGNAL_RELOAD 0
-#define IMA_SIGNAL_FREE 1
- /* source changes, from image to sequence or movie, etc */
-#define IMA_SIGNAL_SRC_CHANGE 5
- /* image-user gets a new image, check settings */
-#define IMA_SIGNAL_USER_NEW_IMAGE 6
+/* reload only frees, doesn't read until image_get_ibuf() called */
+#define IMA_SIGNAL_RELOAD 0
+#define IMA_SIGNAL_FREE 1
+/* source changes, from image to sequence or movie, etc */
+#define IMA_SIGNAL_SRC_CHANGE 5
+/* image-user gets a new image, check settings */
+#define IMA_SIGNAL_USER_NEW_IMAGE 6
#define IMA_CHAN_FLAG_BW 1
#define IMA_CHAN_FLAG_RGB 2
@@ -164,10 +164,10 @@ void BKE_image_release_renderresult(struct Scene *scene, struct Image *ima);
void BKE_image_backup_render(struct Scene *scene, struct Image *ima);
/* goes over all textures that use images */
-void BKE_image_free_all_textures(void);
+void BKE_image_free_all_textures(void);
/* does one image! */
-void BKE_image_free_anim_ibufs(struct Image *ima, int except_frame);
+void BKE_image_free_anim_ibufs(struct Image *ima, int except_frame);
/* does all images with type MOVIE or SEQUENCE */
void BKE_image_all_free_anim_ibufs(int except_frame);
@@ -183,6 +183,9 @@ struct Image *BKE_image_copy(struct Image *ima);
/* merge source into dest, and free source */
void BKE_image_merge(struct Image *dest, struct Image *source);
+/* scale the image */
+void BKE_image_scale(struct Image *image, int width, int height);
+
/* check if texture has alpha (depth=32) */
int BKE_image_has_alpha(struct Image *image);
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index 757952515e5..4240ef16100 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -63,7 +63,7 @@ float *do_ob_key(struct Scene *scene, struct Object *ob);
struct Key *ob_get_key(struct Object *ob);
struct KeyBlock *add_keyblock(struct Key *key, const char *name);
-struct KeyBlock *add_keyblock_ctime(struct Key *key, const char * name, const short do_force);
+struct KeyBlock *add_keyblock_ctime(struct Key *key, const char *name, const short do_force);
struct KeyBlock *ob_get_keyblock(struct Object *ob);
struct KeyBlock *ob_get_reference_keyblock(struct Object *ob);
struct KeyBlock *key_get_keyblock(struct Key *key, int index);
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index 9a952fc6b1e..31626ef4a58 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -73,7 +73,7 @@ float (*BKE_lattice_vertexcos_get(struct Object *ob, int *numVerts_r))[3];
void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3]);
void BKE_lattice_modifiers_calc(struct Scene *scene, struct Object *ob);
-struct MDeformVert* BKE_lattice_deform_verts_get(struct Object *lattice);
+struct MDeformVert *BKE_lattice_deform_verts_get(struct Object *lattice);
#endif
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 2804eb407db..3a19d6c9007 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -66,7 +66,7 @@ void id_clear_lib_data(struct Main *bmain, struct ID *id);
struct ListBase *which_libbase(struct Main *mainlib, short type);
-#define MAX_LIBARRAY 40
+#define MAX_LIBARRAY 40
int set_listbasepointers(struct Main *main, struct ListBase **lb);
void BKE_libblock_free(struct ListBase *lb, void *idv);
@@ -86,7 +86,7 @@ struct ID *BKE_libblock_find_name(const short type, const char *name);
void clear_id_newpoins(void);
void IDnames_to_pupstring(const char **str, const char *title, const char *extraops,
- struct ListBase *lb, struct ID* link, short *nr);
+ struct ListBase *lb, struct ID *link, short *nr);
void IMAnames_to_pupstring(const char **str, const char *title, const char *extraops,
struct ListBase *lb, struct ID *link, short *nr);
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index b5fb0aca27f..043d0a9886d 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -53,7 +53,7 @@ typedef struct Main {
char name[1024]; /* 1024 = FILE_MAX */
short versionfile, subversionfile;
short minversionfile, minsubversionfile;
- int revision; /* svn revision of binary that saved file */
+ int revision; /* svn revision of binary that saved file */
struct Library *curlib;
ListBase scene;
@@ -68,7 +68,7 @@ typedef struct Main {
ListBase latt;
ListBase lamp;
ListBase camera;
- ListBase ipo; // XXX depreceated
+ ListBase ipo; // XXX depreceated
ListBase key;
ListBase world;
ListBase screen;
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 801724d1d4f..8aa25a235a8 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -90,7 +90,7 @@ void end_render_materials(struct Main *);
int material_in_material(struct Material *parmat, struct Material *mat);
-void ramp_blend(int type, float r_col[3], const float fac, const float col[3]);
+void ramp_blend(int type, float r_col[3], const float fac, const float col[3]);
/* copy/paste */
void clear_matcopybuf(void);
@@ -106,4 +106,3 @@ int do_version_tface(struct Main *main, int fileload);
#endif
#endif
-
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index bdadce2c7c7..c168c39fd9f 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -164,14 +164,14 @@ void BKE_mesh_strip_loose_faces(struct Mesh *me); /* Needed for compatibility (s
void BKE_mesh_strip_loose_polysloops(struct Mesh *me);
void BKE_mesh_strip_loose_edges(struct Mesh *me);
- /* Calculate vertex and face normals, face normals are returned in *faceNors_r if non-NULL
- * and vertex normals are stored in actual mverts.
- */
+/* Calculate vertex and face normals, face normals are returned in *faceNors_r if non-NULL
+ * and vertex normals are stored in actual mverts.
+ */
void BKE_mesh_calc_normals_mapping(
struct MVert *mverts, int numVerts,
struct MLoop *mloop, struct MPoly *mpolys, int numLoops, int numPolys, float (*polyNors_r)[3],
struct MFace *mfaces, int numFaces, int *origIndexFace, float (*faceNors_r)[3]);
- /* extended version of 'BKE_mesh_calc_normals' with option not to calc vertex normals */
+/* extended version of 'BKE_mesh_calc_normals' with option not to calc vertex normals */
void BKE_mesh_calc_normals_mapping_ex(
struct MVert *mverts, int numVerts,
struct MLoop *mloop, struct MPoly *mpolys, int numLoops, int numPolys, float (*polyNors_r)[3],
@@ -183,15 +183,15 @@ void BKE_mesh_calc_normals(
struct MLoop *mloop, struct MPoly *mpolys,
int numLoops, int numPolys, float (*polyNors_r)[3]);
- /* Return a newly MEM_malloc'd array of all the mesh vertex locations
- * (_numVerts_r_ may be NULL) */
+/* Return a newly MEM_malloc'd array of all the mesh vertex locations
+ * (_numVerts_r_ may be NULL) */
float (*mesh_getVertexCos(struct Mesh *me, int *numVerts_r))[3];
/* map from uv vertex to face (for select linked, stitch, uv suburf) */
/* UvVertMap */
-#define STD_UV_CONNECT_LIMIT 0.0001f
+#define STD_UV_CONNECT_LIMIT 0.0001f
typedef struct UvVertMap {
struct UvMapVert **vert;
@@ -266,14 +266,14 @@ void create_vert_poly_map(MeshElemMap **map, int **mem,
const struct MPoly *mface, const struct MLoop *mloop,
int totvert, int totface, int totloop);
-void create_vert_edge_map(struct ListBase **map, IndexNode **mem, const struct MEdge *medge,
- const int totvert, const int totedge);
+void create_vert_edge_map(MeshElemMap **map, int **mem,
+ const struct MEdge *medge, int totvert, int totedge);
/* vertex level transformations & checks (no derived mesh) */
-int BKE_mesh_minmax(struct Mesh *me, float r_min[3], float r_max[3]);
-int BKE_mesh_center_median(struct Mesh *me, float cent[3]);
-int BKE_mesh_center_bounds(struct Mesh *me, float cent[3]);
+int BKE_mesh_minmax(struct Mesh *me, float r_min[3], float r_max[3]);
+int BKE_mesh_center_median(struct Mesh *me, float cent[3]);
+int BKE_mesh_center_bounds(struct Mesh *me, float cent[3]);
void BKE_mesh_translate(struct Mesh *me, float offset[3], int do_keys);
/* mesh_validate.c */
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index db57d411f31..551a31509a3 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -31,7 +31,7 @@
* \ingroup bke
*/
-#include "DNA_modifier_types.h" /* needed for all enum typdefs */
+#include "DNA_modifier_types.h" /* needed for all enum typdefs */
#include "BKE_customdata.h"
struct ID;
@@ -73,10 +73,10 @@ typedef enum {
} ModifierTypeType;
typedef enum {
- eModifierTypeFlag_AcceptsMesh = (1<<0),
- eModifierTypeFlag_AcceptsCVs = (1<<1),
- eModifierTypeFlag_SupportsMapping = (1<<2),
- eModifierTypeFlag_SupportsEditmode = (1<<3),
+ eModifierTypeFlag_AcceptsMesh = (1 << 0),
+ eModifierTypeFlag_AcceptsCVs = (1 << 1),
+ eModifierTypeFlag_SupportsMapping = (1 << 2),
+ eModifierTypeFlag_SupportsEditmode = (1 << 3),
/* For modifiers that support editmode this determines if the
* modifier should be enabled by default in editmode. This should
@@ -84,25 +84,25 @@ typedef enum {
* also generally used in editmode, otherwise let the user enable
* it by hand.
*/
- eModifierTypeFlag_EnableInEditmode = (1<<4),
+ eModifierTypeFlag_EnableInEditmode = (1 << 4),
/* For modifiers that require original data and so cannot
* be placed after any non-deformative modifier.
*/
- eModifierTypeFlag_RequiresOriginalData = (1<<5),
+ eModifierTypeFlag_RequiresOriginalData = (1 << 5),
/* For modifiers that support pointcache, so we can check to see if it has files we need to deal with
*/
- eModifierTypeFlag_UsesPointCache = (1<<6),
+ eModifierTypeFlag_UsesPointCache = (1 << 6),
/* For physics modifiers, max one per type */
- eModifierTypeFlag_Single = (1<<7),
+ eModifierTypeFlag_Single = (1 << 7),
/* Some modifier can't be added manually by user */
- eModifierTypeFlag_NoUserAdd = (1<<8),
+ eModifierTypeFlag_NoUserAdd = (1 << 8),
/* For modifiers that use CD_PREVIEW_MCOL for preview. */
- eModifierTypeFlag_UsesPreview = (1<<9)
+ eModifierTypeFlag_UsesPreview = (1 << 9)
} ModifierTypeFlag;
typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin);
@@ -146,28 +146,25 @@ typedef struct ModifierTypeInfo {
* and otherwise the ob argument.
*/
void (*deformVerts)(struct ModifierData *md, struct Object *ob,
- struct DerivedMesh *derivedData,
- float (*vertexCos)[3], int numVerts,
- ModifierApplyFlag flag);
+ struct DerivedMesh *derivedData,
+ float (*vertexCos)[3], int numVerts,
+ ModifierApplyFlag flag);
/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
- void (*deformMatrices)(
- struct ModifierData *md, struct Object *ob,
- struct DerivedMesh *derivedData,
- float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+ void (*deformMatrices)(struct ModifierData *md, struct Object *ob,
+ struct DerivedMesh *derivedData,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
/* Like deformVerts but called during editmode (for supporting modifiers)
*/
- void (*deformVertsEM)(
- struct ModifierData *md, struct Object *ob,
- struct BMEditMesh *editData, struct DerivedMesh *derivedData,
- float (*vertexCos)[3], int numVerts);
+ void (*deformVertsEM)(struct ModifierData *md, struct Object *ob,
+ struct BMEditMesh *editData, struct DerivedMesh *derivedData,
+ float (*vertexCos)[3], int numVerts);
/* Set deform matrix per vertex for crazyspace correction */
- void (*deformMatricesEM)(
- struct ModifierData *md, struct Object *ob,
- struct BMEditMesh *editData, struct DerivedMesh *derivedData,
- float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+ void (*deformMatricesEM)(struct ModifierData *md, struct Object *ob,
+ struct BMEditMesh *editData, struct DerivedMesh *derivedData,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
/********************* Non-deform modifier functions *********************/
@@ -190,10 +187,9 @@ typedef struct ModifierTypeInfo {
* The modifier may reuse the derivedData argument (i.e. return it in
* modified form), but must not release it.
*/
- struct DerivedMesh *(*applyModifier)(
- struct ModifierData *md, struct Object *ob,
- struct DerivedMesh *derivedData,
- ModifierApplyFlag flag);
+ struct DerivedMesh *(*applyModifier)(struct ModifierData *md, struct Object *ob,
+ struct DerivedMesh *derivedData,
+ ModifierApplyFlag flag);
/* Like applyModifier but called during editmode (for supporting
* modifiers).
@@ -202,10 +198,9 @@ typedef struct ModifierTypeInfo {
* are expected from editmode objects. The same qualifications regarding
* derivedData apply as for applyModifier.
*/
- struct DerivedMesh *(*applyModifierEM)(
- struct ModifierData *md, struct Object *ob,
- struct BMEditMesh *editData,
- struct DerivedMesh *derivedData);
+ struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, struct Object *ob,
+ struct BMEditMesh *editData,
+ struct DerivedMesh *derivedData);
/********************* Optional functions *********************/
@@ -258,7 +253,7 @@ typedef struct ModifierTypeInfo {
* This function is optional.
*/
void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest, struct Scene *scene,
- struct Object *ob, struct DagNode *obNode);
+ struct Object *ob, struct DagNode *obNode);
/* Should return true if the modifier needs to be recalculated on time
* changes.
@@ -285,7 +280,7 @@ typedef struct ModifierTypeInfo {
* This function is optional.
*/
void (*foreachObjectLink)(struct ModifierData *md, struct Object *ob,
- ObjectWalkFunc walk, void *userData);
+ ObjectWalkFunc walk, void *userData);
/* Should call the given walk function with a pointer to each ID
* pointer (i.e. each datablock pointer) that the modifier data
@@ -296,7 +291,7 @@ typedef struct ModifierTypeInfo {
* will be used.
*/
void (*foreachIDLink)(struct ModifierData *md, struct Object *ob,
- IDWalkFunc walk, void *userData);
+ IDWalkFunc walk, void *userData);
/* Should call the given walk function for each texture that the
* modifier data stores. This is used for finding all textures in
@@ -306,10 +301,10 @@ typedef struct ModifierTypeInfo {
* assumed the modifier has no textures.
*/
void (*foreachTexLink)(struct ModifierData *md, struct Object *ob,
- TexWalkFunc walk, void *userData);
+ TexWalkFunc walk, void *userData);
} ModifierTypeInfo;
-ModifierTypeInfo *modifierType_getInfo (ModifierType type);
+ModifierTypeInfo *modifierType_getInfo(ModifierType type);
/* Modifier utility calls, do call through type pointer and return
* default values if pointer is optional.
@@ -317,38 +312,38 @@ ModifierTypeInfo *modifierType_getInfo (ModifierType type);
struct ModifierData *modifier_new(int type);
void modifier_free(struct ModifierData *md);
-void modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
+void modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
void modifier_copyData(struct ModifierData *md, struct ModifierData *target);
int modifier_dependsOnTime(struct ModifierData *md);
int modifier_supportsMapping(struct ModifierData *md);
int modifier_couldBeCage(struct Scene *scene, struct ModifierData *md);
int modifier_isCorrectableDeformed(struct ModifierData *md);
-int modifier_sameTopology(ModifierData *md);
+int modifier_sameTopology(ModifierData *md);
int modifier_nonGeometrical(ModifierData *md);
int modifier_isEnabled(struct Scene *scene, struct ModifierData *md, int required_mode);
void modifier_setError(struct ModifierData *md, const char *format, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 2, 3)))
+__attribute__ ((format(printf, 2, 3)))
#endif
;
int modifier_isPreview(struct ModifierData *md);
void modifiers_foreachObjectLink(struct Object *ob,
- ObjectWalkFunc walk,
- void *userData);
+ ObjectWalkFunc walk,
+ void *userData);
void modifiers_foreachIDLink(struct Object *ob,
- IDWalkFunc walk,
- void *userData);
+ IDWalkFunc walk,
+ void *userData);
void modifiers_foreachTexLink(struct Object *ob,
- TexWalkFunc walk,
- void *userData);
+ TexWalkFunc walk,
+ void *userData);
struct ModifierData *modifiers_findByType(struct Object *ob, ModifierType type);
struct ModifierData *modifiers_findByName(struct Object *ob, const char *name);
void modifiers_clearErrors(struct Object *ob);
int modifiers_getCageIndex(struct Scene *scene, struct Object *ob,
- int *lastPossibleCageIndex_r, int virtual_);
+ int *lastPossibleCageIndex_r, int virtual_);
int modifiers_isSoftbodyEnabled(struct Object *ob);
int modifiers_isClothEnabled(struct Object *ob);
@@ -374,10 +369,10 @@ typedef struct CDMaskLink {
* end of the stack.
*/
struct CDMaskLink *modifiers_calcDataMasks(struct Scene *scene,
- struct Object *ob,
- struct ModifierData *md,
- CustomDataMask dataMask,
- int required_mode);
+ struct Object *ob,
+ struct ModifierData *md,
+ CustomDataMask dataMask,
+ int required_mode);
struct ModifierData *modifiers_getLastPreview(struct Scene *scene,
struct ModifierData *md,
int required_mode);
diff --git a/source/blender/blenkernel/BKE_movieclip.h b/source/blender/blenkernel/BKE_movieclip.h
index 29924542494..15b3cb91b90 100644
--- a/source/blender/blenkernel/BKE_movieclip.h
+++ b/source/blender/blenkernel/BKE_movieclip.h
@@ -15,7 +15,7 @@
* 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) 2011 Blender Foundation.
+ * The Original Code is Copyright (C) 2011 Blender Foundation.
* All rights reserved.
*
* Contributor(s): Blender Foundation,
@@ -64,12 +64,12 @@ void BKE_movieclip_build_proxy_frame(struct MovieClip *clip, int clip_flag, stru
int cfra, int *build_sizes, int build_count, int undistorted);
/* cacheing flags */
-#define MOVIECLIP_CACHE_SKIP (1<<0)
+#define MOVIECLIP_CACHE_SKIP (1 << 0)
/* postprocessing flags */
-#define MOVIECLIP_DISABLE_RED (1<<0)
-#define MOVIECLIP_DISABLE_GREEN (1<<1)
-#define MOVIECLIP_DISABLE_BLUE (1<<2)
-#define MOVIECLIP_PREVIEW_GRAYSCALE (1<<3)
+#define MOVIECLIP_DISABLE_RED (1 << 0)
+#define MOVIECLIP_DISABLE_GREEN (1 << 1)
+#define MOVIECLIP_DISABLE_BLUE (1 << 2)
+#define MOVIECLIP_PREVIEW_GRAYSCALE (1 << 3)
#endif
diff --git a/source/blender/blenkernel/BKE_navmesh_conversion.h b/source/blender/blenkernel/BKE_navmesh_conversion.h
index 8de53ed8b8e..aab359b307a 100644
--- a/source/blender/blenkernel/BKE_navmesh_conversion.h
+++ b/source/blender/blenkernel/BKE_navmesh_conversion.h
@@ -32,32 +32,32 @@ struct DerivedMesh;
/* navmesh_conversion.c */
int buildNavMeshDataByDerivedMesh(struct DerivedMesh *dm, int *vertsPerPoly,
- int *nverts, float **verts,
- int *ndtris, unsigned short **dtris,
- int *npolys, unsigned short **dmeshes,
- unsigned short **polys, int **dtrisToPolysMap,
- int **dtrisToTrisMap, int **trisToFacesMap);
-
-int buildRawVertIndicesData(struct DerivedMesh* dm, int *nverts, float **verts,
- int *ntris, unsigned short **tris, int **trisToFacesMap,
- int **recastData);
-
-int buildNavMeshData(const int nverts, const float* verts,
- const int ntris, const unsigned short *tris,
- const int* recastData, const int* trisToFacesMap,
- int *ndtris, unsigned short **dtris,
- int *npolys, unsigned short **dmeshes, unsigned short **polys,
- int *vertsPerPoly, int **dtrisToPolysMap, int **dtrisToTrisMap);
+ int *nverts, float **verts,
+ int *ndtris, unsigned short **dtris,
+ int *npolys, unsigned short **dmeshes,
+ unsigned short **polys, int **dtrisToPolysMap,
+ int **dtrisToTrisMap, int **trisToFacesMap);
+
+int buildRawVertIndicesData(struct DerivedMesh *dm, int *nverts, float **verts,
+ int *ntris, unsigned short **tris, int **trisToFacesMap,
+ int **recastData);
+
+int buildNavMeshData(const int nverts, const float *verts,
+ const int ntris, const unsigned short *tris,
+ const int *recastData, const int *trisToFacesMap,
+ int *ndtris, unsigned short **dtris,
+ int *npolys, unsigned short **dmeshes, unsigned short **polys,
+ int *vertsPerPoly, int **dtrisToPolysMap, int **dtrisToTrisMap);
int buildPolygonsByDetailedMeshes(const int vertsPerPoly, const int npolys,
- unsigned short* polys, const unsigned short* dmeshes,
- const float* verts, const unsigned short* dtris,
- const int* dtrisToPolysMap);
-
-int polyNumVerts(const unsigned short* p, const int vertsPerPoly);
-int polyIsConvex(const unsigned short* p, const int vertsPerPoly, const float* verts);
-int polyFindVertex(const unsigned short* p, const int vertsPerPoly, unsigned short vertexIdx);
-float distPointToSegmentSq(const float* point, const float* a, const float* b);
+ unsigned short *polys, const unsigned short *dmeshes,
+ const float *verts, const unsigned short *dtris,
+ const int *dtrisToPolysMap);
+
+int polyNumVerts(const unsigned short *p, const int vertsPerPoly);
+int polyIsConvex(const unsigned short *p, const int vertsPerPoly, const float *verts);
+int polyFindVertex(const unsigned short *p, const int vertsPerPoly, unsigned short vertexIdx);
+float distPointToSegmentSq(const float *point, const float *a, const float *b);
#endif //NAVMESH_CONVERSION_H
diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h
index 921972c9fa8..9e08f3a8c83 100644
--- a/source/blender/blenkernel/BKE_nla.h
+++ b/source/blender/blenkernel/BKE_nla.h
@@ -115,13 +115,13 @@ void BKE_nla_tweakmode_exit(struct AnimData *adt);
/* time mapping conversion modes */
enum {
- /* convert from global time to strip time - for evaluation */
+ /* convert from global time to strip time - for evaluation */
NLATIME_CONVERT_EVAL = 0,
- /* convert from global time to strip time - for editing corrections */
- // XXX old 0 invert
+ /* convert from global time to strip time - for editing corrections */
+ // XXX old 0 invert
NLATIME_CONVERT_UNMAP,
- /* convert from strip time to global time */
- // xxx old 1 invert
+ /* convert from strip time to global time */
+ // xxx old 1 invert
NLATIME_CONVERT_MAP,
} eNlaTime_ConvertModes;
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 68b3e01b9ff..a6018a45821 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -145,9 +145,13 @@ typedef struct bNodeType {
void (*uifunc)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr);
/// Additional parameters in the side panel.
void (*uifuncbut)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr);
+ /// Additional drawing on backdrop.
+ void (*uibackdropfunc)(struct SpaceNode* snode, struct ImBuf* backdrop, struct bNode* node, int x, int y);
+
/// Draw a node socket. Default draws the input value button.
NodeSocketButtonFunction drawinputfunc;
NodeSocketButtonFunction drawoutputfunc;
+
/// Optional custom label function for the node header.
const char *(*labelfunc)(struct bNode *);
/// Optional custom resize handle polling.
@@ -647,6 +651,13 @@ void ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
#define CMP_NODE_TONEMAP 302
#define CMP_NODE_LENSDIST 303
+#define CMP_NODE_COLORCORRECTION 312
+#define CMP_NODE_MASK_BOX 313
+#define CMP_NODE_MASK_ELLIPSE 314
+#define CMP_NODE_BOKEHIMAGE 315
+#define CMP_NODE_BOKEHBLUR 316
+#define CMP_NODE_SWITCH 317
+
/* channel toggles */
#define CMP_CHAN_RGB 1
#define CMP_CHAN_A 2
@@ -674,7 +685,7 @@ void ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
struct CompBuf;
struct bNodeTreeExec *ntreeCompositBeginExecTree(struct bNodeTree *ntree, int use_tree_data);
void ntreeCompositEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
-void ntreeCompositExecTree(struct bNodeTree *ntree, struct RenderData *rd, int do_previews);
+void ntreeCompositExecTree(struct bNodeTree *ntree, struct RenderData *rd, int rendering, int do_previews);
void ntreeCompositTagRender(struct Scene *sce);
int ntreeCompositTagAnimated(struct bNodeTree *ntree);
void ntreeCompositTagGenerators(struct bNodeTree *ntree);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 92a447f9351..1cdf2ee2e14 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -101,25 +101,23 @@ void BKE_object_where_is_calc_mat4(struct Scene *scene, struct Object *ob, float
/* possibly belong in own moduke? */
struct BoundBox *BKE_boundbox_alloc_unit(void);
-void BKE_boundbox_init_from_minmax(struct BoundBox *bb, float min[3], float max[3]);
-int BKE_boundbox_ray_hit_check(struct BoundBox *bb, float ray_start[3], float ray_normal[3]);
+void BKE_boundbox_init_from_minmax(struct BoundBox *bb, float min[3], float max[3]);
+int BKE_boundbox_ray_hit_check(struct BoundBox *bb, float ray_start[3], float ray_normal[3]);
struct BoundBox *BKE_object_boundbox_get(struct Object *ob);
void BKE_object_dimensions_get(struct Object *ob, float vec[3]);
void BKE_object_dimensions_set(struct Object *ob, const float *value);
void BKE_object_boundbox_flag(struct Object *ob, int flag, int set);
void BKE_object_minmax(struct Object *ob, float r_min[3], float r_max[3]);
-int BKE_object_minmax_dupli(struct Scene *scene, struct Object *ob, float r_min[3], float r_max[3]);
+int BKE_object_minmax_dupli(struct Scene *scene, struct Object *ob, float r_min[3], float r_max[3]);
/* sometimes min-max isn't enough, we need to loop over each point */
-void BKE_object_foreach_display_point(
- struct Object *ob, float obmat[4][4],
- void (*func_cb)(const float[3], void *), void *user_data);
-void BKE_scene_foreach_display_point(
- struct Scene *scene,
- struct View3D *v3d,
- const short flag,
- void (*func_cb)(const float[3], void *), void *user_data);
+void BKE_object_foreach_display_point(struct Object *ob, float obmat[4][4],
+ void (*func_cb)(const float[3], void *), void *user_data);
+void BKE_scene_foreach_display_point(struct Scene *scene,
+ struct View3D *v3d,
+ const short flag,
+ void (*func_cb)(const float[3], void *), void *user_data);
int BKE_object_parent_loop_check(const struct Object *parent, const struct Object *ob);
@@ -136,11 +134,11 @@ typedef struct ObjectTfmProtectedChannels {
} ObjectTfmProtectedChannels;
void BKE_object_tfm_protected_backup(const struct Object *ob,
- ObjectTfmProtectedChannels *obtfm);
+ ObjectTfmProtectedChannels *obtfm);
void BKE_object_tfm_protected_restore(struct Object *ob,
- const ObjectTfmProtectedChannels *obtfm,
- const short protectflag);
+ const ObjectTfmProtectedChannels *obtfm,
+ const short protectflag);
void BKE_object_handle_update(struct Scene *scene, struct Object *ob);
void BKE_object_sculpt_modifiers_changed(struct Object *ob);
@@ -153,6 +151,7 @@ struct KeyBlock *BKE_object_insert_shape_key(struct Scene *scene, struct Object
int BKE_object_is_modified(struct Scene *scene, struct Object *ob);
int BKE_object_is_deform_modified(struct Scene *scene, struct Object *ob);
+int BKE_object_is_animated(struct Scene *scene, struct Object *ob);
void BKE_object_relink(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_ocean.h b/source/blender/blenkernel/BKE_ocean.h
index 1c659b61d7d..de12afb02bd 100644
--- a/source/blender/blenkernel/BKE_ocean.h
+++ b/source/blender/blenkernel/BKE_ocean.h
@@ -69,25 +69,25 @@ typedef struct OceanCache {
} OceanCache;
-#define OCEAN_NOT_CACHED 0
-#define OCEAN_CACHING 1
-#define OCEAN_CACHED 2
+#define OCEAN_NOT_CACHED 0
+#define OCEAN_CACHING 1
+#define OCEAN_CACHED 2
struct Ocean *BKE_add_ocean(void);
void BKE_free_ocean_data(struct Ocean *oc);
void BKE_free_ocean(struct Ocean *oc);
-void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp,
+void BKE_init_ocean(struct Ocean *o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp,
float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals, short do_jacobian, int seed);
void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount);
/* sampling the ocean surface */
float BKE_ocean_jminus_to_foam(float jminus, float coverage);
-void BKE_ocean_eval_uv(struct Ocean * oc, struct OceanResult *ocr, float u, float v);
-void BKE_ocean_eval_uv_catrom(struct Ocean * oc, struct OceanResult *ocr, float u, float v);
-void BKE_ocean_eval_xz(struct Ocean * oc, struct OceanResult *ocr, float x, float z);
-void BKE_ocean_eval_xz_catrom(struct Ocean * oc, struct OceanResult *ocr, float x, float z);
-void BKE_ocean_eval_ij(struct Ocean * oc, struct OceanResult *ocr, int i, int j);
+void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v);
+void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u, float v);
+void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z);
+void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z);
+void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j);
/* ocean cache handling */
diff --git a/source/blender/blenkernel/BKE_packedFile.h b/source/blender/blenkernel/BKE_packedFile.h
index 1eff20cbd57..1891840f497 100644
--- a/source/blender/blenkernel/BKE_packedFile.h
+++ b/source/blender/blenkernel/BKE_packedFile.h
@@ -32,8 +32,8 @@
* \since March 2001
* \author nzc
*/
-#define RET_OK 0
-#define RET_ERROR 1
+#define RET_OK 0
+#define RET_ERROR 1
struct bSound;
struct Image;
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index f776295b912..b3e650b2aa5 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -59,18 +59,18 @@ struct SurfaceModifierData;
struct BVHTreeRay;
struct BVHTreeRayHit;
-#define PARTICLE_P ParticleData *pa; int p
-#define LOOP_PARTICLES for(p=0, pa=psys->particles; p<psys->totpart; p++, pa++)
-#define LOOP_EXISTING_PARTICLES for(p=0, pa=psys->particles; p<psys->totpart; p++, pa++) if(!(pa->flag & PARS_UNEXIST))
-#define LOOP_SHOWN_PARTICLES for(p=0, pa=psys->particles; p<psys->totpart; p++, pa++) if(!(pa->flag & (PARS_UNEXIST|PARS_NO_DISP)))
+#define PARTICLE_P ParticleData * pa; int p
+#define LOOP_PARTICLES for (p = 0, pa = psys->particles; p < psys->totpart; p++, pa++)
+#define LOOP_EXISTING_PARTICLES for (p = 0, pa = psys->particles; p < psys->totpart; p++, pa++) if (!(pa->flag & PARS_UNEXIST))
+#define LOOP_SHOWN_PARTICLES for (p = 0, pa = psys->particles; p < psys->totpart; p++, pa++) if (!(pa->flag & (PARS_UNEXIST | PARS_NO_DISP)))
/* OpenMP: Can only advance one variable within loop definition. */
-#define LOOP_DYNAMIC_PARTICLES for(p=0; p<psys->totpart; p++ ) if((pa=psys->particles+p)->state.time > 0.0f)
+#define LOOP_DYNAMIC_PARTICLES for (p = 0; p < psys->totpart; p++) if ((pa = psys->particles + p)->state.time > 0.0f)
-#define PSYS_FRAND_COUNT 1024
-#define PSYS_FRAND(seed) psys->frand[(seed) % PSYS_FRAND_COUNT]
+#define PSYS_FRAND_COUNT 1024
+#define PSYS_FRAND(seed) psys->frand[(seed) % PSYS_FRAND_COUNT]
/* fast but sure way to get the modifier*/
-#define PARTICLE_PSMD ParticleSystemModifierData *psmd = sim->psmd ? sim->psmd : psys_get_modifier(sim->ob, sim->psys)
+#define PARTICLE_PSMD ParticleSystemModifierData * psmd = sim->psmd ? sim->psmd : psys_get_modifier(sim->ob, sim->psys)
/* common stuff that many particle functions need */
typedef struct ParticleSimulationData {
@@ -86,11 +86,11 @@ typedef struct ParticleSimulationData {
} ParticleSimulationData;
typedef struct ParticleTexture {
- float ivel; /* used in reset */
- float time, life, exist, size; /* used in init */
- float damp, gravity, field; /* used in physics */
- float length, clump, kink, effector;/* used in path caching */
- float rough1, rough2, roughe; /* used in path caching */
+ float ivel; /* used in reset */
+ float time, life, exist, size; /* used in init */
+ float damp, gravity, field; /* used in physics */
+ float length, clump, kink, effector; /* used in path caching */
+ float rough1, rough2, roughe; /* used in path caching */
} ParticleTexture;
typedef struct ParticleSeam {
@@ -145,8 +145,7 @@ typedef struct ParticleThread {
int num, tot;
} ParticleThread;
-typedef struct ParticleBillboardData
-{
+typedef struct ParticleBillboardData {
struct Object *ob;
float vec[3], vel[3];
float offset[2];
@@ -159,8 +158,7 @@ typedef struct ParticleBillboardData
short align, uv_split, anim, split_offset;
} ParticleBillboardData;
-typedef struct ParticleCollisionElement
-{
+typedef struct ParticleCollisionElement {
/* pointers to original data */
float *x[4], *v[4];
@@ -181,8 +179,7 @@ typedef struct ParticleCollisionElement
} ParticleCollisionElement;
/* container for moving data between deflet_particle and particle_intersect_face */
-typedef struct ParticleCollision
-{
+typedef struct ParticleCollision {
struct Object *current;
struct Object *hit;
struct Object *prev;
@@ -191,7 +188,7 @@ typedef struct ParticleCollision
struct CollisionModifierData *md; // collision modifier for current object;
- float f; // time factor of previous collision, needed for substracting face velocity
+ float f; // time factor of previous collision, needed for substracting face velocity
float fac1, fac2;
float cfra, old_cfra;
@@ -214,10 +211,10 @@ typedef struct ParticleCollision
} ParticleCollision;
typedef struct ParticleDrawData {
- float *vdata, *vd; /* vertice data */
- float *ndata, *nd; /* normal data */
- float *cdata, *cd; /* color data */
- float *vedata, *ved; /* velocity data */
+ float *vdata, *vd; /* vertice data */
+ float *ndata, *nd; /* normal data */
+ float *cdata, *cd; /* color data */
+ float *vedata, *ved; /* velocity data */
float *ma_col;
int tot_vec_size, flag;
int totpoint, totve;
@@ -248,7 +245,7 @@ int psys_uses_gravity(struct ParticleSimulationData *sim);
/* free */
void BKE_particlesettings_free(struct ParticleSettings *part);
void psys_free_path_cache(struct ParticleSystem *psys, struct PTCacheEdit *edit);
-void psys_free(struct Object * ob, struct ParticleSystem * psys);
+void psys_free(struct Object *ob, struct ParticleSystem *psys);
void psys_render_set(struct Object *ob, struct ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy, int timeoffset);
void psys_render_restore(struct Object *ob, struct ParticleSystem *psys);
@@ -291,7 +288,7 @@ void psys_get_dupli_path_transform(struct ParticleSimulationData *sim, struct Pa
ParticleThread *psys_threads_create(struct ParticleSimulationData *sim);
void psys_threads_free(ParticleThread *threads);
-void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]);
+void psys_make_billboard(ParticleBillboardData * bb, float xvec[3], float yvec[3], float zvec[3], float center[3]);
void psys_apply_hair_lattice(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
/* particle_system.c */
@@ -346,13 +343,13 @@ int psys_particle_dm_face_lookup(struct Object *ob, struct DerivedMesh *dm, int
void reset_particle(struct ParticleSimulationData *sim, struct ParticleData *pa, float dtime, float cfra);
/* psys_reset */
-#define PSYS_RESET_ALL 1
-#define PSYS_RESET_DEPSGRAPH 2
-/* #define PSYS_RESET_CHILDREN 3 */ /*UNUSED*/
-#define PSYS_RESET_CACHE_MISS 4
+#define PSYS_RESET_ALL 1
+#define PSYS_RESET_DEPSGRAPH 2
+/* #define PSYS_RESET_CHILDREN 3 */ /*UNUSED*/
+#define PSYS_RESET_CACHE_MISS 4
/* index_dmcache */
-#define DMCACHE_NOTFOUND -1
-#define DMCACHE_ISCHILD -2
+#define DMCACHE_NOTFOUND -1
+#define DMCACHE_ISCHILD -2
#endif
diff --git a/source/blender/blenkernel/BKE_plugin_types.h b/source/blender/blenkernel/BKE_plugin_types.h
index 8f9706f9833..f3c5db02427 100644
--- a/source/blender/blenkernel/BKE_plugin_types.h
+++ b/source/blender/blenkernel/BKE_plugin_types.h
@@ -34,11 +34,11 @@
struct ImBuf;
-typedef int (*TexDoitold)(int stype, void *cast, float *texvec, float *dxt, float *dyt);
-typedef int (*TexDoit)(int stype, void *cast, float *texvec, float *dxt, float *dyt, float *result );
-typedef void (*SeqDoit)(void*, float, float, int, int,
- struct ImBuf*, struct ImBuf*,
- struct ImBuf*, struct ImBuf*);
+typedef int (*TexDoitold)(int stype, void *cast, float *texvec, float *dxt, float *dyt);
+typedef int (*TexDoit)(int stype, void *cast, float *texvec, float *dxt, float *dyt, float *result);
+typedef void (*SeqDoit)(void *, float, float, int, int,
+ struct ImBuf *, struct ImBuf *,
+ struct ImBuf *, struct ImBuf *);
typedef struct VarStruct {
int type;
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index d7d7324dd56..d6ab9a35697 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -40,15 +40,15 @@
/* Point cache clearing option, for BKE_ptcache_id_clear, before
* and after are non inclusive (they wont remove the cfra) */
-#define PTCACHE_CLEAR_ALL 0
-#define PTCACHE_CLEAR_FRAME 1
-#define PTCACHE_CLEAR_BEFORE 2
-#define PTCACHE_CLEAR_AFTER 3
+#define PTCACHE_CLEAR_ALL 0
+#define PTCACHE_CLEAR_FRAME 1
+#define PTCACHE_CLEAR_BEFORE 2
+#define PTCACHE_CLEAR_AFTER 3
/* Point cache reset options */
-#define PTCACHE_RESET_DEPSGRAPH 0
-#define PTCACHE_RESET_BAKED 1
-#define PTCACHE_RESET_OUTDATED 2
+#define PTCACHE_RESET_DEPSGRAPH 0
+#define PTCACHE_RESET_BAKED 1
+#define PTCACHE_RESET_OUTDATED 2
/* #define PTCACHE_RESET_FREE 3 */ /*UNUSED*/
/* Add the blendfile name after blendcache_ */
@@ -56,29 +56,29 @@
#define PTCACHE_PATH "blendcache_"
/* File open options, for BKE_ptcache_file_open */
-#define PTCACHE_FILE_READ 0
-#define PTCACHE_FILE_WRITE 1
-#define PTCACHE_FILE_UPDATE 2
+#define PTCACHE_FILE_READ 0
+#define PTCACHE_FILE_WRITE 1
+#define PTCACHE_FILE_UPDATE 2
/* PTCacheID types */
-#define PTCACHE_TYPE_SOFTBODY 0
-#define PTCACHE_TYPE_PARTICLES 1
-#define PTCACHE_TYPE_CLOTH 2
-#define PTCACHE_TYPE_SMOKE_DOMAIN 3
-#define PTCACHE_TYPE_SMOKE_HIGHRES 4
-#define PTCACHE_TYPE_DYNAMICPAINT 5
+#define PTCACHE_TYPE_SOFTBODY 0
+#define PTCACHE_TYPE_PARTICLES 1
+#define PTCACHE_TYPE_CLOTH 2
+#define PTCACHE_TYPE_SMOKE_DOMAIN 3
+#define PTCACHE_TYPE_SMOKE_HIGHRES 4
+#define PTCACHE_TYPE_DYNAMICPAINT 5
/* high bits reserved for flags that need to be stored in file */
-#define PTCACHE_TYPEFLAG_COMPRESS (1<<16)
-#define PTCACHE_TYPEFLAG_EXTRADATA (1<<17)
+#define PTCACHE_TYPEFLAG_COMPRESS (1 << 16)
+#define PTCACHE_TYPEFLAG_EXTRADATA (1 << 17)
-#define PTCACHE_TYPEFLAG_TYPEMASK 0x0000FFFF
-#define PTCACHE_TYPEFLAG_FLAGMASK 0xFFFF0000
+#define PTCACHE_TYPEFLAG_TYPEMASK 0x0000FFFF
+#define PTCACHE_TYPEFLAG_FLAGMASK 0xFFFF0000
/* PTCache read return code */
-#define PTCACHE_READ_EXACT 1
-#define PTCACHE_READ_INTERPOLATED 2
-#define PTCACHE_READ_OLD 3
+#define PTCACHE_READ_EXACT 1
+#define PTCACHE_READ_INTERPOLATED 2
+#define PTCACHE_READ_OLD 3
/* Structs */
struct ClothModifierData;
@@ -115,7 +115,7 @@ typedef struct PTCacheFile {
void *cur[BPHYS_TOT_DATA];
} PTCacheFile;
-#define PTCACHE_VEL_PER_SEC 1
+#define PTCACHE_VEL_PER_SEC 1
typedef struct PTCacheID {
struct PTCacheID *next, *prev;
@@ -182,10 +182,10 @@ typedef struct PTCacheBaker {
} PTCacheBaker;
/* PTCacheEditKey->flag */
-#define PEK_SELECT 1
-#define PEK_TAG 2
-#define PEK_HIDE 4
-#define PEK_USE_WCO 8
+#define PEK_SELECT 1
+#define PEK_TAG 2
+#define PEK_HIDE 4
+#define PEK_USE_WCO 8
typedef struct PTCacheEditKey {
float *co;
@@ -200,10 +200,10 @@ typedef struct PTCacheEditKey {
} PTCacheEditKey;
/* PTCacheEditPoint->flag */
-#define PEP_TAG 1
-#define PEP_EDIT_RECALC 2
-#define PEP_TRANSFORM 4
-#define PEP_HIDE 8
+#define PEP_TAG 1
+#define PEP_EDIT_RECALC 2
+#define PEP_TRANSFORM 4
+#define PEP_HIDE 8
typedef struct PTCacheEditPoint {
struct PTCacheEditKey *keys;
@@ -242,7 +242,7 @@ typedef struct PTCacheEdit {
float *emitter_cosnos; /* localspace face centers and normals (average of its verts), from the derived mesh */
int *mirror_cache;
- struct ParticleCacheKey **pathcache; /* path cache (runtime) */
+ struct ParticleCacheKey **pathcache; /* path cache (runtime) */
ListBase pathcachebufs;
int totpoint, totframes, totcached, edited;
@@ -267,18 +267,18 @@ void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct
void BKE_ptcache_remove(void);
/************ ID specific functions ************************/
-void BKE_ptcache_id_clear(PTCacheID *id, int mode, unsigned int cfra);
-int BKE_ptcache_id_exist(PTCacheID *id, int cfra);
-int BKE_ptcache_id_reset(struct Scene *scene, PTCacheID *id, int mode);
-void BKE_ptcache_id_time(PTCacheID *pid, struct Scene *scene, float cfra, int *startframe, int *endframe, float *timescale);
-int BKE_ptcache_object_reset(struct Scene *scene, struct Object *ob, int mode);
+void BKE_ptcache_id_clear(PTCacheID *id, int mode, unsigned int cfra);
+int BKE_ptcache_id_exist(PTCacheID *id, int cfra);
+int BKE_ptcache_id_reset(struct Scene *scene, PTCacheID *id, int mode);
+void BKE_ptcache_id_time(PTCacheID *pid, struct Scene *scene, float cfra, int *startframe, int *endframe, float *timescale);
+int BKE_ptcache_object_reset(struct Scene *scene, struct Object *ob, int mode);
void BKE_ptcache_update_info(PTCacheID *pid);
/*********** General cache reading/writing ******************/
/* Size of cache data type. */
-int BKE_ptcache_data_size(int data_type);
+int BKE_ptcache_data_size(int data_type);
/* Is point with indes in memory cache */
int BKE_ptcache_mem_index_find(struct PTCacheMem *pm, unsigned int index);
@@ -289,10 +289,10 @@ void BKE_ptcache_mem_pointers_incr(struct PTCacheMem *pm);
int BKE_ptcache_mem_pointers_seek(int point_index, struct PTCacheMem *pm);
/* Main cache reading call. */
-int BKE_ptcache_read(PTCacheID *pid, float cfra);
+int BKE_ptcache_read(PTCacheID *pid, float cfra);
/* Main cache writing call. */
-int BKE_ptcache_write(PTCacheID *pid, unsigned int cfra);
+int BKE_ptcache_write(PTCacheID *pid, unsigned int cfra);
/****************** Continue physics ***************/
void BKE_ptcache_set_continue_physics(struct Main *bmain, struct Scene *scene, int enable);
@@ -311,7 +311,7 @@ struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, struct L
void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene);
/* Bake cache or simulate to current frame with settings defined in the baker. */
-void BKE_ptcache_bake(struct PTCacheBaker* baker);
+void BKE_ptcache_bake(struct PTCacheBaker *baker);
/* Convert disk cache to memory cache. */
void BKE_ptcache_disk_to_mem(struct PTCacheID *pid);
diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h
index aa625fab3b2..4d69a013101 100644
--- a/source/blender/blenkernel/BKE_report.h
+++ b/source/blender/blenkernel/BKE_report.h
@@ -49,14 +49,14 @@ void BKE_reports_clear(ReportList *reports);
void BKE_report(ReportList *reports, ReportType type, const char *message);
void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 3, 4)))
+__attribute__ ((format(printf, 3, 4)))
#endif
;
void BKE_reports_prepend(ReportList *reports, const char *prepend);
void BKE_reports_prependf(ReportList *reports, const char *prepend, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 2, 3)))
+__attribute__ ((format(printf, 2, 3)))
#endif
;
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 3a93562707d..bce4243190a 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -49,13 +49,13 @@ struct Scene;
struct Text;
struct Text;
-#define SCE_COPY_NEW 0
-#define SCE_COPY_EMPTY 1
-#define SCE_COPY_LINK_OB 2
-#define SCE_COPY_LINK_DATA 3
-#define SCE_COPY_FULL 4
+#define SCE_COPY_NEW 0
+#define SCE_COPY_EMPTY 1
+#define SCE_COPY_LINK_OB 2
+#define SCE_COPY_LINK_DATA 3
+#define SCE_COPY_FULL 4
-#define SETLOOPER(_sce_basis, _sce_iter, _base) _sce_iter= _sce_basis, _base= _setlooper_base_step(&_sce_iter, NULL); _base; _base= _setlooper_base_step(&_sce_iter, _base)
+#define SETLOOPER(_sce_basis, _sce_iter, _base) _sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, NULL); _base; _base = _setlooper_base_step(&_sce_iter, _base)
struct Base *_setlooper_base_step(struct Scene **sce_iter, struct Base *base);
void free_avicodecdata(struct AviCodecData *acd);
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index af6e793cf2f..7223008afad 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -58,43 +58,43 @@ struct wmWindowManager;
* ED_spacetypes_init() in editors/area/spacetypes.c */
/* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
-#define BKE_ST_MAXNAME 64
+#define BKE_ST_MAXNAME 64
typedef struct SpaceType {
struct SpaceType *next, *prev;
- char name[BKE_ST_MAXNAME]; /* for menus */
- int spaceid; /* unique space identifier */
- int iconid; /* icon lookup for menus */
+ char name[BKE_ST_MAXNAME]; /* for menus */
+ int spaceid; /* unique space identifier */
+ int iconid; /* icon lookup for menus */
/* initial allocation, after this WM will call init() too */
- struct SpaceLink *(*new)(const struct bContext *C);
+ struct SpaceLink *(*new)(const struct bContext *C);
/* not free spacelink itself */
- void (*free)(struct SpaceLink *);
+ void (*free)(struct SpaceLink *);
/* init is to cope with file load, screen (size) changes, check handlers */
- void (*init)(struct wmWindowManager *, struct ScrArea *);
+ void (*init)(struct wmWindowManager *, struct ScrArea *);
/* Listeners can react to bContext changes */
- void (*listener)(struct ScrArea *, struct wmNotifier *);
+ void (*listener)(struct ScrArea *, struct wmNotifier *);
/* refresh context, called after filereads, ED_area_tag_refresh() */
- void (*refresh)(const struct bContext *, struct ScrArea *);
+ void (*refresh)(const struct bContext *, struct ScrArea *);
/* after a spacedata copy, an init should result in exact same situation */
- struct SpaceLink *(*duplicate)(struct SpaceLink *);
+ struct SpaceLink *(*duplicate)(struct SpaceLink *);
/* register operator types on startup */
- void (*operatortypes)(void);
+ void (*operatortypes)(void);
/* add default items to WM keymap */
- void (*keymap)(struct wmKeyConfig *);
+ void (*keymap)(struct wmKeyConfig *);
/* on startup, define dropboxes for spacetype+regions */
- void (*dropboxes)(void);
+ void (*dropboxes)(void);
/* return context data */
- int (*context)(const struct bContext *, const char*, struct bContextDataResult *);
+ int (*context)(const struct bContext *, const char *, struct bContextDataResult *);
/* region type definitions */
- ListBase regiontypes;
+ ListBase regiontypes;
/* tool shelf definitions */
ListBase toolshelf;
@@ -102,7 +102,7 @@ typedef struct SpaceType {
/* read and write... */
/* default keymaps to add */
- int keymapflag;
+ int keymapflag;
} SpaceType;
@@ -111,33 +111,33 @@ typedef struct SpaceType {
typedef struct ARegionType {
struct ARegionType *next, *prev;
- int regionid; /* unique identifier within this space, defines RGN_TYPE_xxxx */
+ int regionid; /* unique identifier within this space, defines RGN_TYPE_xxxx */
/* add handlers, stuff you only do once or on area/region type/size changes */
- void (*init)(struct wmWindowManager *, struct ARegion *);
+ void (*init)(struct wmWindowManager *, struct ARegion *);
/* draw entirely, view changes should be handled here */
- void (*draw)(const struct bContext *, struct ARegion *);
+ void (*draw)(const struct bContext *, struct ARegion *);
/* contextual changes should be handled here */
- void (*listener)(struct ARegion *, struct wmNotifier *);
+ void (*listener)(struct ARegion *, struct wmNotifier *);
- void (*free)(struct ARegion *);
+ void (*free)(struct ARegion *);
/* split region, copy data optionally */
- void *(*duplicate)(void *);
+ void *(*duplicate)(void *);
/* register operator types on startup */
- void (*operatortypes)(void);
+ void (*operatortypes)(void);
/* add own items to keymap */
- void (*keymap)(struct wmKeyConfig *);
+ void (*keymap)(struct wmKeyConfig *);
/* allows default cursor per region */
- void (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
+ void (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
/* return context data */
- int (*context)(const struct bContext *, const char *, struct bContextDataResult *);
+ int (*context)(const struct bContext *, const char *, struct bContextDataResult *);
/* custom drawing callbacks */
- ListBase drawcalls;
+ ListBase drawcalls;
/* panels type definitions */
ListBase paneltypes;
@@ -146,13 +146,13 @@ typedef struct ARegionType {
ListBase headertypes;
/* hardcoded constraints, smaller than these values region is not visible */
- int minsizex, minsizey;
+ int minsizex, minsizey;
/* when new region opens (region prefsizex/y are zero then */
- int prefsizex, prefsizey;
+ int prefsizex, prefsizey;
/* default keymaps to add */
- int keymapflag;
+ int keymapflag;
/* return without drawing. lock is set by region definition, and copied to do_lock by render. can become flag */
- short do_lock, lock;
+ short do_lock, lock;
} ARegionType;
/* panel types */
@@ -160,20 +160,20 @@ typedef struct ARegionType {
typedef struct PanelType {
struct PanelType *next, *prev;
- char idname[BKE_ST_MAXNAME]; /* unique name */
- char label[BKE_ST_MAXNAME]; /* for panel header */
- char context[BKE_ST_MAXNAME]; /* for buttons window */
- int space_type;
- int region_type;
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ char label[BKE_ST_MAXNAME]; /* for panel header */
+ char context[BKE_ST_MAXNAME]; /* for buttons window */
+ int space_type;
+ int region_type;
- int flag;
+ int flag;
/* verify if the panel should draw or not */
- int (*poll)(const struct bContext *, struct PanelType *);
+ int (*poll)(const struct bContext *, struct PanelType *);
/* draw header (optional) */
- void (*draw_header)(const struct bContext *, struct Panel *);
+ void (*draw_header)(const struct bContext *, struct Panel *);
/* draw entirely, view changes should be handled here */
- void (*draw)(const struct bContext *, struct Panel *);
+ void (*draw)(const struct bContext *, struct Panel *);
/* RNA integration */
ExtensionRNA ext;
@@ -184,19 +184,19 @@ typedef struct PanelType {
typedef struct HeaderType {
struct HeaderType *next, *prev;
- char idname[BKE_ST_MAXNAME]; /* unique name */
- int space_type;
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ int space_type;
/* draw entirely, view changes should be handled here */
- void (*draw)(const struct bContext *, struct Header *);
+ void (*draw)(const struct bContext *, struct Header *);
/* RNA integration */
ExtensionRNA ext;
} HeaderType;
typedef struct Header {
- struct HeaderType *type; /* runtime */
- struct uiLayout *layout; /* runtime for drawing */
+ struct HeaderType *type; /* runtime */
+ struct uiLayout *layout; /* runtime for drawing */
} Header;
@@ -205,22 +205,22 @@ typedef struct Header {
typedef struct MenuType {
struct MenuType *next, *prev;
- char idname[BKE_ST_MAXNAME]; /* unique name */
- char label[BKE_ST_MAXNAME]; /* for button text */
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ char label[BKE_ST_MAXNAME]; /* for button text */
char *description;
/* verify if the menu should draw or not */
- int (*poll)(const struct bContext *, struct MenuType *);
+ int (*poll)(const struct bContext *, struct MenuType *);
/* draw entirely, view changes should be handled here */
- void (*draw)(const struct bContext *, struct Menu *);
+ void (*draw)(const struct bContext *, struct Menu *);
/* RNA integration */
ExtensionRNA ext;
} MenuType;
typedef struct Menu {
- struct MenuType *type; /* runtime */
- struct uiLayout *layout; /* runtime for drawing */
+ struct MenuType *type; /* runtime */
+ struct uiLayout *layout; /* runtime for drawing */
} Menu;
/* spacetypes */
@@ -228,7 +228,7 @@ struct SpaceType *BKE_spacetype_from_id(int spaceid);
struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
const struct ListBase *BKE_spacetypes_list(void);
void BKE_spacetype_register(struct SpaceType *st);
-void BKE_spacetypes_free(void); /* only for quitting blender */
+void BKE_spacetypes_free(void); /* only for quitting blender */
/* spacedata */
void BKE_spacedata_freelist(ListBase *lb);
@@ -237,8 +237,8 @@ void BKE_spacedata_draw_locks(int set);
/* area/regions */
struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
-void BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
-void BKE_screen_area_free(struct ScrArea *sa);
+void BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
+void BKE_screen_area_free(struct ScrArea *sa);
struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
struct ScrArea *BKE_screen_find_big_area(struct bScreen *sc, const int spacetype, const short min);
diff --git a/source/blender/blenkernel/BKE_script.h b/source/blender/blenkernel/BKE_script.h
index 7bd801a8177..9976009c4c2 100644
--- a/source/blender/blenkernel/BKE_script.h
+++ b/source/blender/blenkernel/BKE_script.h
@@ -40,7 +40,7 @@ extern "C" {
struct Script;
-void free_script (struct Script *script);
+void free_script(struct Script *script);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index decbf5d0d2a..4ddafbbaae9 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -46,10 +46,10 @@ struct SeqIndexBuildContext;
#define BUILD_SEQAR_COUNT_CURRENT 1
#define BUILD_SEQAR_COUNT_CHILDREN 2
-#define EARLY_NO_INPUT -1
-#define EARLY_DO_EFFECT 0
-#define EARLY_USE_INPUT_1 1
-#define EARLY_USE_INPUT_2 2
+#define EARLY_NO_INPUT -1
+#define EARLY_DO_EFFECT 0
+#define EARLY_USE_INPUT_1 1
+#define EARLY_USE_INPUT_2 2
/* sequence iterator */
@@ -67,8 +67,8 @@ void seq_end(SeqIterator *iter);
void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int use_pointer);
#define SEQP_BEGIN(ed, _seq) \
-{ \
- SeqIterator iter; \
+ { \
+ SeqIterator iter; \
for (seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \
_seq = iter.seq;
@@ -79,8 +79,8 @@ void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int us
_seq = iter.seq;
#define SEQ_END \
- } \
- seq_end(&iter); \
+ } \
+ seq_end(&iter); \
}
typedef struct SeqRenderData {
@@ -94,11 +94,11 @@ typedef struct SeqRenderData {
} SeqRenderData;
SeqRenderData seq_new_render_data(
- struct Main * bmain, struct Scene * scene,
- int rectx, int recty, int preview_render_size);
+ struct Main *bmain, struct Scene *scene,
+ int rectx, int recty, int preview_render_size);
-int seq_cmp_render_data(const SeqRenderData * a, const SeqRenderData * b);
-unsigned int seq_hash_render_data(const SeqRenderData * a);
+int seq_cmp_render_data(const SeqRenderData *a, const SeqRenderData *b);
+unsigned int seq_hash_render_data(const SeqRenderData *a);
/* Wipe effect */
enum {
@@ -138,22 +138,21 @@ struct SeqEffectHandle {
int (*early_out)(struct Sequence *seq, float facf0, float facf1);
/* stores the y-range of the effect IPO */
- void (*store_icu_yrange)(struct Sequence * seq, short adrcode, float *ymin, float *ymax);
+ void (*store_icu_yrange)(struct Sequence *seq, short adrcode, float *ymin, float *ymax);
/* stores the default facf0 and facf1 if no IPO is present */
- void (*get_default_fac)(struct Sequence *seq, float cfra, float * facf0, float * facf1);
+ void (*get_default_fac)(struct Sequence *seq, float cfra, float *facf0, float *facf1);
/* execute the effect
* sequence effects are only required to either support
* float-rects or byte-rects
* (mixed cases are handled one layer up...) */
- struct ImBuf* (*execute)(
- SeqRenderData context,
- struct Sequence *seq, float cfra,
- float facf0, float facf1,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3);
+ struct ImBuf * (*execute)(SeqRenderData context,
+ struct Sequence *seq, float cfra,
+ float facf0, float facf1,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3);
};
/* ********************* prototypes *************** */
@@ -200,9 +199,9 @@ void seq_free_clipboard(void);
const char *give_seqname(struct Sequence *seq);
void calc_sequence(struct Scene *scene, struct Sequence *seq);
void calc_sequence_disp(struct Scene *scene, struct Sequence *seq);
-void reload_sequence_new_file(struct Scene *scene, struct Sequence * seq, int lock_range);
+void reload_sequence_new_file(struct Scene *scene, struct Sequence *seq, int lock_range);
void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar, int *totseq,
- int (*test_func)(struct Sequence * seq));
+ int (*test_func)(struct Sequence *seq));
int evaluate_seq_frame(struct Scene *scene, int cfra);
struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
@@ -211,7 +210,7 @@ void printf_strip(struct Sequence *seq); // debugging function (unused)
void update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change);
int input_have_to_preprocess(
- SeqRenderData context, struct Sequence * seq, float cfra);
+ SeqRenderData context, struct Sequence *seq, float cfra);
struct SeqIndexBuildContext *seq_proxy_rebuild_context(struct Main *bmain, struct Scene *scene, struct Sequence *seq);
void seq_proxy_rebuild(struct SeqIndexBuildContext *context,
@@ -236,18 +235,16 @@ void seq_stripelem_cache_destruct(void);
void seq_stripelem_cache_cleanup(void);
/* returned ImBuf is properly refed and has to be freed */
-struct ImBuf * seq_stripelem_cache_get(
- SeqRenderData context, struct Sequence * seq,
- float cfra, seq_stripelem_ibuf_t type);
+struct ImBuf *seq_stripelem_cache_get(SeqRenderData context, struct Sequence *seq,
+ float cfra, seq_stripelem_ibuf_t type);
/* passed ImBuf is properly refed, so ownership is *not*
* transfered to the cache.
* you can pass the same ImBuf multiple times to the cache without problems.
*/
-void seq_stripelem_cache_put(
- SeqRenderData context, struct Sequence * seq,
- float cfra, seq_stripelem_ibuf_t type, struct ImBuf * nval);
+void seq_stripelem_cache_put(SeqRenderData context, struct Sequence *seq,
+ float cfra, seq_stripelem_ibuf_t type, struct ImBuf *nval);
/* **********************************************************************
* seqeffects.c
@@ -278,29 +275,28 @@ int seq_tx_get_final_right(struct Sequence *seq, int metaclip);
void seq_tx_set_final_left(struct Sequence *seq, int val);
void seq_tx_set_final_right(struct Sequence *seq, int val);
void seq_tx_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag);
-int seq_tx_test(struct Sequence * seq);
+int seq_tx_test(struct Sequence *seq);
int seq_single_check(struct Sequence *seq);
void seq_single_fix(struct Sequence *seq);
-int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
+int seq_test_overlap(struct ListBase *seqbasep, struct Sequence *test);
void seq_translate(struct Scene *scene, struct Sequence *seq, int delta);
void seq_sound_init(struct Scene *scene, struct Sequence *seq);
struct Sequence *seq_foreground_frame_get(struct Scene *scene, int frame);
struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq);
-struct Sequence *seq_metastrip(
- ListBase * seqbase /* = ed->seqbase */,
- struct Sequence * meta /* = NULL */, struct Sequence *seq);
+struct Sequence *seq_metastrip(ListBase *seqbase /* = ed->seqbase */,
+ struct Sequence *meta /* = NULL */, struct Sequence *seq);
void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
void seq_dupe_animdata(struct Scene *scene, const char *name_src, const char *name_dst);
-int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene);
-int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
+int shuffle_seq(struct ListBase *seqbasep, struct Sequence *test, struct Scene *evil_scene);
+int shuffle_seq_time(ListBase *seqbasep, struct Scene *evil_scene);
int seqbase_isolated_sel_check(struct ListBase *seqbase);
-void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage, int keep_file_handles);
-struct Sequence *seq_dupli_recursive(struct Scene *scene, struct Scene *scene_to, struct Sequence * seq, int dupe_flag);
+void free_imbuf_seq(struct Scene *scene, struct ListBase *seqbasep, int check_mem_usage, int keep_file_handles);
+struct Sequence *seq_dupli_recursive(struct Scene *scene, struct Scene *scene_to, struct Sequence *seq, int dupe_flag);
int seq_swap(struct Sequence *seq_a, struct Sequence *seq_b, const char **error_str);
void seq_update_sound_bounds_all(struct Scene *scene);
-void seq_update_sound_bounds(struct Scene* scene, struct Sequence *seq);
+void seq_update_sound_bounds(struct Scene *scene, struct Sequence *seq);
void seq_update_muting(struct Editing *ed);
void seq_update_sound(struct Scene *scene, struct bSound *sound);
void seqbase_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
@@ -315,27 +311,27 @@ typedef struct SeqLoadInfo {
int start_frame;
int end_frame;
int channel;
- int flag; /* use sound, replace sel */
+ int flag; /* use sound, replace sel */
int type;
int tot_success;
int tot_error;
- int len; /* only for image strips */
+ int len; /* only for image strips */
char path[512];
char name[64];
} SeqLoadInfo;
/* SeqLoadInfo.flag */
-#define SEQ_LOAD_REPLACE_SEL (1<<0)
-#define SEQ_LOAD_FRAME_ADVANCE (1<<1)
-#define SEQ_LOAD_MOVIE_SOUND (1<<2)
-#define SEQ_LOAD_SOUND_CACHE (1<<3)
+#define SEQ_LOAD_REPLACE_SEL (1 << 0)
+#define SEQ_LOAD_FRAME_ADVANCE (1 << 1)
+#define SEQ_LOAD_MOVIE_SOUND (1 << 2)
+#define SEQ_LOAD_SOUND_CACHE (1 << 3)
/* seq_dupli' flags */
-#define SEQ_DUPE_UNIQUE_NAME (1<<0)
-#define SEQ_DUPE_CONTEXT (1<<1)
-#define SEQ_DUPE_ANIM (1<<2)
-#define SEQ_DUPE_ALL (1<<3) /* otherwise only selected are copied */
+#define SEQ_DUPE_UNIQUE_NAME (1 << 0)
+#define SEQ_DUPE_CONTEXT (1 << 1)
+#define SEQ_DUPE_ANIM (1 << 2)
+#define SEQ_DUPE_ALL (1 << 3) /* otherwise only selected are copied */
/* use as an api function */
typedef struct Sequence *(*SeqLoadFunc)(struct bContext *, ListBase *, struct SeqLoadInfo *);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index 626dd64e21e..5b09f8fdf3d 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -65,8 +65,7 @@ struct DerivedMesh *object_get_derived_final(struct Object *ob);
*/
struct Object;
-typedef struct SpaceTransform
-{
+typedef struct SpaceTransform {
float local2target[4][4];
float target2local[4][4];
@@ -103,23 +102,22 @@ struct MDeformVert;
struct BVHTree;
-typedef struct ShrinkwrapCalcData
-{
- ShrinkwrapModifierData *smd; //shrinkwrap modifier data
+typedef struct ShrinkwrapCalcData {
+ ShrinkwrapModifierData *smd; //shrinkwrap modifier data
- struct Object *ob; //object we are applying shrinkwrap to
+ struct Object *ob; //object we are applying shrinkwrap to
- struct MVert *vert; //Array of verts being projected (to fetch normals or other data)
- float (*vertexCos)[3]; //vertexs being shrinkwraped
+ struct MVert *vert; //Array of verts being projected (to fetch normals or other data)
+ float (*vertexCos)[3]; //vertexs being shrinkwraped
int numVerts;
- struct MDeformVert* dvert; //Pointer to mdeform array
- int vgroup; //Vertex group num
+ struct MDeformVert *dvert; //Pointer to mdeform array
+ int vgroup; //Vertex group num
- struct DerivedMesh *target; //mesh we are shrinking to
- SpaceTransform local2target; //transform to move between local and target space
+ struct DerivedMesh *target; //mesh we are shrinking to
+ SpaceTransform local2target; //transform to move between local and target space
- float keepDist; //Distance to keep above target surface (units are in local space)
+ float keepDist; //Distance to keep above target surface (units are in local space)
} ShrinkwrapCalcData;
@@ -139,10 +137,10 @@ int normal_projection_project_vertex(char options, const float *vert, const floa
/*
* NULL initializers to local data
*/
-#define NULL_ShrinkwrapCalcData {NULL, }
-#define NULL_BVHTreeFromMesh {NULL, }
-#define NULL_BVHTreeRayHit {NULL, }
-#define NULL_BVHTreeNearest {0, }
+#define NULL_ShrinkwrapCalcData {NULL, }
+#define NULL_BVHTreeFromMesh {NULL, }
+#define NULL_BVHTreeRayHit {NULL, }
+#define NULL_BVHTreeNearest {0, }
#endif
diff --git a/source/blender/blenkernel/BKE_sketch.h b/source/blender/blenkernel/BKE_sketch.h
index 9cdf9a8fb62..50ee1184b3e 100644
--- a/source/blender/blenkernel/BKE_sketch.h
+++ b/source/blender/blenkernel/BKE_sketch.h
@@ -38,8 +38,7 @@ typedef enum SK_PMode
PT_PROJECT,
} SK_PMode;
-typedef struct SK_Point
-{
+typedef struct SK_Point {
float p[3];
short p2d[2];
float no[3];
@@ -48,8 +47,7 @@ typedef struct SK_Point
SK_PMode mode;
} SK_Point;
-typedef struct SK_Stroke
-{
+typedef struct SK_Stroke {
struct SK_Stroke *next, *prev;
SK_Point *points;
@@ -58,68 +56,64 @@ typedef struct SK_Stroke
int selected;
} SK_Stroke;
-#define SK_OVERDRAW_LIMIT 5
+#define SK_OVERDRAW_LIMIT 5
-typedef struct SK_Overdraw
-{
+typedef struct SK_Overdraw {
SK_Stroke *target;
- int start, end;
+ int start, end;
int count;
} SK_Overdraw;
#define SK_Stroke_BUFFER_INIT_SIZE 20
-typedef struct SK_DrawData
-{
+typedef struct SK_DrawData {
int mval[2];
int previous_mval[2];
SK_PType type;
} SK_DrawData;
-typedef struct SK_Intersection
-{
+typedef struct SK_Intersection {
struct SK_Intersection *next, *prev;
SK_Stroke *stroke;
- int before;
- int after;
- int gesture_index;
- float p[3];
- float lambda; /* used for sorting intersection points */
+ int before;
+ int after;
+ int gesture_index;
+ float p[3];
+ float lambda; /* used for sorting intersection points */
} SK_Intersection;
-typedef struct SK_Sketch
-{
- ListBase strokes;
- ListBase depth_peels;
- SK_Stroke *active_stroke;
- SK_Stroke *gesture;
- SK_Point next_point;
+typedef struct SK_Sketch {
+ ListBase strokes;
+ ListBase depth_peels;
+ SK_Stroke *active_stroke;
+ SK_Stroke *gesture;
+ SK_Point next_point;
SK_Overdraw over;
} SK_Sketch;
typedef struct SK_Gesture {
- SK_Stroke *stk;
- SK_Stroke *segments;
+ SK_Stroke *stk;
+ SK_Stroke *segments;
- ListBase intersections;
- ListBase self_intersections;
+ ListBase intersections;
+ ListBase self_intersections;
- int nb_self_intersections;
- int nb_intersections;
- int nb_segments;
+ int nb_self_intersections;
+ int nb_intersections;
+ int nb_segments;
} SK_Gesture;
/************************************************/
void freeSketch(SK_Sketch *sketch);
-SK_Sketch* createSketch(void);
+SK_Sketch *createSketch(void);
void sk_removeStroke(SK_Sketch *sketch, SK_Stroke *stk);
void sk_freeStroke(SK_Stroke *stk);
-SK_Stroke* sk_createStroke(void);
+SK_Stroke *sk_createStroke(void);
SK_Point *sk_lastStrokePoint(SK_Stroke *stk);
@@ -134,7 +128,7 @@ void sk_appendStrokePoint(SK_Stroke *stk, SK_Point *pt);
void sk_insertStrokePoints(SK_Stroke *stk, SK_Point *pts, int len, int start, int end);
void sk_trimStroke(SK_Stroke *stk, int start, int end);
-void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], float p_end[3]);
+void sk_straightenStroke(SK_Stroke * stk, int start, int end, float p_start[3], float p_end[3]);
void sk_polygonizeStroke(SK_Stroke *stk, int start, int end);
void sk_flattenStroke(SK_Stroke *stk, int start, int end);
void sk_reverseStroke(SK_Stroke *stk);
diff --git a/source/blender/blenkernel/BKE_smoke.h b/source/blender/blenkernel/BKE_smoke.h
index 1e97bc07f99..1f824ccbafc 100644
--- a/source/blender/blenkernel/BKE_smoke.h
+++ b/source/blender/blenkernel/BKE_smoke.h
@@ -33,11 +33,11 @@
* \author Daniel Genrich
*/
-typedef float (*bresenham_callback) (float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
+typedef float (*bresenham_callback)(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
void smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
-void smokeModifier_free (struct SmokeModifierData *smd);
+void smokeModifier_free(struct SmokeModifierData *smd);
void smokeModifier_reset(struct SmokeModifierData *smd);
void smokeModifier_reset_turbulence(struct SmokeModifierData *smd);
void smokeModifier_createType(struct SmokeModifierData *smd);
diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h
index 547fd9e4393..95581958328 100644
--- a/source/blender/blenkernel/BKE_softbody.h
+++ b/source/blender/blenkernel/BKE_softbody.h
@@ -50,25 +50,25 @@ typedef struct BodyPoint {
} BodyPoint;
/* allocates and initializes general main data */
-extern struct SoftBody *sbNew(struct Scene *scene);
+extern struct SoftBody *sbNew(struct Scene *scene);
/* frees internal data and softbody itself */
-extern void sbFree(struct SoftBody *sb);
+extern void sbFree(struct SoftBody *sb);
/* frees simulation data to reset simulation */
-extern void sbFreeSimulation(struct SoftBody *sb);
+extern void sbFreeSimulation(struct SoftBody *sb);
/* do one simul step, reading and writing vertex locs from given array */
-extern void sbObjectStep(struct Scene *scene, struct Object *ob, float framnr, float (*vertexCos)[3], int numVerts);
+extern void sbObjectStep(struct Scene *scene, struct Object *ob, float framnr, float (*vertexCos)[3], int numVerts);
/* makes totally fresh start situation, resets time */
-extern void sbObjectToSoftbody(struct Object *ob);
+extern void sbObjectToSoftbody(struct Object *ob);
/* links the softbody module to a 'test for Interrupt' function */
/* pass NULL to unlink again */
extern void sbSetInterruptCallBack(int (*f)(void));
-extern void SB_estimate_transform(Object *ob, float lloc[3], float lrot[3][3], float lscale[3][3]);
+extern void SB_estimate_transform(Object * ob, float lloc[3], float lrot[3][3], float lscale[3][3]);
#endif
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index ea824a9998d..3b8d0eafd4d 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -64,10 +64,10 @@ typedef enum {
} SubsurfFlags;
struct DerivedMesh *subsurf_make_derived_from_derived(
- struct DerivedMesh *dm,
- struct SubsurfModifierData *smd,
- float (*vertCos)[3],
- SubsurfFlags flags);
+ struct DerivedMesh *dm,
+ struct SubsurfModifierData *smd,
+ float (*vertCos)[3],
+ SubsurfFlags flags);
void subsurf_calculate_limit_positions(struct Mesh *me, float (*positions_r)[3]);
@@ -107,7 +107,7 @@ typedef struct CCGDerivedMesh {
struct {int startVert; struct CCGVert *vert; } *vertMap;
struct {int startVert; int startEdge; struct CCGEdge *edge; } *edgeMap;
struct {int startVert; int startEdge;
- int startFace; struct CCGFace *face; } *faceMap;
+ int startFace; struct CCGFace *face; } *faceMap;
short *edgeFlags;
struct DMFlagMat *faceFlags;
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index ed58620b716..339b78ae2d1 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -93,8 +93,8 @@ struct Tex *give_current_particle_texture(struct ParticleSettings *part);
struct bNode *give_current_material_texture_node(struct Material *ma);
-int give_active_mtex(struct ID *id, struct MTex ***mtex_ar, short *act);
-void set_active_mtex(struct ID *id, short act);
+int give_active_mtex(struct ID *id, struct MTex ***mtex_ar, short *act);
+void set_active_mtex(struct ID *id, short act);
void set_current_brush_texture(struct Brush *br, struct Tex *tex);
void set_current_world_texture(struct World *wo, struct Tex *tex);
diff --git a/source/blender/blenkernel/BKE_unit.h b/source/blender/blenkernel/BKE_unit.h
index e3ad49e2225..86f46820c97 100644
--- a/source/blender/blenkernel/BKE_unit.h
+++ b/source/blender/blenkernel/BKE_unit.h
@@ -34,10 +34,10 @@ extern "C" {
/* in all cases the value is assumed to be scaled by the user preference */
/* humanly readable representation of a value in units (used for button drawing) */
-void bUnit_AsString(char *str, int len_max, double value, int prec, int system, int type, int split, int pad);
+void bUnit_AsString(char *str, int len_max, double value, int prec, int system, int type, int split, int pad);
/* replace units with values, used before python button evaluation */
-int bUnit_ReplaceString(char *str, int len_max, const char *str_prev, double scale_pref, int system, int type);
+int bUnit_ReplaceString(char *str, int len_max, const char *str_prev, double scale_pref, int system, int type);
/* make string keyboard-friendly: 10µm --> 10um */
void bUnit_ToUnitAltName(char *str, int len_max, const char *orig_str, int system, int type);
@@ -54,23 +54,23 @@ int bUnit_IsValid(int system, int type);
/* loop over scales, coudl add names later */
//double bUnit_Iter(void **unit, char **name, int system, int type);
-void bUnit_GetSystem(void **usys_pt, int *len, int system, int type);
-int bUnit_GetBaseUnit(void *usys_pt);
-const char* bUnit_GetName(void *usys_pt, int index);
-const char* bUnit_GetNameDisplay(void *usys_pt, int index);
-double bUnit_GetScaler(void *usys_pt, int index);
+void bUnit_GetSystem(void **usys_pt, int *len, int system, int type);
+int bUnit_GetBaseUnit(void *usys_pt);
+const char *bUnit_GetName(void *usys_pt, int index);
+const char *bUnit_GetNameDisplay(void *usys_pt, int index);
+double bUnit_GetScaler(void *usys_pt, int index);
/* aligned with PropertyUnit */
-#define B_UNIT_NONE 0
-#define B_UNIT_LENGTH 1
-#define B_UNIT_AREA 2
-#define B_UNIT_VOLUME 3
-#define B_UNIT_MASS 4
-#define B_UNIT_ROTATION 5
-#define B_UNIT_TIME 6
-#define B_UNIT_VELOCITY 7
-#define B_UNIT_ACCELERATION 8
-#define B_UNIT_TYPE_TOT 9
+#define B_UNIT_NONE 0
+#define B_UNIT_LENGTH 1
+#define B_UNIT_AREA 2
+#define B_UNIT_VOLUME 3
+#define B_UNIT_MASS 4
+#define B_UNIT_ROTATION 5
+#define B_UNIT_TIME 6
+#define B_UNIT_VELOCITY 7
+#define B_UNIT_ACCELERATION 8
+#define B_UNIT_TYPE_TOT 9
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h
index 591be9e81c4..0ed2db2aad2 100644
--- a/source/blender/blenkernel/BKE_utildefines.h
+++ b/source/blender/blenkernel/BKE_utildefines.h
@@ -42,9 +42,9 @@ extern "C" {
/* these values need to be hardcoded in structs, dna does not recognize defines */
/* also defined in DNA_space_types.h */
#ifndef FILE_MAXDIR
-#define FILE_MAXDIR 768
-#define FILE_MAXFILE 256
-#define FILE_MAX 1024
+#define FILE_MAXDIR 768
+#define FILE_MAXFILE 256
+#define FILE_MAX 1024
#endif
/* this weirdo pops up in two places ... */
@@ -56,33 +56,31 @@ extern "C" {
/* INTEGER CODES */
#ifdef __BIG_ENDIAN__
- /* Big Endian */
-# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
+/* Big Endian */
+# define MAKE_ID(a, b, c, d) ( (int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d) )
#else
- /* Little Endian */
-# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
+/* Little Endian */
+# define MAKE_ID(a, b, c, d) ( (int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a) )
#endif
-#define ID_NEW(a) if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
+#define DATA MAKE_ID('D', 'A', 'T', 'A')
+#define GLOB MAKE_ID('G', 'L', 'O', 'B')
-#define DATA MAKE_ID('D','A','T','A')
-#define GLOB MAKE_ID('G','L','O','B')
+#define DNA1 MAKE_ID('D', 'N', 'A', '1')
+#define TEST MAKE_ID('T', 'E', 'S', 'T') /* used as preview between 'REND' and 'GLOB' */
+#define REND MAKE_ID('R', 'E', 'N', 'D')
+#define USER MAKE_ID('U', 'S', 'E', 'R')
-#define DNA1 MAKE_ID('D','N','A','1')
-#define TEST MAKE_ID('T','E','S','T') /* used as preview between 'REND' and 'GLOB' */
-#define REND MAKE_ID('R','E','N','D')
-#define USER MAKE_ID('U','S','E','R')
-
-#define ENDB MAKE_ID('E','N','D','B')
+#define ENDB MAKE_ID('E', 'N', 'D', 'B')
/* Bit operations */
-#define BTST(a,b) ( ( (a) & 1<<(b) )!=0 )
-#define BNTST(a,b) ( ( (a) & 1<<(b) )==0 )
-#define BTST2(a,b,c) ( BTST( (a), (b) ) || BTST( (a), (c) ) )
-#define BSET(a,b) ( (a) | 1<<(b) )
-#define BCLR(a,b) ( (a) & ~(1<<(b)) )
+#define BTST(a, b) ( ( (a) & 1 << (b) ) != 0)
+#define BNTST(a, b) ( ( (a) & 1 << (b) ) == 0)
+#define BTST2(a, b, c) (BTST( (a), (b) ) || BTST( (a), (c) ) )
+#define BSET(a, b) ( (a) | 1 << (b) )
+#define BCLR(a, b) ( (a) & ~(1 << (b)) )
/* bit-row */
-#define BROW(min, max) (((max)>=31? 0xFFFFFFFF: (1<<(max+1))-1) - ((min)? ((1<<(min))-1):0) )
+#define BROW(min, max) (((max) >= 31 ? 0xFFFFFFFF : (1 << (max + 1)) - 1) - ((min) ? ((1 << (min)) - 1) : 0) )
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h
index f8382f75c0a..8a11d48d063 100644
--- a/source/blender/blenkernel/BKE_writeffmpeg.h
+++ b/source/blender/blenkernel/BKE_writeffmpeg.h
@@ -38,12 +38,12 @@
extern "C" {
#endif
-#define FFMPEG_MPEG1 0
-#define FFMPEG_MPEG2 1
-#define FFMPEG_MPEG4 2
-#define FFMPEG_AVI 3
-#define FFMPEG_MOV 4
-#define FFMPEG_DV 5
+#define FFMPEG_MPEG1 0
+#define FFMPEG_MPEG2 1
+#define FFMPEG_MPEG4 2
+#define FFMPEG_AVI 3
+#define FFMPEG_MOV 4
+#define FFMPEG_DV 5
#define FFMPEG_H264 6
#define FFMPEG_XVID 7
#define FFMPEG_FLV 8
@@ -52,14 +52,14 @@ extern "C" {
#define FFMPEG_WAV 11
#define FFMPEG_MP3 12
-#define FFMPEG_PRESET_NONE 0
-#define FFMPEG_PRESET_DVD 1
-#define FFMPEG_PRESET_SVCD 2
-#define FFMPEG_PRESET_VCD 3
-#define FFMPEG_PRESET_DV 4
-#define FFMPEG_PRESET_H264 5
-#define FFMPEG_PRESET_THEORA 6
-#define FFMPEG_PRESET_XVID 7
+#define FFMPEG_PRESET_NONE 0
+#define FFMPEG_PRESET_DVD 1
+#define FFMPEG_PRESET_SVCD 2
+#define FFMPEG_PRESET_VCD 3
+#define FFMPEG_PRESET_DV 4
+#define FFMPEG_PRESET_H264 5
+#define FFMPEG_PRESET_THEORA 6
+#define FFMPEG_PRESET_XVID 7
struct IDProperty;
struct RenderData;
@@ -69,8 +69,8 @@ struct Scene;
int BKE_ffmpeg_start(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
void BKE_ffmpeg_end(void);
int BKE_ffmpeg_append(struct RenderData *rd, int start_frame, int frame, int *pixels,
- int rectx, int recty, struct ReportList *reports);
-void BKE_ffmpeg_filepath_get(char* string, struct RenderData* rd);
+ int rectx, int recty, struct ReportList *reports);
+void BKE_ffmpeg_filepath_get(char *string, struct RenderData *rd);
void BKE_ffmpeg_preset_set(struct RenderData *rd, int preset);
void BKE_ffmpeg_image_type_verify(struct RenderData *rd, struct ImageFormatData *imf);
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index c7db52d9c7c..a374a9091fd 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -159,6 +159,7 @@ set(SRC
BKE_bullet.h
BKE_bvhutils.h
BKE_camera.h
+ BKE_ccg.h
BKE_cdderivedmesh.h
BKE_cloth.h
BKE_collision.h
diff --git a/source/blender/blenkernel/depsgraph_private.h b/source/blender/blenkernel/depsgraph_private.h
index c5e2f0900f0..512b799aeed 100644
--- a/source/blender/blenkernel/depsgraph_private.h
+++ b/source/blender/blenkernel/depsgraph_private.h
@@ -35,8 +35,8 @@
#include "BKE_constraint.h"
-#define DEPSX 5.0f
-#define DEPSY 1.8f
+#define DEPSX 5.0f
+#define DEPSY 1.8f
#define DAGQUEUEALLOC 50
@@ -48,33 +48,31 @@ enum {
-typedef struct DagAdjList
-{
+typedef struct DagAdjList {
struct DagNode *node;
short type;
- int count; // number of identical arcs
+ int count; /* number of identical arcs */
unsigned int lay; // for flushing redraw/rebuild events
const char *name;
struct DagAdjList *next;
} DagAdjList;
-typedef struct DagNode
-{
+typedef struct DagNode {
int color;
short type;
float x, y, k;
- void * ob;
- void * first_ancestor;
+ void *ob;
+ void *first_ancestor;
int ancestor_count;
- unsigned int lay; // accumulated layers of its relations + itself
- unsigned int scelay; // layers due to being in scene
- uint64_t customdata_mask; // customdata mask
- int lasttime; // if lasttime != DagForest->time, this node was not evaluated yet for flushing
- int BFS_dist; // BFS distance
- int DFS_dist; // DFS distance
- int DFS_dvtm; // DFS discovery time
- int DFS_fntm; // DFS Finishing time
+ unsigned int lay; /* accumulated layers of its relations + itself */
+ unsigned int scelay; /* layers due to being in scene */
+ uint64_t customdata_mask; /* customdata mask */
+ int lasttime; /* if lasttime != DagForest->time, this node was not evaluated yet for flushing */
+ int BFS_dist; /* BFS distance */
+ int DFS_dist; /* DFS distance */
+ int DFS_dvtm; /* DFS discovery time */
+ int DFS_fntm; /* DFS Finishing time */
struct DagAdjList *child;
struct DagAdjList *parent;
struct DagNode *next;
@@ -85,8 +83,7 @@ typedef struct DagNodeQueueElem {
struct DagNodeQueueElem *next;
} DagNodeQueueElem;
-typedef struct DagNodeQueue
-{
+typedef struct DagNodeQueue {
DagNodeQueueElem *first;
DagNodeQueueElem *last;
int count;
@@ -95,37 +92,36 @@ typedef struct DagNodeQueue
} DagNodeQueue;
// forest as we may have more than one DAG unnconected
-typedef struct DagForest
-{
+typedef struct DagForest {
ListBase DagNode;
struct GHash *nodeHash;
int numNodes;
int is_acyclic;
- int time; // for flushing/tagging, compare with node->lasttime
+ int time; /* for flushing/tagging, compare with node->lasttime */
} DagForest;
// queue operations
-DagNodeQueue * queue_create (int slots);
+DagNodeQueue *queue_create(int slots);
void queue_raz(DagNodeQueue *queue);
void push_queue(DagNodeQueue *queue, DagNode *node);
void push_stack(DagNodeQueue *queue, DagNode *node);
-DagNode * pop_queue(DagNodeQueue *queue);
-DagNode * get_top_node_queue(DagNodeQueue *queue);
+DagNode *pop_queue(DagNodeQueue *queue);
+DagNode *get_top_node_queue(DagNodeQueue *queue);
// Dag management
DagForest *getMainDag(void);
void setMainDag(DagForest *dag);
-DagForest * dag_init(void);
-DagNode * dag_find_node (DagForest *forest, void * fob);
-DagNode * dag_add_node (DagForest *forest, void * fob);
-DagNode * dag_get_node (DagForest *forest, void * fob);
-DagNode * dag_get_sub_node (DagForest *forest, void * fob);
+DagForest *dag_init(void);
+DagNode *dag_find_node(DagForest *forest, void *fob);
+DagNode *dag_add_node(DagForest *forest, void *fob);
+DagNode *dag_get_node(DagForest *forest, void *fob);
+DagNode *dag_get_sub_node(DagForest *forest, void *fob);
void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, const char *name);
void graph_bfs(void);
-DagNodeQueue * graph_dfs(void);
+DagNodeQueue *graph_dfs(void);
void set_node_xy(DagNode *node, float x, float y);
void graph_print_queue(DagNodeQueue *nqueue);
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 42c9fa84a91..6f768a147f7 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -416,10 +416,10 @@ struct CCGSubSurf {
static int VertDataEqual(const float a[], const float b[], const CCGSubSurf *ss)
{
int i;
- for(i = 0; i < ss->meshIFC.numLayers; i++) {
- if(a[i] != b[i])
+ for (i = 0; i < ss->meshIFC.numLayers; i++) {
+ if (a[i] != b[i])
return 0;
- }
+ }
return 1;
}
@@ -431,38 +431,38 @@ static void VertDataZero(float v[], const CCGSubSurf *ss)
static void VertDataCopy(float dst[], const float src[], const CCGSubSurf *ss)
{
int i;
- for(i = 0; i < ss->meshIFC.numLayers; i++)
+ for (i = 0; i < ss->meshIFC.numLayers; i++)
dst[i] = src[i];
}
static void VertDataAdd(float a[], const float b[], const CCGSubSurf *ss)
{
int i;
- for(i = 0; i < ss->meshIFC.numLayers; i++)
+ for (i = 0; i < ss->meshIFC.numLayers; i++)
a[i] += b[i];
}
static void VertDataSub(float a[], const float b[], const CCGSubSurf *ss)
{
int i;
- for(i = 0; i < ss->meshIFC.numLayers; i++)
+ for (i = 0; i < ss->meshIFC.numLayers; i++)
a[i] -= b[i];
}
static void VertDataMulN(float v[], float f, const CCGSubSurf *ss)
{
int i;
- for(i = 0; i < ss->meshIFC.numLayers; i++)
+ for (i = 0; i < ss->meshIFC.numLayers; i++)
v[i] *= f;
}
static void VertDataAvg4(float v[],
- const float a[], const float b[],
- const float c[], const float d[],
- const CCGSubSurf *ss)
+ const float a[], const float b[],
+ const float c[], const float d[],
+ const CCGSubSurf *ss)
{
int i;
- for(i = 0; i < ss->meshIFC.numLayers; i++)
+ for (i = 0; i < ss->meshIFC.numLayers; i++)
v[i] = (a[i] + b[i] + c[i] + d[i]) * 0.25f;
}
@@ -777,7 +777,7 @@ static float *_face_getIFNoEdge(CCGFace *f, CCGEdge *e, int f_ed_idx, int lvl, i
{
return (float *) ((byte *) _face_getIFCoEdge(f, e, f_ed_idx, lvl, eX, eY, levels, dataSize) + normalDataOffset);
}
-static void _face_calcIFNo(CCGFace *f, int lvl, int S, int x, int y, float *no, int levels, int dataSize)
+static void _face_calcIFNo(CCGFace *f, int lvl, int S, int x, int y, float no[3], int levels, int dataSize)
{
float *a = _face_getIFCo(f, lvl, S, x + 0, y + 0, levels, dataSize);
float *b = _face_getIFCo(f, lvl, S, x + 1, y + 0, levels, dataSize);
@@ -1133,7 +1133,8 @@ CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertDa
v->flags = Vert_eEffected | seamflag;
}
else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize), ss) ||
- ((v->flags & Vert_eSeam) != seamflag)) {
+ ((v->flags & Vert_eSeam) != seamflag))
+ {
int i, j;
VertDataCopy(_vert_getCo(v, 0, ss->meshIFC.vertDataSize), vertData, ss);
@@ -1165,7 +1166,7 @@ CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertDa
v->flags = Vert_eEffected | seamflag;
}
else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize), ss) ||
- ((v->flags & Vert_eSeam) != seamflag)) {
+ ((v->flags & Vert_eSeam) != seamflag)) {
*prevp = v->next;
_ehash_insert(ss->vMap, (EHEntry *) v);
VertDataCopy(_vert_getCo(v, 0, ss->meshIFC.vertDataSize), vertData, ss);
@@ -2001,10 +2002,10 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
}
VertDataMulN(r, 1.0f / f->numVerts, ss);
- VertDataMulN((float*)FACE_getCenterData(f), f->numVerts - 2.0f, ss);
- VertDataAdd((float*)FACE_getCenterData(f), q, ss);
- VertDataAdd((float*)FACE_getCenterData(f), r, ss);
- VertDataMulN((float*)FACE_getCenterData(f), 1.0f / f->numVerts, ss);
+ VertDataMulN((float *)FACE_getCenterData(f), f->numVerts - 2.0f, ss);
+ VertDataAdd((float *)FACE_getCenterData(f), q, ss);
+ VertDataAdd((float *)FACE_getCenterData(f), r, ss);
+ VertDataMulN((float *)FACE_getCenterData(f), 1.0f / f->numVerts, ss);
for (S = 0; S < f->numVerts; S++) {
/* interior face shift
@@ -2024,14 +2025,14 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
FACE_getIFCo(f, nextLvl, S, fx + 1, fy - 1),
FACE_getIFCo(f, nextLvl, S, fx + 1, fy + 1),
FACE_getIFCo(f, nextLvl, S, fx - 1, fy + 1),
- ss);
+ ss);
VertDataAvg4(r,
FACE_getIFCo(f, nextLvl, S, fx - 1, fy + 0),
FACE_getIFCo(f, nextLvl, S, fx + 1, fy + 0),
FACE_getIFCo(f, nextLvl, S, fx + 0, fy - 1),
FACE_getIFCo(f, nextLvl, S, fx + 0, fy + 1),
- ss);
+ ss);
VertDataCopy(nCo, co, ss);
VertDataSub(nCo, q, ss);
@@ -2061,7 +2062,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
FACE_getIECo(f, nextLvl, S, fx + 1),
FACE_getIFCo(f, nextLvl, (S + 1) % f->numVerts, 1, fx),
FACE_getIFCo(f, nextLvl, S, fx, 1),
- ss);
+ ss);
VertDataCopy(nCo, co, ss);
VertDataSub(nCo, q, ss);
@@ -2099,8 +2100,8 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss,
CCGEdge *e = FACE_getEdges(f)[S];
CCGEdge *prevE = FACE_getEdges(f)[(S + f->numVerts - 1) % f->numVerts];
- VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), (float*)FACE_getCenterData(f), ss);
- VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), (float*)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), (float *)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), (float *)FACE_getCenterData(f), ss);
VertDataCopy(FACE_getIFCo(f, nextLvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], nextLvl), ss);
VertDataCopy(FACE_getIECo(f, nextLvl, S, cornerIdx), EDGE_getCo(FACE_getEdges(f)[S], nextLvl, cornerIdx), ss);
for (x = 1; x < gridSize - 1; x++) {
@@ -2189,7 +2190,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss)
VertDataAdd(q, VERT_getCo(e->v1, curLvl), ss);
for (i = 0; i < e->numFaces; i++) {
CCGFace *f = e->faces[i];
- VertDataAdd(q, (float*)FACE_getCenterData(f), ss);
+ VertDataAdd(q, (float *)FACE_getCenterData(f), ss);
numFaces++;
}
VertDataMulN(q, 1.0f / (2.0f + numFaces), ss);
@@ -2265,7 +2266,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss)
VertDataZero(q, ss);
for (i = 0; i < v->numFaces; i++) {
CCGFace *f = v->faces[i];
- VertDataAdd(q, (float*)FACE_getCenterData(f), ss);
+ VertDataAdd(q, (float *)FACE_getCenterData(f), ss);
numFaces++;
}
VertDataMulN(q, 1.0f / numFaces, ss);
@@ -2365,8 +2366,8 @@ static void ccgSubSurf__sync(CCGSubSurf *ss)
CCGEdge *e = FACE_getEdges(f)[S];
CCGEdge *prevE = FACE_getEdges(f)[(S + f->numVerts - 1) % f->numVerts];
- VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), (float*)FACE_getCenterData(f), ss);
- VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), (float*)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), (float *)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), (float *)FACE_getCenterData(f), ss);
VertDataCopy(FACE_getIFCo(f, nextLvl, S, 1, 1), VERT_getCo(FACE_getVerts(f)[S], nextLvl), ss);
VertDataCopy(FACE_getIECo(f, nextLvl, S, 1), EDGE_getCo(FACE_getEdges(f)[S], nextLvl, 1), ss);
@@ -2405,7 +2406,7 @@ static void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces
CCGFace **array;
int i, num;
- if (!*faces) {
+ if (*faces == NULL) {
array = MEM_mallocN(sizeof(*array) * ss->fMap->numEntries, "CCGSubsurf allFaces");
num = 0;
for (i = 0; i < ss->fMap->curSize; i++) {
@@ -2495,7 +2496,7 @@ CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF
CCGEdge *e = FACE_getEdges(f)[S];
CCGEdge *prevE = FACE_getEdges(f)[(S + f->numVerts - 1) % f->numVerts];
- VertDataCopy((float*)FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0), ss);
+ VertDataCopy((float *)FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0), ss);
VertDataCopy(VERT_getCo(FACE_getVerts(f)[S], lvl), FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx), ss);
for (x = 0; x < gridSize; x++)
@@ -2546,7 +2547,7 @@ CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF,
VertDataCopy(FACE_getIFCo(f, lvl, S, x, 0), FACE_getIECo(f, lvl, S, x), ss);
}
- VertDataCopy(FACE_getIFCo(f, lvl, S, 0, 0), (float*)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIFCo(f, lvl, S, 0, 0), (float *)FACE_getCenterData(f), ss);
VertDataCopy(FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], lvl), ss);
}
}
@@ -2595,7 +2596,7 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
for (i = 0; i < numEffectedF; i++) {
CCGFace *f = effectedF[i];
- VertDataZero((float*)FACE_getCenterData(f), ss);
+ VertDataZero((float *)FACE_getCenterData(f), ss);
for (S = 0; S < f->numVerts; S++)
for (x = 0; x < gridSize; x++)
@@ -2606,7 +2607,7 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
CCGEdge *e = FACE_getEdges(f)[S];
CCGEdge *prevE = FACE_getEdges(f)[prevS];
- VertDataAdd((float*)FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0), ss);
+ VertDataAdd((float *)FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0), ss);
if (FACE_getVerts(f)[S]->flags & Vert_eEffected)
VertDataAdd(VERT_getCo(FACE_getVerts(f)[S], lvl), FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx), ss);
@@ -2648,7 +2649,7 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
for (i = 0; i < numEffectedF; i++) {
CCGFace *f = effectedF[i];
- VertDataMulN((float*)FACE_getCenterData(f), 1.0f / f->numVerts, ss);
+ VertDataMulN((float *)FACE_getCenterData(f), 1.0f / f->numVerts, ss);
for (S = 0; S < f->numVerts; S++)
for (x = 1; x < gridSize - 1; x++)
@@ -2659,7 +2660,7 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
CCGEdge *e = FACE_getEdges(f)[S];
CCGEdge *prevE = FACE_getEdges(f)[prevS];
- VertDataCopy(FACE_getIFCo(f, lvl, S, 0, 0), (float*)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIFCo(f, lvl, S, 0, 0), (float *)FACE_getCenterData(f), ss);
VertDataCopy(FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], lvl), ss);
for (x = 1; x < gridSize - 1; x++) {
@@ -2674,7 +2675,7 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
VertDataCopy(FACE_getIFCo(f, lvl, S, x, cornerIdx), _edge_getCoVert(prevE, FACE_getVerts(f)[S], lvl, eI, vertDataSize), ss);
}
- VertDataCopy(FACE_getIECo(f, lvl, S, 0), (float*)FACE_getCenterData(f), ss);
+ VertDataCopy(FACE_getIECo(f, lvl, S, 0), (float *)FACE_getCenterData(f), ss);
VertDataCopy(FACE_getIECo(f, lvl, S, gridSize - 1), FACE_getIFCo(f, lvl, S, gridSize - 1, 0), ss);
}
}
@@ -3126,7 +3127,7 @@ void CCG_key(CCGKey *key, const CCGSubSurf *ss, int level)
key->num_layers = ss->meshIFC.numLayers;
/* if normals are present, always the last three floats of an
- element */
+ * element */
if (key->has_normals)
key->normal_offset = key->elem_size - sizeof(float) * 3;
else
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 50c10ea3c3d..18560d3dbc0 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -95,7 +95,7 @@ static MVert *dm_getVertArray(DerivedMesh *dm)
if (!mvert) {
mvert = CustomData_add_layer(&dm->vertData, CD_MVERT, CD_CALLOC, NULL,
- dm->getNumVerts(dm));
+ dm->getNumVerts(dm));
CustomData_set_layer_flag(&dm->vertData, CD_MVERT, CD_FLAG_TEMPORARY);
dm->copyVertArray(dm, mvert);
}
@@ -109,7 +109,7 @@ static MEdge *dm_getEdgeArray(DerivedMesh *dm)
if (!medge) {
medge = CustomData_add_layer(&dm->edgeData, CD_MEDGE, CD_CALLOC, NULL,
- dm->getNumEdges(dm));
+ dm->getNumEdges(dm));
CustomData_set_layer_flag(&dm->edgeData, CD_MEDGE, CD_FLAG_TEMPORARY);
dm->copyEdgeArray(dm, medge);
}
@@ -146,7 +146,7 @@ static MLoop *dm_getLoopArray(DerivedMesh *dm)
if (!mloop) {
mloop = CustomData_add_layer(&dm->loopData, CD_MLOOP, CD_CALLOC, NULL,
- dm->getNumLoops(dm));
+ dm->getNumLoops(dm));
CustomData_set_layer_flag(&dm->loopData, CD_MLOOP, CD_FLAG_TEMPORARY);
dm->copyLoopArray(dm, mloop);
}
@@ -160,7 +160,7 @@ static MPoly *dm_getPolyArray(DerivedMesh *dm)
if (!mpoly) {
mpoly = CustomData_add_layer(&dm->polyData, CD_MPOLY, CD_CALLOC, NULL,
- dm->getNumPolys(dm));
+ dm->getNumPolys(dm));
CustomData_set_layer_flag(&dm->polyData, CD_MPOLY, CD_FLAG_TEMPORARY);
dm->copyPolyArray(dm, mpoly);
}
@@ -171,7 +171,7 @@ static MPoly *dm_getPolyArray(DerivedMesh *dm)
static MVert *dm_dupVertArray(DerivedMesh *dm)
{
MVert *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumVerts(dm),
- "dm_dupVertArray tmp");
+ "dm_dupVertArray tmp");
if (tmp) dm->copyVertArray(dm, tmp);
@@ -181,7 +181,7 @@ static MVert *dm_dupVertArray(DerivedMesh *dm)
static MEdge *dm_dupEdgeArray(DerivedMesh *dm)
{
MEdge *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumEdges(dm),
- "dm_dupEdgeArray tmp");
+ "dm_dupEdgeArray tmp");
if (tmp) dm->copyEdgeArray(dm, tmp);
@@ -191,7 +191,7 @@ static MEdge *dm_dupEdgeArray(DerivedMesh *dm)
static MFace *dm_dupFaceArray(DerivedMesh *dm)
{
MFace *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumTessFaces(dm),
- "dm_dupFaceArray tmp");
+ "dm_dupFaceArray tmp");
if (tmp) dm->copyTessFaceArray(dm, tmp);
@@ -201,7 +201,7 @@ static MFace *dm_dupFaceArray(DerivedMesh *dm)
static MLoop *dm_dupLoopArray(DerivedMesh *dm)
{
MLoop *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumLoops(dm),
- "dm_dupLoopArray tmp");
+ "dm_dupLoopArray tmp");
if (tmp) dm->copyLoopArray(dm, tmp);
@@ -211,7 +211,7 @@ static MLoop *dm_dupLoopArray(DerivedMesh *dm)
static MPoly *dm_dupPolyArray(DerivedMesh *dm)
{
MPoly *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumPolys(dm),
- "dm_dupPolyArray tmp");
+ "dm_dupPolyArray tmp");
if (tmp) dm->copyPolyArray(dm, tmp);
@@ -295,11 +295,11 @@ void DM_from_template(DerivedMesh *dm, DerivedMesh *source, DerivedMeshType type
int numLoops, int numPolys)
{
CustomData_copy(&source->vertData, &dm->vertData, CD_MASK_DERIVEDMESH,
- CD_CALLOC, numVerts);
+ CD_CALLOC, numVerts);
CustomData_copy(&source->edgeData, &dm->edgeData, CD_MASK_DERIVEDMESH,
- CD_CALLOC, numEdges);
+ CD_CALLOC, numEdges);
CustomData_copy(&source->faceData, &dm->faceData, CD_MASK_DERIVEDMESH,
- CD_CALLOC, numTessFaces);
+ CD_CALLOC, numTessFaces);
CustomData_copy(&source->loopData, &dm->loopData, CD_MASK_DERIVEDMESH,
CD_CALLOC, numLoops);
CustomData_copy(&source->polyData, &dm->polyData, CD_MASK_DERIVEDMESH,
@@ -463,7 +463,7 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob)
/* dm might depend on me, so we need to do everything with a local copy */
Mesh tmp = *me;
int totvert, totedge /*, totface */ /* UNUSED */, totloop, totpoly;
- int did_shapekeys=0;
+ int did_shapekeys = 0;
memset(&tmp.vdata, 0, sizeof(tmp.vdata));
memset(&tmp.edata, 0, sizeof(tmp.edata));
@@ -486,13 +486,13 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob)
int uid;
if (ob) {
- kb = BLI_findlink(&me->key->block, ob->shapenr-1);
+ kb = BLI_findlink(&me->key->block, ob->shapenr - 1);
if (kb) {
uid = kb->uid;
}
else {
printf("%s: error - could not find active shapekey %d!\n",
- __func__, ob->shapenr-1);
+ __func__, ob->shapenr - 1);
uid = INT_MAX;
}
@@ -558,16 +558,16 @@ void DM_to_meshkey(DerivedMesh *dm, Mesh *me, KeyBlock *kb)
float *fp;
MVert *mvert;
- if (totvert==0 || me->totvert==0 || me->totvert!=totvert) return;
+ if (totvert == 0 || me->totvert == 0 || me->totvert != totvert) return;
if (kb->data) MEM_freeN(kb->data);
- kb->data= MEM_callocN(me->key->elemsize*me->totvert, "kb->data");
- kb->totelem= totvert;
+ kb->data = MEM_callocN(me->key->elemsize * me->totvert, "kb->data");
+ kb->totelem = totvert;
- fp= kb->data;
- mvert=dm->getVertDataArray(dm, CD_MVERT);
+ fp = kb->data;
+ mvert = dm->getVertDataArray(dm, CD_MVERT);
- for (a=0; a<kb->totelem; a++, fp+=3, mvert++) {
+ for (a = 0; a < kb->totelem; a++, fp += 3, mvert++) {
copy_v3_v3(fp, mvert->co);
}
}
@@ -669,24 +669,24 @@ void DM_set_tessface_data(DerivedMesh *dm, int index, int type, void *data)
}
void DM_copy_vert_data(DerivedMesh *source, DerivedMesh *dest,
- int source_index, int dest_index, int count)
+ int source_index, int dest_index, int count)
{
CustomData_copy_data(&source->vertData, &dest->vertData,
- source_index, dest_index, count);
+ source_index, dest_index, count);
}
void DM_copy_edge_data(DerivedMesh *source, DerivedMesh *dest,
- int source_index, int dest_index, int count)
+ int source_index, int dest_index, int count)
{
CustomData_copy_data(&source->edgeData, &dest->edgeData,
- source_index, dest_index, count);
+ source_index, dest_index, count);
}
void DM_copy_tessface_data(DerivedMesh *source, DerivedMesh *dest,
- int source_index, int dest_index, int count)
+ int source_index, int dest_index, int count)
{
CustomData_copy_data(&source->faceData, &dest->faceData,
- source_index, dest_index, count);
+ source_index, dest_index, count);
}
void DM_copy_loop_data(DerivedMesh *source, DerivedMesh *dest,
@@ -729,29 +729,29 @@ void DM_free_poly_data(struct DerivedMesh *dm, int index, int count)
}
void DM_interp_vert_data(DerivedMesh *source, DerivedMesh *dest,
- int *src_indices, float *weights,
- int count, int dest_index)
+ int *src_indices, float *weights,
+ int count, int dest_index)
{
CustomData_interp(&source->vertData, &dest->vertData, src_indices,
- weights, NULL, count, dest_index);
+ weights, NULL, count, dest_index);
}
void DM_interp_edge_data(DerivedMesh *source, DerivedMesh *dest,
- int *src_indices,
- float *weights, EdgeVertWeight *vert_weights,
- int count, int dest_index)
+ int *src_indices,
+ float *weights, EdgeVertWeight *vert_weights,
+ int count, int dest_index)
{
CustomData_interp(&source->edgeData, &dest->edgeData, src_indices,
- weights, (float*)vert_weights, count, dest_index);
+ weights, (float *)vert_weights, count, dest_index);
}
void DM_interp_tessface_data(DerivedMesh *source, DerivedMesh *dest,
- int *src_indices,
- float *weights, FaceVertWeight *vert_weights,
- int count, int dest_index)
+ int *src_indices,
+ float *weights, FaceVertWeight *vert_weights,
+ int count, int dest_index)
{
CustomData_interp(&source->faceData, &dest->faceData, src_indices,
- weights, (float*)vert_weights, count, dest_index);
+ weights, (float *)vert_weights, count, dest_index);
}
void DM_swap_tessface_data(DerivedMesh *dm, int index, const int *corner_indices)
@@ -801,16 +801,16 @@ DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob,
DerivedMesh *dm;
KeyBlock *kb;
- md->scene= scene;
+ md->scene = scene;
- if (!(md->mode&eModifierMode_Realtime)) return NULL;
+ if (!(md->mode & eModifierMode_Realtime)) return NULL;
if (mti->isDisabled && mti->isDisabled(md, 0)) return NULL;
- if (build_shapekey_layers && me->key && (kb = BLI_findlink(&me->key->block, ob->shapenr-1))) {
+ if (build_shapekey_layers && me->key && (kb = BLI_findlink(&me->key->block, ob->shapenr - 1))) {
key_to_mesh(kb, me);
}
- if (mti->type==eModifierTypeType_OnlyDeform) {
+ if (mti->type == eModifierTypeType_OnlyDeform) {
int numVerts;
float (*deformedVerts)[3] = mesh_getVertexCos(me, &numVerts);
@@ -846,13 +846,13 @@ static float *get_editbmesh_orco_verts(BMEditMesh *em)
/* these may not really be the orco's, but it's only for preview.
* could be solver better once, but isn't simple */
- totvert= em->bm->totvert;
+ totvert = em->bm->totvert;
- orco = MEM_mallocN(sizeof(float)*3*totvert, "BMEditMesh Orco");
+ orco = MEM_mallocN(sizeof(float) * 3 * totvert, "BMEditMesh Orco");
eve = BM_iter_new(&iter, em->bm, BM_VERTS_OF_MESH, NULL);
- for (a=0; eve; eve=BM_iter_step(&iter), a+=3) {
- copy_v3_v3(orco+a, eve->co);
+ for (a = 0; eve; eve = BM_iter_step(&iter), a += 3) {
+ copy_v3_v3(orco + a, eve->co);
}
return orco;
@@ -861,11 +861,11 @@ static float *get_editbmesh_orco_verts(BMEditMesh *em)
/* orco custom data layer */
static void *get_orco_coords_dm(Object *ob, BMEditMesh *em, int layer, int *free)
{
- *free= 0;
+ *free = 0;
if (layer == CD_ORCO) {
/* get original coordinates */
- *free= 1;
+ *free = 1;
if (em)
return (float(*)[3])get_editbmesh_orco_verts(em);
@@ -877,7 +877,7 @@ static void *get_orco_coords_dm(Object *ob, BMEditMesh *em, int layer, int *free
* by a more flexible customdata system, but not simple */
if (!em) {
ClothModifierData *clmd = (ClothModifierData *)modifiers_findByType(ob, eModifierType_Cloth);
- KeyBlock *kb= key_get_keyblock(ob_get_key(ob), clmd->sim_parms->shapekey_rest);
+ KeyBlock *kb = key_get_keyblock(ob_get_key(ob), clmd->sim_parms->shapekey_rest);
if (kb->data)
return kb->data;
@@ -895,10 +895,10 @@ static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, BMEditMesh *em, int lay
float (*orco)[3];
int free;
- if (em) dm= CDDM_from_BMEditMesh(em, me, FALSE, FALSE);
- else dm= CDDM_from_mesh(me, ob);
+ if (em) dm = CDDM_from_BMEditMesh(em, me, FALSE, FALSE);
+ else dm = CDDM_from_mesh(me, ob);
- orco= get_orco_coords_dm(ob, em, layer, &free);
+ orco = get_orco_coords_dm(ob, em, layer, &free);
if (orco) {
CDDM_apply_vert_coords(dm, orco);
@@ -911,16 +911,16 @@ static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, BMEditMesh *em, int lay
}
static void add_orco_dm(Object *ob, BMEditMesh *em, DerivedMesh *dm,
- DerivedMesh *orcodm, int layer)
+ DerivedMesh *orcodm, int layer)
{
float (*orco)[3], (*layerorco)[3];
int totvert, free;
- totvert= dm->getNumVerts(dm);
+ totvert = dm->getNumVerts(dm);
if (orcodm) {
- orco= MEM_callocN(sizeof(float)*3*totvert, "dm orco");
- free= 1;
+ orco = MEM_callocN(sizeof(float) * 3 * totvert, "dm orco");
+ free = 1;
if (orcodm->getNumVerts(orcodm) == totvert)
orcodm->getVertCos(orcodm, orco);
@@ -928,7 +928,7 @@ static void add_orco_dm(Object *ob, BMEditMesh *em, DerivedMesh *dm,
dm->getVertCos(dm, orco);
}
else
- orco= get_orco_coords_dm(ob, em, layer, &free);
+ orco = get_orco_coords_dm(ob, em, layer, &free);
if (orco) {
if (layer == CD_ORCO)
@@ -939,7 +939,7 @@ static void add_orco_dm(Object *ob, BMEditMesh *em, DerivedMesh *dm,
layerorco = DM_get_vert_data_layer(dm, layer);
}
- memcpy(layerorco, orco, sizeof(float)*3*totvert);
+ memcpy(layerorco, orco, sizeof(float) * 3 * totvert);
if (free) MEM_freeN(orco);
}
}
@@ -954,41 +954,41 @@ static void add_orco_dm(Object *ob, BMEditMesh *em, DerivedMesh *dm,
void weight_to_rgb(float r_rgb[3], const float weight)
{
- const float blend= ((weight/2.0f)+0.5f);
+ const float blend = ((weight / 2.0f) + 0.5f);
- if (weight<=0.25f) { // blue->cyan
- r_rgb[0]= 0.0f;
- r_rgb[1]= blend*weight*4.0f;
- r_rgb[2]= blend;
+ if (weight <= 0.25f) { // blue->cyan
+ r_rgb[0] = 0.0f;
+ r_rgb[1] = blend * weight * 4.0f;
+ r_rgb[2] = blend;
}
- else if (weight<=0.50f) { // cyan->green
- r_rgb[0]= 0.0f;
- r_rgb[1]= blend;
- r_rgb[2]= blend*(1.0f-((weight-0.25f)*4.0f));
+ else if (weight <= 0.50f) { // cyan->green
+ r_rgb[0] = 0.0f;
+ r_rgb[1] = blend;
+ r_rgb[2] = blend * (1.0f - ((weight - 0.25f) * 4.0f));
}
- else if (weight <= 0.75f) { // green->yellow
- r_rgb[0]= blend * ((weight-0.50f)*4.0f);
- r_rgb[1]= blend;
- r_rgb[2]= 0.0f;
+ else if (weight <= 0.75f) { // green->yellow
+ r_rgb[0] = blend * ((weight - 0.50f) * 4.0f);
+ r_rgb[1] = blend;
+ r_rgb[2] = 0.0f;
}
else if (weight <= 1.0f) { // yellow->red
- r_rgb[0]= blend;
- r_rgb[1]= blend * (1.0f-((weight-0.75f)*4.0f));
- r_rgb[2]= 0.0f;
+ r_rgb[0] = blend;
+ r_rgb[1] = blend * (1.0f - ((weight - 0.75f) * 4.0f));
+ r_rgb[2] = 0.0f;
}
else {
/* exceptional value, unclamped or nan,
* avoid uninitialized memory use */
- r_rgb[0]= 1.0f;
- r_rgb[1]= 0.0f;
- r_rgb[2]= 1.0f;
+ r_rgb[0] = 1.0f;
+ r_rgb[1] = 0.0f;
+ r_rgb[2] = 1.0f;
}
}
/* draw_flag's for calc_weightpaint_vert_color */
enum {
- CALC_WP_MULTIPAINT= (1<<0),
- CALC_WP_AUTO_NORMALIZE= (1<<1)
+ CALC_WP_MULTIPAINT = (1 << 0),
+ CALC_WP_AUTO_NORMALIZE = (1 << 1)
};
static void weightpaint_color(unsigned char r_col[4], ColorBand *coba, const float input)
@@ -1020,13 +1020,13 @@ static void calc_weightpaint_vert_color(
{
float input = 0.0f;
- int make_black= FALSE;
+ int make_black = FALSE;
if ((selected > 1) && (draw_flag & CALC_WP_MULTIPAINT)) {
- int was_a_nonzero= FALSE;
+ int was_a_nonzero = FALSE;
unsigned int i;
- MDeformWeight *dw= dv->dw;
+ MDeformWeight *dw = dv->dw;
for (i = dv->totweight; i != 0; i--, dw++) {
/* in multipaint, get the average if auto normalize is inactive
* get the sum if it is active */
@@ -1034,7 +1034,7 @@ static void calc_weightpaint_vert_color(
if (dg_flags[dw->def_nr]) {
if (dw->weight) {
input += dw->weight;
- was_a_nonzero= TRUE;
+ was_a_nonzero = TRUE;
}
}
}
@@ -1050,7 +1050,7 @@ static void calc_weightpaint_vert_color(
}
else {
/* default, non tricky behavior */
- input= defvert_find_weight(dv, defbase_act);
+ input = defvert_find_weight(dv, defbase_act);
}
if (make_black) { /* TODO, theme color */
@@ -1065,11 +1065,11 @@ static void calc_weightpaint_vert_color(
}
}
-static ColorBand *stored_cb= NULL;
+static ColorBand *stored_cb = NULL;
void vDM_ColorBand_store(ColorBand *coba)
{
- stored_cb= coba;
+ stored_cb = coba;
}
/* return an array of vertex weight colors, caller must free.
@@ -1081,7 +1081,7 @@ static unsigned char *calc_weightpaint_vert_array(Object *ob, DerivedMesh *dm, i
{
MDeformVert *dv = DM_get_vert_data_layer(dm, CD_MDEFORMVERT);
int numVerts = dm->getNumVerts(dm);
- unsigned char *wtcol_v = MEM_mallocN (sizeof(unsigned char) * numVerts * 4, "weightmap_v");
+ unsigned char *wtcol_v = MEM_mallocN(sizeof(unsigned char) * numVerts * 4, "weightmap_v");
if (dv) {
unsigned char *wc = wtcol_v;
@@ -1089,7 +1089,7 @@ static unsigned char *calc_weightpaint_vert_array(Object *ob, DerivedMesh *dm, i
/* variables for multipaint */
const int defbase_tot = BLI_countlist(&ob->defbase);
- const int defbase_act = ob->actdef-1;
+ const int defbase_act = ob->actdef - 1;
char *dg_flags = MEM_mallocN(defbase_tot * sizeof(char), __func__);
const int selected = get_selected_defgroups(ob, dg_flags, defbase_tot);
@@ -1128,7 +1128,7 @@ static unsigned char *calc_colors_from_weights_array(const int num, float *weigh
void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag,
float *weights, int num, const int *indices)
{
- ColorBand *coba= stored_cb; /* warning, not a local var */
+ ColorBand *coba = stored_cb; /* warning, not a local var */
unsigned char *wtcol_v;
#if 0 /* See coment below. */
@@ -1148,7 +1148,7 @@ void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag,
int i, j;
#if 0 /* See comment below */
- /* If no CD_PREVIEW_MCOL existed yet, add a new one! */
+ /* If no CD_PREVIEW_MCOL existed yet, add a new one! */
if (!wtcol_f)
wtcol_f = CustomData_add_layer(&dm->faceData, CD_PREVIEW_MCOL, CD_CALLOC, NULL, numFaces);
@@ -1170,7 +1170,7 @@ void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag,
/* If indices is not NULL, it means we do not have weights for all vertices,
* so we must create them (and set them to zero)... */
if (indices) {
- w = MEM_callocN(sizeof(float)*numVerts, "Temp weight array DM_update_weight_mcol");
+ w = MEM_callocN(sizeof(float) * numVerts, "Temp weight array DM_update_weight_mcol");
i = num;
while (i--)
w[indices[i]] = weights[i];
@@ -1196,9 +1196,9 @@ void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag,
for (i = 0; i < numFaces; i++, mf++, wtcol_f_step += (4 * 4)) {
/*origindex being NULL means we're operating on original mesh data*/
#if 0
- unsigned int fidx= mf->v4 ? 3:2;
+ unsigned int fidx = mf->v4 ? 3 : 2;
-#else /* better zero out triangles 4th component. else valgrind complains when the buffer's copied */
+#else /* better zero out triangles 4th component. else valgrind complains when the buffer's copied */
unsigned int fidx;
if (mf->v4) {
fidx = 3;
@@ -1220,7 +1220,7 @@ void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag,
if (!wtcol_l) {
BLI_array_declare(wtcol_l);
totloop = 0;
- for (i=0; i<dm->numPolyData; i++, mp++) {
+ for (i = 0; i < dm->numPolyData; i++, mp++) {
ml = mloop + mp->loopstart;
BLI_array_grow_items(wtcol_l, mp->totloop);
@@ -1233,10 +1233,10 @@ void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag,
}
else {
totloop = 0;
- for (i=0; i < dm->numPolyData; i++, mp++) {
+ for (i = 0; i < dm->numPolyData; i++, mp++) {
ml = mloop + mp->loopstart;
- for (j=0; j < mp->totloop; j++, ml++, totloop++) {
+ for (j = 0; j < mp->totloop; j++, ml++, totloop++) {
copy_v4_v4_char((char *)&wtcol_l[totloop],
(char *)&wtcol_v[4 * ml->v]);
}
@@ -1258,11 +1258,11 @@ static void shapekey_layers_to_keyblocks(DerivedMesh *dm, Mesh *me, int actshape
return;
tot = CustomData_number_of_layers(&dm->vertData, CD_SHAPEKEY);
- for (i=0; i<tot; i++) {
+ for (i = 0; i < tot; i++) {
CustomDataLayer *layer = &dm->vertData.layers[CustomData_get_layer_index_n(&dm->vertData, CD_SHAPEKEY, i)];
float (*cos)[3], (*kbcos)[3];
- for (kb=me->key->block.first; kb; kb=kb->next) {
+ for (kb = me->key->block.first; kb; kb = kb->next) {
if (kb->uid == layer->uid)
break;
}
@@ -1278,28 +1278,28 @@ static void shapekey_layers_to_keyblocks(DerivedMesh *dm, Mesh *me, int actshape
cos = CustomData_get_layer_n(&dm->vertData, CD_SHAPEKEY, i);
kb->totelem = dm->numVertData;
- kb->data = kbcos = MEM_mallocN(sizeof(float)*3*kb->totelem, "kbcos DerivedMesh.c");
+ kb->data = kbcos = MEM_mallocN(sizeof(float) * 3 * kb->totelem, "kbcos DerivedMesh.c");
if (kb->uid == actshape_uid) {
MVert *mvert = dm->getVertArray(dm);
- for (j=0; j<dm->numVertData; j++, kbcos++, mvert++) {
+ for (j = 0; j < dm->numVertData; j++, kbcos++, mvert++) {
copy_v3_v3(*kbcos, mvert->co);
}
}
else {
- for (j=0; j<kb->totelem; j++, cos++, kbcos++) {
+ for (j = 0; j < kb->totelem; j++, cos++, kbcos++) {
copy_v3_v3(*kbcos, *cos);
}
}
}
- for (kb=me->key->block.first; kb; kb=kb->next) {
+ for (kb = me->key->block.first; kb; kb = kb->next) {
if (kb->totelem != dm->numVertData) {
if (kb->data)
MEM_freeN(kb->data);
kb->totelem = dm->numVertData;
- kb->data = MEM_callocN(sizeof(float)*3*kb->totelem, "kb->data derivedmesh.c");
+ kb->data = MEM_callocN(sizeof(float) * 3 * kb->totelem, "kb->data derivedmesh.c");
fprintf(stderr, "%s: lost a shapekey layer: '%s'! (bmesh internal error)\n", __func__, kb->name);
}
}
@@ -1319,11 +1319,11 @@ static void add_shapekey_layers(DerivedMesh *dm, Mesh *me, Object *UNUSED(ob))
if (me->totvert != dm->getNumVerts(dm)) {
fprintf(stderr,
"%s: vertex size mismatch (mesh/dm) '%s' (%d != %d)\n",
- __func__, me->id.name+2, me->totvert, dm->getNumVerts(dm));
+ __func__, me->id.name + 2, me->totvert, dm->getNumVerts(dm));
return;
}
- for (i=0, kb=key->block.first; kb; kb=kb->next, i++) {
+ for (i = 0, kb = key->block.first; kb; kb = kb->next, i++) {
int ci;
float *array;
@@ -1351,10 +1351,10 @@ static void add_shapekey_layers(DerivedMesh *dm, Mesh *me, Object *UNUSED(ob))
* - apply deform modifiers and input vertexco
*/
static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
- DerivedMesh **deform_r, DerivedMesh **final_r,
- int useRenderParams, int useDeform,
- int needMapping, CustomDataMask dataMask,
- int index, int useCache, int build_shapekey_layers)
+ DerivedMesh **deform_r, DerivedMesh **final_r,
+ int useRenderParams, int useDeform,
+ int needMapping, CustomDataMask dataMask,
+ int index, int useCache, int build_shapekey_layers)
{
Mesh *me = ob->data;
ModifierData *firstmd, *md, *previewmd = NULL;
@@ -1362,17 +1362,17 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
/* XXX Always copying POLYINDEX, else tessellated data are no more valid! */
CustomDataMask mask, nextmask, append_mask = CD_MASK_POLYINDEX;
float (*deformedVerts)[3] = NULL;
- DerivedMesh *dm=NULL, *orcodm, *clothorcodm, *finaldm;
+ DerivedMesh *dm = NULL, *orcodm, *clothorcodm, *finaldm;
int numVerts = me->totvert;
int required_mode;
- int isPrevDeform= FALSE;
+ int isPrevDeform = FALSE;
int skipVirtualArmature = (useDeform < 0);
- MultiresModifierData *mmd= get_multires_modifier(scene, ob, 0);
+ MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
int has_multires = mmd != NULL, multires_applied = 0;
int sculpt_mode = ob->mode & OB_MODE_SCULPT && ob->sculpt;
- const int draw_flag= ((scene->toolsettings->multipaint ? CALC_WP_MULTIPAINT : 0) |
- (scene->toolsettings->auto_normalize ? CALC_WP_AUTO_NORMALIZE : 0));
+ const int draw_flag = ((scene->toolsettings->multipaint ? CALC_WP_MULTIPAINT : 0) |
+ (scene->toolsettings->auto_normalize ? CALC_WP_AUTO_NORMALIZE : 0));
/* Generic preview only in object mode! */
const int do_mod_mcol = (ob->mode == OB_MODE_OBJECT);
#if 0 /* XXX Will re-enable this when we have global mod stack options. */
@@ -1385,9 +1385,9 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
ModifierApplyFlag app_flags = useRenderParams ? MOD_APPLY_RENDER : 0;
ModifierApplyFlag deform_app_flags = app_flags;
- if (useCache)
+ if (useCache)
app_flags |= MOD_APPLY_USECACHE;
- if (useDeform)
+ if (useDeform)
deform_app_flags |= MOD_APPLY_USECACHE;
if (mmd && !mmd->sculptlvl)
@@ -1429,10 +1429,10 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
deformedVerts = inputVertexCos;
/* Apply all leading deforming modifiers */
- for (;md; md = md->next, curr = curr->next) {
+ for (; md; md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- md->scene= scene;
+ md->scene = scene;
if (!modifier_isEnabled(scene, md, required_mode)) continue;
if (useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
@@ -1484,10 +1484,10 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
orcodm = NULL;
clothorcodm = NULL;
- for (;md; md = md->next, curr = curr->next) {
+ for (; md; md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- md->scene= scene;
+ md->scene = scene;
if (!modifier_isEnabled(scene, md, required_mode)) continue;
if (mti->type == eModifierTypeType_OnlyDeform && !useDeform) continue;
@@ -1496,13 +1496,13 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
continue;
}
if (sculpt_mode && (!has_multires || multires_applied)) {
- int unsupported= 0;
+ int unsupported = 0;
if (scene->toolsettings->sculpt->flags & SCULPT_ONLY_DEFORM)
- unsupported|= mti->type != eModifierTypeType_OnlyDeform;
+ unsupported |= mti->type != eModifierTypeType_OnlyDeform;
- unsupported|= md->type == eModifierType_Multires && ((MultiresModifierData*)md)->sculptlvl==0;
- unsupported|= multires_applied;
+ unsupported |= md->type == eModifierType_Multires && ((MultiresModifierData *)md)->sculptlvl == 0;
+ unsupported |= multires_applied;
if (unsupported) {
modifier_setError(md, "%s", TIP_("Not supported in sculpt mode."));
@@ -1536,7 +1536,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
*/
numVerts = dm->getNumVerts(dm);
deformedVerts =
- MEM_mallocN(sizeof(*deformedVerts) * numVerts, "dfmv");
+ MEM_mallocN(sizeof(*deformedVerts) * numVerts, "dfmv");
dm->getVertCos(dm, deformedVerts);
}
else {
@@ -1561,9 +1561,9 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
/* determine which data layers are needed by following modifiers */
if (curr->next)
- nextmask= curr->next->mask;
+ nextmask = curr->next->mask;
else
- nextmask= dataMask;
+ nextmask = dataMask;
/* apply vertex coordinates or build a DerivedMesh as necessary */
if (dm) {
@@ -1611,7 +1611,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
/* set the DerivedMesh to only copy needed data */
- mask= curr->mask;
+ mask = curr->mask;
/* needMapping check here fixes bug [#28112], otherwise its
* possible that it wont be copied */
mask |= append_mask;
@@ -1648,7 +1648,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
/* create an orco derivedmesh in parallel */
if (nextmask & CD_MASK_ORCO) {
if (!orcodm)
- orcodm= create_orco_dm(ob, me, NULL, CD_ORCO);
+ orcodm = create_orco_dm(ob, me, NULL, CD_ORCO);
nextmask &= ~CD_MASK_ORCO;
DM_set_only_copy(orcodm, nextmask | CD_MASK_ORIGINDEX);
@@ -1664,7 +1664,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
/* create cloth orco derivedmesh in parallel */
if (nextmask & CD_MASK_CLOTH_ORCO) {
if (!clothorcodm)
- clothorcodm= create_orco_dm(ob, me, NULL, CD_CLOTH_ORCO);
+ clothorcodm = create_orco_dm(ob, me, NULL, CD_CLOTH_ORCO);
nextmask &= ~CD_MASK_CLOTH_ORCO;
DM_set_only_copy(clothorcodm, nextmask | CD_MASK_ORIGINDEX);
@@ -1688,7 +1688,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
}
}
- isPrevDeform= (mti->type == eModifierTypeType_OnlyDeform);
+ isPrevDeform = (mti->type == eModifierTypeType_OnlyDeform);
/* grab modifiers until index i */
if ((index >= 0) && (modifiers_indexInObject(ob, md) >= index))
@@ -1698,7 +1698,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
multires_applied = 1;
}
- for (md=firstmd; md; md=md->next)
+ for (md = firstmd; md; md = md->next)
modifier_freeTemporaryData(md);
/* Yay, we are done. If we have a DerivedMesh and deformed vertices
@@ -1729,18 +1729,18 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
#endif
}
else {
- int recalc_normals= 0;
+ int recalc_normals = 0;
finaldm = CDDM_from_mesh(me, ob);
if (build_shapekey_layers) {
add_shapekey_layers(finaldm, me, ob);
- recalc_normals= 1;
+ recalc_normals = 1;
}
if (deformedVerts) {
CDDM_apply_vert_coords(finaldm, deformedVerts);
- recalc_normals= 1;
+ recalc_normals = 1;
}
if (recalc_normals) {
@@ -1819,10 +1819,10 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
/* NavMesh - this is a hack but saves having a NavMesh modifier */
if ((ob->gameflag & OB_NAVMESH) && (finaldm->type == DM_TYPE_CDDM)) {
DerivedMesh *tdm;
- tdm= navmesh_dm_createNavMeshForVisualization(finaldm);
+ tdm = navmesh_dm_createNavMeshForVisualization(finaldm);
if (finaldm != tdm) {
finaldm->release(finaldm);
- finaldm= tdm;
+ finaldm = tdm;
}
}
#endif /* WITH_GAMEENGINE */
@@ -1837,20 +1837,20 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
if (deformedVerts && deformedVerts != inputVertexCos)
MEM_freeN(deformedVerts);
- BLI_linklist_free((LinkNode*)datamasks, NULL);
+ BLI_linklist_free((LinkNode *)datamasks, NULL);
}
-float (*editbmesh_get_vertex_cos(BMEditMesh *em, int *numVerts_r))[3]
+float (*editbmesh_get_vertex_cos(BMEditMesh * em, int *numVerts_r))[3]
{
int i, numVerts = *numVerts_r = em->bm->totvert;
float (*cos)[3];
BMIter iter;
BMVert *eve;
- cos = MEM_mallocN(sizeof(float)*3*numVerts, "vertexcos");
+ cos = MEM_mallocN(sizeof(float) * 3 * numVerts, "vertexcos");
eve = BM_iter_new(&iter, em->bm, BM_VERTS_OF_MESH, NULL);
- for (i=0; eve; eve=BM_iter_step(&iter), i++) {
+ for (i = 0; eve; eve = BM_iter_step(&iter), i++) {
copy_v3_v3(cos[i], eve->co);
}
@@ -1872,8 +1872,8 @@ int editbmesh_modifier_is_enabled(Scene *scene, ModifierData *md, DerivedMesh *d
}
static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, DerivedMesh **cage_r,
- DerivedMesh **final_r,
- CustomDataMask dataMask)
+ DerivedMesh **final_r,
+ CustomDataMask dataMask)
{
ModifierData *md;
float (*deformedVerts)[3] = NULL;
@@ -1898,7 +1898,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
for (i = 0; md; i++, md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- md->scene= scene;
+ md->scene = scene;
if (!editbmesh_modifier_is_enabled(scene, md, dm))
continue;
@@ -1925,7 +1925,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
*/
numVerts = dm->getNumVerts(dm);
deformedVerts =
- MEM_mallocN(sizeof(*deformedVerts) * numVerts, "dfmv");
+ MEM_mallocN(sizeof(*deformedVerts) * numVerts, "dfmv");
dm->getVertCos(dm, deformedVerts);
}
else {
@@ -1968,10 +1968,10 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
}
/* create an orco derivedmesh in parallel */
- mask= curr->mask;
+ mask = curr->mask;
if (mask & CD_MASK_ORCO) {
if (!orcodm)
- orcodm= create_orco_dm(ob, ob->data, em, CD_ORCO);
+ orcodm = create_orco_dm(ob, ob->data, em, CD_ORCO);
mask &= ~CD_MASK_ORCO;
DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
@@ -1989,7 +1989,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
}
/* set the DerivedMesh to only copy needed data */
- mask= curr->mask; /* CD_MASK_ORCO may have been cleared above */
+ mask = curr->mask; /* CD_MASK_ORCO may have been cleared above */
DM_set_only_copy(dm, mask | CD_MASK_ORIGINDEX);
@@ -2028,13 +2028,13 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
}
else {
*cage_r =
- getEditDerivedBMesh(em, ob,
- deformedVerts ? MEM_dupallocN(deformedVerts) : NULL);
+ getEditDerivedBMesh(em, ob,
+ deformedVerts ? MEM_dupallocN(deformedVerts) : NULL);
}
}
}
- BLI_linklist_free((LinkNode*)datamasks, NULL);
+ BLI_linklist_free((LinkNode *)datamasks, NULL);
/* Yay, we are done. If we have a DerivedMesh and deformed vertices need
* to apply these back onto the DerivedMesh. If we have no DerivedMesh
@@ -2093,9 +2093,9 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
static void clear_mesh_caches(Object *ob)
{
- Mesh *me= ob->data;
+ Mesh *me = ob->data;
- /* also serves as signal to remake texspace */
+ /* also serves as signal to remake texspace */
if (ob->bb) {
MEM_freeN(ob->bb);
ob->bb = NULL;
@@ -2110,12 +2110,12 @@ static void clear_mesh_caches(Object *ob)
if (ob->derivedFinal) {
ob->derivedFinal->needsFree = 1;
ob->derivedFinal->release(ob->derivedFinal);
- ob->derivedFinal= NULL;
+ ob->derivedFinal = NULL;
}
if (ob->derivedDeform) {
ob->derivedDeform->needsFree = 1;
ob->derivedDeform->release(ob->derivedDeform);
- ob->derivedDeform= NULL;
+ ob->derivedDeform = NULL;
}
if (ob->sculpt) {
@@ -2126,18 +2126,18 @@ static void clear_mesh_caches(Object *ob)
static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask,
int build_shapekey_layers)
{
- Object *obact = scene->basact?scene->basact->object:NULL;
+ Object *obact = scene->basact ? scene->basact->object : NULL;
int editing = paint_facesel_test(ob);
/* weight paint and face select need original indices because of selection buffer drawing */
- int needMapping = (ob==obact) && (editing || (ob->mode & (OB_MODE_WEIGHT_PAINT|OB_MODE_VERTEX_PAINT|OB_MODE_TEXTURE_PAINT)));
+ int needMapping = (ob == obact) && (editing || (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_TEXTURE_PAINT)));
clear_mesh_caches(ob);
mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
- &ob->derivedFinal, 0, 1,
- needMapping, dataMask, -1, 1, build_shapekey_layers);
+ &ob->derivedFinal, 0, 1,
+ needMapping, dataMask, -1, 1, build_shapekey_layers);
- DM_set_object_boundbox (ob, ob->derivedFinal);
+ DM_set_object_boundbox(ob, ob->derivedFinal);
ob->derivedFinal->needsFree = 0;
ob->derivedDeform->needsFree = 0;
@@ -2146,7 +2146,7 @@ static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask,
if ((ob->mode & OB_MODE_SCULPT) && ob->sculpt) {
/* create PBVH immediately (would be created on the fly too,
* but this avoids waiting on first stroke) */
- ob->sculpt->pbvh= ob->derivedFinal->getPBVH(ob, ob->derivedFinal);
+ ob->sculpt->pbvh = ob->derivedFinal->getPBVH(ob, ob->derivedFinal);
}
}
@@ -2155,7 +2155,7 @@ static void editbmesh_build_data(Scene *scene, Object *obedit, BMEditMesh *em, C
clear_mesh_caches(obedit);
if (em->derivedFinal) {
- if (em->derivedFinal!=em->derivedCage) {
+ if (em->derivedFinal != em->derivedCage) {
em->derivedFinal->needsFree = 1;
em->derivedFinal->release(em->derivedFinal);
}
@@ -2168,7 +2168,7 @@ static void editbmesh_build_data(Scene *scene, Object *obedit, BMEditMesh *em, C
}
editbmesh_calc_modifiers(scene, obedit, em, &em->derivedCage, &em->derivedFinal, dataMask);
- DM_set_object_boundbox (obedit, em->derivedFinal);
+ DM_set_object_boundbox(obedit, em->derivedFinal);
em->lastDataMask = dataMask;
em->derivedFinal->needsFree = 0;
@@ -2238,7 +2238,7 @@ DerivedMesh *mesh_create_derived_view(Scene *scene, Object *ob, CustomDataMask d
}
DerivedMesh *mesh_create_derived_no_deform(Scene *scene, Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
+ CustomDataMask dataMask)
{
DerivedMesh *final;
@@ -2248,7 +2248,7 @@ DerivedMesh *mesh_create_derived_no_deform(Scene *scene, Object *ob, float (*ver
}
DerivedMesh *mesh_create_derived_no_virtual(Scene *scene, Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
+ CustomDataMask dataMask)
{
DerivedMesh *final;
@@ -2258,7 +2258,7 @@ DerivedMesh *mesh_create_derived_no_virtual(Scene *scene, Object *ob, float (*ve
}
DerivedMesh *mesh_create_derived_physics(Scene *scene, Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
+ CustomDataMask dataMask)
{
DerivedMesh *final;
@@ -2268,8 +2268,8 @@ DerivedMesh *mesh_create_derived_physics(Scene *scene, Object *ob, float (*vertC
}
DerivedMesh *mesh_create_derived_no_deform_render(Scene *scene, Object *ob,
- float (*vertCos)[3],
- CustomDataMask dataMask)
+ float (*vertCos)[3],
+ CustomDataMask dataMask)
{
DerivedMesh *final;
@@ -2281,7 +2281,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(Scene *scene, Object *ob,
/***/
DerivedMesh *editbmesh_get_derived_cage_and_final(Scene *scene, Object *obedit, BMEditMesh *em, DerivedMesh **final_r,
- CustomDataMask dataMask)
+ CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
@@ -2323,13 +2323,13 @@ static void make_vertexcosnos__mapFunc(void *userData, int index, const float co
{
float *vec = userData;
- vec+= 6*index;
+ vec += 6 * index;
/* check if we've been here before (normal should not be 0) */
if (vec[3] || vec[4] || vec[5]) return;
copy_v3_v3(vec, co);
- vec+= 3;
+ vec += 3;
if (no_f) {
copy_v3_v3(vec, no_f);
}
@@ -2345,27 +2345,27 @@ static void make_vertexcosnos__mapFunc(void *userData, int index, const float co
float *mesh_get_mapped_verts_nors(Scene *scene, Object *ob)
{
- Mesh *me= ob->data;
+ Mesh *me = ob->data;
DerivedMesh *dm;
float *vertexcosnos;
/* lets prevent crashing... */
- if (ob->type!=OB_MESH || me->totvert==0)
+ if (ob->type != OB_MESH || me->totvert == 0)
return NULL;
- dm= mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH|CD_MASK_ORIGINDEX);
- vertexcosnos= MEM_callocN(6*sizeof(float)*me->totvert, "vertexcosnos map");
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
+ vertexcosnos = MEM_callocN(6 * sizeof(float) * me->totvert, "vertexcosnos map");
if (dm->foreachMappedVert) {
dm->foreachMappedVert(dm, make_vertexcosnos__mapFunc, vertexcosnos);
}
else {
- float *fp= vertexcosnos;
+ float *fp = vertexcosnos;
int a;
- for (a=0; a< me->totvert; a++, fp+=6) {
+ for (a = 0; a < me->totvert; a++, fp += 6) {
dm->getVertCo(dm, a, fp);
- dm->getVertNo(dm, a, fp+3);
+ dm->getVertNo(dm, a, fp + 3);
}
}
@@ -2375,14 +2375,13 @@ float *mesh_get_mapped_verts_nors(Scene *scene, Object *ob)
/* ******************* GLSL ******************** */
-typedef struct
-{
- float * precomputedFaceNormals;
- MTFace * mtface; // texture coordinates
- MFace * mface; // indices
- MVert * mvert; // vertices & normals
+typedef struct {
+ float *precomputedFaceNormals;
+ MTFace *mtface; // texture coordinates
+ MFace *mface; // indices
+ MVert *mvert; // vertices & normals
float (*orco)[3];
- float (*tangent)[4]; // destination
+ float (*tangent)[4]; // destination
int numTessFaces;
} SGLSLMeshToTangent;
@@ -2390,56 +2389,56 @@ typedef struct
// interface
#include "mikktspace.h"
-static int GetNumFaces(const SMikkTSpaceContext * pContext)
+static int GetNumFaces(const SMikkTSpaceContext *pContext)
{
- SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
return pMesh->numTessFaces;
}
-static int GetNumVertsOfFace(const SMikkTSpaceContext * pContext, const int face_num)
+static int GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
{
- SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
- return pMesh->mface[face_num].v4!=0 ? 4 : 3;
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ return pMesh->mface[face_num].v4 != 0 ? 4 : 3;
}
-static void GetPosition(const SMikkTSpaceContext * pContext, float fPos[], const int face_num, const int vert_index)
+static void GetPosition(const SMikkTSpaceContext *pContext, float fPos[], const int face_num, const int vert_index)
{
//assert(vert_index>=0 && vert_index<4);
- SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
- const float *co= pMesh->mvert[(&pMesh->mface[face_num].v1)[vert_index]].co;
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ const float *co = pMesh->mvert[(&pMesh->mface[face_num].v1)[vert_index]].co;
copy_v3_v3(fPos, co);
}
-static void GetTextureCoordinate(const SMikkTSpaceContext * pContext, float fUV[], const int face_num, const int vert_index)
+static void GetTextureCoordinate(const SMikkTSpaceContext *pContext, float fUV[], const int face_num, const int vert_index)
{
//assert(vert_index>=0 && vert_index<4);
- SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
- if (pMesh->mtface!=NULL) {
- float * uv = pMesh->mtface[face_num].uv[vert_index];
- fUV[0]=uv[0]; fUV[1]=uv[1];
+ if (pMesh->mtface != NULL) {
+ float *uv = pMesh->mtface[face_num].uv[vert_index];
+ fUV[0] = uv[0]; fUV[1] = uv[1];
}
else {
- const float *orco= pMesh->orco[(&pMesh->mface[face_num].v1)[vert_index]];
+ const float *orco = pMesh->orco[(&pMesh->mface[face_num].v1)[vert_index]];
map_to_sphere(&fUV[0], &fUV[1], orco[0], orco[1], orco[2]);
}
}
-static void GetNormal(const SMikkTSpaceContext * pContext, float fNorm[], const int face_num, const int vert_index)
+static void GetNormal(const SMikkTSpaceContext *pContext, float fNorm[], const int face_num, const int vert_index)
{
//assert(vert_index>=0 && vert_index<4);
- SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
const int smoothnormal = (pMesh->mface[face_num].flag & ME_SMOOTH);
- if (!smoothnormal) { // flat
+ if (!smoothnormal) { // flat
if (pMesh->precomputedFaceNormals) {
- copy_v3_v3(fNorm, &pMesh->precomputedFaceNormals[3*face_num]);
+ copy_v3_v3(fNorm, &pMesh->precomputedFaceNormals[3 * face_num]);
}
else {
- MFace *mf= &pMesh->mface[face_num];
- float *p0= pMesh->mvert[mf->v1].co;
- float *p1= pMesh->mvert[mf->v2].co;
- float *p2= pMesh->mvert[mf->v3].co;
+ MFace *mf = &pMesh->mface[face_num];
+ float *p0 = pMesh->mvert[mf->v1].co;
+ float *p1 = pMesh->mvert[mf->v2].co;
+ float *p2 = pMesh->mvert[mf->v3].co;
if (mf->v4) {
float *p3 = pMesh->mvert[mf->v4].co;
@@ -2451,17 +2450,17 @@ static void GetNormal(const SMikkTSpaceContext * pContext, float fNorm[], const
}
}
else {
- const short *no= pMesh->mvert[(&pMesh->mface[face_num].v1)[vert_index]].no;
+ const short *no = pMesh->mvert[(&pMesh->mface[face_num].v1)[vert_index]].no;
normal_short_to_float_v3(fNorm, no);
}
}
-static void SetTSpace(const SMikkTSpaceContext * pContext, const float fvTangent[], const float fSign, const int face_num, const int iVert)
+static void SetTSpace(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int face_num, const int iVert)
{
//assert(vert_index>=0 && vert_index<4);
- SGLSLMeshToTangent * pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
- float * pRes = pMesh->tangent[4*face_num+iVert];
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ float *pRes = pMesh->tangent[4 * face_num + iVert];
copy_v3_v3(pRes, fvTangent);
- pRes[3]=fSign;
+ pRes[3] = fSign;
}
@@ -2471,9 +2470,9 @@ void DM_add_tangent_layer(DerivedMesh *dm)
MTFace *mtface, *tf;
MFace *mface, *mf;
MVert *mvert, *v1, *v2, *v3, *v4;
- MemArena *arena= NULL;
- VertexTangent **vtangents= NULL;
- float (*orco)[3]= NULL, (*tangent)[4];
+ MemArena *arena = NULL;
+ VertexTangent **vtangents = NULL;
+ float (*orco)[3] = NULL, (*tangent)[4];
float *uv1, *uv2, *uv3, *uv4, *vtang;
float fno[3], tang[3], uv[4][2];
int i, j, len, mf_vi[4], totvert, totface, iCalcNewMethod;
@@ -2485,34 +2484,34 @@ void DM_add_tangent_layer(DerivedMesh *dm)
nors = dm->getTessFaceDataArray(dm, CD_NORMAL);
/* check we have all the needed layers */
- totvert= dm->getNumVerts(dm);
- totface= dm->getNumTessFaces(dm);
+ totvert = dm->getNumVerts(dm);
+ totface = dm->getNumTessFaces(dm);
- mvert= dm->getVertArray(dm);
- mface= dm->getTessFaceArray(dm);
- mtface= dm->getTessFaceDataArray(dm, CD_MTFACE);
+ mvert = dm->getVertArray(dm);
+ mface = dm->getTessFaceArray(dm);
+ mtface = dm->getTessFaceDataArray(dm, CD_MTFACE);
if (!mtface) {
- orco= dm->getVertDataArray(dm, CD_ORCO);
+ orco = dm->getVertDataArray(dm, CD_ORCO);
if (!orco)
return;
}
/* create tangent layer */
DM_add_tessface_layer(dm, CD_TANGENT, CD_CALLOC, NULL);
- tangent= DM_get_tessface_data_layer(dm, CD_TANGENT);
+ tangent = DM_get_tessface_data_layer(dm, CD_TANGENT);
/* allocate some space */
- arena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "tangent layer arena");
+ arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "tangent layer arena");
BLI_memarena_use_calloc(arena);
- vtangents= MEM_callocN(sizeof(VertexTangent*)*totvert, "VertexTangent");
+ vtangents = MEM_callocN(sizeof(VertexTangent *) * totvert, "VertexTangent");
// new computation method
iCalcNewMethod = 1;
if (iCalcNewMethod != 0) {
- SGLSLMeshToTangent mesh2tangent= {0};
- SMikkTSpaceContext sContext= {0};
- SMikkTSpaceInterface sInterface= {0};
+ SGLSLMeshToTangent mesh2tangent = {0};
+ SMikkTSpaceContext sContext = {0};
+ SMikkTSpaceInterface sInterface = {0};
mesh2tangent.precomputedFaceNormals = nors;
mesh2tangent.mtface = mtface;
@@ -2537,28 +2536,28 @@ void DM_add_tangent_layer(DerivedMesh *dm)
if (!iCalcNewMethod) {
/* sum tangents at connected vertices */
- for (i=0, tf=mtface, mf=mface; i < totface; mf++, tf++, i++) {
- v1= &mvert[mf->v1];
- v2= &mvert[mf->v2];
- v3= &mvert[mf->v3];
+ for (i = 0, tf = mtface, mf = mface; i < totface; mf++, tf++, i++) {
+ v1 = &mvert[mf->v1];
+ v2 = &mvert[mf->v2];
+ v3 = &mvert[mf->v3];
if (mf->v4) {
- v4= &mvert[mf->v4];
+ v4 = &mvert[mf->v4];
normal_quad_v3(fno, v4->co, v3->co, v2->co, v1->co);
}
else {
- v4= NULL;
+ v4 = NULL;
normal_tri_v3(fno, v3->co, v2->co, v1->co);
}
if (mtface) {
- uv1= tf->uv[0];
- uv2= tf->uv[1];
- uv3= tf->uv[2];
- uv4= tf->uv[3];
+ uv1 = tf->uv[0];
+ uv2 = tf->uv[1];
+ uv3 = tf->uv[2];
+ uv4 = tf->uv[3];
}
else {
- uv1= uv[0]; uv2= uv[1]; uv3= uv[2]; uv4= uv[3];
+ uv1 = uv[0]; uv2 = uv[1]; uv3 = uv[2]; uv4 = uv[3];
map_to_sphere(&uv[0][0], &uv[0][1], orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]);
map_to_sphere(&uv[1][0], &uv[1][1], orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]);
map_to_sphere(&uv[2][0], &uv[2][1], orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]);
@@ -2572,7 +2571,7 @@ void DM_add_tangent_layer(DerivedMesh *dm)
sum_or_add_vertex_tangent(arena, &vtangents[mf->v3], tang, uv3);
if (mf->v4) {
- v4= &mvert[mf->v4];
+ v4 = &mvert[mf->v4];
tangent_from_uv(uv1, uv3, uv4, v1->co, v3->co, v4->co, fno, tang);
sum_or_add_vertex_tangent(arena, &vtangents[mf->v1], tang, uv1);
@@ -2582,26 +2581,26 @@ void DM_add_tangent_layer(DerivedMesh *dm)
}
/* write tangent to layer */
- for (i=0, tf=mtface, mf=mface; i < totface; mf++, tf++, i++, tangent+=4) {
- len= (mf->v4)? 4 : 3;
+ for (i = 0, tf = mtface, mf = mface; i < totface; mf++, tf++, i++, tangent += 4) {
+ len = (mf->v4) ? 4 : 3;
if (mtface == NULL) {
map_to_sphere(&uv[0][0], &uv[0][1], orco[mf->v1][0], orco[mf->v1][1], orco[mf->v1][2]);
map_to_sphere(&uv[1][0], &uv[1][1], orco[mf->v2][0], orco[mf->v2][1], orco[mf->v2][2]);
map_to_sphere(&uv[2][0], &uv[2][1], orco[mf->v3][0], orco[mf->v3][1], orco[mf->v3][2]);
- if (len==4)
+ if (len == 4)
map_to_sphere(&uv[3][0], &uv[3][1], orco[mf->v4][0], orco[mf->v4][1], orco[mf->v4][2]);
}
- mf_vi[0]= mf->v1;
- mf_vi[1]= mf->v2;
- mf_vi[2]= mf->v3;
- mf_vi[3]= mf->v4;
+ mf_vi[0] = mf->v1;
+ mf_vi[1] = mf->v2;
+ mf_vi[2] = mf->v3;
+ mf_vi[3] = mf->v4;
- for (j=0; j<len; j++) {
- vtang= find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]);
+ for (j = 0; j < len; j++) {
+ vtang = find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]);
normalize_v3_v3(tangent[j], vtang);
- ((float *) tangent[j])[3]=1.0f;
+ ((float *) tangent[j])[3] = 1.0f;
}
}
}
@@ -2613,34 +2612,34 @@ void DM_add_tangent_layer(DerivedMesh *dm)
void DM_calc_auto_bump_scale(DerivedMesh *dm)
{
/* int totvert= dm->getNumVerts(dm); */ /* UNUSED */
- int totface= dm->getNumTessFaces(dm);
+ int totface = dm->getNumTessFaces(dm);
- MVert * mvert = dm->getVertArray(dm);
- MFace * mface = dm->getTessFaceArray(dm);
- MTFace * mtface = dm->getTessFaceDataArray(dm, CD_MTFACE);
+ MVert *mvert = dm->getVertArray(dm);
+ MFace *mface = dm->getTessFaceArray(dm);
+ MTFace *mtface = dm->getTessFaceDataArray(dm, CD_MTFACE);
if (mtface) {
double dsum = 0.0;
int nr_accumulated = 0;
int f;
- for (f=0; f < totface; f++ ) {
+ for (f = 0; f < totface; f++) {
{
- float * verts[4], * tex_coords[4];
- const int nr_verts = mface[f].v4!=0 ? 4 : 3;
+ float *verts[4], *tex_coords[4];
+ const int nr_verts = mface[f].v4 != 0 ? 4 : 3;
int i, is_degenerate;
- verts[0]=mvert[mface[f].v1].co; verts[1]=mvert[mface[f].v2].co; verts[2]=mvert[mface[f].v3].co;
- tex_coords[0]=mtface[f].uv[0]; tex_coords[1]=mtface[f].uv[1]; tex_coords[2]=mtface[f].uv[2];
- if (nr_verts==4) {
- verts[3]=mvert[mface[f].v4].co;
- tex_coords[3]=mtface[f].uv[3];
+ verts[0] = mvert[mface[f].v1].co; verts[1] = mvert[mface[f].v2].co; verts[2] = mvert[mface[f].v3].co;
+ tex_coords[0] = mtface[f].uv[0]; tex_coords[1] = mtface[f].uv[1]; tex_coords[2] = mtface[f].uv[2];
+ if (nr_verts == 4) {
+ verts[3] = mvert[mface[f].v4].co;
+ tex_coords[3] = mtface[f].uv[3];
}
// discard degenerate faces
is_degenerate = 0;
- if ( equals_v3v3(verts[0], verts[1]) || equals_v3v3(verts[0], verts[2]) || equals_v3v3(verts[1], verts[2]) ||
- equals_v2v2(tex_coords[0], tex_coords[1]) || equals_v2v2(tex_coords[0], tex_coords[2]) || equals_v2v2(tex_coords[1], tex_coords[2]))
+ if (equals_v3v3(verts[0], verts[1]) || equals_v3v3(verts[0], verts[2]) || equals_v3v3(verts[1], verts[2]) ||
+ equals_v2v2(tex_coords[0], tex_coords[1]) || equals_v2v2(tex_coords[0], tex_coords[2]) || equals_v2v2(tex_coords[1], tex_coords[2]))
{
is_degenerate = 1;
}
@@ -2662,10 +2661,10 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm)
i = 0;
while (is_degenerate == 0 && i < 4) {
float cur_edge[2], signed_area;
- sub_v2_v2v2(cur_edge, tex_coords[(i+1)&0x3], tex_coords[i]);
- signed_area = prev_edge[0]*cur_edge[1] - prev_edge[1]*cur_edge[0];
+ sub_v2_v2v2(cur_edge, tex_coords[(i + 1) & 0x3], tex_coords[i]);
+ signed_area = prev_edge[0] * cur_edge[1] - prev_edge[1] * cur_edge[0];
- if (i == 0 ) {
+ if (i == 0) {
is_signed = (signed_area < 0.0f) ? 1 : 0;
}
else if ((is_signed != 0) != (signed_area < 0.0f)) {
@@ -2682,9 +2681,9 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm)
// proceed if not a degenerate face
if (is_degenerate == 0) {
- int nr_tris_to_pile=0;
+ int nr_tris_to_pile = 0;
// quads split at shortest diagonal
- int offs = 0; // initial triangulation is 0,1,2 and 0, 2, 3
+ int offs = 0; // initial triangulation is 0,1,2 and 0, 2, 3
if (nr_verts == 4) {
float pos_len_diag0, pos_len_diag1;
float vtmp[3];
@@ -2693,10 +2692,10 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm)
sub_v3_v3v3(vtmp, verts[3], verts[1]);
pos_len_diag1 = dot_v3v3(vtmp, vtmp);
- if (pos_len_diag1<pos_len_diag0) {
- offs=1; // alter split
+ if (pos_len_diag1 < pos_len_diag0) {
+ offs = 1; // alter split
}
- else if (pos_len_diag0==pos_len_diag1) { /* do UV check instead */
+ else if (pos_len_diag0 == pos_len_diag1) { /* do UV check instead */
float tex_len_diag0, tex_len_diag1;
sub_v2_v2v2(vtmp, tex_coords[2], tex_coords[0]);
@@ -2704,34 +2703,34 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm)
sub_v2_v2v2(vtmp, tex_coords[3], tex_coords[1]);
tex_len_diag1 = dot_v2v2(vtmp, vtmp);
- if (tex_len_diag1<tex_len_diag0) {
- offs=1; /* alter split */
+ if (tex_len_diag1 < tex_len_diag0) {
+ offs = 1; /* alter split */
}
}
}
nr_tris_to_pile = nr_verts - 2;
- 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 };
+ 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; t<nr_tris_to_pile; t++ ) {
+ for (t = 0; t < nr_tris_to_pile; t++) {
float f2x_area_uv;
- float * p0 = verts[indices[t*3+0]];
- float * p1 = verts[indices[t*3+1]];
- float * p2 = verts[indices[t*3+2]];
+ float *p0 = verts[indices[t * 3 + 0]];
+ float *p1 = verts[indices[t * 3 + 1]];
+ float *p2 = verts[indices[t * 3 + 2]];
float edge_t0[2], edge_t1[2];
- sub_v2_v2v2(edge_t0, tex_coords[indices[t*3+1]], tex_coords[indices[t*3+0]]);
- sub_v2_v2v2(edge_t1, tex_coords[indices[t*3+2]], tex_coords[indices[t*3+0]]);
+ sub_v2_v2v2(edge_t0, tex_coords[indices[t * 3 + 1]], tex_coords[indices[t * 3 + 0]]);
+ sub_v2_v2v2(edge_t1, tex_coords[indices[t * 3 + 2]], tex_coords[indices[t * 3 + 0]]);
- f2x_area_uv = fabsf(edge_t0[0]*edge_t1[1] - edge_t0[1]*edge_t1[0]);
- if (f2x_area_uv>FLT_EPSILON) {
+ f2x_area_uv = fabsf(edge_t0[0] * edge_t1[1] - edge_t0[1] * edge_t1[0]);
+ if (f2x_area_uv > FLT_EPSILON) {
float norm[3], v0[3], v1[3], f2x_surf_area, fsurf_ratio;
sub_v3_v3v3(v0, p1, p0);
sub_v3_v3v3(v1, p2, p0);
cross_v3_v3v3(norm, v0, v1);
f2x_surf_area = len_v3(norm);
- fsurf_ratio = f2x_surf_area/f2x_area_uv; // tri area divided by texture area
+ fsurf_ratio = f2x_surf_area / f2x_area_uv; // tri area divided by texture area
nr_accumulated++;
dsum += (double)(fsurf_ratio);
@@ -2744,8 +2743,8 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm)
// finalize
{
- const float avg_area_ratio = (nr_accumulated>0) ? ((float)(dsum / nr_accumulated)) : 1.0f;
- const float use_as_render_bump_scale = sqrtf(avg_area_ratio); // use width of average surface ratio as your bump scale
+ const float avg_area_ratio = (nr_accumulated > 0) ? ((float)(dsum / nr_accumulated)) : 1.0f;
+ const float use_as_render_bump_scale = sqrtf(avg_area_ratio); // use width of average surface ratio as your bump scale
dm->auto_bump_scale = use_as_render_bump_scale;
}
}
@@ -2786,7 +2785,7 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs,
if (gattribs->layer[b].name[0])
layer = CustomData_get_named_layer_index(ldata, CD_MLOOPUV,
- gattribs->layer[b].name);
+ gattribs->layer[b].name);
else
layer = CustomData_get_active_layer_index(ldata, CD_MLOOPUV);
@@ -2802,7 +2801,7 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs,
else {
if (gattribs->layer[b].name[0])
layer = CustomData_get_named_layer_index(tfdata, CD_MTFACE,
- gattribs->layer[b].name);
+ gattribs->layer[b].name);
else
layer = CustomData_get_active_layer_index(tfdata, CD_MTFACE);
@@ -2823,7 +2822,7 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs,
if (gattribs->layer[b].name[0])
layer = CustomData_get_named_layer_index(ldata, CD_MLOOPCOL,
- gattribs->layer[b].name);
+ gattribs->layer[b].name);
else
layer = CustomData_get_active_layer_index(ldata, CD_MLOOPCOL);
@@ -2839,7 +2838,7 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs,
/* vertex colors */
if (gattribs->layer[b].name[0])
layer = CustomData_get_named_layer_index(tfdata, CD_MCOL,
- gattribs->layer[b].name);
+ gattribs->layer[b].name);
else
layer = CustomData_get_active_layer_index(tfdata, CD_MCOL);
@@ -2890,7 +2889,7 @@ void DM_set_object_boundbox(Object *ob, DerivedMesh *dm)
dm->getMinMax(dm, min, max);
if (!ob->bb)
- ob->bb= MEM_callocN(sizeof(BoundBox), "DM-BoundBox");
+ ob->bb = MEM_callocN(sizeof(BoundBox), "DM-BoundBox");
BKE_boundbox_init_from_minmax(ob->bb, min, max);
}
@@ -2914,12 +2913,12 @@ BLI_INLINE int navmesh_bit(int a, int b)
BLI_INLINE void navmesh_intToCol(int i, float col[3])
{
- int r = navmesh_bit(i, 0) + navmesh_bit(i, 3) * 2 + 1;
- int g = navmesh_bit(i, 1) + navmesh_bit(i, 4) * 2 + 1;
- int b = navmesh_bit(i, 2) + navmesh_bit(i, 5) * 2 + 1;
- col[0] = 1 - r*63.0f/255.0f;
- col[1] = 1 - g*63.0f/255.0f;
- col[2] = 1 - b*63.0f/255.0f;
+ int r = navmesh_bit(i, 0) + navmesh_bit(i, 3) * 2 + 1;
+ int g = navmesh_bit(i, 1) + navmesh_bit(i, 4) * 2 + 1;
+ int b = navmesh_bit(i, 2) + navmesh_bit(i, 5) * 2 + 1;
+ col[0] = 1 - r * 63.0f / 255.0f;
+ col[1] = 1 - g * 63.0f / 255.0f;
+ col[2] = 1 - b * 63.0f / 255.0f;
}
static void navmesh_drawColored(DerivedMesh *dm)
@@ -2948,7 +2947,7 @@ static void navmesh_drawColored(DerivedMesh *dm)
//glShadeModel(GL_SMOOTH);
glBegin(glmode = GL_QUADS);
for (a = 0; a < dm->numTessFaceData; a++, mface++) {
- int new_glmode = mface->v4?GL_QUADS:GL_TRIANGLES;
+ int new_glmode = mface->v4 ? GL_QUADS : GL_TRIANGLES;
int pi = polygonIdx[a];
if (pi <= 0) {
zero_v3(col);
@@ -2975,9 +2974,9 @@ static void navmesh_drawColored(DerivedMesh *dm)
}
static void navmesh_DM_drawFacesTex(DerivedMesh *dm,
- DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData)
+ DMSetDrawOptionsTex setDrawOptions,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData)
{
(void) setDrawOptions;
(void) compareDrawOptions;
@@ -3002,21 +3001,21 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm)
DerivedMesh *result;
int maxFaces = dm->getNumPolys(dm);
int *recastData;
- int vertsPerPoly=0, nverts=0, ndtris=0, npolys=0;
- float* verts=NULL;
- unsigned short *dtris=NULL, *dmeshes=NULL, *polys=NULL;
- int *dtrisToPolysMap=NULL, *dtrisToTrisMap=NULL, *trisToFacesMap=NULL;
+ int vertsPerPoly = 0, nverts = 0, ndtris = 0, npolys = 0;
+ float *verts = NULL;
+ unsigned short *dtris = NULL, *dmeshes = NULL, *polys = NULL;
+ int *dtrisToPolysMap = NULL, *dtrisToTrisMap = NULL, *trisToFacesMap = NULL;
int res;
result = CDDM_copy(dm);
if (!CustomData_has_layer(&result->polyData, CD_RECAST)) {
- int *sourceRecastData = (int*)CustomData_get_layer(&dm->polyData, CD_RECAST);
+ int *sourceRecastData = (int *)CustomData_get_layer(&dm->polyData, CD_RECAST);
if (sourceRecastData) {
CustomData_add_layer_named(&result->polyData, CD_RECAST, CD_DUPLICATE,
sourceRecastData, maxFaces, "recastData");
}
}
- recastData = (int*)CustomData_get_layer(&result->polyData, CD_RECAST);
+ recastData = (int *)CustomData_get_layer(&result->polyData, CD_RECAST);
/* note: This is not good design! - really should not be doing this */
result->drawFacesTex = navmesh_DM_drawFacesTex;
@@ -3031,17 +3030,17 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm)
size_t polyIdx;
/* invalidate concave polygon */
- for (polyIdx=0; polyIdx<(size_t)npolys; polyIdx++) {
- unsigned short* poly = &polys[polyIdx*2*vertsPerPoly];
+ for (polyIdx = 0; polyIdx < (size_t)npolys; polyIdx++) {
+ unsigned short *poly = &polys[polyIdx * 2 * vertsPerPoly];
if (!polyIsConvex(poly, vertsPerPoly, verts)) {
/* set negative polygon idx to all faces */
- unsigned short *dmesh = &dmeshes[4*polyIdx];
+ unsigned short *dmesh = &dmeshes[4 * polyIdx];
unsigned short tbase = dmesh[2];
unsigned short tnum = dmesh[3];
unsigned short ti;
- for (ti=0; ti<tnum; ti++) {
- unsigned short triidx = dtrisToTrisMap[tbase+ti];
+ for (ti = 0; ti < tnum; ti++) {
+ unsigned short triidx = dtrisToTrisMap[tbase + ti];
unsigned short faceidx = trisToFacesMap[triidx];
if (recastData[faceidx] > 0) {
recastData[faceidx] = -recastData[faceidx];
@@ -3055,19 +3054,19 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm)
}
/* clean up */
- if (verts!=NULL)
+ if (verts != NULL)
MEM_freeN(verts);
- if (dtris!=NULL)
+ if (dtris != NULL)
MEM_freeN(dtris);
- if (dmeshes!=NULL)
+ if (dmeshes != NULL)
MEM_freeN(dmeshes);
- if (polys!=NULL)
+ if (polys != NULL)
MEM_freeN(polys);
- if (dtrisToPolysMap!=NULL)
+ if (dtrisToPolysMap != NULL)
MEM_freeN(dtrisToPolysMap);
- if (dtrisToTrisMap!=NULL)
+ if (dtrisToTrisMap != NULL)
MEM_freeN(dtrisToTrisMap);
- if (trisToFacesMap!=NULL)
+ if (trisToFacesMap != NULL)
MEM_freeN(trisToFacesMap);
return result;
@@ -3132,7 +3131,7 @@ static void dm_debug_info_layers(DynStr *dynstr, DerivedMesh *dm, void *(*getEle
char *DM_debug_info(DerivedMesh *dm)
{
- DynStr *dynstr= BLI_dynstr_new();
+ DynStr *dynstr = BLI_dynstr_new();
char *ret;
const char *tstr;
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 9e46d03a3ab..0f8716e2b04 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -574,7 +574,7 @@ void BKE_pose_channels_hash_make(bPose *pose)
if (!pose->chanhash) {
bPoseChannel *pchan;
- pose->chanhash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "make_pose_chan gh");
+ pose->chanhash = BLI_ghash_str_new("make_pose_chan gh");
for (pchan = pose->chanbase.first; pchan; pchan = pchan->next)
BLI_ghash_insert(pose->chanhash, pchan->name, pchan);
}
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 8982017403d..e8e8a100f34 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -80,7 +80,7 @@ short id_type_can_have_animdata(ID *id)
/* Only some ID-blocks have this info for now */
// TODO: finish adding this for the other blocktypes
switch (GS(id->name)) {
- /* has AnimData */
+ /* has AnimData */
case ID_OB:
case ID_ME: case ID_MB: case ID_CU: case ID_AR: case ID_LT:
case ID_KE:
@@ -95,7 +95,7 @@ short id_type_can_have_animdata(ID *id)
return 1;
}
- /* no AnimData */
+ /* no AnimData */
default:
return 0;
}
@@ -106,14 +106,14 @@ short id_type_can_have_animdata(ID *id)
* the AnimData pointer is stored immediately after the given ID-block in the struct,
* as per IdAdtTemplate.
*/
-AnimData *BKE_animdata_from_id (ID *id)
+AnimData *BKE_animdata_from_id(ID *id)
{
/* only some ID-blocks have this info for now, so we cast the
* types that do to be of type IdAdtTemplate, and extract the
* AnimData that way
*/
if (id_type_can_have_animdata(id)) {
- IdAdtTemplate *iat= (IdAdtTemplate *)id;
+ IdAdtTemplate *iat = (IdAdtTemplate *)id;
return iat->adt;
}
else
@@ -124,24 +124,24 @@ AnimData *BKE_animdata_from_id (ID *id)
* the AnimData pointer is stored immediately after the given ID-block in the struct,
* as per IdAdtTemplate. Also note that
*/
-AnimData *BKE_id_add_animdata (ID *id)
+AnimData *BKE_id_add_animdata(ID *id)
{
/* Only some ID-blocks have this info for now, so we cast the
* types that do to be of type IdAdtTemplate, and add the AnimData
* to it using the template
*/
if (id_type_can_have_animdata(id)) {
- IdAdtTemplate *iat= (IdAdtTemplate *)id;
+ IdAdtTemplate *iat = (IdAdtTemplate *)id;
/* check if there's already AnimData, in which case, don't add */
if (iat->adt == NULL) {
AnimData *adt;
/* add animdata */
- adt= iat->adt= MEM_callocN(sizeof(AnimData), "AnimData");
+ adt = iat->adt = MEM_callocN(sizeof(AnimData), "AnimData");
/* set default settings */
- adt->act_influence= 1.0f;
+ adt->act_influence = 1.0f;
}
return iat->adt;
@@ -175,7 +175,7 @@ short BKE_animdata_set_action(ReportList *reports, ID *id, bAction *act)
/* manage usercount for current action */
if (adt->action)
- id_us_min((ID*)adt->action);
+ id_us_min((ID *)adt->action);
/* assume that AnimData's action can in fact be edited... */
if (act) {
@@ -183,14 +183,14 @@ short BKE_animdata_set_action(ReportList *reports, ID *id, bAction *act)
if (ELEM(act->idroot, 0, GS(id->name))) {
/* can set */
adt->action = act;
- id_us_plus((ID*)adt->action);
+ id_us_plus((ID *)adt->action);
ok = 1;
}
else {
/* cannot set */
BKE_reportf(reports, RPT_ERROR,
- "Couldn't set Action '%s' onto ID '%s', as it doesn't have suitably rooted paths for this purpose",
- act->id.name+2, id->name);
+ "Couldn't set Action '%s' onto ID '%s', as it doesn't have suitably rooted paths for this purpose",
+ act->id.name + 2, id->name);
//ok = 0;
}
}
@@ -212,8 +212,8 @@ void BKE_free_animdata(ID *id)
* types that do to be of type IdAdtTemplate
*/
if (id_type_can_have_animdata(id)) {
- IdAdtTemplate *iat= (IdAdtTemplate *)id;
- AnimData *adt= iat->adt;
+ IdAdtTemplate *iat = (IdAdtTemplate *)id;
+ AnimData *adt = iat->adt;
/* check if there's any AnimData to start with */
if (adt) {
@@ -235,7 +235,7 @@ void BKE_free_animdata(ID *id)
/* free animdata now */
MEM_freeN(adt);
- iat->adt= NULL;
+ iat->adt = NULL;
}
}
}
@@ -243,19 +243,19 @@ void BKE_free_animdata(ID *id)
/* Freeing -------------------------------------------- */
/* Make a copy of the given AnimData - to be used when copying datablocks */
-AnimData *BKE_copy_animdata (AnimData *adt, const short do_action)
+AnimData *BKE_copy_animdata(AnimData *adt, const short do_action)
{
AnimData *dadt;
/* sanity check before duplicating struct */
if (adt == NULL)
return NULL;
- dadt= MEM_dupallocN(adt);
+ dadt = MEM_dupallocN(adt);
/* make a copy of action - at worst, user has to delete copies... */
if (do_action) {
- dadt->action= BKE_action_copy(adt->action);
- dadt->tmpact= BKE_action_copy(adt->tmpact);
+ dadt->action = BKE_action_copy(adt->action);
+ dadt->tmpact = BKE_action_copy(adt->tmpact);
}
else {
id_us_plus((ID *)dadt->action);
@@ -269,7 +269,7 @@ AnimData *BKE_copy_animdata (AnimData *adt, const short do_action)
copy_fcurves(&dadt->drivers, &adt->drivers);
/* don't copy overrides */
- dadt->overrides.first= dadt->overrides.last= NULL;
+ dadt->overrides.first = dadt->overrides.last = NULL;
/* return */
return dadt;
@@ -287,7 +287,7 @@ int BKE_copy_animdata_id(ID *id_to, ID *id_from, const short do_action)
adt = BKE_animdata_from_id(id_from);
if (adt) {
IdAdtTemplate *iat = (IdAdtTemplate *)id_to;
- iat->adt= BKE_copy_animdata(adt, do_action);
+ iat->adt = BKE_copy_animdata(adt, do_action);
}
return 1;
@@ -295,15 +295,15 @@ int BKE_copy_animdata_id(ID *id_to, ID *id_from, const short do_action)
void BKE_copy_animdata_id_action(ID *id)
{
- AnimData *adt= BKE_animdata_from_id(id);
+ AnimData *adt = BKE_animdata_from_id(id);
if (adt) {
if (adt->action) {
id_us_min((ID *)adt->action);
- adt->action= BKE_action_copy(adt->action);
+ adt->action = BKE_action_copy(adt->action);
}
if (adt->tmpact) {
id_us_min((ID *)adt->tmpact);
- adt->tmpact= BKE_action_copy(adt->tmpact);
+ adt->tmpact = BKE_action_copy(adt->tmpact);
}
}
}
@@ -314,7 +314,7 @@ static void make_local_strips(ListBase *strips)
{
NlaStrip *strip;
- for (strip=strips->first; strip; strip=strip->next) {
+ for (strip = strips->first; strip; strip = strip->next) {
if (strip->act) BKE_action_make_local(strip->act);
if (strip->remap && strip->remap->target) BKE_action_make_local(strip->remap->target);
@@ -337,7 +337,7 @@ void BKE_animdata_make_local(AnimData *adt)
// TODO: need to remap the ID-targets too?
/* NLA Data */
- for (nlt=adt->nla_tracks.first; nlt; nlt=nlt->next)
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next)
make_local_strips(&nlt->strips);
}
@@ -356,17 +356,17 @@ void BKE_relink_animdata(AnimData *adt)
FCurve *fcu;
/* check each driver against all the base paths to see if any should go */
- for (fcu= adt->drivers.first; fcu; fcu=fcu->next) {
- ChannelDriver *driver= fcu->driver;
+ for (fcu = adt->drivers.first; fcu; fcu = fcu->next) {
+ ChannelDriver *driver = fcu->driver;
DriverVar *dvar;
/* driver variables */
- for (dvar= driver->variables.first; dvar; dvar=dvar->next) {
+ for (dvar = driver->variables.first; dvar; dvar = dvar->next) {
/* only change the used targets, since the others will need fixing manually anyway */
DRIVER_TARGETS_USED_LOOPER(dvar)
{
if (dtar->id && dtar->id->newid) {
- dtar->id= dtar->id->newid;
+ dtar->id = dtar->id->newid;
}
}
DRIVER_TARGETS_LOOPER_END
@@ -382,7 +382,7 @@ void BKE_relink_animdata(AnimData *adt)
* < basepath: (str) shorter path fragment to look for
* > returns (bool) whether there is a match
*/
-static short animpath_matches_basepath (const char path[], const char basepath[])
+static short animpath_matches_basepath(const char path[], const char basepath[])
{
/* we need start of path to be basepath */
return (path && basepath) && (strstr(path, basepath) == path);
@@ -396,13 +396,13 @@ static short animpath_matches_basepath (const char path[], const char basepath[]
*/
void action_move_fcurves_by_basepath(bAction *srcAct, bAction *dstAct, const char basepath[])
{
- FCurve *fcu, *fcn=NULL;
+ FCurve *fcu, *fcn = NULL;
/* sanity checks */
if (ELEM3(NULL, srcAct, dstAct, basepath)) {
if (G.debug & G_DEBUG) {
printf("ERROR: action_partition_fcurves_by_basepath(%p, %p, %p) has insufficient info to work with\n",
- (void *)srcAct, (void *)dstAct, (void *)basepath);
+ (void *)srcAct, (void *)dstAct, (void *)basepath);
}
return;
}
@@ -451,7 +451,7 @@ void action_move_fcurves_by_basepath(bAction *srcAct, bAction *dstAct, const cha
/* cleanup groups (if present) */
if (srcAct->groups.first) {
- bActionGroup *agrp, *grp=NULL;
+ bActionGroup *agrp, *grp = NULL;
for (agrp = srcAct->groups.first; agrp; agrp = grp) {
grp = agrp->next;
@@ -476,7 +476,7 @@ void action_move_fcurves_by_basepath(bAction *srcAct, bAction *dstAct, const cha
*/
void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths)
{
- AnimData *srcAdt=NULL, *dstAdt=NULL;
+ AnimData *srcAdt = NULL, *dstAdt = NULL;
LinkData *ld;
/* sanity checks */
@@ -500,15 +500,15 @@ void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths
if (srcAdt->action) {
/* set up an action if necessary, and name it in a similar way so that it can be easily found again */
if (dstAdt->action == NULL) {
- dstAdt->action = add_empty_action(srcAdt->action->id.name+2);
+ dstAdt->action = add_empty_action(srcAdt->action->id.name + 2);
}
else if (dstAdt->action == srcAdt->action) {
printf("Argh! Source and Destination share animation! ('%s' and '%s' both use '%s') Making new empty action\n",
- srcID->name, dstID->name, srcAdt->action->id.name);
+ srcID->name, dstID->name, srcAdt->action->id.name);
// TODO: review this...
id_us_min(&dstAdt->action->id);
- dstAdt->action = add_empty_action(dstAdt->action->id.name+2);
+ dstAdt->action = add_empty_action(dstAdt->action->id.name + 2);
}
/* loop over base paths, trying to fix for each one... */
@@ -520,7 +520,7 @@ void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths
/* drivers */
if (srcAdt->drivers.first) {
- FCurve *fcu, *fcn=NULL;
+ FCurve *fcu, *fcn = NULL;
/* check each driver against all the base paths to see if any should go */
for (fcu = srcAdt->drivers.first; fcu; fcu = fcn) {
@@ -548,10 +548,10 @@ void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths
/* Path Validation -------------------------------------------- */
/* Check if a given RNA Path is valid, by tracing it from the given ID, and seeing if we can resolve it */
-static short check_rna_path_is_valid (ID *owner_id, const char *path)
+static short check_rna_path_is_valid(ID *owner_id, const char *path)
{
PointerRNA id_ptr, ptr;
- PropertyRNA *prop=NULL;
+ PropertyRNA *prop = NULL;
/* make initial RNA pointer to start resolving from */
RNA_id_pointer_create(owner_id, &id_ptr);
@@ -563,30 +563,30 @@ static short check_rna_path_is_valid (ID *owner_id, const char *path)
/* Check if some given RNA Path needs fixing - free the given path and set a new one as appropriate
* NOTE: we assume that oldName and newName have [" "] padding around them
*/
-static char *rna_path_rename_fix (ID *owner_id, const char *prefix, const char *oldName, const char *newName, char *oldpath, int verify_paths)
+static char *rna_path_rename_fix(ID *owner_id, const char *prefix, const char *oldName, const char *newName, char *oldpath, int verify_paths)
{
- char *prefixPtr= strstr(oldpath, prefix);
- char *oldNamePtr= strstr(oldpath, oldName);
- int prefixLen= strlen(prefix);
- int oldNameLen= strlen(oldName);
+ char *prefixPtr = strstr(oldpath, prefix);
+ char *oldNamePtr = strstr(oldpath, oldName);
+ int prefixLen = strlen(prefix);
+ int oldNameLen = strlen(oldName);
/* only start fixing the path if the prefix and oldName feature in the path,
* and prefix occurs immediately before oldName
*/
- if ( (prefixPtr && oldNamePtr) && (prefixPtr+prefixLen == oldNamePtr) ) {
+ if ( (prefixPtr && oldNamePtr) && (prefixPtr + prefixLen == oldNamePtr) ) {
/* if we haven't aren't able to resolve the path now, try again after fixing it */
if (!verify_paths || check_rna_path_is_valid(owner_id, oldpath) == 0) {
- DynStr *ds= BLI_dynstr_new();
- char *postfixPtr= oldNamePtr+oldNameLen;
+ DynStr *ds = BLI_dynstr_new();
+ char *postfixPtr = oldNamePtr + oldNameLen;
char *newPath = NULL;
char oldChar;
/* add the part of the string that goes up to the start of the prefix */
if (prefixPtr > oldpath) {
- oldChar= prefixPtr[0];
- prefixPtr[0]= 0;
+ oldChar = prefixPtr[0];
+ prefixPtr[0] = 0;
BLI_dynstr_append(ds, oldpath);
- prefixPtr[0]= oldChar;
+ prefixPtr[0] = oldChar;
}
/* add the prefix */
@@ -599,7 +599,7 @@ static char *rna_path_rename_fix (ID *owner_id, const char *prefix, const char *
BLI_dynstr_append(ds, postfixPtr);
/* create new path, and cleanup old data */
- newPath= BLI_dynstr_get_cstring(ds);
+ newPath = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
/* check if the new path will solve our problems */
@@ -621,15 +621,15 @@ static char *rna_path_rename_fix (ID *owner_id, const char *prefix, const char *
}
/* Check RNA-Paths for a list of F-Curves */
-static void fcurves_path_rename_fix (ID *owner_id, const char *prefix, char *oldName, char *newName, ListBase *curves, int verify_paths)
+static void fcurves_path_rename_fix(ID *owner_id, const char *prefix, char *oldName, char *newName, ListBase *curves, int verify_paths)
{
FCurve *fcu;
/* we need to check every curve... */
- for (fcu= curves->first; fcu; fcu= fcu->next) {
+ for (fcu = curves->first; fcu; fcu = fcu->next) {
/* firstly, handle the F-Curve's own path */
if (fcu->rna_path)
- fcu->rna_path= rna_path_rename_fix(owner_id, prefix, oldName, newName, fcu->rna_path, verify_paths);
+ fcu->rna_path = rna_path_rename_fix(owner_id, prefix, oldName, newName, fcu->rna_path, verify_paths);
}
}
@@ -640,29 +640,29 @@ static void drivers_path_rename_fix(ID *owner_id, ID *ref_id, const char *prefix
FCurve *fcu;
/* we need to check every curve - drivers are F-Curves too! */
- for (fcu= curves->first; fcu; fcu= fcu->next) {
+ for (fcu = curves->first; fcu; fcu = fcu->next) {
/* firstly, handle the F-Curve's own path */
if (fcu->rna_path)
- fcu->rna_path= rna_path_rename_fix(owner_id, prefix, oldKey, newKey, fcu->rna_path, verify_paths);
+ fcu->rna_path = rna_path_rename_fix(owner_id, prefix, oldKey, newKey, fcu->rna_path, verify_paths);
/* driver? */
if (fcu->driver) {
- ChannelDriver *driver= fcu->driver;
+ ChannelDriver *driver = fcu->driver;
DriverVar *dvar;
/* driver variables */
- for (dvar= driver->variables.first; dvar; dvar=dvar->next) {
+ for (dvar = driver->variables.first; dvar; dvar = dvar->next) {
/* only change the used targets, since the others will need fixing manually anyway */
DRIVER_TARGETS_USED_LOOPER(dvar)
{
/* rename RNA path */
if (dtar->rna_path && dtar->id)
- dtar->rna_path= rna_path_rename_fix(dtar->id, prefix, oldKey, newKey, dtar->rna_path, verify_paths);
+ dtar->rna_path = rna_path_rename_fix(dtar->id, prefix, oldKey, newKey, dtar->rna_path, verify_paths);
/* also fix the bone-name (if applicable) */
if (strstr(prefix, "bones")) {
- if ( ((dtar->id) && (GS(dtar->id->name) == ID_OB) && (!ref_id || ((Object*)(dtar->id))->data == ref_id)) &&
- (dtar->pchan_name[0]) && (strcmp(oldName, dtar->pchan_name)==0) )
+ if ( ((dtar->id) && (GS(dtar->id->name) == ID_OB) && (!ref_id || ((Object *)(dtar->id))->data == ref_id)) &&
+ (dtar->pchan_name[0]) && (strcmp(oldName, dtar->pchan_name) == 0) )
{
BLI_strncpy(dtar->pchan_name, newName, sizeof(dtar->pchan_name));
}
@@ -675,12 +675,12 @@ static void drivers_path_rename_fix(ID *owner_id, ID *ref_id, const char *prefix
}
/* Fix all RNA-Paths for Actions linked to NLA Strips */
-static void nlastrips_path_rename_fix (ID *owner_id, const char *prefix, char *oldName, char *newName, ListBase *strips, int verify_paths)
+static void nlastrips_path_rename_fix(ID *owner_id, const char *prefix, char *oldName, char *newName, ListBase *strips, int verify_paths)
{
NlaStrip *strip;
/* recursively check strips, fixing only actions... */
- for (strip= strips->first; strip; strip= strip->next) {
+ for (strip = strips->first; strip; strip = strip->next) {
/* fix strip's action */
if (strip->act)
fcurves_path_rename_fix(owner_id, prefix, oldName, newName, &strip->act->curves, verify_paths);
@@ -693,7 +693,7 @@ static void nlastrips_path_rename_fix (ID *owner_id, const char *prefix, char *o
/* Fix all RNA-Paths in the AnimData block used by the given ID block
* NOTE: it is assumed that the structure we're replacing is <prefix><["><name><"]>
- * i.e. pose.bones["Bone"]
+ * i.e. pose.bones["Bone"]
*/
void BKE_animdata_fix_paths_rename(ID *owner_id, AnimData *adt, ID *ref_id, const char *prefix, const char *oldName,
const char *newName, int oldSubscript, int newSubscript, int verify_paths)
@@ -707,12 +707,12 @@ void BKE_animdata_fix_paths_rename(ID *owner_id, AnimData *adt, ID *ref_id, cons
if ((oldName != NULL) && (newName != NULL)) {
/* pad the names with [" "] so that only exact matches are made */
- oldN= BLI_sprintfN("[\"%s\"]", oldName);
- newN= BLI_sprintfN("[\"%s\"]", newName);
+ oldN = BLI_sprintfN("[\"%s\"]", oldName);
+ newN = BLI_sprintfN("[\"%s\"]", newName);
}
else {
- oldN= BLI_sprintfN("[%d]", oldSubscript);
- newN= BLI_sprintfN("[%d]", newSubscript);
+ oldN = BLI_sprintfN("[%d]", oldSubscript);
+ newN = BLI_sprintfN("[%d]", newSubscript);
}
/* Active action and temp action */
@@ -725,7 +725,7 @@ void BKE_animdata_fix_paths_rename(ID *owner_id, AnimData *adt, ID *ref_id, cons
drivers_path_rename_fix(owner_id, ref_id, prefix, oldName, newName, oldN, newN, &adt->drivers, verify_paths);
/* NLA Data - Animation Data for Strips */
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next)
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next)
nlastrips_path_rename_fix(owner_id, prefix, oldN, newN, &nlt->strips, verify_paths);
/* free the temp names */
@@ -742,18 +742,18 @@ void BKE_animdata_main_cb(Main *mainptr, ID_AnimData_Edit_Callback func, void *u
/* standard data version */
#define ANIMDATA_IDS_CB(first) \
- for (id= first; id; id= id->next) { \
- AnimData *adt= BKE_animdata_from_id(id); \
+ for (id = first; id; id = id->next) { \
+ AnimData *adt = BKE_animdata_from_id(id); \
if (adt) func(id, adt, user_data); \
}
/* "embedded" nodetree cases (i.e. scene/material/texture->nodetree) */
#define ANIMDATA_NODETREE_IDS_CB(first, NtId_Type) \
- for (id= first; id; id= id->next) { \
- AnimData *adt= BKE_animdata_from_id(id); \
- NtId_Type *ntp= (NtId_Type *)id; \
+ for (id = first; id; id = id->next) { \
+ AnimData *adt = BKE_animdata_from_id(id); \
+ NtId_Type *ntp = (NtId_Type *)id; \
if (ntp->nodetree) { \
- AnimData *adt2= BKE_animdata_from_id((ID *)ntp); \
+ AnimData *adt2 = BKE_animdata_from_id((ID *)ntp); \
if (adt2) func(id, adt2, user_data); \
} \
if (adt) func(id, adt, user_data); \
@@ -816,12 +816,12 @@ void BKE_animdata_main_cb(Main *mainptr, ID_AnimData_Edit_Callback func, void *u
/* Fix all RNA-Paths throughout the database (directly access the Global.main version)
* NOTE: it is assumed that the structure we're replacing is <prefix><["><name><"]>
- * i.e. pose.bones["Bone"]
+ * i.e. pose.bones["Bone"]
*/
/* TODO: use BKE_animdata_main_cb for looping over all data */
void BKE_all_animdata_fix_paths_rename(ID *ref_id, const char *prefix, const char *oldName, const char *newName)
{
- Main *mainptr= G.main;
+ Main *mainptr = G.main;
ID *id;
/* macro for less typing
@@ -829,21 +829,21 @@ void BKE_all_animdata_fix_paths_rename(ID *ref_id, const char *prefix, const cha
* this outside of the function may make things slightly faster?
*/
#define RENAMEFIX_ANIM_IDS(first) \
- for (id= first; id; id= id->next) { \
- AnimData *adt= BKE_animdata_from_id(id); \
- BKE_animdata_fix_paths_rename(id, adt, ref_id, prefix, oldName, newName, 0, 0, 1);\
+ for (id = first; id; id = id->next) { \
+ AnimData *adt = BKE_animdata_from_id(id); \
+ BKE_animdata_fix_paths_rename(id, adt, ref_id, prefix, oldName, newName, 0, 0, 1); \
}
/* another version of this macro for nodetrees */
#define RENAMEFIX_ANIM_NODETREE_IDS(first, NtId_Type) \
- for (id= first; id; id= id->next) { \
- AnimData *adt= BKE_animdata_from_id(id); \
- NtId_Type *ntp= (NtId_Type *)id; \
+ for (id = first; id; id = id->next) { \
+ AnimData *adt = BKE_animdata_from_id(id); \
+ NtId_Type *ntp = (NtId_Type *)id; \
if (ntp->nodetree) { \
- AnimData *adt2= BKE_animdata_from_id((ID *)ntp); \
- BKE_animdata_fix_paths_rename((ID *)ntp, adt2, ref_id, prefix, oldName, newName, 0, 0, 1);\
+ AnimData *adt2 = BKE_animdata_from_id((ID *)ntp); \
+ BKE_animdata_fix_paths_rename((ID *)ntp, adt2, ref_id, prefix, oldName, newName, 0, 0, 1); \
} \
- BKE_animdata_fix_paths_rename(id, adt, ref_id, prefix, oldName, newName, 0, 0, 1);\
+ BKE_animdata_fix_paths_rename(id, adt, ref_id, prefix, oldName, newName, 0, 0, 1); \
}
/* nodes */
@@ -908,7 +908,7 @@ void BKE_all_animdata_fix_paths_rename(ID *ref_id, const char *prefix, const cha
/* Find the first path that matches the given criteria */
// TODO: do we want some method to perform partial matches too?
-KS_Path *BKE_keyingset_find_path (KeyingSet *ks, ID *id, const char group_name[], const char rna_path[], int array_index, int UNUSED(group_mode))
+KS_Path *BKE_keyingset_find_path(KeyingSet *ks, ID *id, const char group_name[], const char rna_path[], int array_index, int UNUSED(group_mode))
{
KS_Path *ksp;
@@ -919,20 +919,20 @@ KS_Path *BKE_keyingset_find_path (KeyingSet *ks, ID *id, const char group_name[]
/* loop over paths in the current KeyingSet, finding the first one where all settings match
* (i.e. the first one where none of the checks fail and equal 0)
*/
- for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
- short eq_id=1, eq_path=1, eq_index=1, eq_group=1;
+ for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
+ short eq_id = 1, eq_path = 1, eq_index = 1, eq_group = 1;
/* id */
if (id != ksp->id)
- eq_id= 0;
+ eq_id = 0;
/* path */
- if ((ksp->rna_path==NULL) || strcmp(rna_path, ksp->rna_path))
- eq_path= 0;
+ if ((ksp->rna_path == NULL) || strcmp(rna_path, ksp->rna_path))
+ eq_path = 0;
/* index - need to compare whole-array setting too... */
if (ksp->array_index != array_index)
- eq_index= 0;
+ eq_index = 0;
/* group */
if (group_name) {
@@ -951,19 +951,19 @@ KS_Path *BKE_keyingset_find_path (KeyingSet *ks, ID *id, const char group_name[]
/* Defining Tools --------------------------- */
/* Used to create a new 'custom' KeyingSet for the user, that will be automatically added to the stack */
-KeyingSet *BKE_keyingset_add (ListBase *list, const char idname[], const char name[], short flag, short keyingflag)
+KeyingSet *BKE_keyingset_add(ListBase *list, const char idname[], const char name[], short flag, short keyingflag)
{
KeyingSet *ks;
/* allocate new KeyingSet */
- ks= MEM_callocN(sizeof(KeyingSet), "KeyingSet");
+ ks = MEM_callocN(sizeof(KeyingSet), "KeyingSet");
BLI_strncpy(ks->idname, idname ? idname : name ? name : "KeyingSet", sizeof(ks->idname));
BLI_strncpy(ks->name, name ? name : idname ? idname : "Keying Set", sizeof(ks->name));
- ks->flag= flag;
- ks->keyingflag= keyingflag;
+ ks->flag = flag;
+ ks->keyingflag = keyingflag;
/* add KeyingSet to list */
BLI_addtail(list, ks);
@@ -981,7 +981,7 @@ KeyingSet *BKE_keyingset_add (ListBase *list, const char idname[], const char na
/* Add a path to a KeyingSet. Nothing is returned for now...
* Checks are performed to ensure that destination is appropriate for the KeyingSet in question
*/
-KS_Path *BKE_keyingset_add_path (KeyingSet *ks, ID *id, const char group_name[], const char rna_path[], int array_index, short flag, short groupmode)
+KS_Path *BKE_keyingset_add_path(KeyingSet *ks, ID *id, const char group_name[], const char rna_path[], int array_index, short flag, short groupmode)
{
KS_Path *ksp;
@@ -1005,27 +1005,27 @@ KS_Path *BKE_keyingset_add_path (KeyingSet *ks, ID *id, const char group_name[],
}
/* allocate a new KeyingSet Path */
- ksp= MEM_callocN(sizeof(KS_Path), "KeyingSet Path");
+ ksp = MEM_callocN(sizeof(KS_Path), "KeyingSet Path");
/* just store absolute info */
- ksp->id= id;
+ ksp->id = id;
if (group_name)
BLI_strncpy(ksp->group, group_name, sizeof(ksp->group));
else
- ksp->group[0]= '\0';
+ ksp->group[0] = '\0';
/* store additional info for relative paths (just in case user makes the set relative) */
if (id)
- ksp->idtype= GS(id->name);
+ ksp->idtype = GS(id->name);
/* just copy path info */
// TODO: should array index be checked too?
- ksp->rna_path= BLI_strdupn(rna_path, strlen(rna_path));
- ksp->array_index= array_index;
+ ksp->rna_path = BLI_strdupn(rna_path, strlen(rna_path));
+ ksp->array_index = array_index;
/* store flags */
- ksp->flag= flag;
- ksp->groupmode= groupmode;
+ ksp->flag = flag;
+ ksp->groupmode = groupmode;
/* add KeyingSet path to KeyingSet */
BLI_addtail(&ks->paths, ksp);
@@ -1057,11 +1057,11 @@ void BKE_keyingsets_copy(ListBase *newlist, ListBase *list)
BLI_duplicatelist(newlist, list);
- for (ksn=newlist->first; ksn; ksn=ksn->next) {
+ for (ksn = newlist->first; ksn; ksn = ksn->next) {
BLI_duplicatelist(&ksn->paths, &ksn->paths);
- for (kspn=ksn->paths.first; kspn; kspn=kspn->next)
- kspn->rna_path= MEM_dupallocN(kspn->rna_path);
+ for (kspn = ksn->paths.first; kspn; kspn = kspn->next)
+ kspn->rna_path = MEM_dupallocN(kspn->rna_path);
}
}
@@ -1077,8 +1077,8 @@ void BKE_keyingset_free(KeyingSet *ks)
return;
/* free each path as we go to avoid looping twice */
- for (ksp= ks->paths.first; ksp; ksp= kspn) {
- kspn= ksp->next;
+ for (ksp = ks->paths.first; ksp; ksp = kspn) {
+ kspn = ksp->next;
BKE_keyingset_free_path(ks, ksp);
}
}
@@ -1093,10 +1093,10 @@ void BKE_keyingsets_free(ListBase *list)
return;
/* loop over KeyingSets freeing them
- * - BKE_keyingset_free() doesn't free the set itself, but it frees its sub-data
+ * - BKE_keyingset_free() doesn't free the set itself, but it frees its sub-data
*/
- for (ks= list->first; ks; ks= ksn) {
- ksn= ks->next;
+ for (ks = list->first; ks; ks = ksn) {
+ ksn = ks->next;
BKE_keyingset_free(ks);
BLI_freelinkN(list, ks);
}
@@ -1113,25 +1113,25 @@ void BKE_keyingsets_free(ListBase *list)
* - path: original path string (as stored in F-Curve data)
* - dst: destination string to write data to
*/
-static short animsys_remap_path (AnimMapper *UNUSED(remap), char *path, char **dst)
+static short animsys_remap_path(AnimMapper *UNUSED(remap), char *path, char **dst)
{
/* is there a valid remapping table to use? */
//if (remap) {
- /* find a matching entry... to use to remap */
- // ...TODO...
+ /* find a matching entry... to use to remap */
+ // ...TODO...
//}
/* nothing suitable found, so just set dst to look at path (i.e. no alloc/free needed) */
- *dst= path;
+ *dst = path;
return 0;
}
/* less then 1.0 evaluates to false, use epsilon to avoid float error */
-#define ANIMSYS_FLOAT_AS_BOOL(value) ((value) > ((1.0f-FLT_EPSILON)))
+#define ANIMSYS_FLOAT_AS_BOOL(value) ((value) > ((1.0f - FLT_EPSILON)))
/* Write the given value to a setting using RNA, and return success */
-static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_index, float value)
+static short animsys_write_rna_setting(PointerRNA *ptr, char *path, int array_index, float value)
{
PropertyRNA *prop;
PointerRNA new_ptr;
@@ -1142,13 +1142,13 @@ static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_i
if (RNA_path_resolve(ptr, path, &new_ptr, &prop)) {
/* set value - only for animatable numerical values */
if (RNA_property_animateable(&new_ptr, prop)) {
- int array_len= RNA_property_array_length(&new_ptr, prop);
+ int array_len = RNA_property_array_length(&new_ptr, prop);
if (array_len && array_index >= array_len) {
if (G.debug & G_DEBUG) {
printf("Animato: Invalid array index. ID = '%s', '%s[%d]', array length is %d\n",
- (ptr && ptr->id.data) ? (((ID *)ptr->id.data)->name+2) : "<No ID>",
- path, array_index, array_len-1);
+ (ptr && ptr->id.data) ? (((ID *)ptr->id.data)->name + 2) : "<No ID>",
+ path, array_index, array_len - 1);
}
return 0;
@@ -1205,7 +1205,7 @@ static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_i
* as having been updated. this flag does not cause any updates to
* be run, it's for e.g. render engines to synchronize data */
if (new_ptr.id.data) {
- ID *id= new_ptr.id.data;
+ ID *id = new_ptr.id.data;
id->flag |= LIB_ID_RECALC;
DAG_id_type_tag(G.main, GS(id->name));
}
@@ -1220,26 +1220,26 @@ static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_i
// where some channels will not exist, but shouldn't lock up Action
if (G.debug & G_DEBUG) {
printf("Animato: Invalid path. ID = '%s', '%s[%d]'\n",
- (ptr && ptr->id.data) ? (((ID *)ptr->id.data)->name+2) : "<No ID>",
- path, array_index);
+ (ptr && ptr->id.data) ? (((ID *)ptr->id.data)->name + 2) : "<No ID>",
+ path, array_index);
}
return 0;
}
}
/* Simple replacement based data-setting of the FCurve using RNA */
-static short animsys_execute_fcurve (PointerRNA *ptr, AnimMapper *remap, FCurve *fcu)
+static short animsys_execute_fcurve(PointerRNA *ptr, AnimMapper *remap, FCurve *fcu)
{
char *path = NULL;
- short free_path=0;
- short ok= 0;
+ short free_path = 0;
+ short ok = 0;
/* get path, remapped as appropriate to work in its new environment */
- free_path= animsys_remap_path(remap, fcu->rna_path, &path);
+ free_path = animsys_remap_path(remap, fcu->rna_path, &path);
/* write value to setting */
if (path)
- ok= animsys_write_rna_setting(ptr, path, fcu->array_index, fcu->curval);
+ ok = animsys_write_rna_setting(ptr, path, fcu->array_index, fcu->curval);
/* free temp path-info */
if (free_path)
@@ -1252,16 +1252,16 @@ static short animsys_execute_fcurve (PointerRNA *ptr, AnimMapper *remap, FCurve
/* Evaluate all the F-Curves in the given list
* This performs a set of standard checks. If extra checks are required, separate code should be used
*/
-static void animsys_evaluate_fcurves (PointerRNA *ptr, ListBase *list, AnimMapper *remap, float ctime)
+static void animsys_evaluate_fcurves(PointerRNA *ptr, ListBase *list, AnimMapper *remap, float ctime)
{
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) {
+ if ((fcu->grp == NULL) || (fcu->grp->flag & AGRP_MUTED) == 0) {
/* check if this curve should be skipped */
- if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) {
+ if ((fcu->flag & (FCURVE_MUTED | FCURVE_DISABLED)) == 0) {
calculate_fcurve(fcu, ctime);
animsys_execute_fcurve(ptr, remap, fcu);
}
@@ -1273,25 +1273,25 @@ static void animsys_evaluate_fcurves (PointerRNA *ptr, ListBase *list, AnimMappe
/* Driver Evaluation */
/* Evaluate Drivers */
-static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctime)
+static void animsys_evaluate_drivers(PointerRNA *ptr, AnimData *adt, float ctime)
{
FCurve *fcu;
/* 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) {
- ChannelDriver *driver= fcu->driver;
- short ok= 0;
+ for (fcu = adt->drivers.first; fcu; fcu = fcu->next) {
+ ChannelDriver *driver = fcu->driver;
+ short ok = 0;
/* check if this driver's curve should be skipped */
- if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) {
+ if ((fcu->flag & (FCURVE_MUTED | FCURVE_DISABLED)) == 0) {
/* check if driver itself is tagged for recalculation */
- if ((driver) && !(driver->flag & DRIVER_FLAG_INVALID)/*&& (driver->flag & DRIVER_FLAG_RECALC)*/) { // XXX driver recalc flag is not set yet by depsgraph!
+ if ((driver) && !(driver->flag & DRIVER_FLAG_INVALID) /*&& (driver->flag & DRIVER_FLAG_RECALC)*/) { // XXX driver recalc flag is not set yet by depsgraph!
/* evaluate this using values set already in other places */
// NOTE: for 'layering' option later on, we should check if we should remove old value before adding new to only be done when drivers only changed
calculate_fcurve(fcu, ctime);
- ok= animsys_execute_fcurve(ptr, NULL, fcu);
+ ok = animsys_execute_fcurve(ptr, NULL, fcu);
/* clear recalc flag */
driver->flag &= ~DRIVER_FLAG_RECALC;
@@ -1311,7 +1311,7 @@ static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctim
* to reduce the amount of times that users end up having to "revive" wrongly-assigned
* actions
*/
-static void action_idcode_patch_check (ID *id, bAction *act)
+static void action_idcode_patch_check(ID *id, bAction *act)
{
int idcode = 0;
@@ -1324,7 +1324,7 @@ static void action_idcode_patch_check (ID *id, bAction *act)
/* the actual checks... hopefully not too much of a performance hit in the long run... */
if (act->idroot == 0) {
/* use the current root if not set already (i.e. newly created actions and actions from 2.50-2.57 builds)
- * - this has problems if there are 2 users, and the first one encountered is the invalid one
+ * - this has problems if there are 2 users, and the first one encountered is the invalid one
* in which case, the user will need to manually fix this (?)
*/
act->idroot = idcode;
@@ -1333,7 +1333,7 @@ static void action_idcode_patch_check (ID *id, bAction *act)
/* only report this error if debug mode is enabled (to save performance everywhere else) */
if (G.debug & G_DEBUG) {
printf("AnimSys Safety Check Failed: Action '%s' is not meant to be used from ID-Blocks of type %d such as '%s'\n",
- act->id.name+2, idcode, id->name);
+ act->id.name + 2, idcode, id->name);
}
}
}
@@ -1347,7 +1347,7 @@ void animsys_evaluate_action_group(PointerRNA *ptr, bAction *act, bActionGroup *
/* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */
if (ELEM(NULL, act, agrp)) return;
- if ((remap) && (remap->target != act)) remap= NULL;
+ if ((remap) && (remap->target != act)) remap = NULL;
action_idcode_patch_check(ptr->id.data, act);
@@ -1356,9 +1356,9 @@ 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) {
+ if ((fcu->flag & (FCURVE_MUTED | FCURVE_DISABLED)) == 0) {
calculate_fcurve(fcu, ctime);
animsys_execute_fcurve(ptr, remap, fcu);
}
@@ -1370,7 +1370,7 @@ void animsys_evaluate_action(PointerRNA *ptr, bAction *act, AnimMapper *remap, f
{
/* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */
if (act == NULL) return;
- if ((remap) && (remap->target != act)) remap= NULL;
+ if ((remap) && (remap->target != act)) remap = NULL;
action_idcode_patch_check(ptr->id.data, act);
@@ -1382,18 +1382,18 @@ void animsys_evaluate_action(PointerRNA *ptr, bAction *act, AnimMapper *remap, f
/* NLA System - Evaluation */
/* calculate influence of strip based for given frame based on blendin/out values */
-static float nlastrip_get_influence (NlaStrip *strip, float cframe)
+static float nlastrip_get_influence(NlaStrip *strip, float cframe)
{
/* sanity checks - normalize the blendin/out values? */
- strip->blendin= fabsf(strip->blendin);
- strip->blendout= fabsf(strip->blendout);
+ strip->blendin = fabsf(strip->blendin);
+ strip->blendout = fabsf(strip->blendout);
/* result depends on where frame is in respect to blendin/out values */
- if (IS_EQ(strip->blendin, 0)==0 && (cframe <= (strip->start + strip->blendin))) {
+ if (IS_EQ(strip->blendin, 0) == 0 && (cframe <= (strip->start + strip->blendin))) {
/* there is some blend-in */
return fabsf(cframe - strip->start) / (strip->blendin);
}
- else if (IS_EQ(strip->blendout, 0)==0 && (cframe >= (strip->end - strip->blendout))) {
+ else if (IS_EQ(strip->blendout, 0) == 0 && (cframe >= (strip->end - strip->blendout))) {
/* there is some blend-out */
return fabsf(strip->end - cframe) / (strip->blendout);
}
@@ -1404,13 +1404,13 @@ static float nlastrip_get_influence (NlaStrip *strip, float cframe)
}
/* evaluate the evaluation time and influence for the strip, storing the results in the strip */
-static void nlastrip_evaluate_controls (NlaStrip *strip, float ctime)
+static void nlastrip_evaluate_controls(NlaStrip *strip, float ctime)
{
/* firstly, analytically generate values for influence and time (if applicable) */
if ((strip->flag & NLASTRIP_FLAG_USR_TIME) == 0)
- strip->strip_time= nlastrip_get_frame(strip, ctime, NLATIME_CONVERT_EVAL);
+ strip->strip_time = nlastrip_get_frame(strip, ctime, NLATIME_CONVERT_EVAL);
if ((strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) == 0)
- strip->influence= nlastrip_get_influence(strip, ctime);
+ strip->influence = nlastrip_get_influence(strip, ctime);
/* now strip's evaluate F-Curves for these settings (if applicable) */
if (strip->fcurves.first) {
@@ -1429,23 +1429,23 @@ static void nlastrip_evaluate_controls (NlaStrip *strip, float ctime)
*/
// NOTE: if we add any more of these special cases, we better group them up nicely...
if ((strip->flag & NLASTRIP_FLAG_USR_TIME) && (strip->flag & NLASTRIP_FLAG_USR_TIME_CYCLIC))
- strip->strip_time= fmod(strip->strip_time - strip->actstart, strip->actend - strip->actstart);
+ strip->strip_time = fmod(strip->strip_time - strip->actstart, strip->actend - strip->actstart);
}
/* gets the strip active at the current time for a list of strips for evaluation purposes */
-NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short index, float ctime)
+NlaEvalStrip *nlastrips_ctime_get_strip(ListBase *list, ListBase *strips, short index, float ctime)
{
- NlaStrip *strip, *estrip=NULL;
+ NlaStrip *strip, *estrip = NULL;
NlaEvalStrip *nes;
- short side= 0;
+ short side = 0;
/* loop over strips, checking if they fall within the range */
- for (strip= strips->first; strip; strip= strip->next) {
+ for (strip = strips->first; strip; strip = strip->next) {
/* check if current time occurs within this strip */
if (IN_RANGE_INCL(ctime, strip->start, strip->end)) {
/* this strip is active, so try to use it */
- estrip= strip;
- side= NES_TIME_WITHIN;
+ estrip = strip;
+ side = NES_TIME_WITHIN;
break;
}
@@ -1454,22 +1454,22 @@ NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short
if (strip == strips->first) {
/* before first strip - only try to use it if it extends backwards in time too */
if (strip->extendmode == NLASTRIP_EXTEND_HOLD)
- estrip= strip;
+ estrip = strip;
/* side is 'before' regardless of whether there's a useful strip */
- side= NES_TIME_BEFORE;
+ side = NES_TIME_BEFORE;
}
else {
/* before next strip - previous strip has ended, but next hasn't begun,
* so blending mode depends on whether strip is being held or not...
- * - only occurs when no transition strip added, otherwise the transition would have
- * been picked up above...
+ * - only occurs when no transition strip added, otherwise the transition would have
+ * been picked up above...
*/
- strip= strip->prev;
+ strip = strip->prev;
if (strip->extendmode != NLASTRIP_EXTEND_NOTHING)
- estrip= strip;
- side= NES_TIME_AFTER;
+ estrip = strip;
+ side = NES_TIME_AFTER;
}
break;
}
@@ -1479,9 +1479,9 @@ NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short
/* only if this is the last strip should we do anything, and only if that is being held */
if (strip == strips->last) {
if (strip->extendmode != NLASTRIP_EXTEND_NOTHING)
- estrip= strip;
+ estrip = strip;
- side= NES_TIME_AFTER;
+ side = NES_TIME_AFTER;
break;
}
@@ -1498,15 +1498,15 @@ NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short
/* if ctime was not within the boundaries of the strip, clamp! */
switch (side) {
case NES_TIME_BEFORE: /* extend first frame only */
- ctime= estrip->start;
+ ctime = estrip->start;
break;
case NES_TIME_AFTER: /* extend last frame only */
- ctime= estrip->end;
+ ctime = estrip->end;
break;
}
/* evaluate strip's evaluation controls
- * - skip if no influence (i.e. same effect as muting the strip)
+ * - skip if no influence (i.e. same effect as muting the strip)
* - negative influence is not supported yet... how would that be defined?
*/
// TODO: this sounds a bit hacky having a few isolated F-Curves stuck on some data it operates on...
@@ -1535,12 +1535,12 @@ NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short
}
/* add to list of strips we need to evaluate */
- nes= MEM_callocN(sizeof(NlaEvalStrip), "NlaEvalStrip");
+ nes = MEM_callocN(sizeof(NlaEvalStrip), "NlaEvalStrip");
- nes->strip= estrip;
- nes->strip_mode= side;
- nes->track_index= index;
- nes->strip_time= estrip->strip_time;
+ nes->strip = estrip;
+ nes->strip_mode = side;
+ nes->track_index = index;
+ nes->strip_time = estrip->strip_time;
if (list)
BLI_addtail(list, nes);
@@ -1553,7 +1553,7 @@ NlaEvalStrip *nlastrips_ctime_get_strip (ListBase *list, ListBase *strips, short
/* find an NlaEvalChannel that matches the given criteria
* - ptr and prop are the RNA data to find a match for
*/
-static NlaEvalChannel *nlaevalchan_find_match (ListBase *channels, PointerRNA *ptr, PropertyRNA *prop, int array_index)
+static NlaEvalChannel *nlaevalchan_find_match(ListBase *channels, PointerRNA *ptr, PropertyRNA *prop, int array_index)
{
NlaEvalChannel *nec;
@@ -1562,7 +1562,7 @@ static NlaEvalChannel *nlaevalchan_find_match (ListBase *channels, PointerRNA *p
return NULL;
/* loop through existing channels, checking for a channel which affects the same property */
- for (nec= channels->first; nec; nec= nec->next) {
+ for (nec = channels->first; nec; nec = nec->next) {
/* - comparing the PointerRNA's is done by comparing the pointers
* to the actual struct the property resides in, since that all the
* other data stored in PointerRNA cannot allow us to definitively
@@ -1577,10 +1577,10 @@ static NlaEvalChannel *nlaevalchan_find_match (ListBase *channels, PointerRNA *p
}
/* verify that an appropriate NlaEvalChannel for this F-Curve exists */
-static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes, FCurve *fcu, short *newChan)
+static NlaEvalChannel *nlaevalchan_verify(PointerRNA *ptr, ListBase *channels, NlaEvalStrip *nes, FCurve *fcu, short *newChan)
{
NlaEvalChannel *nec;
- NlaStrip *strip= nes->strip;
+ NlaStrip *strip = nes->strip;
PropertyRNA *prop;
PointerRNA new_ptr;
char *path = NULL;
@@ -1591,50 +1591,50 @@ static NlaEvalChannel *nlaevalchan_verify (PointerRNA *ptr, ListBase *channels,
return NULL;
/* get RNA pointer+property info from F-Curve for more convenient handling */
- /* get path, remapped as appropriate to work in its new environment */
+ /* get path, remapped as appropriate to work in its new environment */
/* free_path= */ /* UNUSED */ animsys_remap_path(strip->remap, fcu->rna_path, &path);
- /* a valid property must be available, and it must be animatable */
+ /* a valid property must be available, and it must be animatable */
if (RNA_path_resolve(ptr, path, &new_ptr, &prop) == 0) {
if (G.debug & G_DEBUG) printf("NLA Strip Eval: Cannot resolve path\n");
return NULL;
}
- /* only ok if animatable */
+ /* only ok if animatable */
else if (RNA_property_animateable(&new_ptr, prop) == 0) {
if (G.debug & G_DEBUG) printf("NLA Strip Eval: Property not animatable\n");
return NULL;
}
/* try to find a match */
- nec= nlaevalchan_find_match(channels, &new_ptr, prop, fcu->array_index);
+ nec = nlaevalchan_find_match(channels, &new_ptr, prop, fcu->array_index);
/* allocate a new struct for this if none found */
if (nec == NULL) {
- nec= MEM_callocN(sizeof(NlaEvalChannel), "NlaEvalChannel");
- *newChan= 1;
+ nec = MEM_callocN(sizeof(NlaEvalChannel), "NlaEvalChannel");
+ *newChan = 1;
BLI_addtail(channels, nec);
- nec->ptr= new_ptr;
- nec->prop= prop;
- nec->index= fcu->array_index;
+ nec->ptr = new_ptr;
+ nec->prop = prop;
+ nec->index = fcu->array_index;
}
else
- *newChan= 0;
+ *newChan = 0;
/* we can now return */
return nec;
}
/* accumulate (i.e. blend) the given value on to the channel it affects */
-static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, short newChan, float value)
+static void nlaevalchan_accumulate(NlaEvalChannel *nec, NlaEvalStrip *nes, short newChan, float value)
{
- NlaStrip *strip= nes->strip;
- short blendmode= strip->blendmode;
- float inf= strip->influence;
+ NlaStrip *strip = nes->strip;
+ short blendmode = strip->blendmode;
+ float inf = strip->influence;
/* if channel is new, just store value regardless of blending factors, etc. */
if (newChan) {
- nec->value= value;
+ nec->value = value;
return;
}
@@ -1671,13 +1671,13 @@ static void nlaevalchan_accumulate (NlaEvalChannel *nec, NlaEvalStrip *nes, shor
* - the influence of the accumulated data (elsewhere, that is called dstweight)
* is 1 - influence, since the strip's influence is srcweight
*/
- nec->value= nec->value * (1.0f - inf) + value;
+ nec->value = nec->value * (1.0f - inf) + value;
break;
}
}
/* accumulate the results of a temporary buffer with the results of the full-buffer */
-static void nlaevalchan_buffers_accumulate (ListBase *channels, ListBase *tmp_buffer, NlaEvalStrip *nes)
+static void nlaevalchan_buffers_accumulate(ListBase *channels, ListBase *tmp_buffer, NlaEvalStrip *nes)
{
NlaEvalChannel *nec, *necn, *necd;
@@ -1686,12 +1686,12 @@ static void nlaevalchan_buffers_accumulate (ListBase *channels, ListBase *tmp_bu
return;
/* accumulate results in tmp_channels buffer to the accumulation buffer */
- for (nec= tmp_buffer->first; nec; nec= necn) {
+ for (nec = tmp_buffer->first; nec; nec = necn) {
/* get pointer to next channel in case we remove the current channel from the temp-buffer */
- necn= nec->next;
+ necn = nec->next;
/* try to find an existing matching channel for this setting in the accumulation buffer */
- necd= nlaevalchan_find_match(channels, &nec->ptr, nec->prop, nec->index);
+ necd = nlaevalchan_find_match(channels, &nec->ptr, nec->prop, nec->index);
/* if there was a matching channel already in the buffer, accumulate to it,
* otherwise, add the current channel to the buffer for efficiency
@@ -1712,39 +1712,39 @@ static void nlaevalchan_buffers_accumulate (ListBase *channels, ListBase *tmp_bu
/* F-Modifier stack joining/separation utilities - should we generalise these for BLI_listbase.h interface? */
/* Temporarily join two lists of modifiers together, storing the result in a third list */
-static void nlaeval_fmodifiers_join_stacks (ListBase *result, ListBase *list1, ListBase *list2)
+static void nlaeval_fmodifiers_join_stacks(ListBase *result, ListBase *list1, ListBase *list2)
{
FModifier *fcm1, *fcm2;
/* if list1 is invalid... */
if (ELEM(NULL, list1, list1->first)) {
if (list2 && list2->first) {
- result->first= list2->first;
- result->last= list2->last;
+ result->first = list2->first;
+ result->last = list2->last;
}
}
/* if list 2 is invalid... */
else if (ELEM(NULL, list2, list2->first)) {
- result->first= list1->first;
- result->last= list1->last;
+ result->first = list1->first;
+ result->last = list1->last;
}
else {
/* list1 should be added first, and list2 second, with the endpoints of these being the endpoints for result
- * - the original lists must be left unchanged though, as we need that fact for restoring
+ * - the original lists must be left unchanged though, as we need that fact for restoring
*/
- result->first= list1->first;
- result->last= list2->last;
+ result->first = list1->first;
+ result->last = list2->last;
- fcm1= list1->last;
- fcm2= list2->first;
+ fcm1 = list1->last;
+ fcm2 = list2->first;
- fcm1->next= fcm2;
- fcm2->prev= fcm1;
+ fcm1->next = fcm2;
+ fcm2->prev = fcm1;
}
}
/* Split two temporary lists of modifiers */
-static void nlaeval_fmodifiers_split_stacks (ListBase *list1, ListBase *list2)
+static void nlaeval_fmodifiers_split_stacks(ListBase *list1, ListBase *list2)
{
FModifier *fcm1, *fcm2;
@@ -1755,21 +1755,21 @@ static void nlaeval_fmodifiers_split_stacks (ListBase *list1, ListBase *list2)
return;
/* get endpoints */
- fcm1= list1->last;
- fcm2= list2->first;
+ fcm1 = list1->last;
+ fcm2 = list2->first;
/* clear their links */
- fcm1->next= NULL;
- fcm2->prev= NULL;
+ fcm1->next = NULL;
+ fcm2->prev = NULL;
}
/* ---------------------- */
/* evaluate action-clip strip */
-static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
+static void nlastrip_evaluate_actionclip(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
{
ListBase tmp_modifiers = {NULL, NULL};
- NlaStrip *strip= nes->strip;
+ NlaStrip *strip = nes->strip;
FCurve *fcu;
float evaltime;
@@ -1788,16 +1788,16 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, L
nlaeval_fmodifiers_join_stacks(&tmp_modifiers, &strip->modifiers, modifiers);
/* evaluate strip's modifiers which modify time to evaluate the base curves at */
- evaltime= evaluate_time_fmodifiers(&tmp_modifiers, NULL, 0.0f, strip->strip_time);
+ evaltime = evaluate_time_fmodifiers(&tmp_modifiers, NULL, 0.0f, strip->strip_time);
/* evaluate all the F-Curves in the action, saving the relevant pointers to data that will need to be used */
- for (fcu= strip->act->curves.first; fcu; fcu= fcu->next) {
+ for (fcu = strip->act->curves.first; fcu; fcu = fcu->next) {
NlaEvalChannel *nec;
float value = 0.0f;
short newChan = -1;
/* check if this curve should be skipped */
- if (fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED))
+ if (fcu->flag & (FCURVE_MUTED | FCURVE_DISABLED))
continue;
if ((fcu->grp) && (fcu->grp->flag & AGRP_MUTED))
continue;
@@ -1805,7 +1805,7 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, L
/* evaluate the F-Curve's value for the time given in the strip
* NOTE: we use the modified time here, since strip's F-Curve Modifiers are applied on top of this
*/
- value= evaluate_fcurve(fcu, evaltime);
+ value = evaluate_fcurve(fcu, evaltime);
/* apply strip's F-Curve Modifiers on this value
* NOTE: we apply the strip's original evaluation time not the modified one (as per standard F-Curve eval)
@@ -1816,7 +1816,7 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, L
/* get an NLA evaluation channel to work with, and accumulate the evaluated value with the value(s)
* stored in this channel if it has been used already
*/
- nec= nlaevalchan_verify(ptr, channels, nes, fcu, &newChan);
+ nec = nlaevalchan_verify(ptr, channels, nes, fcu, &newChan);
if (nec)
nlaevalchan_accumulate(nec, nes, newChan, value);
}
@@ -1826,7 +1826,7 @@ static void nlastrip_evaluate_actionclip (PointerRNA *ptr, ListBase *channels, L
}
/* evaluate transition strip */
-static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
+static void nlastrip_evaluate_transition(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
{
ListBase tmp_channels = {NULL, NULL};
ListBase tmp_modifiers = {NULL, NULL};
@@ -1844,12 +1844,12 @@ static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, L
* otherwise they will be interpolated wrong
*/
if (nes->strip->flag & NLASTRIP_FLAG_REVERSE) {
- s1= nes->strip->next;
- s2= nes->strip->prev;
+ s1 = nes->strip->next;
+ s2 = nes->strip->prev;
}
else {
- s1= nes->strip->prev;
- s2= nes->strip->next;
+ s1 = nes->strip->prev;
+ s2 = nes->strip->next;
}
/* prepare template for 'evaluation strip'
@@ -1859,18 +1859,18 @@ static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, L
* which doubles up as an additional weighting factor for the strip influences
* which allows us to appear to be 'interpolating' between the two extremes
*/
- tmp_nes= *nes;
+ tmp_nes = *nes;
/* evaluate these strips into a temp-buffer (tmp_channels) */
// FIXME: modifier evalation here needs some work...
- /* first strip */
- tmp_nes.strip_mode= NES_TIME_TRANSITION_START;
- tmp_nes.strip= s1;
+ /* first strip */
+ tmp_nes.strip_mode = NES_TIME_TRANSITION_START;
+ tmp_nes.strip = s1;
nlastrip_evaluate(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes);
- /* second strip */
- tmp_nes.strip_mode= NES_TIME_TRANSITION_END;
- tmp_nes.strip= s2;
+ /* second strip */
+ tmp_nes.strip_mode = NES_TIME_TRANSITION_END;
+ tmp_nes.strip = s2;
nlastrip_evaluate(ptr, &tmp_channels, &tmp_modifiers, &tmp_nes);
@@ -1882,11 +1882,11 @@ static void nlastrip_evaluate_transition (PointerRNA *ptr, ListBase *channels, L
}
/* evaluate meta-strip */
-static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
+static void nlastrip_evaluate_meta(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
{
ListBase tmp_channels = {NULL, NULL};
ListBase tmp_modifiers = {NULL, NULL};
- NlaStrip *strip= nes->strip;
+ NlaStrip *strip = nes->strip;
NlaEvalStrip *tmp_nes;
float evaltime;
@@ -1902,8 +1902,8 @@ static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, ListBas
nlaeval_fmodifiers_join_stacks(&tmp_modifiers, &strip->modifiers, modifiers);
/* find the child-strip to evaluate */
- evaltime= (nes->strip_time * (strip->end - strip->start)) + strip->start;
- tmp_nes= nlastrips_ctime_get_strip(NULL, &strip->strips, -1, evaltime);
+ evaltime = (nes->strip_time * (strip->end - strip->start)) + strip->start;
+ tmp_nes = nlastrips_ctime_get_strip(NULL, &strip->strips, -1, evaltime);
if (tmp_nes == NULL)
return;
@@ -1925,7 +1925,7 @@ static void nlastrip_evaluate_meta (PointerRNA *ptr, ListBase *channels, ListBas
/* evaluates the given evaluation strip */
void nlastrip_evaluate(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes)
{
- NlaStrip *strip= nes->strip;
+ NlaStrip *strip = nes->strip;
/* to prevent potential infinite recursion problems (i.e. transition strip, beside meta strip containing a transition
* several levels deep inside it), we tag the current strip as being evaluated, and clear this when we leave
@@ -1965,11 +1965,11 @@ void nladata_flush_channels(ListBase *channels)
return;
/* for each channel with accumulated values, write its value on the property it affects */
- for (nec= channels->first; nec; nec= nec->next) {
- PointerRNA *ptr= &nec->ptr;
- PropertyRNA *prop= nec->prop;
- int array_index= nec->index;
- float value= nec->value;
+ for (nec = channels->first; nec; nec = nec->next) {
+ PointerRNA *ptr = &nec->ptr;
+ PropertyRNA *prop = nec->prop;
+ int array_index = nec->index;
+ float value = nec->value;
/* write values - see animsys_write_rna_setting() to sync the code */
switch (RNA_property_type(prop)) {
@@ -2007,23 +2007,23 @@ void nladata_flush_channels(ListBase *channels)
* ! This is exported so that keyframing code can use this for make use of it for anim layers support
* > echannels: (list<NlaEvalChannels>) evaluation channels with calculated values
*/
-static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData *adt, float ctime)
+static void animsys_evaluate_nla(ListBase *echannels, PointerRNA *ptr, AnimData *adt, float ctime)
{
NlaTrack *nlt;
- short track_index=0;
+ short track_index = 0;
short has_strips = 0;
- ListBase estrips= {NULL, NULL};
+ ListBase estrips = {NULL, NULL};
NlaEvalStrip *nes;
/* 1. get the stack of strips to evaluate at current time (influence calculated here) */
- for (nlt=adt->nla_tracks.first; nlt; nlt=nlt->next, track_index++) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next, track_index++) {
/* stop here if tweaking is on and this strip is the tweaking track (it will be the first one that's 'disabled')... */
if ((adt->flag & ADT_NLA_EDIT_ON) && (nlt->flag & NLATRACK_DISABLED))
break;
/* skip if we're only considering a track tagged 'solo' */
- if ((adt->flag & ADT_NLA_SOLO_TRACK) && (nlt->flag & NLATRACK_SOLO)==0)
+ if ((adt->flag & ADT_NLA_SOLO_TRACK) && (nlt->flag & NLATRACK_SOLO) == 0)
continue;
/* skip if track is muted */
if (nlt->flag & NLATRACK_MUTED)
@@ -2033,11 +2033,11 @@ static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData
* - used for mainly for still allowing normal action evaluation...
*/
if (nlt->strips.first)
- has_strips= 1;
+ has_strips = 1;
/* otherwise, get strip to evaluate for this channel */
- nes= nlastrips_ctime_get_strip(&estrips, &nlt->strips, track_index, ctime);
- if (nes) nes->track= nlt;
+ nes = nlastrips_ctime_get_strip(&estrips, &nlt->strips, track_index, ctime);
+ if (nes) nes->track = nlt;
}
/* add 'active' Action (may be tweaking track) as last strip to evaluate in NLA stack
@@ -2045,14 +2045,14 @@ static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData
* - however, if the 'solo' track houses the current 'tweaking' strip,
* then we should allow this to play, otherwise nothing happens
*/
- if ((adt->action) && ((adt->flag & ADT_NLA_SOLO_TRACK)==0 || (adt->flag & ADT_NLA_EDIT_ON))) {
+ if ((adt->action) && ((adt->flag & ADT_NLA_SOLO_TRACK) == 0 || (adt->flag & ADT_NLA_EDIT_ON))) {
/* if there are strips, evaluate action as per NLA rules */
if ((has_strips) || (adt->actstrip)) {
/* make dummy NLA strip, and add that to the stack */
- NlaStrip dummy_strip= {NULL};
+ NlaStrip dummy_strip = {NULL};
ListBase dummy_trackslist;
- dummy_trackslist.first= dummy_trackslist.last= &dummy_strip;
+ dummy_trackslist.first = dummy_trackslist.last = &dummy_strip;
if ((nlt) && !(adt->flag & ADT_NLA_EDIT_NOMAP)) {
/* edit active action in-place according to its active strip, so copy the data */
@@ -2061,17 +2061,17 @@ static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData
}
else {
/* set settings of dummy NLA strip from AnimData settings */
- dummy_strip.act= adt->action;
- dummy_strip.remap= adt->remap;
+ dummy_strip.act = adt->action;
+ dummy_strip.remap = adt->remap;
/* action range is calculated taking F-Modifiers into account (which making new strips doesn't do due to the troublesome nature of that) */
calc_action_range(dummy_strip.act, &dummy_strip.actstart, &dummy_strip.actend, 1);
dummy_strip.start = dummy_strip.actstart;
- dummy_strip.end = (IS_EQF(dummy_strip.actstart, dummy_strip.actend)) ? (dummy_strip.actstart + 1.0f): (dummy_strip.actend);
+ dummy_strip.end = (IS_EQF(dummy_strip.actstart, dummy_strip.actend)) ? (dummy_strip.actstart + 1.0f) : (dummy_strip.actend);
- dummy_strip.blendmode= adt->act_blendmode;
- dummy_strip.extendmode= adt->act_extendmode;
- dummy_strip.influence= adt->act_influence;
+ dummy_strip.blendmode = adt->act_blendmode;
+ dummy_strip.extendmode = adt->act_extendmode;
+ dummy_strip.influence = adt->act_influence;
}
/* add this to our list of evaluation strips */
@@ -2091,7 +2091,7 @@ static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData
/* 2. for each strip, evaluate then accumulate on top of existing channels, but don't set values yet */
- for (nes= estrips.first; nes; nes= nes->next)
+ for (nes = estrips.first; nes; nes = nes->next)
nlastrip_evaluate(ptr, echannels, NULL, nes);
/* 3. free temporary evaluation data that's not used elsewhere */
@@ -2102,9 +2102,9 @@ static void animsys_evaluate_nla (ListBase *echannels, PointerRNA *ptr, AnimData
* - All channels that will be affected are not cleared anymore. Instead, we just evaluate into
* some temp channels, where values can be accumulated in one go.
*/
-static void animsys_calculate_nla (PointerRNA *ptr, AnimData *adt, float ctime)
+static void animsys_calculate_nla(PointerRNA *ptr, AnimData *adt, float ctime)
{
- ListBase echannels= {NULL, NULL};
+ ListBase echannels = {NULL, NULL};
// TODO: need to zero out all channels used, otherwise we have problems with threadsafety
// and also when the user jumps between different times instead of moving sequentially...
@@ -2126,7 +2126,7 @@ static void animsys_calculate_nla (PointerRNA *ptr, AnimData *adt, float ctime)
/* Add or get existing Override for given setting */
#if 0
-AnimOverride *BKE_animsys_validate_override (PointerRNA *UNUSED(ptr), char *UNUSED(path), int UNUSED(array_index))
+AnimOverride *BKE_animsys_validate_override(PointerRNA *UNUSED(ptr), char *UNUSED(path), int UNUSED(array_index))
{
// FIXME: need to define how to get overrides
return NULL;
@@ -2136,12 +2136,12 @@ AnimOverride *BKE_animsys_validate_override (PointerRNA *UNUSED(ptr), char *UNUS
/* -------------------- */
/* Evaluate Overrides */
-static void animsys_evaluate_overrides (PointerRNA *ptr, AnimData *adt)
+static void animsys_evaluate_overrides(PointerRNA *ptr, AnimData *adt)
{
AnimOverride *aor;
/* for each override, simply execute... */
- for (aor= adt->overrides.first; aor; aor= aor->next)
+ for (aor = adt->overrides.first; aor; aor = aor->next)
animsys_write_rna_setting(ptr, aor->rna_path, aor->array_index, aor->value);
}
@@ -2176,7 +2176,7 @@ static void animsys_evaluate_overrides (PointerRNA *ptr, AnimData *adt)
*
* Current Status:
* - Currently (as of September 2009), overrides we haven't needed to (fully) implement overrides.
- * However, the code for this is relatively harmless, so is left in the code for now.
+ * However, the code for this is relatively harmless, so is left in the code for now.
*/
/* Evaluation loop for evaluation animation data
@@ -2245,7 +2245,7 @@ void BKE_animsys_evaluate_animdata(Scene *scene, ID *id, AnimData *adt, float ct
}
/* clear recalc flag now */
- adt->recalc= 0;
+ adt->recalc = 0;
}
/* Evaluation of all ID-blocks with Animation Data blocks - Animation Data Only
@@ -2268,25 +2268,25 @@ void BKE_animsys_evaluate_all_animation(Main *main, Scene *scene, float ctime)
* this outside of the function may make things slightly faster?
*/
#define EVAL_ANIM_IDS(first, aflag) \
- for (id= first; id; id= id->next) { \
+ for (id = first; id; id = id->next) { \
if (ID_REAL_USERS(id) > 0) { \
- AnimData *adt= BKE_animdata_from_id(id); \
+ AnimData *adt = BKE_animdata_from_id(id); \
BKE_animsys_evaluate_animdata(scene, id, adt, ctime, aflag); \
} \
}
/* another macro for the "embedded" nodetree cases
* - this is like EVAL_ANIM_IDS, but this handles the case "embedded nodetrees"
* (i.e. scene/material/texture->nodetree) which we need a special exception
- * for, otherwise they'd get skipped
+ * for, otherwise they'd get skipped
* - ntp = "node tree parent" = datablock where node tree stuff resides
*/
#define EVAL_ANIM_NODETREE_IDS(first, NtId_Type, aflag) \
- for (id= first; id; id= id->next) { \
+ for (id = first; id; id = id->next) { \
if (ID_REAL_USERS(id) > 0) { \
- AnimData *adt= BKE_animdata_from_id(id); \
- NtId_Type *ntp= (NtId_Type *)id; \
+ AnimData *adt = BKE_animdata_from_id(id); \
+ NtId_Type *ntp = (NtId_Type *)id; \
if (ntp->nodetree) { \
- AnimData *adt2= BKE_animdata_from_id((ID *)ntp->nodetree); \
+ AnimData *adt2 = BKE_animdata_from_id((ID *)ntp->nodetree); \
BKE_animsys_evaluate_animdata(scene, (ID *)ntp->nodetree, adt2, ctime, ADT_RECALC_ANIM); \
} \
BKE_animsys_evaluate_animdata(scene, id, adt, ctime, aflag); \
@@ -2354,10 +2354,10 @@ void BKE_animsys_evaluate_all_animation(Main *main, Scene *scene, float ctime)
EVAL_ANIM_IDS(main->linestyle.first, ADT_RECALC_ANIM);
/* objects */
- /* ADT_RECALC_ANIM doesn't need to be supplied here, since object AnimData gets
- * this tagged by Depsgraph on framechange. This optimization means that objects
- * linked from other (not-visible) scenes will not need their data calculated.
- */
+ /* ADT_RECALC_ANIM doesn't need to be supplied here, since object AnimData gets
+ * this tagged by Depsgraph on framechange. This optimization means that objects
+ * linked from other (not-visible) scenes will not need their data calculated.
+ */
EVAL_ANIM_IDS(main->object.first, 0);
/* worlds */
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 09b295aabf1..fe95d15f82e 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -459,7 +459,7 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest)
}
}
- hlength1 = bone->ease1 * length * 0.390464f; /* 0.5*sqrt(2)*kappa, the handle length for near-perfect circles */
+ hlength1 = bone->ease1 * length * 0.390464f; /* 0.5f * sqrt(2) * kappa, the handle length for near-perfect circles */
hlength2 = bone->ease2 * length * 0.390464f;
/* evaluate next and prev bones */
@@ -566,14 +566,10 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest)
if (bone->segments > MAX_BBONE_SUBDIV)
bone->segments = MAX_BBONE_SUBDIV;
- BKE_curve_forward_diff_bezier(0.0, h1[0], h2[0], 0.0, data[0],
- MAX_BBONE_SUBDIV, 4*sizeof(float));
- BKE_curve_forward_diff_bezier(0.0, h1[1], length + h2[1], length, data[0]+1,
- MAX_BBONE_SUBDIV, 4*sizeof(float));
- BKE_curve_forward_diff_bezier(0.0, h1[2], h2[2], 0.0, data[0]+2,
- MAX_BBONE_SUBDIV, 4*sizeof(float));
- 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));
+ BKE_curve_forward_diff_bezier(0.0f, h1[0], h2[0], 0.0f, data[0], MAX_BBONE_SUBDIV, 4 * sizeof(float));
+ BKE_curve_forward_diff_bezier(0.0f, h1[1], length + h2[1], length, data[0] + 1, MAX_BBONE_SUBDIV, 4 * sizeof(float));
+ BKE_curve_forward_diff_bezier(0.0f, h1[2], h2[2], 0.0f, data[0] + 2, MAX_BBONE_SUBDIV, 4 * sizeof(float));
+ 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! */
@@ -2545,20 +2541,20 @@ int get_selected_defgroups(Object *ob, char *dg_selection, int defbase_tot)
}
/************** Bounding box ********************/
-int minmax_armature(Object *ob, float min[3], float max[3])
+static int minmax_armature(Object *ob, float r_min[3], float r_max[3])
{
bPoseChannel *pchan;
/* For now, we assume BKE_pose_where_is has already been called (hence we have valid data in pachan). */
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
- DO_MINMAX(pchan->pose_head, min, max);
- DO_MINMAX(pchan->pose_tail, min, max);
+ minmax_v3v3_v3(r_min, r_max, pchan->pose_head);
+ minmax_v3v3_v3(r_min, r_max, pchan->pose_tail);
}
return (ob->pose->chanbase.first != NULL);
}
-void boundbox_armature(Object *ob, float *loc, float *size)
+static void boundbox_armature(Object *ob, float loc[3], float size[3])
{
BoundBox *bb;
float min[3], max[3];
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 3ef2ce56cd6..3450408a0a0 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -177,7 +177,7 @@ static void cdDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
if (dm->numVertData) {
for (i = 0; i < dm->numVertData; i++) {
- DO_MINMAX(cddm->mvert[i].co, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, cddm->mvert[i].co);
}
}
else {
@@ -522,7 +522,7 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm,
glNormal3sv(no); \
} \
glVertex3fv(mvert[index].co); \
-}
+} (void)0
if (cddm->pbvh && cddm->pbvh_draw) {
if (dm->numTessFaceData) {
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index b521285c626..b38f0f78cdb 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -92,7 +92,7 @@ static CM_SOLVER_DEF solvers [] =
/* ********** cloth engine ******* */
/* Prototypes for internal functions.
-*/
+ */
static void cloth_to_object (Object *ob, ClothModifierData *clmd, float (*vertexCos)[3]);
static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm );
static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *dm, float framenr, int first);
@@ -101,10 +101,10 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm );
/******************************************************************************
-*
-* External interface called by modifier.c clothModifier functions.
-*
-******************************************************************************/
+ *
+ * External interface called by modifier.c clothModifier functions.
+ *
+ ******************************************************************************/
/**
* cloth_init - creates a new cloth simulation.
*
@@ -145,8 +145,8 @@ void cloth_init(ClothModifierData *clmd )
clmd->coll_parms->selfepsilon = 0.75;
/* These defaults are copied from softbody.c's
- * softbody_calc_forces() function.
- */
+ * softbody_calc_forces() function.
+ */
clmd->sim_parms->eff_force_scale = 1000.0;
clmd->sim_parms->eff_wind_scale = 250.0;
@@ -419,9 +419,64 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
return ret;
}
+#if 0
+static DerivedMesh *cloth_to_triangles(DerivedMesh *dm)
+{
+ DerivedMesh *result = NULL;
+ unsigned int i = 0, j = 0;
+ unsigned int quads = 0, numfaces = dm->getNumTessFaces(dm);
+ MFace *mface = dm->getTessFaceArray(dm);
+ MFace *mface2 = NULL;
+
+ /* calc faces */
+ for(i = 0; i < numfaces; i++)
+ {
+ if(mface[i].v4)
+ quads++;
+ }
+
+ result = CDDM_from_template(dm, dm->getNumVerts(dm), 0, numfaces + quads, 0, 0);
+
+ DM_copy_vert_data(dm, result, 0, 0, dm->getNumVerts(dm));
+ DM_copy_tessface_data(dm, result, 0, 0, numfaces);
+
+ DM_ensure_tessface(result);
+ mface2 = result->getTessFaceArray(result);
+
+ for(i = 0, j = numfaces; i < numfaces; i++)
+ {
+ // DG TODO: is this necessary?
+ mface2[i].v1 = mface[i].v1;
+ mface2[i].v2 = mface[i].v2;
+ mface2[i].v3 = mface[i].v3;
+
+ mface2[i].v4 = 0;
+ //test_index_face(&mface2[i], &result->faceData, i, 3);
+
+ if(mface[i].v4)
+ {
+ DM_copy_tessface_data(dm, result, i, j, 1);
+
+ mface2[j].v1 = mface[i].v1;
+ mface2[j].v2 = mface[i].v3;
+ mface2[j].v3 = mface[i].v4;
+ mface2[j].v4 = 0;
+ //test_index_face(&mface2[j], &result->faceData, j, 3);
+
+ j++;
+ }
+ }
+
+ CDDM_calc_edges_tessface(result);
+ CDDM_tessfaces_to_faces(result); /* builds ngon faces from tess (mface) faces */
+
+ return result;
+}
+#endif
+
/************************************************
* clothModifier_do - main simulation function
-************************************************/
+ ************************************************/
void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3])
{
PointCache *cache;
@@ -674,10 +729,10 @@ void cloth_free_modifier_extern(ClothModifierData *clmd )
}
/******************************************************************************
-*
-* Internal functions.
-*
-******************************************************************************/
+ *
+ * Internal functions.
+ *
+ ******************************************************************************/
/**
* cloth_to_object - copies the deformed vertices to the object.
@@ -923,16 +978,16 @@ static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm )
memcpy ( &clmd->clothObject->mfaces[i], &mface[i], sizeof ( MFace ) );
/* Free the springs since they can't be correct if the vertices
- * changed.
- */
+ * changed.
+ */
if ( clmd->clothObject->springs != NULL )
MEM_freeN ( clmd->clothObject->springs );
}
/***************************************************************************************
-* SPRING NETWORK BUILDING IMPLEMENTATION BEGIN
-***************************************************************************************/
+ * SPRING NETWORK BUILDING IMPLEMENTATION BEGIN
+ ***************************************************************************************/
// be careful: implicit solver has to be resettet when using this one!
// --> only for implicit handling of this spring!
@@ -1221,6 +1276,6 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm )
} /* cloth_build_springs */
/***************************************************************************************
-* SPRING NETWORK BUILDING IMPLEMENTATION END
-***************************************************************************************/
+ * SPRING NETWORK BUILDING IMPLEMENTATION END
+ ***************************************************************************************/
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 609b2d3496c..a93653537c7 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -161,284 +161,7 @@ void bvhtree_update_from_mvert(BVHTree * bvhtree, MFace *faces, int numfaces, MV
/***********************************
Collision modifier code end
***********************************/
-
-/**
-* gsl_poly_solve_cubic -
-*
-* copied from SOLVE_CUBIC.C --> GSL
-*/
-
#define mySWAP(a, b) do { double tmp = b ; b = a ; a = tmp ; } while (0)
-#if 0 /* UNUSED */
-static int
-gsl_poly_solve_cubic (double a, double b, double c,
- double *x0, double *x1, double *x2)
-{
- double q = (a * a - 3 * b);
- double r = (2 * a * a * a - 9 * a * b + 27 * c);
-
- double Q = q / 9;
- double R = r / 54;
-
- double Q3 = Q * Q * Q;
- double R2 = R * R;
-
- double CR2 = 729 * r * r;
- double CQ3 = 2916 * q * q * q;
-
- if (R == 0 && Q == 0)
- {
- *x0 = - a / 3;
- *x1 = - a / 3;
- *x2 = - a / 3;
- return 3;
- }
- else if (CR2 == CQ3)
- {
- /* this test is actually R2 == Q3, written in a form suitable
- for exact computation with integers */
-
- /* Due to finite precision some double roots may be missed, and
- considered to be a pair of complex roots z = x +/- epsilon i
- close to the real axis. */
-
- double sqrtQ = sqrt (Q);
-
- if (R > 0)
- {
- *x0 = -2 * sqrtQ - a / 3;
- *x1 = sqrtQ - a / 3;
- *x2 = sqrtQ - a / 3;
- }
- else
- {
- *x0 = - sqrtQ - a / 3;
- *x1 = - sqrtQ - a / 3;
- *x2 = 2 * sqrtQ - a / 3;
- }
- return 3;
- }
- else if (CR2 < CQ3) /* equivalent to R2 < Q3 */
- {
- double sqrtQ = sqrt (Q);
- double sqrtQ3 = sqrtQ * sqrtQ * sqrtQ;
- double theta = acos (R / sqrtQ3);
- double norm = -2 * sqrtQ;
- *x0 = norm * cos (theta / 3) - a / 3;
- *x1 = norm * cos ((theta + 2.0 * M_PI) / 3) - a / 3;
- *x2 = norm * cos ((theta - 2.0 * M_PI) / 3) - a / 3;
-
- /* Sort *x0, *x1, *x2 into increasing order */
-
- if (*x0 > *x1)
- mySWAP(*x0, *x1);
-
- if (*x1 > *x2)
- {
- mySWAP(*x1, *x2);
-
- if (*x0 > *x1)
- mySWAP(*x0, *x1);
- }
-
- return 3;
- }
- else
- {
- double sgnR = (R >= 0 ? 1 : -1);
- double A = -sgnR * pow (fabs (R) + sqrt (R2 - Q3), 1.0/3.0);
- double B = Q / A;
- *x0 = A + B - a / 3;
- return 1;
- }
-}
-
-
-
-/**
-* gsl_poly_solve_quadratic
-*
-* copied from GSL
-*/
-static int
-gsl_poly_solve_quadratic (double a, double b, double c,
- double *x0, double *x1)
-{
- double disc = b * b - 4 * a * c;
-
- if (a == 0) /* Handle linear case */
- {
- if (b == 0)
- {
- return 0;
- }
- else
- {
- *x0 = -c / b;
- return 1;
- };
- }
-
- if (disc > 0)
- {
- if (b == 0)
- {
- double r = fabs (0.5 * sqrt (disc) / a);
- *x0 = -r;
- *x1 = r;
- }
- else
- {
- double sgnb = (b > 0 ? 1 : -1);
- double temp = -0.5 * (b + sgnb * sqrt (disc));
- double r1 = temp / a;
- double r2 = c / temp;
-
- if (r1 < r2)
- {
- *x0 = r1;
- *x1 = r2;
- }
- else
- {
- *x0 = r2;
- *x1 = r1;
- }
- }
- return 2;
- }
- else if (disc == 0)
- {
- *x0 = -0.5 * b / a;
- *x1 = -0.5 * b / a;
- return 2;
- }
- else
- {
- return 0;
- }
-}
-#endif /* UNUSED */
-
-
-
-/*
-* See Bridson et al. "Robust Treatment of Collision, Contact and Friction for Cloth Animation"
-* page 4, left column
-*/
-#if 0
-static int cloth_get_collision_time ( double a[3], double b[3], double c[3], double d[3], double e[3], double f[3], double solution[3] )
-{
- int num_sols = 0;
-
- // x^0 - checked
- double g = a[0] * c[1] * e[2] - a[0] * c[2] * e[1] +
- a[1] * c[2] * e[0] - a[1] * c[0] * e[2] +
- a[2] * c[0] * e[1] - a[2] * c[1] * e[0];
-
- // x^1
- double h = -b[2] * c[1] * e[0] + b[1] * c[2] * e[0] - a[2] * d[1] * e[0] +
- a[1] * d[2] * e[0] + b[2] * c[0] * e[1] - b[0] * c[2] * e[1] +
- a[2] * d[0] * e[1] - a[0] * d[2] * e[1] - b[1] * c[0] * e[2] +
- b[0] * c[1] * e[2] - a[1] * d[0] * e[2] + a[0] * d[1] * e[2] -
- a[2] * c[1] * f[0] + a[1] * c[2] * f[0] + a[2] * c[0] * f[1] -
- a[0] * c[2] * f[1] - a[1] * c[0] * f[2] + a[0] * c[1] * f[2];
-
- // x^2
- double i = -b[2] * d[1] * e[0] + b[1] * d[2] * e[0] +
- b[2] * d[0] * e[1] - b[0] * d[2] * e[1] -
- b[1] * d[0] * e[2] + b[0] * d[1] * e[2] -
- b[2] * c[1] * f[0] + b[1] * c[2] * f[0] -
- a[2] * d[1] * f[0] + a[1] * d[2] * f[0] +
- b[2] * c[0] * f[1] - b[0] * c[2] * f[1] +
- a[2] * d[0] * f[1] - a[0] * d[2] * f[1] -
- b[1] * c[0] * f[2] + b[0] * c[1] * f[2] -
- a[1] * d[0] * f[2] + a[0] * d[1] * f[2];
-
- // x^3 - checked
- double j = -b[2] * d[1] * f[0] + b[1] * d[2] * f[0] +
- b[2] * d[0] * f[1] - b[0] * d[2] * f[1] -
- b[1] * d[0] * f[2] + b[0] * d[1] * f[2];
-
- /*
- printf("r1: %lf\n", a[0] * c[1] * e[2] - a[0] * c[2] * e[1]);
- printf("r2: %lf\n", a[1] * c[2] * e[0] - a[1] * c[0] * e[2]);
- printf("r3: %lf\n", a[2] * c[0] * e[1] - a[2] * c[1] * e[0]);
-
- printf("x1 x: %f, y: %f, z: %f\n", a[0], a[1], a[2]);
- printf("x2 x: %f, y: %f, z: %f\n", c[0], c[1], c[2]);
- printf("x3 x: %f, y: %f, z: %f\n", e[0], e[1], e[2]);
-
- printf("v1 x: %f, y: %f, z: %f\n", b[0], b[1], b[2]);
- printf("v2 x: %f, y: %f, z: %f\n", d[0], d[1], d[2]);
- printf("v3 x: %f, y: %f, z: %f\n", f[0], f[1], f[2]);
-
- printf("t^3: %lf, t^2: %lf, t^1: %lf, t^0: %lf\n", j, i, h, g);
-
-*/
- // Solve cubic equation to determine times t1, t2, t3, when the collision will occur.
- if ( ABS ( j ) > DBL_EPSILON )
- {
- i /= j;
- h /= j;
- g /= j;
- num_sols = gsl_poly_solve_cubic ( i, h, g, &solution[0], &solution[1], &solution[2] );
- }
- else
- {
- num_sols = gsl_poly_solve_quadratic ( i, h, g, &solution[0], &solution[1] );
- solution[2] = -1.0;
- }
-
- // printf("num_sols: %d, sol1: %lf, sol2: %lf, sol3: %lf\n", num_sols, solution[0], solution[1], solution[2]);
-
- // Discard negative solutions
- if ( ( num_sols >= 1 ) && ( solution[0] < DBL_EPSILON ) )
- {
- --num_sols;
- solution[0] = solution[num_sols];
- }
- if ( ( num_sols >= 2 ) && ( solution[1] < DBL_EPSILON ) )
- {
- --num_sols;
- solution[1] = solution[num_sols];
- }
- if ( ( num_sols == 3 ) && ( solution[2] < DBL_EPSILON ) )
- {
- --num_sols;
- }
-
- // Sort
- if ( num_sols == 2 )
- {
- if ( solution[0] > solution[1] )
- {
- double tmp = solution[0];
- solution[0] = solution[1];
- solution[1] = tmp;
- }
- }
- else if ( num_sols == 3 )
- {
-
- // Bubblesort
- if ( solution[0] > solution[1] )
- {
- double tmp = solution[0]; solution[0] = solution[1]; solution[1] = tmp;
- }
- if ( solution[1] > solution[2] )
- {
- double tmp = solution[1]; solution[1] = solution[2]; solution[2] = tmp;
- }
- if ( solution[0] > solution[1] )
- {
- double tmp = solution[0]; solution[0] = solution[1]; solution[1] = tmp;
- }
- }
-
- return num_sols;
-}
-#endif
// w3 is not perfect
@@ -485,7 +208,6 @@ DO_INLINE void collision_interpolateOnTriangle ( float to[3], float v1[3], float
VECADDMUL(to, v3, w3);
}
-#ifndef WITH_ELTOPO
static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
{
int result = 0;
@@ -498,6 +220,12 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM
cloth1 = clmd->clothObject;
for ( ; collpair != collision_end; collpair++ ) {
+ float i1[3], i2[3], i3[3];
+
+ zero_v3(i1);
+ zero_v3(i2);
+ zero_v3(i3);
+
// only handle static collisions here
if ( collpair->flag & COLLISION_IN_FUTURE )
continue;
@@ -553,9 +281,9 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM
normalize_v3(vrel_t_pre);
impulse = magtangent / ( 1.0f + w1*w1 + w2*w2 + w3*w3 ); // 2.0 *
- VECADDMUL ( cloth1->verts[collpair->ap1].impulse, vrel_t_pre, w1 * impulse );
- VECADDMUL ( cloth1->verts[collpair->ap2].impulse, vrel_t_pre, w2 * impulse );
- VECADDMUL ( cloth1->verts[collpair->ap3].impulse, vrel_t_pre, w3 * impulse );
+ VECADDMUL ( i1, vrel_t_pre, w1 * impulse );
+ VECADDMUL ( i2, vrel_t_pre, w2 * impulse );
+ VECADDMUL ( i3, vrel_t_pre, w3 * impulse );
}
// Apply velocity stopping impulse
@@ -563,13 +291,13 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM
// no 2.0 * magrelVel normally, but looks nicer DG
impulse = magrelVel / ( 1.0 + w1*w1 + w2*w2 + w3*w3 );
- VECADDMUL ( cloth1->verts[collpair->ap1].impulse, collpair->normal, w1 * impulse );
+ VECADDMUL ( i1, collpair->normal, w1 * impulse );
cloth1->verts[collpair->ap1].impulse_count++;
- VECADDMUL ( cloth1->verts[collpair->ap2].impulse, collpair->normal, w2 * impulse );
+ VECADDMUL ( i2, collpair->normal, w2 * impulse );
cloth1->verts[collpair->ap2].impulse_count++;
- VECADDMUL ( cloth1->verts[collpair->ap3].impulse, collpair->normal, w3 * impulse );
+ VECADDMUL ( i3, collpair->normal, w3 * impulse );
cloth1->verts[collpair->ap3].impulse_count++;
// Apply repulse impulse if distance too short
@@ -586,785 +314,64 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM
repulse = MAX2 ( impulse, repulse );
impulse = repulse / ( 1.0f + w1*w1 + w2*w2 + w3*w3 ); // original 2.0 / 0.25
- VECADDMUL ( cloth1->verts[collpair->ap1].impulse, collpair->normal, impulse );
- VECADDMUL ( cloth1->verts[collpair->ap2].impulse, collpair->normal, impulse );
- VECADDMUL ( cloth1->verts[collpair->ap3].impulse, collpair->normal, impulse );
+ VECADDMUL ( i1, collpair->normal, impulse );
+ VECADDMUL ( i2, collpair->normal, impulse );
+ VECADDMUL ( i3, collpair->normal, impulse );
}
result = 1;
}
- }
- return result;
-}
-#endif /* !WITH_ELTOPO */
-
-#ifdef WITH_ELTOPO
-typedef struct edgepairkey {
- int a1, a2, b1, b2;
-} edgepairkey;
-
-unsigned int edgepair_hash(void *vkey)
-{
- edgepairkey *key = vkey;
- int keys[4] = {key->a1, key->a2, key->b1, key->b2};
- int i, j;
-
- for (i=0; i<4; i++) {
- for (j=0; j<3; j++) {
- if (keys[j] >= keys[j+1]) {
- SWAP(int, keys[j], keys[j+1]);
- }
- }
- }
-
- return keys[0]*101 + keys[1]*72 + keys[2]*53 + keys[3]*34;
-}
-
-int edgepair_cmp(const void *va, const void *vb)
-{
- edgepairkey *a = va, *b = vb;
- int keysa[4] = {a->a1, a->a2, a->b1, a->b2};
- int keysb[4] = {b->a1, b->a2, b->b1, b->b2};
- int i;
-
- for (i=0; i<4; i++) {
- int j, ok=0;
- for (j=0; j<4; j++) {
- if (keysa[i] == keysa[j]) {
- ok = 1;
- break;
- }
- }
- if (!ok)
- return -1;
- }
-
- return 0;
-}
-
-static void get_edgepairkey(edgepairkey *key, int a1, int a2, int b1, int b2)
-{
- key->a1 = a1;
- key->a2 = a2;
- key->b1 = b1;
- key->b2 = b2;
-}
-
-/*an immense amount of duplication goes on here. . .a major performance hit, I'm sure*/
-static CollPair* cloth_edge_collision ( ModifierData *md1, ModifierData *md2,
- BVHTreeOverlap *overlap, CollPair *collpair,
- GHash *visithash, MemArena *arena)
-{
- ClothModifierData *clmd = (ClothModifierData *)md1;
- CollisionModifierData *collmd = (CollisionModifierData *) md2;
- MFace *face1=NULL, *face2 = NULL;
- ClothVertex *verts1 = clmd->clothObject->verts;
- double distance = 0;
- edgepairkey *key, tstkey;
- float epsilon1 = clmd->coll_parms->epsilon;
- float epsilon2 = BLI_bvhtree_getepsilon ( collmd->bvhtree );
- float no[3], uv[3], t, relnor;
- int i, i1, i2, i3, i4, i5, i6;
- Cloth *cloth = clmd->clothObject;
- float n1[3], n2[3], off[3], v1[2][3], v2[2][3], v3[2][3], v4[2][3], v5[2][3], v6[2][3];
- void **verts[] = {v1, v2, v3, v4, v5, v6};
- int j, ret, bp1, bp2, bp3, ap1, ap2, ap3, table[6];
-
- face1 = & ( clmd->clothObject->mfaces[overlap->indexA] );
- face2 = & ( collmd->mfaces[overlap->indexB] );
-
- // check all 4 possible collisions
- for ( i = 0; i < 4; i++ ) {
- if ( i == 0 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v2;
- ap3 = face1->v3;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v2;
- bp3 = face2->v3;
- }
- else if ( i == 1 ) {
- if ( face1->v4 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v3;
- ap3 = face1->v4;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v2;
- bp3 = face2->v3;
- }
- else {
- continue;
- }
- }
- if ( i == 2 ) {
- if ( face2->v4 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v2;
- ap3 = face1->v3;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v3;
- bp3 = face2->v4;
- }
- else {
- continue;
- }
- }
- else if ( i == 3 ) {
- if ( face1->v4 && face2->v4 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v3;
- ap3 = face1->v4;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v3;
- bp3 = face2->v4;
- }
- else {
- continue;
- }
- }
-
- copy_v3_v3(v1[0], cloth->verts[ap1].txold);
- copy_v3_v3(v1[1], cloth->verts[ap1].tx);
- copy_v3_v3(v2[0], cloth->verts[ap2].txold);
- copy_v3_v3(v2[1], cloth->verts[ap2].tx);
- copy_v3_v3(v3[0], cloth->verts[ap3].txold);
- copy_v3_v3(v3[1], cloth->verts[ap3].tx);
-
- copy_v3_v3(v4[0], collmd->current_x[bp1].co);
- copy_v3_v3(v4[1], collmd->current_xnew[bp1].co);
- copy_v3_v3(v5[0], collmd->current_x[bp2].co);
- copy_v3_v3(v5[1], collmd->current_xnew[bp2].co);
- copy_v3_v3(v6[0], collmd->current_x[bp3].co);
- copy_v3_v3(v6[1], collmd->current_xnew[bp3].co);
-
- normal_tri_v3(n2, v4[1], v5[1], v6[1]);
-
- /*offset new positions a bit, to account for margins*/
- i1 = ap1; i2 = ap2; i3 = ap3;
- i4 = bp1; i5 = bp2; i6 = bp3;
-
- for (j=0; j<3; j++) {
- int collp1, collp2, k, j2 = (j+1)%3;
-
- table[0] = ap1; table[1] = ap2; table[2] = ap3;
- table[3] = bp1; table[4] = bp2; table[5] = bp3;
- for (k=0; k<3; k++) {
- float p1[3], p2[3];
- int k2 = (k+1)%3;
-
- get_edgepairkey(&tstkey, table[j], table[j2], table[k+3], table[k2+3]);
- //if (BLI_ghash_haskey(visithash, &tstkey))
- // continue;
-
- key = BLI_memarena_alloc(arena, sizeof(edgepairkey));
- *key = tstkey;
- BLI_ghash_insert(visithash, key, NULL);
-
- sub_v3_v3v3(p1, verts[j], verts[j2]);
- sub_v3_v3v3(p2, verts[k+3], verts[k2+3]);
-
- cross_v3_v3v3(off, p1, p2);
- normalize_v3(off);
-
- if (dot_v3v3(n2, off) < 0.0)
- negate_v3(off);
-
- mul_v3_fl(off, epsilon1 + epsilon2 + ALMOST_ZERO);
- copy_v3_v3(p1, verts[k+3]);
- copy_v3_v3(p2, verts[k2+3]);
- add_v3_v3(p1, off);
- add_v3_v3(p2, off);
-
- ret = eltopo_line_line_moving_isect_v3v3_f(verts[j], table[j], verts[j2], table[j2],
- p1, table[k+3], p2, table[k2+3],
- no, uv, &t, &relnor);
- /*cloth vert versus coll face*/
- if (ret) {
- collpair->ap1 = table[j]; collpair->ap2 = table[j2];
- collpair->bp1 = table[k+3]; collpair->bp2 = table[k2+3];
-
- /*I'm not sure if this is correct, but hopefully it's
- better then simply ignoring back edges*/
- if (dot_v3v3(n2, no) < 0.0) {
- negate_v3(no);
- }
-
- copy_v3_v3(collpair->normal, no);
- mul_v3_v3fl(collpair->vector, collpair->normal, relnor);
- collpair->distance = relnor;
- collpair->time = t;
-
- copy_v2_v2(collpair->bary, uv);
-
- collpair->flag = COLLISION_IS_EDGES;
- collpair++;
- }
- }
- }
- }
-
- return collpair;
-}
-
-static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
-{
- int result = 0;
- Cloth *cloth1;
- float w1, w2;
- float v1[3], v2[3], relativeVelocity[3];
- float magrelVel, pimpulse[3];
-
- cloth1 = clmd->clothObject;
-
- for ( ; collpair != collision_end; collpair++ ) {
- if (!(collpair->flag & COLLISION_IS_EDGES))
- continue;
-
- // was: txold
- w1 = collpair->bary[0]; w2 = collpair->bary[1];
-
- // Calculate relative "velocity".
- VECADDFAC(v1, cloth1->verts[collpair->ap1].tv, cloth1->verts[collpair->ap2].tv, w1);
- VECADDFAC(v2, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, w2);
-
- sub_v3_v3v3(relativeVelocity, v2, v1);
-
- // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal').
- magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal );
-
- // If v_n_mag < 0 the edges are approaching each other.
- 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;
- float vrel_t_pre[3];
- float temp[3], spf;
-
- zero_v3(pimpulse);
-
- // calculate tangential velocity
- copy_v3_v3 ( temp, collpair->normal );
- mul_v3_fl(temp, magrelVel);
- sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp);
-
- // Decrease in magnitude of relative tangential velocity due to coulomb friction
- // in original formula "magrelVel" should be the "change of relative velocity in normal direction"
- 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 ) {
- normalize_v3(vrel_t_pre);
-
- impulse = magtangent;
- VECADDMUL ( pimpulse, vrel_t_pre, impulse);
- }
-
- // Apply velocity stopping impulse
- // I_c = m * v_N / 2.0
- // no 2.0 * magrelVel normally, but looks nicer DG
- impulse = magrelVel;
-
- mul_v3_fl(collpair->normal, 0.5);
- VECADDMUL ( pimpulse, collpair->normal, impulse);
-
+ else
+ {
// Apply repulse impulse if distance too short
// I_r = -min(dt*kd, m(0, 1d/dt - v_n))
- spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale;
-
- d = collpair->distance;
- if ( ( magrelVel < 0.1*d*spf && ( d > ALMOST_ZERO ) ) ) {
- repulse = MIN2 ( d*1.0/spf, 0.1*d*spf - magrelVel );
+ float spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale;
+ float d = clmd->coll_parms->epsilon*8.0f/9.0f + epsilon2*8.0f/9.0f - collpair->distance;
+ if ( d > ALMOST_ZERO) {
// stay on the safe side and clamp repulse
- if ( impulse > ALMOST_ZERO )
- repulse = MIN2 ( repulse, 5.0*impulse );
- repulse = MAX2 ( impulse, repulse );
+ float repulse = d*1.0f/spf;
- impulse = repulse / ( 5.0 ); // original 2.0 / 0.25
- VECADDMUL ( pimpulse, collpair->normal, impulse);
- }
-
- w2 = 1.0f-w1;
- if (w1 < 0.5)
- w1 *= 2.0;
- else
- w2 *= 2.0;
-
- VECADDFAC(cloth1->verts[collpair->ap1].impulse, cloth1->verts[collpair->ap1].impulse, pimpulse, w1*2.0);
- VECADDFAC(cloth1->verts[collpair->ap2].impulse, cloth1->verts[collpair->ap2].impulse, pimpulse, w2*2.0);
-
- cloth1->verts[collpair->ap1].impulse_count++;
- cloth1->verts[collpair->ap2].impulse_count++;
-
- result = 1;
- }
- }
-
- return result;
-}
+ float impulse = repulse / ( 1.0f + w1*w1 + w2*w2 + w3*w3 ); // original 2.0 / 0.25
+ VECADDMUL ( i1, collpair->normal, impulse );
+ VECADDMUL ( i2, collpair->normal, impulse );
+ VECADDMUL ( i3, collpair->normal, impulse );
-static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
-{
- int result = 0;
- Cloth *cloth1;
- float w1, w2, w3, u1, u2, u3;
- float v1[3], v2[3], relativeVelocity[3];
- float magrelVel;
- float epsilon2 = BLI_bvhtree_getepsilon ( collmd->bvhtree );
-
- cloth1 = clmd->clothObject;
-
- for ( ; collpair != collision_end; collpair++ ) {
- if (collpair->flag & COLLISION_IS_EDGES)
- continue;
-
- if ( collpair->flag & COLLISION_USE_COLLFACE ) {
- // was: txold
- w1 = collpair->bary[0]; w2 = collpair->bary[1]; w3 = collpair->bary[2];
-
- // Calculate relative "velocity".
- collision_interpolateOnTriangle ( v1, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, w1, w2, w3);
-
- sub_v3_v3v3(relativeVelocity, v1, cloth1->verts[collpair->collp].tv);
-
- // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal').
- magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal );
-
- // If v_n_mag < 0 the edges are approaching each other.
- 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;
- float vrel_t_pre[3];
- float temp[3], spf;
-
- // calculate tangential velocity
- copy_v3_v3 ( temp, collpair->normal );
- mul_v3_fl(temp, magrelVel);
- sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp);
-
- // Decrease in magnitude of relative tangential velocity due to coulomb friction
- // in original formula "magrelVel" should be the "change of relative velocity in normal direction"
- 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 ) {
- normalize_v3(vrel_t_pre);
-
- impulse = magtangent; // 2.0 *
- VECADDMUL ( cloth1->verts[collpair->collp].impulse, vrel_t_pre, impulse);
- }
-
- // Apply velocity stopping impulse
- // I_c = m * v_N / 2.0
- // no 2.0 * magrelVel normally, but looks nicer DG
- impulse = magrelVel/2.0;
-
- VECADDMUL ( cloth1->verts[collpair->collp].impulse, collpair->normal, impulse);
- cloth1->verts[collpair->collp].impulse_count++;
-
- // Apply repulse impulse if distance too short
- // I_r = -min(dt*kd, m(0, 1d/dt - v_n))
- spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale;
-
- d = -collpair->distance;
- 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
- if ( impulse > ALMOST_ZERO )
- repulse = MIN2 ( repulse, 5.0*impulse );
- repulse = MAX2 ( impulse, repulse );
-
- impulse = repulse / ( 5.0 ); // original 2.0 / 0.25
- VECADDMUL ( cloth1->verts[collpair->collp].impulse, collpair->normal, impulse);
- }
-
- result = 1;
- }
- }
- else {
- w1 = collpair->bary[0]; w2 = collpair->bary[1]; w3 = collpair->bary[2];
-
- // Calculate relative "velocity".
- collision_interpolateOnTriangle ( v1, cloth1->verts[collpair->ap1].tv, cloth1->verts[collpair->ap2].tv, cloth1->verts[collpair->ap3].tv, w1, w2, w3 );
-
- sub_v3_v3v3(relativeVelocity, collmd->current_v[collpair->collp].co, v1);
-
- // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal').
- magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal );
-
- // If v_n_mag < 0 the edges are approaching each other.
- 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;
- float vrel_t_pre[3], pimpulse[3] = {0.0f, 0.0f, 0.0f};
- float temp[3], spf;
-
- // calculate tangential velocity
- copy_v3_v3 ( temp, collpair->normal );
- mul_v3_fl(temp, magrelVel);
- sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp);
-
- // Decrease in magnitude of relative tangential velocity due to coulomb friction
- // in original formula "magrelVel" should be the "change of relative velocity in normal direction"
- 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 ) {
- normalize_v3(vrel_t_pre);
-
- impulse = magtangent; // 2.0 *
- VECADDMUL ( pimpulse, vrel_t_pre, impulse);
- }
-
- // Apply velocity stopping impulse
- // I_c = m * v_N / 2.0
- // no 2.0 * magrelVel normally, but looks nicer DG
- impulse = magrelVel/2.0;
-
- VECADDMUL ( pimpulse, collpair->normal, impulse);
-
- // Apply repulse impulse if distance too short
- // I_r = -min(dt*kd, m(0, 1d/dt - v_n))
- spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale;
-
- d = -collpair->distance;
- 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
- if ( impulse > ALMOST_ZERO )
- repulse = MIN2 ( repulse, 5.0*impulse );
- repulse = MAX2 ( impulse, repulse );
-
- impulse = repulse / ( 2.0 ); // original 2.0 / 0.25
- VECADDMUL ( pimpulse, collpair->normal, impulse);
- }
-
- if (w1 < 0.5) w1 *= 2.0;
- if (w2 < 0.5) w2 *= 2.0;
- if (w3 < 0.5) w3 *= 2.0;
-
- VECADDMUL(cloth1->verts[collpair->ap1].impulse, pimpulse, w1*2.0);
- VECADDMUL(cloth1->verts[collpair->ap2].impulse, pimpulse, w2*2.0);
- VECADDMUL(cloth1->verts[collpair->ap3].impulse, pimpulse, w3*2.0);
cloth1->verts[collpair->ap1].impulse_count++;
cloth1->verts[collpair->ap2].impulse_count++;
cloth1->verts[collpair->ap3].impulse_count++;
-
- result = 1;
- }
- }
- }
-
- return result;
-}
-
-
-typedef struct tripairkey {
- int p, a1, a2, a3;
-} tripairkey;
-
-unsigned int tripair_hash(void *vkey)
-{
- tripairkey *key = vkey;
- int keys[4] = {key->p, key->a1, key->a2, key->a3};
- int i, j;
-
- for (i=0; i<4; i++) {
- for (j=0; j<3; j++) {
- if (keys[j] >= keys[j+1]) {
- SWAP(int, keys[j], keys[j+1]);
- }
- }
- }
-
- return keys[0]*101 + keys[1]*72 + keys[2]*53 + keys[3]*34;
-}
-
-int tripair_cmp(const void *va, const void *vb)
-{
- tripairkey *a = va, *b = vb;
- int keysa[4] = {a->p, a->a1, a->a2, a->a3};
- int keysb[4] = {b->p, b->a1, b->a2, b->a3};
- int i;
-
- for (i=0; i<4; i++) {
- int j, ok=0;
- for (j=0; j<4; j++) {
- if (keysa[i] == keysa[j]) {
- ok = 1;
- break;
- }
- }
- if (!ok)
- return -1;
- }
-
- return 0;
-}
-
-static void get_tripairkey(tripairkey *key, int p, int a1, int a2, int a3)
-{
- key->a1 = a1;
- key->a2 = a2;
- key->a3 = a3;
- key->p = p;
-}
-
-static int checkvisit(MemArena *arena, GHash *gh, int p, int a1, int a2, int a3)
-{
- tripairkey key, *key2;
-
- get_tripairkey(&key, p, a1, a2, a3);
- if (BLI_ghash_haskey(gh, &key))
- return 1;
-
- key2 = BLI_memarena_alloc(arena, sizeof(*key2));
- *key2 = key;
- BLI_ghash_insert(gh, key2, NULL);
-
- return 0;
-}
-
-int cloth_point_tri_moving_v3v3_f(float v1[2][3], int i1, float v2[2][3], int i2,
- float v3[2][3], int i3, float v4[2][3], int i4,
- float normal[3], float bary[3], float *t,
- float *relnor, GHash *gh, MemArena *arena)
-{
- if (checkvisit(arena, gh, i1, i2, i3, i4))
- return 0;
-
- return eltopo_point_tri_moving_v3v3_f(v1, i1, v2, i2, v3, i3, v4, i4, normal, bary, t, relnor);
-}
-static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap *overlap,
- CollPair *collpair, double dt, GHash *gh, MemArena *arena)
-{
- ClothModifierData *clmd = (ClothModifierData *)md1;
- CollisionModifierData *collmd = (CollisionModifierData *) md2;
- MFace *face1=NULL, *face2 = NULL;
- ClothVertex *verts1 = clmd->clothObject->verts;
- double distance = 0;
- float epsilon1 = clmd->coll_parms->epsilon;
- float epsilon2 = BLI_bvhtree_getepsilon ( collmd->bvhtree );
- float no[3], uv[3], t, relnor;
- int i, i1, i2, i3, i4, i5, i6;
- Cloth *cloth = clmd->clothObject;
- float n1[3], sdis, p[3], l, n2[3], off[3], v1[2][3], v2[2][3], v3[2][3], v4[2][3], v5[2][3], v6[2][3];
- int j, ret, bp1, bp2, bp3, ap1, ap2, ap3;
-
- face1 = & ( clmd->clothObject->mfaces[overlap->indexA] );
- face2 = & ( collmd->mfaces[overlap->indexB] );
-
- // check all 4 possible collisions
- for ( i = 0; i < 4; i++ ) {
- if ( i == 0 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v2;
- ap3 = face1->v3;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v2;
- bp3 = face2->v3;
- }
- else if ( i == 1 ) {
- if ( face1->v4 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v3;
- ap3 = face1->v4;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v2;
- bp3 = face2->v3;
- }
- else {
- continue;
- }
- }
- if ( i == 2 ) {
- if ( face2->v4 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v2;
- ap3 = face1->v3;
-
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v3;
- bp3 = face2->v4;
- }
- else {
- continue;
+ result = 1;
}
}
- else if ( i == 3 ) {
- if ( face1->v4 && face2->v4 ) {
- // fill faceA
- ap1 = face1->v1;
- ap2 = face1->v3;
- ap3 = face1->v4;
- // fill faceB
- bp1 = face2->v1;
- bp2 = face2->v3;
- bp3 = face2->v4;
- }
- else {
- continue;
- }
- }
-
- copy_v3_v3(v1[0], cloth->verts[ap1].txold);
- copy_v3_v3(v1[1], cloth->verts[ap1].tx);
- copy_v3_v3(v2[0], cloth->verts[ap2].txold);
- copy_v3_v3(v2[1], cloth->verts[ap2].tx);
- copy_v3_v3(v3[0], cloth->verts[ap3].txold);
- copy_v3_v3(v3[1], cloth->verts[ap3].tx);
-
- copy_v3_v3(v4[0], collmd->current_x[bp1].co);
- copy_v3_v3(v4[1], collmd->current_xnew[bp1].co);
- copy_v3_v3(v5[0], collmd->current_x[bp2].co);
- copy_v3_v3(v5[1], collmd->current_xnew[bp2].co);
- copy_v3_v3(v6[0], collmd->current_x[bp3].co);
- copy_v3_v3(v6[1], collmd->current_xnew[bp3].co);
-
- normal_tri_v3(n2, v4[1], v5[1], v6[1]);
-
- sdis = clmd->coll_parms->distance_repel + epsilon2 + FLT_EPSILON;
-
- /*apply a repulsion force, to help the solver along*/
- copy_v3_v3(off, n2);
- negate_v3(off);
- if (isect_ray_plane_v3(v1[1], off, v4[1], v5[1], v6[1], &l, 0)) {
- if (l >= 0.0 && l < sdis) {
- mul_v3_fl(off, (l-sdis)*cloth->verts[ap1].mass*dt*clmd->coll_parms->repel_force*0.1);
-
- add_v3_v3(cloth->verts[ap1].tv, off);
- add_v3_v3(cloth->verts[ap2].tv, off);
- add_v3_v3(cloth->verts[ap3].tv, off);
- }
- }
+ if(result)
+ {
+ int i = 0;
- /*offset new positions a bit, to account for margins*/
- copy_v3_v3(off, n2);
- mul_v3_fl(off, epsilon1 + epsilon2 + ALMOST_ZERO);
- add_v3_v3(v4[1], off); add_v3_v3(v5[1], off); add_v3_v3(v6[1], off);
-
- i1 = ap1; i2 = ap2; i3 = ap3;
- i4 = bp1+cloth->numverts; i5 = bp2+cloth->numverts; i6 = bp3+cloth->numverts;
-
- for (j=0; j<6; j++) {
- int collp;
+ for(i = 0; i < 3; i++)
+ {
+ if(cloth1->verts[collpair->ap1].impulse_count > 0 && ABS(cloth1->verts[collpair->ap1].impulse[i]) < ABS(i1[i]))
+ cloth1->verts[collpair->ap1].impulse[i] = i1[i];
- switch (j) {
- case 0:
- ret = cloth_point_tri_moving_v3v3_f(v1, i1, v4, i4, v5, i5, v6, i6, no, uv, &t, &relnor, gh, arena);
- collp = ap1;
- break;
- case 1:
- collp = ap2;
- ret = cloth_point_tri_moving_v3v3_f(v2, i2, v4, i4, v5, i5, v6, i6, no, uv, &t, &relnor, gh, arena);
- break;
- case 2:
- collp = ap3;
- ret = cloth_point_tri_moving_v3v3_f(v3, i3, v4, i4, v5, i5, v6, i6, no, uv, &t, &relnor, gh, arena);
- break;
- case 3:
- collp = bp1;
- ret = cloth_point_tri_moving_v3v3_f(v4, i4, v1, i1, v2, i2, v3, i3, no, uv, &t, &relnor, gh, arena);
- break;
- case 4:
- collp = bp2;
- ret = cloth_point_tri_moving_v3v3_f(v5, i5, v1, i1, v2, i2, v3, i3, no, uv, &t, &relnor, gh, arena);
- break;
- case 5:
- collp = bp3;
- ret = cloth_point_tri_moving_v3v3_f(v6, i6, v1, i1, v2, i2, v3, i3, no, uv, &t, &relnor, gh, arena);
- break;
- }
-
- /*cloth vert versus coll face*/
- if (ret && j < 3) {
- collpair->bp1 = bp1; collpair->bp2 = bp2; collpair->bp3 = bp3;
- collpair->collp = collp;
-
- copy_v3_v3(collpair->normal, no);
- mul_v3_v3fl(collpair->vector, collpair->normal, relnor);
- collpair->distance = relnor;
- collpair->time = t;
-
- copy_v3_v3(collpair->bary, uv);
-
- collpair->flag = COLLISION_USE_COLLFACE;
- collpair++;
- }
- else if (ret && j >= 3) { /*coll vert versus cloth face*/
- collpair->ap1 = ap1; collpair->ap2 = ap2; collpair->ap3 = ap3;
- collpair->collp = collp;
-
- copy_v3_v3(collpair->normal, no);
- mul_v3_v3fl(collpair->vector, collpair->normal, relnor);
- collpair->distance = relnor;
- collpair->time = t;
-
- copy_v3_v3(collpair->bary, uv);
+ if(cloth1->verts[collpair->ap2].impulse_count > 0 && ABS(cloth1->verts[collpair->ap2].impulse[i]) < ABS(i2[i]))
+ cloth1->verts[collpair->ap2].impulse[i] = i2[i];
- collpair->flag = 0;
- collpair++;
+ if(cloth1->verts[collpair->ap3].impulse_count > 0 && ABS(cloth1->verts[collpair->ap3].impulse[i]) < ABS(i3[i]))
+ cloth1->verts[collpair->ap3].impulse[i] = i3[i];
}
}
}
-
- return collpair;
-}
-
-static void machine_epsilon_offset(Cloth *cloth)
-{
- ClothVertex *cv;
- int i, j;
-
- cv = cloth->verts;
- for (i=0; i<cloth->numverts; i++, cv++) {
- /*aggrevatingly enough, it's necessary to offset the coordinates
- by a multiple of the 32-bit floating point epsilon when switching
- into doubles*/
- #define RNDSIGN (float)(-1*(BLI_rand()%2==0)|1)
- for (j=0; j<3; j++) {
- cv->tx[j] += FLT_EPSILON*30.0f*RNDSIGN;
- cv->txold[j] += FLT_EPSILON*30.0f*RNDSIGN;
- cv->tv[j] += FLT_EPSILON*30.0f*RNDSIGN;
- }
- }
+ return result;
}
-#else /* !WITH_ELTOPO */
-
//Determines collisions on overlap, collisions are written to collpair[i] and collision+number_collision_found is returned
-static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2,
- BVHTreeOverlap *overlap, CollPair *collpair, float dt )
+static CollPair* cloth_collision(ModifierData *md1, ModifierData *md2,
+ BVHTreeOverlap *overlap, CollPair *collpair, float UNUSED(dt))
{
ClothModifierData *clmd = (ClothModifierData *)md1;
CollisionModifierData *collmd = (CollisionModifierData *) md2;
- Cloth *cloth = clmd->clothObject;
+ /* Cloth *cloth = clmd->clothObject; */ /* UNUSED */
MFace *face1=NULL, *face2 = NULL;
#ifdef USE_BULLET
ClothVertex *verts1 = clmd->clothObject->verts;
@@ -1372,7 +379,6 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2,
double distance = 0;
float epsilon1 = clmd->coll_parms->epsilon;
float epsilon2 = BLI_bvhtree_getepsilon ( collmd->bvhtree );
- float n2[3], sdis, l;
int i;
face1 = & ( clmd->clothObject->mfaces[overlap->indexA] );
@@ -1395,8 +401,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2,
if ( face1->v4 ) {
// fill faceA
collpair->ap1 = face1->v1;
- collpair->ap2 = face1->v4;
- collpair->ap3 = face1->v3;
+ collpair->ap2 = face1->v3;
+ collpair->ap3 = face1->v4;
// fill faceB
collpair->bp1 = face2->v1;
@@ -1425,39 +431,18 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2,
if ( face1->v4 && face2->v4 ) {
// fill faceA
collpair->ap1 = face1->v1;
- collpair->ap2 = face1->v4;
- collpair->ap3 = face1->v3;
+ collpair->ap2 = face1->v3;
+ collpair->ap3 = face1->v4;
// fill faceB
collpair->bp1 = face2->v1;
- collpair->bp2 = face2->v4;
- collpair->bp3 = face2->v3;
+ collpair->bp2 = face2->v3;
+ collpair->bp3 = face2->v4;
}
else
break;
}
- normal_tri_v3(n2, collmd->current_xnew[collpair->bp1].co,
- collmd->current_xnew[collpair->bp2].co,
- collmd->current_xnew[collpair->bp3].co);
-
- sdis = clmd->coll_parms->distance_repel + epsilon2 + FLT_EPSILON;
-
- /* apply a repulsion force, to help the solver along.
- * this is kindof crude, it only tests one vert of the triangle */
- if (isect_ray_plane_v3(cloth->verts[collpair->ap1].tx, n2, collmd->current_xnew[collpair->bp1].co,
- collmd->current_xnew[collpair->bp2].co,
- collmd->current_xnew[collpair->bp3].co, &l, 0))
- {
- if (l >= 0.0f && l < sdis) {
- mul_v3_fl(n2, (l-sdis)*cloth->verts[collpair->ap1].mass*dt*clmd->coll_parms->repel_force*0.1f);
-
- add_v3_v3(cloth->verts[collpair->ap1].tv, n2);
- add_v3_v3(cloth->verts[collpair->ap2].tv, n2);
- add_v3_v3(cloth->verts[collpair->ap3].tv, n2);
- }
- }
-
#ifdef USE_BULLET
// calc distance + normal
distance = plNearestPoints (
@@ -1512,579 +497,6 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2,
}
return collpair;
}
-#endif /* WITH_ELTOPO */
-
-
-#if 0
-static int cloth_collision_response_moving( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
-{
- int result = 0;
- Cloth *cloth1;
- float w1, w2, w3, u1, u2, u3;
- float v1[3], v2[3], relativeVelocity[3];
- float magrelVel;
-
- cloth1 = clmd->clothObject;
-
- for ( ; collpair != collision_end; collpair++ )
- {
- // compute barycentric coordinates for both collision points
- collision_compute_barycentric ( collpair->pa,
- cloth1->verts[collpair->ap1].txold,
- cloth1->verts[collpair->ap2].txold,
- cloth1->verts[collpair->ap3].txold,
- &w1, &w2, &w3 );
-
- // was: txold
- collision_compute_barycentric ( collpair->pb,
- collmd->current_x[collpair->bp1].co,
- collmd->current_x[collpair->bp2].co,
- collmd->current_x[collpair->bp3].co,
- &u1, &u2, &u3 );
-
- // Calculate relative "velocity".
- collision_interpolateOnTriangle ( v1, cloth1->verts[collpair->ap1].tv, cloth1->verts[collpair->ap2].tv, cloth1->verts[collpair->ap3].tv, w1, w2, w3 );
-
- collision_interpolateOnTriangle ( v2, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, u1, u2, u3 );
-
- sub_v3_v3v3(relativeVelocity, v2, v1);
-
- // Calculate the normal component of the relative velocity (actually only the magnitude - the direction is stored in 'normal').
- magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal );
-
- // printf("magrelVel: %f\n", magrelVel);
-
- // Calculate masses of points.
- // TODO
-
- // If v_n_mag < 0 the edges are approaching each other.
- if ( magrelVel > ALMOST_ZERO )
- {
- // Calculate Impulse magnitude to stop all motion in normal direction.
- float magtangent = 0;
- double impulse = 0.0;
- float vrel_t_pre[3];
- float temp[3];
-
- // calculate tangential velocity
- copy_v3_v3 ( temp, collpair->normal );
- mul_v3_fl(temp, magrelVel);
- sub_v3_v3v3(vrel_t_pre, relativeVelocity, temp);
-
- // Decrease in magnitude of relative tangential velocity due to coulomb friction
- // in original formula "magrelVel" should be the "change of relative velocity in normal direction"
- 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 )
- {
- normalize_v3(vrel_t_pre);
-
- impulse = 2.0 * magtangent / ( 1.0 + w1*w1 + w2*w2 + w3*w3 );
- VECADDMUL ( cloth1->verts[collpair->ap1].impulse, vrel_t_pre, w1 * impulse );
- VECADDMUL ( cloth1->verts[collpair->ap2].impulse, vrel_t_pre, w2 * impulse );
- VECADDMUL ( cloth1->verts[collpair->ap3].impulse, vrel_t_pre, w3 * impulse );
- }
-
- // Apply velocity stopping impulse
- // I_c = m * v_N / 2.0
- // no 2.0 * magrelVel normally, but looks nicer DG
- impulse = magrelVel / ( 1.0 + w1*w1 + w2*w2 + w3*w3 );
-
- VECADDMUL ( cloth1->verts[collpair->ap1].impulse, collpair->normal, w1 * impulse );
- cloth1->verts[collpair->ap1].impulse_count++;
-
- VECADDMUL ( cloth1->verts[collpair->ap2].impulse, collpair->normal, w2 * impulse );
- cloth1->verts[collpair->ap2].impulse_count++;
-
- VECADDMUL ( cloth1->verts[collpair->ap3].impulse, collpair->normal, w3 * impulse );
- cloth1->verts[collpair->ap3].impulse_count++;
-
- // Apply repulse impulse if distance too short
- // I_r = -min(dt*kd, m(0, 1d/dt - v_n))
- /*
- d = clmd->coll_parms->epsilon*8.0/9.0 + epsilon2*8.0/9.0 - collpair->distance;
- if ( ( magrelVel < 0.1*d*clmd->sim_parms->stepsPerFrame ) && ( d > ALMOST_ZERO ) )
- {
- repulse = MIN2 ( d*1.0/clmd->sim_parms->stepsPerFrame, 0.1*d*clmd->sim_parms->stepsPerFrame - magrelVel );
-
- // stay on the safe side and clamp repulse
- if ( impulse > ALMOST_ZERO )
- repulse = MIN2 ( repulse, 5.0*impulse );
- repulse = MAX2 ( impulse, repulse );
-
- impulse = repulse / ( 1.0 + w1*w1 + w2*w2 + w3*w3 ); // original 2.0 / 0.25
- VECADDMUL ( cloth1->verts[collpair->ap1].impulse, collpair->normal, impulse );
- VECADDMUL ( cloth1->verts[collpair->ap2].impulse, collpair->normal, impulse );
- VECADDMUL ( cloth1->verts[collpair->ap3].impulse, collpair->normal, impulse );
- }
- */
- result = 1;
- }
- }
- return result;
-}
-#endif
-
-#if 0
-static float projectPointOntoLine(float *p, float *a, float *b)
-{
- float ba[3], pa[3];
- sub_v3_v3v3(ba, b, a);
- sub_v3_v3v3(pa, p, a);
- return dot_v3v3(pa, ba) / dot_v3v3(ba, ba);
-}
-
-static void calculateEENormal(float *np1, float *np2, float *np3, float *np4, float *out_normal)
-{
- float line1[3], line2[3];
- float length;
-
- sub_v3_v3v3(line1, np2, np1);
- sub_v3_v3v3(line2, np3, np1);
-
- // printf("l1: %f, l1: %f, l2: %f, l2: %f\n", line1[0], line1[1], line2[0], line2[1]);
-
- cross_v3_v3v3(out_normal, line1, line2);
-
-
-
- length = normalize_v3(out_normal);
- if (length <= FLT_EPSILON)
- { // lines are collinear
- sub_v3_v3v3(out_normal, np2, np1);
- normalize_v3(out_normal);
- }
-}
-
-static void findClosestPointsEE(float *x1, float *x2, float *x3, float *x4, float *w1, float *w2)
-{
- float temp[3], temp2[3];
-
- double a, b, c, e, f;
-
- sub_v3_v3v3(temp, x2, x1);
- a = dot_v3v3(temp, temp);
-
- sub_v3_v3v3(temp2, x4, x3);
- b = -dot_v3v3(temp, temp2);
-
- c = dot_v3v3(temp2, temp2);
-
- sub_v3_v3v3(temp2, x3, x1);
- e = dot_v3v3(temp, temp2);
-
- sub_v3_v3v3(temp, x4, x3);
- f = -dot_v3v3(temp, temp2);
-
- *w1 = (e * c - b * f) / (a * c - b * b);
- *w2 = (f - b * *w1) / c;
-
-}
-
-// calculates the distance of 2 edges
-static float edgedge_distance(float np11[3], float np12[3], float np21[3], float np22[3], float *out_a1, float *out_a2, float *out_normal)
-{
- float line1[3], line2[3], cross[3];
- float length;
- float temp[3], temp2[3];
- float dist_a1, dist_a2;
-
- sub_v3_v3v3(line1, np12, np11);
- sub_v3_v3v3(line2, np22, np21);
-
- cross_v3_v3v3(cross, line1, line2);
- length = dot_v3v3(cross, cross);
-
- if (length < FLT_EPSILON)
- {
- *out_a2 = projectPointOntoLine(np11, np21, np22);
- if ((*out_a2 >= -FLT_EPSILON) && (*out_a2 <= 1.0 + FLT_EPSILON))
- {
- *out_a1 = 0;
- calculateEENormal(np11, np12, np21, np22, out_normal);
- sub_v3_v3v3(temp, np22, np21);
- mul_v3_fl(temp, *out_a2);
- VECADD(temp2, temp, np21);
- VECADD(temp2, temp2, np11);
- return dot_v3v3(temp2, temp2);
- }
-
- CLAMP(*out_a2, 0.0, 1.0);
- if (*out_a2 > .5)
- { // == 1.0
- *out_a1 = projectPointOntoLine(np22, np11, np12);
- if ((*out_a1 >= -FLT_EPSILON) && (*out_a1 <= 1.0 + FLT_EPSILON))
- {
- calculateEENormal(np11, np12, np21, np22, out_normal);
-
- // return (np22 - (np11 + (np12 - np11) * out_a1)).lengthSquared();
- sub_v3_v3v3(temp, np12, np11);
- mul_v3_fl(temp, *out_a1);
- VECADD(temp2, temp, np11);
- sub_v3_v3v3(temp2, np22, temp2);
- return dot_v3v3(temp2, temp2);
- }
- }
- else
- { // == 0.0
- *out_a1 = projectPointOntoLine(np21, np11, np12);
- if ((*out_a1 >= -FLT_EPSILON) && (*out_a1 <= 1.0 + FLT_EPSILON))
- {
- calculateEENormal(np11, np11, np21, np22, out_normal);
-
- // return (np21 - (np11 + (np12 - np11) * out_a1)).lengthSquared();
- sub_v3_v3v3(temp, np12, np11);
- mul_v3_fl(temp, *out_a1);
- VECADD(temp2, temp, np11);
- sub_v3_v3v3(temp2, np21, temp2);
- return dot_v3v3(temp2, temp2);
- }
- }
-
- CLAMP(*out_a1, 0.0, 1.0);
- calculateEENormal(np11, np12, np21, np22, out_normal);
- if (*out_a1 > .5)
- {
- if (*out_a2 > .5)
- {
- sub_v3_v3v3(temp, np12, np22);
- }
- else
- {
- sub_v3_v3v3(temp, np12, np21);
- }
- }
- else
- {
- if (*out_a2 > .5)
- {
- sub_v3_v3v3(temp, np11, np22);
- }
- else
- {
- sub_v3_v3v3(temp, np11, np21);
- }
- }
-
- return dot_v3v3(temp, temp);
- }
- else
- {
-
- // If the lines aren't parallel (but coplanar) they have to intersect
-
- findClosestPointsEE(np11, np12, np21, np22, out_a1, out_a2);
-
- // If both points are on the finite edges, we're done.
- if (*out_a1 >= 0.0 && *out_a1 <= 1.0 && *out_a2 >= 0.0 && *out_a2 <= 1.0)
- {
- float p1[3], p2[3];
-
- // p1= np11 + (np12 - np11) * out_a1;
- sub_v3_v3v3(temp, np12, np11);
- mul_v3_fl(temp, *out_a1);
- VECADD(p1, np11, temp);
-
- // p2 = np21 + (np22 - np21) * out_a2;
- sub_v3_v3v3(temp, np22, np21);
- mul_v3_fl(temp, *out_a2);
- VECADD(p2, np21, temp);
-
- calculateEENormal(np11, np12, np21, np22, out_normal);
- sub_v3_v3v3(temp, p1, p2);
- return dot_v3v3(temp, temp);
- }
-
-
- /*
- * Clamp both points to the finite edges.
- * The one that moves most during clamping is one part of the solution.
- */
- dist_a1 = *out_a1;
- CLAMP(dist_a1, 0.0, 1.0);
- dist_a2 = *out_a2;
- CLAMP(dist_a2, 0.0, 1.0);
-
- // Now project the "most clamped" point on the other line.
- if (dist_a1 > dist_a2)
- {
- /* keep out_a1 */
- float p1[3];
-
- // p1 = np11 + (np12 - np11) * out_a1;
- sub_v3_v3v3(temp, np12, np11);
- mul_v3_fl(temp, *out_a1);
- VECADD(p1, np11, temp);
-
- *out_a2 = projectPointOntoLine(p1, np21, np22);
- CLAMP(*out_a2, 0.0, 1.0);
-
- calculateEENormal(np11, np12, np21, np22, out_normal);
-
- // return (p1 - (np21 + (np22 - np21) * out_a2)).lengthSquared();
- sub_v3_v3v3(temp, np22, np21);
- mul_v3_fl(temp, *out_a2);
- VECADD(temp, temp, np21);
- sub_v3_v3v3(temp, p1, temp);
- return dot_v3v3(temp, temp);
- }
- else
- {
- /* keep out_a2 */
- float p2[3];
-
- // p2 = np21 + (np22 - np21) * out_a2;
- sub_v3_v3v3(temp, np22, np21);
- mul_v3_fl(temp, *out_a2);
- VECADD(p2, np21, temp);
-
- *out_a1 = projectPointOntoLine(p2, np11, np12);
- CLAMP(*out_a1, 0.0, 1.0);
-
- calculateEENormal(np11, np12, np21, np22, out_normal);
-
- // return ((np11 + (np12 - np11) * out_a1) - p2).lengthSquared();
- sub_v3_v3v3(temp, np12, np11);
- mul_v3_fl(temp, *out_a1);
- VECADD(temp, temp, np11);
- sub_v3_v3v3(temp, temp, p2);
- return dot_v3v3(temp, temp);
- }
- }
-
- printf("Error in edgedge_distance: end of function\n");
- return 0;
-}
-
-static int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair )
-{
- EdgeCollPair edgecollpair;
- Cloth *cloth1=NULL;
- ClothVertex *verts1=NULL;
- unsigned int i = 0, k = 0;
- int numsolutions = 0;
- double x1[3], v1[3], x2[3], v2[3], x3[3], v3[3];
- double solution[3], solution2[3];
- MVert *verts2 = collmd->current_x; // old x
- MVert *velocity2 = collmd->current_v; // velocity
- float distance = 0;
- float triA[3][3], triB[3][3];
- int result = 0;
-
- cloth1 = clmd->clothObject;
- verts1 = cloth1->verts;
-
- for (i = 0; i < 9; i++)
- {
- // 9 edge - edge possibilities
-
- if (i == 0) // cloth edge: 1-2; coll edge: 1-2
- {
- edgecollpair.p11 = collpair->ap1;
- edgecollpair.p12 = collpair->ap2;
-
- edgecollpair.p21 = collpair->bp1;
- edgecollpair.p22 = collpair->bp2;
- }
- else if (i == 1) // cloth edge: 1-2; coll edge: 2-3
- {
- edgecollpair.p11 = collpair->ap1;
- edgecollpair.p12 = collpair->ap2;
-
- edgecollpair.p21 = collpair->bp2;
- edgecollpair.p22 = collpair->bp3;
- }
- else if (i == 2) // cloth edge: 1-2; coll edge: 1-3
- {
- edgecollpair.p11 = collpair->ap1;
- edgecollpair.p12 = collpair->ap2;
-
- edgecollpair.p21 = collpair->bp1;
- edgecollpair.p22 = collpair->bp3;
- }
- else if (i == 3) // cloth edge: 2-3; coll edge: 1-2
- {
- edgecollpair.p11 = collpair->ap2;
- edgecollpair.p12 = collpair->ap3;
-
- edgecollpair.p21 = collpair->bp1;
- edgecollpair.p22 = collpair->bp2;
- }
- else if (i == 4) // cloth edge: 2-3; coll edge: 2-3
- {
- edgecollpair.p11 = collpair->ap2;
- edgecollpair.p12 = collpair->ap3;
-
- edgecollpair.p21 = collpair->bp2;
- edgecollpair.p22 = collpair->bp3;
- }
- else if (i == 5) // cloth edge: 2-3; coll edge: 1-3
- {
- edgecollpair.p11 = collpair->ap2;
- edgecollpair.p12 = collpair->ap3;
-
- edgecollpair.p21 = collpair->bp1;
- edgecollpair.p22 = collpair->bp3;
- }
- else if (i ==6) // cloth edge: 1-3; coll edge: 1-2
- {
- edgecollpair.p11 = collpair->ap1;
- edgecollpair.p12 = collpair->ap3;
-
- edgecollpair.p21 = collpair->bp1;
- edgecollpair.p22 = collpair->bp2;
- }
- else if (i ==7) // cloth edge: 1-3; coll edge: 2-3
- {
- edgecollpair.p11 = collpair->ap1;
- edgecollpair.p12 = collpair->ap3;
-
- edgecollpair.p21 = collpair->bp2;
- edgecollpair.p22 = collpair->bp3;
- }
- else if (i == 8) // cloth edge: 1-3; coll edge: 1-3
- {
- edgecollpair.p11 = collpair->ap1;
- edgecollpair.p12 = collpair->ap3;
-
- edgecollpair.p21 = collpair->bp1;
- edgecollpair.p22 = collpair->bp3;
- }
- /*
- if ((edgecollpair.p11 == 3) && (edgecollpair.p12 == 16))
- printf("Ahier!\n");
- if ((edgecollpair.p11 == 16) && (edgecollpair.p12 == 3))
- printf("Ahier!\n");
- */
-
- // if ( !cloth_are_edges_adjacent ( clmd, collmd, &edgecollpair ) )
- {
- // always put coll points in p21/p22
- sub_v3_v3v3(x1, verts1[edgecollpair.p12].txold, verts1[edgecollpair.p11].txold);
- sub_v3_v3v3(v1, verts1[edgecollpair.p12].tv, verts1[edgecollpair.p11].tv);
-
- sub_v3_v3v3(x2, verts2[edgecollpair.p21].co, verts1[edgecollpair.p11].txold);
- sub_v3_v3v3(v2, velocity2[edgecollpair.p21].co, verts1[edgecollpair.p11].tv);
-
- sub_v3_v3v3(x3, verts2[edgecollpair.p22].co, verts1[edgecollpair.p11].txold);
- sub_v3_v3v3(v3, velocity2[edgecollpair.p22].co, verts1[edgecollpair.p11].tv);
-
- numsolutions = cloth_get_collision_time ( x1, v1, x2, v2, x3, v3, solution );
-
- if ((edgecollpair.p11 == 3 && edgecollpair.p12==16)|| (edgecollpair.p11==16 && edgecollpair.p12==3))
- {
- if (edgecollpair.p21==6 || edgecollpair.p22 == 6)
- {
- printf("dist: %f, sol[k]: %f, sol2[k]: %f\n", distance, solution[k], solution2[k]);
- printf("a1: %f, a2: %f, b1: %f, b2: %f\n", x1[0], x2[0], x3[0], v1[0]);
- printf("b21: %d, b22: %d\n", edgecollpair.p21, edgecollpair.p22);
- }
- }
-
- for ( k = 0; k < numsolutions; k++ )
- {
- // printf("sol %d: %lf\n", k, solution[k]);
- if ( ( solution[k] >= ALMOST_ZERO ) && ( solution[k] <= 1.0 ) && ( solution[k] > ALMOST_ZERO))
- {
- float a, b;
- float out_normal[3];
- float distance;
- float impulse = 0;
- float I_mag;
-
- // move verts
- VECADDS(triA[0], verts1[edgecollpair.p11].txold, verts1[edgecollpair.p11].tv, solution[k]);
- VECADDS(triA[1], verts1[edgecollpair.p12].txold, verts1[edgecollpair.p12].tv, solution[k]);
-
- VECADDS(triB[0], collmd->current_x[edgecollpair.p21].co, collmd->current_v[edgecollpair.p21].co, solution[k]);
- VECADDS(triB[1], collmd->current_x[edgecollpair.p22].co, collmd->current_v[edgecollpair.p22].co, solution[k]);
-
- // TODO: check for collisions
- distance = edgedge_distance(triA[0], triA[1], triB[0], triB[1], &a, &b, out_normal);
-
- if ((distance <= clmd->coll_parms->epsilon + BLI_bvhtree_getepsilon ( collmd->bvhtree ) + ALMOST_ZERO) && (dot_v3v3(out_normal, out_normal) > 0))
- {
- float vrel_1_to_2[3], temp[3], temp2[3], out_normalVelocity;
- float desiredVn;
-
- copy_v3_v3(vrel_1_to_2, verts1[edgecollpair.p11].tv);
- mul_v3_fl(vrel_1_to_2, 1.0 - a);
- copy_v3_v3(temp, verts1[edgecollpair.p12].tv);
- mul_v3_fl(temp, a);
-
- VECADD(vrel_1_to_2, vrel_1_to_2, temp);
-
- copy_v3_v3(temp, verts1[edgecollpair.p21].tv);
- mul_v3_fl(temp, 1.0 - b);
- copy_v3_v3(temp2, verts1[edgecollpair.p22].tv);
- mul_v3_fl(temp2, b);
- VECADD(temp, temp, temp2);
-
- sub_v3_v3v3(vrel_1_to_2, vrel_1_to_2, temp);
-
- out_normalVelocity = dot_v3v3(vrel_1_to_2, out_normal);
-/*
- // this correction results in wrong normals sometimes?
- if (out_normalVelocity < 0.0)
- {
- out_normalVelocity*= -1.0;
- negate_v3(out_normal);
- }
-*/
- /* Inelastic repulsion impulse. */
-
- // Calculate which normal velocity we need.
- desiredVn = (out_normalVelocity * (float)solution[k] - (.1 * (clmd->coll_parms->epsilon + BLI_bvhtree_getepsilon ( collmd->bvhtree )) - sqrt(distance)) - ALMOST_ZERO);
-
- // Now calculate what impulse we need to reach that velocity.
- I_mag = (out_normalVelocity - desiredVn) / 2.0; // / (1/m1 + 1/m2);
-
- // Finally apply that impulse.
- impulse = (2.0 * -I_mag) / (a*a + (1.0-a)*(1.0-a) + b*b + (1.0-b)*(1.0-b));
-
- VECADDMUL ( verts1[edgecollpair.p11].impulse, out_normal, (1.0-a) * impulse );
- verts1[edgecollpair.p11].impulse_count++;
-
- VECADDMUL ( verts1[edgecollpair.p12].impulse, out_normal, a * impulse );
- verts1[edgecollpair.p12].impulse_count++;
-
- // return true;
- result = 1;
- break;
- }
- else
- {
- // missing from collision.hpp
- }
- // mintime = MIN2(mintime, (float)solution[k]);
-
- break;
- }
- }
- }
- }
- return result;
-}
-
-static int cloth_collision_moving ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end )
-{
- Cloth *cloth1;
- cloth1 = clmd->clothObject;
-
- for ( ; collpair != collision_end; collpair++ )
- {
- // only handle moving collisions here
- if (!( collpair->flag & COLLISION_IN_FUTURE ))
- continue;
-
- cloth_collision_moving_edges ( clmd, collmd, collpair);
- // cloth_collision_moving_tris ( clmd, collmd, collpair);
- }
-
- return 1;
-}
-#endif
static void add_collision_object(Object ***objs, unsigned int *numobj, unsigned int *maxobj, Object *ob, Object *self, int level, unsigned int modifier_type)
{
@@ -2224,37 +636,14 @@ static void cloth_bvh_objcollisions_nearcheck ( ClothModifierData * clmd, Collis
CollPair **collisions, CollPair **collisions_index, int numresult, BVHTreeOverlap *overlap, double dt)
{
int i;
-#ifdef WITH_ELTOPO
- GHash *visithash = BLI_ghash_new(edgepair_hash, edgepair_cmp, "visthash, collision.c");
- GHash *tri_visithash = BLI_ghash_new(tripair_hash, tripair_cmp, "tri_visthash, collision.c");
- MemArena *arena = BLI_memarena_new(1<<16, "edge hash arena, collision.c");
-#endif
*collisions = ( CollPair* ) MEM_mallocN ( sizeof ( CollPair ) * numresult * 64, "collision array" ); //*4 since cloth_collision_static can return more than 1 collision
*collisions_index = *collisions;
-
-#ifdef WITH_ELTOPO
- machine_epsilon_offset(clmd->clothObject);
-
- 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++ ) {
- *collisions_index = cloth_edge_collision ( (ModifierData *)clmd, (ModifierData *)collmd,
- overlap+i, *collisions_index, visithash, arena );
- }
- BLI_ghash_free(visithash, NULL, NULL);
- BLI_ghash_free(tri_visithash, NULL, NULL);
- BLI_memarena_free(arena);
-#else /* WITH_ELTOPO */
- for ( i = 0; i < numresult; i++ ) {
*collisions_index = cloth_collision ( (ModifierData *)clmd, (ModifierData *)collmd,
overlap+i, *collisions_index, dt );
}
-#endif /* WITH_ELTOPO */
-
}
static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, CollisionModifierData *collmd, CollPair *collisions, CollPair *collisions_index)
@@ -2264,36 +653,26 @@ static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, Collision
ClothVertex *verts = NULL;
int ret = 0;
int result = 0;
- float tnull[3] = {0, 0, 0};
- /*numfaces = clmd->clothObject->numfaces;*/ /*UNUSED*/
numverts = clmd->clothObject->numverts;
-
verts = cloth->verts;
// 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 < 2; j++ ) { /* 5 is just a value that ensures convergence */
result = 0;
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);
-#else
result += cloth_collision_response_static ( clmd, collmd, collisions, collisions_index );
-#endif
-#ifdef WITH_ELTOPO
- {
-#else
+
// apply impulses in parallel
if (result) {
-#endif
for (i = 0; i < numverts; i++) {
// calculate "velocities" (just xnew = xold + v; no dt in v)
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 );
+ // VECADDMUL ( verts[i].tv, verts[i].impulse, 1.0f / verts[i].impulse_count );
+ VECADD ( verts[i].tv, verts[i].tv, verts[i].impulse);
+ zero_v3(verts[i].impulse);
verts[i].impulse_count = 0;
ret++;
@@ -2301,6 +680,9 @@ static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, Collision
}
}
}
+
+ if(!result)
+ break;
}
return ret;
}
@@ -2337,6 +719,18 @@ int cloth_bvh_objcollision(Object *ob, ClothModifierData * clmd, float step, flo
if (!collobjs)
return 0;
+ /* move object to position (step) in time */
+ for (i = 0; i < numcollobj; i++) {
+ Object *collob= collobjs[i];
+ CollisionModifierData *collmd = (CollisionModifierData*)modifiers_findByType(collob, eModifierType_Collision);
+
+ if (!collmd->bvhtree)
+ continue;
+
+ /* move object to position (step) in time */
+ collision_move_object ( collmd, step + dt, step );
+ }
+
do
{
CollPair **collisions, **collisions_index;
@@ -2356,10 +750,6 @@ int cloth_bvh_objcollision(Object *ob, ClothModifierData * clmd, float step, flo
if (!collmd->bvhtree)
continue;
- /* move object to position (step) in time */
-
- collision_move_object ( collmd, step + dt, step );
-
/* search for overlapping collision pairs */
overlap = BLI_bvhtree_overlap ( cloth_bvh, collmd->bvhtree, &result );
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index 7ba117861bb..d15f678f1c5 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -146,6 +146,32 @@ void curvemapping_set_black_white(CurveMapping *cumap, const float black[3], con
/* ***************** operations on single curve ************* */
/* ********** NOTE: requires curvemapping_changed() call after ******** */
+/* remove specified point */
+void curvemap_remove_point(CurveMap *cuma, CurveMapPoint *point)
+{
+ CurveMapPoint *cmp;
+ int a, b, removed = 0;
+
+ /* must have 2 points minimum */
+ if (cuma->totpoint <= 2)
+ return;
+
+ cmp = MEM_mallocN((cuma->totpoint) * sizeof(CurveMapPoint), "curve points");
+
+ /* well, lets keep the two outer points! */
+ for (a = 0, b = 0; a < cuma->totpoint; a++) {
+ if (&cuma->curve[a] != point) {
+ cmp[b] = cuma->curve[a];
+ b++;
+ }
+ else removed++;
+ }
+
+ MEM_freeN(cuma->curve);
+ cuma->curve = cmp;
+ cuma->totpoint -= removed;
+}
+
/* removes with flag set */
void curvemap_remove(CurveMap *cuma, int flag)
{
@@ -168,9 +194,10 @@ void curvemap_remove(CurveMap *cuma, int flag)
cuma->totpoint -= removed;
}
-void curvemap_insert(CurveMap *cuma, float x, float y)
+CurveMapPoint *curvemap_insert(CurveMap *cuma, float x, float y)
{
CurveMapPoint *cmp = MEM_callocN((cuma->totpoint + 1) * sizeof(CurveMapPoint), "curve points");
+ CurveMapPoint *newcmp = NULL;
int a, b, foundloc = 0;
/* insert fragments of the old one and the new point to the new curve */
@@ -181,6 +208,7 @@ void curvemap_insert(CurveMap *cuma, float x, float y)
cmp[a].y = y;
cmp[a].flag = CUMA_SELECT;
foundloc = 1;
+ newcmp = &cmp[a];
}
else {
cmp[a].x = cuma->curve[b].x;
@@ -195,6 +223,8 @@ void curvemap_insert(CurveMap *cuma, float x, float y)
/* free old curve and replace it with new one */
MEM_freeN(cuma->curve);
cuma->curve = cmp;
+
+ return newcmp;
}
void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset, int slope)
@@ -670,6 +700,20 @@ void curvemapping_changed(CurveMapping *cumap, int rem_doubles)
curvemap_make_table(cuma, clipr);
}
+void curvemapping_changed_all(CurveMapping *cumap)
+{
+ int a, cur = cumap->cur;
+
+ for (a = 0; a < CM_TOT; a++) {
+ if (cumap->cm[a].curve) {
+ cumap->cur = a;
+ curvemapping_changed(cumap, 0);
+ }
+ }
+
+ cumap->cur = cur;
+}
+
/* table should be verified */
float curvemap_evaluateF(CurveMap *cuma, float value)
{
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 868da0fda94..a1f87762db7 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -961,7 +961,7 @@ static int basis_cross(int n, int m)
}
}
-static void vectomat(float *vec, float *target_up, short axis, short upflag, short flags, float m[][3])
+static void vectomat(const float vec[3], const float target_up[3], short axis, short upflag, short flags, float m[][3])
{
float n[3];
float u[3]; /* vector specifying the up axis */
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 43cc63aefa6..6a0991cf4e5 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -393,7 +393,7 @@ void BKE_curve_texspace_calc(Curve *cu)
if (tot) doit = 1;
fp = dl->verts;
while (tot--) {
- DO_MINMAX(fp, min, max);
+ minmax_v3v3_v3(min, max, fp);
fp += 3;
}
dl = dl->next;
@@ -588,7 +588,7 @@ void BKE_nurb_test2D(Nurb *nu)
}
}
-void BKE_nurb_minmax(Nurb *nu, float *min, float *max)
+void BKE_nurb_minmax(Nurb *nu, float min[3], float max[3])
{
BezTriple *bezt;
BPoint *bp;
@@ -598,9 +598,9 @@ void BKE_nurb_minmax(Nurb *nu, float *min, float *max)
a = nu->pntsu;
bezt = nu->bezt;
while (a--) {
- DO_MINMAX(bezt->vec[0], min, max);
- DO_MINMAX(bezt->vec[1], min, max);
- DO_MINMAX(bezt->vec[2], min, max);
+ minmax_v3v3_v3(min, max, bezt->vec[0]);
+ minmax_v3v3_v3(min, max, bezt->vec[1]);
+ minmax_v3v3_v3(min, max, bezt->vec[2]);
bezt++;
}
}
@@ -608,7 +608,7 @@ void BKE_nurb_minmax(Nurb *nu, float *min, float *max)
a = nu->pntsu * nu->pntsv;
bp = nu->bp;
while (a--) {
- DO_MINMAX(bp->vec, min, max);
+ minmax_v3v3_v3(min, max, bp->vec);
bp++;
}
}
@@ -1166,19 +1166,23 @@ void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float
}
}
-static void forward_diff_bezier_cotangent(float *p0, float *p1, float *p2, float *p3, float *p, int it, int stride)
+static void forward_diff_bezier_cotangent(const float p0[3], const float p1[3], const float p2[3], const float p3[3],
+ float p[3], int it, int stride)
{
/* note that these are not purpendicular to the curve
* they need to be rotated for this,
*
- * This could also be optimized like forward_diff_bezier */
+ * This could also be optimized like BKE_curve_forward_diff_bezier */
int a;
for (a = 0; a <= it; a++) {
float t = (float)a / (float)it;
int i;
for (i = 0; i < 3; i++) {
- p[i] = (-6 * t + 6) * p0[i] + (18 * t - 12) * p1[i] + (-18 * t + 6) * p2[i] + (6 * t) * p3[i];
+ p[i] = (-6.0f * t + 6.0f) * p0[i] +
+ ( 18.0f * t - 12.0f) * p1[i] +
+ (-18.0f * t + 6.0f) * p2[i] +
+ ( 6.0f * t) * p3[i];
}
normalize_v3(p);
p = (float *)(((char *)p) + stride);
@@ -2043,7 +2047,7 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl)
normalize_v3(vec_2);
/* align the vector, can avoid this and it looks 98% OK but
- * better to align the angle quat roll's before comparing */
+ * better to align the angle quat roll's before comparing */
{
cross_v3_v3v3(cross_tmp, bevp_last->dir, bevp_first->dir);
angle = angle_normalized_v3v3(bevp_first->dir, bevp_last->dir);
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 5eab6aeccef..90a3e617477 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -128,7 +128,7 @@ typedef struct LayerTypeInfo {
} LayerTypeInfo;
static void layerCopy_mdeformvert(const void *source, void *dest,
- int count)
+ int count)
{
int i, size = sizeof(MDeformVert);
@@ -139,7 +139,7 @@ static void layerCopy_mdeformvert(const void *source, void *dest,
if (dvert->totweight) {
MDeformWeight *dw = MEM_callocN(dvert->totweight * sizeof(*dw),
- "layerCopy_mdeformvert dw");
+ "layerCopy_mdeformvert dw");
memcpy(dw, dvert->dw, dvert->totweight * sizeof(*dw));
dvert->dw = dw;
@@ -204,7 +204,7 @@ static void linklist_free_simple(void *link)
}
static void layerInterp_mdeformvert(void **sources, float *weights,
- float *UNUSED(sub_weights), int count, void *dest)
+ float *UNUSED(sub_weights), int count, void *dest)
{
MDeformVert *dvert = dest;
LinkNode *dest_dw = NULL; /* a list of lists of MDeformWeight pointers */
@@ -234,7 +234,7 @@ static void layerInterp_mdeformvert(void **sources, float *weights,
/* if this def_nr is not in the list, add it */
if (!node) {
MDeformWeight *tmp_dw = MEM_callocN(sizeof(*tmp_dw),
- "layerInterp_mdeformvert tmp_dw");
+ "layerInterp_mdeformvert tmp_dw");
tmp_dw->def_nr = dw->def_nr;
tmp_dw->weight = dw->weight * interp_weight;
BLI_linklist_prepend(&dest_dw, tmp_dw);
@@ -248,7 +248,7 @@ static void layerInterp_mdeformvert(void **sources, float *weights,
if (totweight) {
dvert->dw = MEM_callocN(sizeof(*dvert->dw) * totweight,
- "layerInterp_mdeformvert dvert->dw");
+ "layerInterp_mdeformvert dvert->dw");
dvert->totweight = totweight;
for (i = 0, node = dest_dw; node; node = node->next, ++i)
@@ -262,7 +262,7 @@ static void layerInterp_mdeformvert(void **sources, float *weights,
static void layerInterp_msticky(void **sources, float *weights,
- float *UNUSED(sub_weights), int count, void *dest)
+ float *UNUSED(sub_weights), int count, void *dest)
{
float co[2], w;
MSticky *mst;
@@ -271,20 +271,20 @@ static void layerInterp_msticky(void **sources, float *weights,
co[0] = co[1] = 0.0f;
for (i = 0; i < count; i++) {
w = weights ? weights[i] : 1.0f;
- mst = (MSticky*)sources[i];
+ mst = (MSticky *)sources[i];
madd_v2_v2fl(co, mst->co, w);
}
- mst = (MSticky*)dest;
+ mst = (MSticky *)dest;
copy_v2_v2(mst->co, co);
}
static void layerCopy_tface(const void *source, void *dest, int count)
{
- const MTFace *source_tf = (const MTFace*)source;
- MTFace *dest_tf = (MTFace*)dest;
+ const MTFace *source_tf = (const MTFace *)source;
+ MTFace *dest_tf = (MTFace *)dest;
int i;
for (i = 0; i < count; ++i)
@@ -292,7 +292,7 @@ static void layerCopy_tface(const void *source, void *dest, int count)
}
static void layerInterp_tface(void **sources, float *weights,
- float *sub_weights, int count, void *dest)
+ float *sub_weights, int count, void *dest)
{
MTFace *tf = dest;
int i, j, k;
@@ -326,10 +326,8 @@ static void layerSwap_tface(void *data, const int *corner_indices)
{
MTFace *tf = data;
float uv[4][2];
- static const short pin_flags[4] =
- { TF_PIN1, TF_PIN2, TF_PIN3, TF_PIN4 };
- static const char sel_flags[4] =
- { TF_SEL1, TF_SEL2, TF_SEL3, TF_SEL4 };
+ static const short pin_flags[4] = { TF_PIN1, TF_PIN2, TF_PIN3, TF_PIN4 };
+ static const char sel_flags[4] = { TF_SEL1, TF_SEL2, TF_SEL3, TF_SEL4 };
short unwrap = tf->unwrap & ~(TF_PIN1 | TF_PIN2 | TF_PIN3 | TF_PIN4);
char flag = tf->flag & ~(TF_SEL1 | TF_SEL2 | TF_SEL3 | TF_SEL4);
int j;
@@ -358,8 +356,8 @@ static void layerSwap_tface(void *data, const int *corner_indices)
static void layerDefault_tface(void *data, int count)
{
static MTFace default_tf = {{{0, 0}, {1, 0}, {1, 1}, {0, 1}}, NULL,
- 0, 0, TF_DYNAMIC|TF_CONVERTED, 0, 0};
- MTFace *tf = (MTFace*)data;
+ 0, 0, TF_DYNAMIC | TF_CONVERTED, 0, 0};
+ MTFace *tf = (MTFace *)data;
int i;
for (i = 0; i < count; i++)
@@ -367,27 +365,27 @@ static void layerDefault_tface(void *data, int count)
}
static void layerCopy_propFloat(const void *source, void *dest,
- int count)
+ int count)
{
- memcpy(dest, source, sizeof(MFloatProperty)*count);
+ memcpy(dest, source, sizeof(MFloatProperty) * count);
}
static void layerCopy_propInt(const void *source, void *dest,
- int count)
+ int count)
{
- memcpy(dest, source, sizeof(MIntProperty)*count);
+ memcpy(dest, source, sizeof(MIntProperty) * count);
}
static void layerCopy_propString(const void *source, void *dest,
- int count)
+ int count)
{
- memcpy(dest, source, sizeof(MStringProperty)*count);
+ memcpy(dest, source, sizeof(MStringProperty) * count);
}
static void layerCopy_origspace_face(const void *source, void *dest, int count)
{
- const OrigSpaceFace *source_tf = (const OrigSpaceFace*)source;
- OrigSpaceFace *dest_tf = (OrigSpaceFace*)dest;
+ const OrigSpaceFace *source_tf = (const OrigSpaceFace *)source;
+ OrigSpaceFace *dest_tf = (OrigSpaceFace *)dest;
int i;
for (i = 0; i < count; ++i)
@@ -395,7 +393,7 @@ static void layerCopy_origspace_face(const void *source, void *dest, int count)
}
static void layerInterp_origspace_face(void **sources, float *weights,
- float *sub_weights, int count, void *dest)
+ float *sub_weights, int count, void *dest)
{
OrigSpaceFace *osf = dest;
int i, j, k;
@@ -442,7 +440,7 @@ static void layerSwap_origspace_face(void *data, const int *corner_indices)
static void layerDefault_origspace_face(void *data, int count)
{
static OrigSpaceFace default_osf = {{{0, 0}, {1, 0}, {1, 1}, {0, 1}}};
- OrigSpaceFace *osf = (OrigSpaceFace*)data;
+ OrigSpaceFace *osf = (OrigSpaceFace *)data;
int i;
for (i = 0; i < count; i++)
@@ -456,27 +454,27 @@ static void layerSwap_mdisps(void *data, const int *ci)
int corners, cornersize, S;
if (s->disps) {
- int nverts= (ci[1] == 3) ? 4 : 3; /* silly way to know vertex count of face */
- corners= multires_mdisp_corners(s);
- cornersize= s->totdisp/corners;
+ int nverts = (ci[1] == 3) ? 4 : 3; /* silly way to know vertex count of face */
+ corners = multires_mdisp_corners(s);
+ cornersize = s->totdisp / corners;
- if (corners!=nverts) {
+ if (corners != nverts) {
/* happens when face changed vertex count in edit mode
* if it happened, just forgot displacement */
MEM_freeN(s->disps);
- s->totdisp= (s->totdisp/corners)*nverts;
- s->disps= MEM_callocN(s->totdisp*sizeof(float)*3, "mdisp swap");
+ s->totdisp = (s->totdisp / corners) * nverts;
+ s->disps = MEM_callocN(s->totdisp * sizeof(float) * 3, "mdisp swap");
return;
}
- d= MEM_callocN(sizeof(float) * 3 * s->totdisp, "mdisps swap");
+ d = MEM_callocN(sizeof(float) * 3 * s->totdisp, "mdisps swap");
for (S = 0; S < corners; S++)
- memcpy(d + cornersize*S, s->disps + cornersize*ci[S], cornersize*3*sizeof(float));
+ memcpy(d + cornersize * S, s->disps + cornersize * ci[S], cornersize * 3 * sizeof(float));
MEM_freeN(s->disps);
- s->disps= d;
+ s->disps = d;
}
}
@@ -527,9 +525,9 @@ static int layerRead_mdisps(CDataFile *cdf, void *data, int count)
for (i = 0; i < count; ++i) {
if (!d[i].disps)
- d[i].disps = MEM_callocN(sizeof(float)*3*d[i].totdisp, "mdisps read");
+ d[i].disps = MEM_callocN(sizeof(float) * 3 * d[i].totdisp, "mdisps read");
- if (!cdf_read_data(cdf, d[i].totdisp*3*sizeof(float), d[i].disps)) {
+ if (!cdf_read_data(cdf, d[i].totdisp * 3 * sizeof(float), d[i].disps)) {
printf("failed to read multires displacement %d/%d %d\n", i, count, d[i].totdisp);
return 0;
}
@@ -544,7 +542,7 @@ static int layerWrite_mdisps(CDataFile *cdf, void *data, int count)
int i;
for (i = 0; i < count; ++i) {
- if (!cdf_write_data(cdf, d[i].totdisp*3*sizeof(float), d[i].disps)) {
+ if (!cdf_write_data(cdf, d[i].totdisp * 3 * sizeof(float), d[i].disps)) {
printf("failed to write multires displacement %d/%d %d\n", i, count, d[i].totdisp);
return 0;
}
@@ -560,7 +558,7 @@ static size_t layerFilesize_mdisps(CDataFile *UNUSED(cdf), void *data, int count
int i;
for (i = 0; i < count; ++i)
- size += d[i].totdisp*3*sizeof(float);
+ size += d[i].totdisp * 3 * sizeof(float);
return size;
}
@@ -571,8 +569,8 @@ static void layerCopy_grid_paint_mask(const void *source, void *dest, int count)
const GridPaintMask *s = source;
GridPaintMask *d = dest;
- for(i = 0; i < count; ++i) {
- if(s[i].data) {
+ for (i = 0; i < count; ++i) {
+ if (s[i].data) {
d[i].data = MEM_dupallocN(s[i].data);
d[i].level = s[i].level;
}
@@ -589,8 +587,8 @@ static void layerFree_grid_paint_mask(void *data, int count, int UNUSED(size))
int i;
GridPaintMask *gpm = data;
- for(i = 0; i < count; ++i) {
- if(gpm[i].data)
+ for (i = 0; i < count; ++i) {
+ if (gpm[i].data)
MEM_freeN(gpm[i].data);
gpm[i].data = NULL;
gpm[i].level = 0;
@@ -675,7 +673,7 @@ static void layerInitMinMax_mloopcol(void *vmin, void *vmax)
static void layerDefault_mloopcol(void *data, int count)
{
MLoopCol default_mloopcol = {255, 255, 255, 255};
- MLoopCol *mlcol = (MLoopCol*)data;
+ MLoopCol *mlcol = (MLoopCol *)data;
int i;
for (i = 0; i < count; i++)
mlcol[i] = default_mloopcol;
@@ -683,7 +681,7 @@ static void layerDefault_mloopcol(void *data, int count)
}
static void layerInterp_mloopcol(void **sources, float *weights,
- float *sub_weights, int count, void *dest)
+ float *sub_weights, int count, void *dest)
{
MLoopCol *mc = dest;
int i;
@@ -774,7 +772,7 @@ static void layerInterp_mloopuv(void **sources, float *weights,
float *sub_weights, int count, void *dest)
{
MLoopUV *mluv = dest;
- float *uv= mluv->uv;
+ float *uv = mluv->uv;
int i;
zero_v2(uv);
@@ -841,10 +839,10 @@ static void layerAdd_mloop_origspace(void *data1, void *data2)
}
static void layerInterp_mloop_origspace(void **sources, float *weights,
- float *sub_weights, int count, void *dest)
+ float *sub_weights, int count, void *dest)
{
OrigSpaceLoop *mluv = dest;
- float *uv= mluv->uv;
+ float *uv = mluv->uv;
int i;
zero_v2(uv);
@@ -869,7 +867,7 @@ static void layerInterp_mloop_origspace(void **sources, float *weights,
/* --- end copy */
static void layerInterp_mcol(void **sources, float *weights,
- float *sub_weights, int count, void *dest)
+ float *sub_weights, int count, void *dest)
{
MCol *mc = dest;
int i, j, k;
@@ -892,7 +890,7 @@ static void layerInterp_mcol(void **sources, float *weights,
if (sub_weights) {
MCol *src = sources[i];
for (k = 0; k < 4; ++k, ++sub_weight, ++src) {
- const float w= (*sub_weight) * weight;
+ const float w = (*sub_weight) * weight;
col[j].a += src->a * w;
col[j].r += src->r * w;
col[j].g += src->g * w;
@@ -940,10 +938,10 @@ static void layerSwap_mcol(void *data, const int *corner_indices)
static void layerDefault_mcol(void *data, int count)
{
static MCol default_mcol = {255, 255, 255, 255};
- MCol *mcol = (MCol*)data;
+ MCol *mcol = (MCol *)data;
int i;
- for (i = 0; i < 4*count; i++) {
+ for (i = 0; i < 4 * count; i++) {
mcol[i] = default_mcol;
}
}
@@ -1012,13 +1010,13 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
layerInterp_tface, layerSwap_tface, layerDefault_tface},
/* 6: CD_MCOL */
/* 4 MCol structs per face */
- {sizeof(MCol)*4, "MCol", 4, "Col", NULL, NULL, layerInterp_mcol,
+ {sizeof(MCol) * 4, "MCol", 4, "Col", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
/* 7: CD_ORIGINDEX */
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
/* 8: CD_NORMAL */
/* 3 floats per normal vector */
- {sizeof(float)*3, "vec3f", 1, NULL, NULL, NULL, NULL, NULL, NULL},
+ {sizeof(float) * 3, "vec3f", 1, NULL, NULL, NULL, NULL, NULL, NULL},
/* 9: CD_POLYINDEX */
{sizeof(int), "MIntProperty", 1, NULL, NULL, NULL, NULL, NULL, NULL},
/* 10: CD_PROP_FLT */
@@ -1031,10 +1029,10 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
{sizeof(OrigSpaceFace), "OrigSpaceFace", 1, "UVMap", layerCopy_origspace_face, NULL,
layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face},
/* 14: CD_ORCO */
- {sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
+ {sizeof(float) * 3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
/* 15: CD_MTEXPOLY */
/* note, when we expose the UV Map / TexFace split to the user, change this back to face Texture */
- {sizeof(MTexPoly), "MTexPoly", 1, "UVMap"/* "Face Texture" */, NULL, NULL, NULL, NULL, NULL},
+ {sizeof(MTexPoly), "MTexPoly", 1, "UVMap" /* "Face Texture" */, NULL, NULL, NULL, NULL, NULL},
/* 16: CD_MLOOPUV */
{sizeof(MLoopUV), "MLoopUV", 1, "UV coord", NULL, NULL, layerInterp_mloopuv, NULL, NULL,
layerEqual_mloopuv, layerMultiply_mloopuv, layerInitMinMax_mloopuv,
@@ -1044,23 +1042,23 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
layerDefault_mloopcol, layerEqual_mloopcol, layerMultiply_mloopcol, layerInitMinMax_mloopcol,
layerAdd_mloopcol, layerDoMinMax_mloopcol, layerCopyValue_mloopcol},
/* 18: CD_TANGENT */
- {sizeof(float)*4*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
+ {sizeof(float) * 4 * 4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
/* 19: CD_MDISPS */
{sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps,
layerFree_mdisps, NULL, layerSwap_mdisps, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
layerRead_mdisps, layerWrite_mdisps, layerFilesize_mdisps},
/* 20: CD_PREVIEW_MCOL */
- {sizeof(MCol)*4, "MCol", 4, "PreviewCol", NULL, NULL, layerInterp_mcol,
+ {sizeof(MCol) * 4, "MCol", 4, "PreviewCol", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
/* 21: CD_ID_MCOL */
- {sizeof(MCol)*4, "MCol", 4, "IDCol", NULL, NULL, layerInterp_mcol,
+ {sizeof(MCol) * 4, "MCol", 4, "IDCol", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
/* 22: CD_TEXTURE_MCOL */
- {sizeof(MCol)*4, "MCol", 4, "TexturedCol", NULL, NULL, layerInterp_mcol,
+ {sizeof(MCol) * 4, "MCol", 4, "TexturedCol", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
/* 23: CD_CLOTH_ORCO */
- {sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
+ {sizeof(float) * 3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
/* 24: CD_RECAST */
{sizeof(MRecast), "MRecast", 1, "Recast", NULL, NULL, NULL, NULL},
@@ -1072,7 +1070,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
/* 27: CD_SHAPE_KEYINDEX */
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
/* 28: CD_SHAPEKEY */
- {sizeof(float)*3, "", 0, "ShapeKey", NULL, NULL, layerInterp_shapekey},
+ {sizeof(float) * 3, "", 0, "ShapeKey", NULL, NULL, layerInterp_shapekey},
/* 29: CD_BWEIGHT */
{sizeof(float), "", 0, "BevelWeight", NULL, NULL, layerInterp_bweight},
/* 30: CD_CREASE */
@@ -1105,7 +1103,7 @@ static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
/* 5-9 */ "CDMTFace", "CDMCol", "CDOrigIndex", "CDNormal", "CDFlags",
/* 10-14 */ "CDMFloatProperty", "CDMIntProperty", "CDMStringProperty", "CDOrigSpace", "CDOrco",
/* 15-19 */ "CDMTexPoly", "CDMLoopUV", "CDMloopCol", "CDTangent", "CDMDisps",
- /* 20-24 */"CDPreviewMCol", "CDIDMCol", "CDTextureMCol", "CDClothOrco", "CDMRecast",
+ /* 20-24 */ "CDPreviewMCol", "CDIDMCol", "CDTextureMCol", "CDClothOrco", "CDMRecast",
/* BMESH ONLY */
/* 25-29 */ "CDMPoly", "CDMLoop", "CDShapeKeyIndex", "CDShapeKey", "CDBevelWeight",
@@ -1118,35 +1116,36 @@ static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
const CustomDataMask CD_MASK_BAREMESH =
- CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE | CD_MASK_MLOOP | CD_MASK_MPOLY | CD_MASK_BWEIGHT;
+ CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE | CD_MASK_MLOOP | CD_MASK_MPOLY | CD_MASK_BWEIGHT;
const CustomDataMask CD_MASK_MESH =
- CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
- CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
- CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
- CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
- CD_MASK_MTEXPOLY | CD_MASK_NORMAL | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
- CD_MASK_GRID_PAINT_MASK;
+ CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
+ CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
+ CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
+ CD_MASK_MTEXPOLY | CD_MASK_NORMAL | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
+ CD_MASK_GRID_PAINT_MASK;
const CustomDataMask CD_MASK_EDITMESH =
- CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MLOOPUV |
- CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
- CD_MASK_MCOL|CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR |
- CD_MASK_MDISPS | CD_MASK_SHAPEKEY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
- CD_MASK_GRID_PAINT_MASK;
+ CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MLOOPUV |
+ CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
+ CD_MASK_MCOL | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR |
+ CD_MASK_MDISPS | CD_MASK_SHAPEKEY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
+ CD_MASK_GRID_PAINT_MASK;
const CustomDataMask CD_MASK_DERIVEDMESH =
- CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
- CD_MASK_MCOL | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_CLOTH_ORCO |
- CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_PREVIEW_MLOOPCOL |
- CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP | CD_MASK_ORCO | CD_MASK_TANGENT |
- CD_MASK_PREVIEW_MCOL | CD_MASK_NORMAL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
- CD_MASK_ORIGINDEX | CD_MASK_POLYINDEX;
-const CustomDataMask CD_MASK_BMESH = CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
- CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
- CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | CD_MASK_MDISPS |
- CD_MASK_CREASE | CD_MASK_BWEIGHT | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
- CD_MASK_GRID_PAINT_MASK;
+ CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
+ CD_MASK_MCOL | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_CLOTH_ORCO |
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_PREVIEW_MLOOPCOL |
+ CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP | CD_MASK_ORCO | CD_MASK_TANGENT |
+ CD_MASK_PREVIEW_MCOL | CD_MASK_NORMAL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
+ CD_MASK_ORIGINDEX | CD_MASK_POLYINDEX;
+const CustomDataMask CD_MASK_BMESH =
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
+ CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
+ CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | CD_MASK_MDISPS |
+ CD_MASK_CREASE | CD_MASK_BWEIGHT | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
+ CD_MASK_GRID_PAINT_MASK;
const CustomDataMask CD_MASK_FACECORNERS =
- CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
- CD_MASK_MLOOPCOL;
+ CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
+ CD_MASK_MLOOPCOL;
static const LayerTypeInfo *layerType_getInfo(int type)
{
@@ -1166,7 +1165,7 @@ static const char *layerType_getName(int type)
static void customData_update_offsets(CustomData *data);
static CustomDataLayer *customData_add_layer__internal(CustomData *data,
- int type, int alloctype, void *layerdata, int totelem, const char *name);
+ int type, int alloctype, void *layerdata, int totelem, const char *name);
void CustomData_update_typemap(CustomData *data)
{
@@ -1175,11 +1174,11 @@ void CustomData_update_typemap(CustomData *data)
/* since we cant do in a pre-processor do here as an assert */
BLI_assert(sizeof(data->typemap) / sizeof(int) >= CD_NUMTYPES);
- for (i=0; i<CD_NUMTYPES; i++) {
+ for (i = 0; i < CD_NUMTYPES; i++) {
data->typemap[i] = -1;
}
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
if (data->layers[i].type != lasttype) {
data->typemap[data->layers[i].type] = i;
}
@@ -1188,7 +1187,7 @@ void CustomData_update_typemap(CustomData *data)
}
void CustomData_merge(const struct CustomData *source, struct CustomData *dest,
- CustomDataMask mask, int alloctype, int totelem)
+ CustomDataMask mask, int alloctype, int totelem)
{
/*const LayerTypeInfo *typeInfo;*/
CustomDataLayer *layer, *newlayer;
@@ -1230,10 +1229,10 @@ void CustomData_merge(const struct CustomData *source, struct CustomData *dest,
if ((alloctype == CD_ASSIGN) && (lastflag & CD_FLAG_NOFREE))
newlayer = customData_add_layer__internal(dest, type, CD_REFERENCE,
- data, totelem, layer->name);
+ data, totelem, layer->name);
else
newlayer = customData_add_layer__internal(dest, type, alloctype,
- data, totelem, layer->name);
+ data, totelem, layer->name);
if (newlayer) {
newlayer->uid = layer->uid;
@@ -1242,7 +1241,7 @@ void CustomData_merge(const struct CustomData *source, struct CustomData *dest,
newlayer->active_rnd = lastrender;
newlayer->active_clone = lastclone;
newlayer->active_mask = lastmask;
- newlayer->flag |= lastflag & (CD_FLAG_EXTERNAL|CD_FLAG_IN_MEMORY);
+ newlayer->flag |= lastflag & (CD_FLAG_EXTERNAL | CD_FLAG_IN_MEMORY);
}
}
@@ -1250,12 +1249,12 @@ void CustomData_merge(const struct CustomData *source, struct CustomData *dest,
}
void CustomData_copy(const struct CustomData *source, struct CustomData *dest,
- CustomDataMask mask, int alloctype, int totelem)
+ CustomDataMask mask, int alloctype, int totelem)
{
memset(dest, 0, sizeof(*dest));
if (source->external)
- dest->external= MEM_dupallocN(source->external);
+ dest->external = MEM_dupallocN(source->external);
CustomData_merge(source, dest, mask, alloctype, totelem);
}
@@ -1279,7 +1278,7 @@ static void CustomData_external_free(CustomData *data)
{
if (data->external) {
MEM_freeN(data->external);
- data->external= NULL;
+ data->external = NULL;
}
}
@@ -1318,7 +1317,7 @@ int CustomData_get_layer_index(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return i;
@@ -1340,8 +1339,8 @@ int CustomData_get_named_layer_index(const CustomData *data, int type, const cha
{
int i;
- for (i=0; i < data->totlayer; ++i)
- if (data->layers[i].type == type && strcmp(data->layers[i].name, name)==0)
+ for (i = 0; i < data->totlayer; ++i)
+ if (data->layers[i].type == type && strcmp(data->layers[i].name, name) == 0)
return i;
return -1;
@@ -1363,7 +1362,7 @@ int CustomData_get_render_layer_index(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return i + data->layers[i].active_rnd;
@@ -1374,7 +1373,7 @@ int CustomData_get_clone_layer_index(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return i + data->layers[i].active_clone;
@@ -1385,7 +1384,7 @@ int CustomData_get_stencil_layer_index(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return i + data->layers[i].active_mask;
@@ -1396,7 +1395,7 @@ int CustomData_get_active_layer(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return data->layers[i].active;
@@ -1407,7 +1406,7 @@ int CustomData_get_render_layer(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return data->layers[i].active_rnd;
@@ -1418,7 +1417,7 @@ int CustomData_get_clone_layer(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return data->layers[i].active_clone;
@@ -1429,7 +1428,7 @@ int CustomData_get_stencil_layer(const CustomData *data, int type)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
return data->layers[i].active_mask;
@@ -1440,7 +1439,7 @@ void CustomData_set_layer_active(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
data->layers[i].active = n;
}
@@ -1449,7 +1448,7 @@ void CustomData_set_layer_render(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
data->layers[i].active_rnd = n;
}
@@ -1458,7 +1457,7 @@ void CustomData_set_layer_clone(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
data->layers[i].active_clone = n;
}
@@ -1467,7 +1466,7 @@ void CustomData_set_layer_stencil(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
data->layers[i].active_mask = n;
}
@@ -1477,51 +1476,51 @@ void CustomData_set_layer_active_index(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
- data->layers[i].active = n-i;
+ data->layers[i].active = n - i;
}
void CustomData_set_layer_render_index(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
- data->layers[i].active_rnd = n-i;
+ data->layers[i].active_rnd = n - i;
}
void CustomData_set_layer_clone_index(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
- data->layers[i].active_clone = n-i;
+ data->layers[i].active_clone = n - i;
}
void CustomData_set_layer_stencil_index(CustomData *data, int type, int n)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
- data->layers[i].active_mask = n-i;
+ data->layers[i].active_mask = n - i;
}
void CustomData_set_layer_flag(struct CustomData *data, int type, int flag)
{
int i;
- for (i=0; i < data->totlayer; ++i)
+ for (i = 0; i < data->totlayer; ++i)
if (data->layers[i].type == type)
data->layers[i].flag |= flag;
}
static int customData_resize(CustomData *data, int amount)
{
- CustomDataLayer *tmp = MEM_callocN(sizeof(*tmp)*(data->maxlayer + amount),
- "CustomData->layers");
+ CustomDataLayer *tmp = MEM_callocN(sizeof(*tmp) * (data->maxlayer + amount),
+ "CustomData->layers");
if (!tmp) return 0;
data->maxlayer += amount;
@@ -1535,9 +1534,9 @@ static int customData_resize(CustomData *data, int amount)
}
static CustomDataLayer *customData_add_layer__internal(CustomData *data,
- int type, int alloctype, void *layerdata, int totelem, const char *name)
+ int type, int alloctype, void *layerdata, int totelem, const char *name)
{
- const LayerTypeInfo *typeInfo= layerType_getInfo(type);
+ const LayerTypeInfo *typeInfo = layerType_getInfo(type);
int size = typeInfo->size * totelem, flag = 0, index = data->totlayer;
void *newlayerdata = NULL;
@@ -1568,7 +1567,7 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data,
}
else if (alloctype == CD_DEFAULT) {
if (typeInfo->set_default)
- typeInfo->set_default((char*)newlayerdata, totelem);
+ typeInfo->set_default((char *)newlayerdata, totelem);
}
else if (alloctype == CD_REFERENCE)
flag |= CD_FLAG_NOFREE;
@@ -1584,25 +1583,25 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data,
data->totlayer++;
/* keep layers ordered by type */
- for ( ; index > 0 && data->layers[index - 1].type > type; --index)
+ for (; index > 0 && data->layers[index - 1].type > type; --index)
data->layers[index] = data->layers[index - 1];
data->layers[index].type = type;
data->layers[index].flag = flag;
data->layers[index].data = newlayerdata;
- if (name || (name=typeInfo->defaultname)) {
+ if (name || (name = typeInfo->defaultname)) {
BLI_strncpy(data->layers[index].name, name, sizeof(data->layers[index].name));
CustomData_set_layer_unique_name(data, index);
}
else
data->layers[index].name[0] = '\0';
- if (index > 0 && data->layers[index-1].type == type) {
- data->layers[index].active = data->layers[index-1].active;
- data->layers[index].active_rnd = data->layers[index-1].active_rnd;
- data->layers[index].active_clone = data->layers[index-1].active_clone;
- data->layers[index].active_mask = data->layers[index-1].active_mask;
+ if (index > 0 && data->layers[index - 1].type == type) {
+ data->layers[index].active = data->layers[index - 1].active;
+ data->layers[index].active_rnd = data->layers[index - 1].active_rnd;
+ data->layers[index].active_clone = data->layers[index - 1].active_clone;
+ data->layers[index].active_mask = data->layers[index - 1].active_mask;
}
else {
data->layers[index].active = 0;
@@ -1617,13 +1616,13 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data,
}
void *CustomData_add_layer(CustomData *data, int type, int alloctype,
- void *layerdata, int totelem)
+ void *layerdata, int totelem)
{
CustomDataLayer *layer;
- const LayerTypeInfo *typeInfo= layerType_getInfo(type);
+ const LayerTypeInfo *typeInfo = layerType_getInfo(type);
layer = customData_add_layer__internal(data, type, alloctype, layerdata,
- totelem, typeInfo->defaultname);
+ totelem, typeInfo->defaultname);
CustomData_update_typemap(data);
if (layer)
@@ -1634,12 +1633,12 @@ void *CustomData_add_layer(CustomData *data, int type, int alloctype,
/*same as above but accepts a name*/
void *CustomData_add_layer_named(CustomData *data, int type, int alloctype,
- void *layerdata, int totelem, const char *name)
+ void *layerdata, int totelem, const char *name)
{
CustomDataLayer *layer;
layer = customData_add_layer__internal(data, type, alloctype, layerdata,
- totelem, name);
+ totelem, name);
CustomData_update_typemap(data);
if (layer)
@@ -1657,8 +1656,8 @@ int CustomData_free_layer(CustomData *data, int type, int totelem, int index)
customData_free_layer__internal(&data->layers[index], totelem);
- for (i=index+1; i < data->totlayer; ++i)
- data->layers[i-1] = data->layers[i];
+ for (i = index + 1; i < data->totlayer; ++i)
+ data->layers[i - 1] = data->layers[i];
data->totlayer--;
@@ -1675,7 +1674,7 @@ int CustomData_free_layer(CustomData *data, int type, int totelem, int index)
}
}
- if (data->totlayer <= data->maxlayer-CUSTOMDATA_GROW)
+ if (data->totlayer <= data->maxlayer - CUSTOMDATA_GROW)
customData_resize(data, -CUSTOMDATA_GROW);
customData_update_offsets(data);
@@ -1748,7 +1747,7 @@ void *CustomData_duplicate_referenced_layer(struct CustomData *data, const int t
}
void *CustomData_duplicate_referenced_layer_named(struct CustomData *data,
- const int type, const char *name, const int totelem)
+ const int type, const char *name, const int totelem)
{
CustomDataLayer *layer;
int layer_index;
@@ -1813,7 +1812,7 @@ void CustomData_free_temporary(CustomData *data, int totelem)
data->totlayer = j;
- if (data->totlayer <= data->maxlayer-CUSTOMDATA_GROW)
+ if (data->totlayer <= data->maxlayer - CUSTOMDATA_GROW)
customData_resize(data, -CUSTOMDATA_GROW);
customData_update_offsets(data);
@@ -1836,11 +1835,11 @@ void CustomData_copy_elements(int type, void *source, void *dest, int count)
if (typeInfo->copy)
typeInfo->copy(source, dest, count);
else
- memcpy(dest, source, typeInfo->size*count);
+ memcpy(dest, source, typeInfo->size * count);
}
void CustomData_copy_data(const CustomData *source, CustomData *dest,
- int source_index, int dest_index, int count)
+ int source_index, int dest_index, int count)
{
const LayerTypeInfo *typeInfo;
int src_i, dest_i;
@@ -1882,12 +1881,12 @@ void CustomData_copy_data(const CustomData *source, CustomData *dest,
if (typeInfo->copy)
typeInfo->copy(src_data + src_offset,
- dest_data + dest_offset,
- count);
+ dest_data + dest_offset,
+ count);
else
memcpy(dest_data + dest_offset,
- src_data + src_offset,
- count * typeInfo->size);
+ src_data + src_offset,
+ count * typeInfo->size);
/* if there are multiple source & dest layers of the same type,
* we don't want to copy all source layers to the same dest, so
@@ -1911,7 +1910,7 @@ void CustomData_free_elem(CustomData *data, int index, int count)
int offset = typeInfo->size * index;
typeInfo->free((char *)data->layers[i].data + offset,
- count, typeInfo->size);
+ count, typeInfo->size);
}
}
}
@@ -1920,8 +1919,8 @@ void CustomData_free_elem(CustomData *data, int index, int count)
#define SOURCE_BUF_SIZE 100
void CustomData_interp(const CustomData *source, CustomData *dest,
- int *src_indices, float *weights, float *sub_weights,
- int count, int dest_index)
+ int *src_indices, float *weights, float *sub_weights,
+ int count, int dest_index)
{
int src_i, dest_i;
int dest_offset;
@@ -1934,12 +1933,12 @@ void CustomData_interp(const CustomData *source, CustomData *dest,
*/
if (count > SOURCE_BUF_SIZE)
sources = MEM_callocN(sizeof(*sources) * count,
- "CustomData_interp sources");
+ "CustomData_interp sources");
/* interpolates a layer at a time */
dest_i = 0;
for (src_i = 0; src_i < source->totlayer; ++src_i) {
- const LayerTypeInfo *typeInfo= layerType_getInfo(source->layers[src_i].type);
+ const LayerTypeInfo *typeInfo = layerType_getInfo(source->layers[src_i].type);
if (!typeInfo->interp) continue;
/* find the first dest layer with type >= the source type
@@ -1962,7 +1961,7 @@ void CustomData_interp(const CustomData *source, CustomData *dest,
dest_offset = dest_index * typeInfo->size;
typeInfo->interp(sources, weights, sub_weights, count,
- (char *)dest->layers[dest_i].data + dest_offset);
+ (char *)dest->layers[dest_i].data + dest_offset);
/* if there are multiple source & dest layers of the same type,
* we don't want to copy all source layers to the same dest, so
@@ -2016,7 +2015,7 @@ void *CustomData_get_n(const CustomData *data, int type, int index, int n)
if (layer_index < 0) return NULL;
offset = layerType_getInfo(type)->size * index;
- return (char *)data->layers[layer_index+n].data + offset;
+ return (char *)data->layers[layer_index + n].data + offset;
}
void *CustomData_get_layer(const CustomData *data, int type)
@@ -2038,7 +2037,7 @@ void *CustomData_get_layer_n(const CustomData *data, int type, int n)
}
void *CustomData_get_layer_named(const struct CustomData *data, int type,
- const char *name)
+ const char *name)
{
int layer_index = CustomData_get_named_layer_index(data, type, name);
if (layer_index < 0) return NULL;
@@ -2102,7 +2101,7 @@ void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *l
int totloop, int totpoly)
{
int i;
- for (i=0; i < fdata->totlayer; i++) {
+ for (i = 0; i < fdata->totlayer; i++) {
if (fdata->layers[i].type == CD_MTFACE) {
CustomData_add_layer_named(pdata, CD_MTEXPOLY, CD_CALLOC, NULL, totpoly, fdata->layers[i].name);
CustomData_add_layer_named(ldata, CD_MLOOPUV, CD_CALLOC, NULL, totloop, fdata->layers[i].name);
@@ -2119,12 +2118,12 @@ void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *l
void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *ldata, int total)
{
int i;
- for (i=0; i < pdata->totlayer; i++) {
+ for (i = 0; i < pdata->totlayer; i++) {
if (pdata->layers[i].type == CD_MTEXPOLY) {
CustomData_add_layer_named(fdata, CD_MTFACE, CD_CALLOC, NULL, total, pdata->layers[i].name);
}
}
- for (i=0; i < ldata->totlayer; i++) {
+ for (i = 0; i < ldata->totlayer; i++) {
if (ldata->layers[i].type == CD_MLOOPCOL) {
CustomData_add_layer_named(fdata, CD_MCOL, CD_CALLOC, NULL, total, ldata->layers[i].name);
}
@@ -2273,7 +2272,7 @@ void CustomData_bmesh_free_block(CustomData *data, void **block)
if (typeInfo->free) {
int offset = data->layers[i].offset;
- typeInfo->free((char*)*block + offset, 1, typeInfo->size);
+ typeInfo->free((char *)*block + offset, 1, typeInfo->size);
}
}
}
@@ -2297,7 +2296,7 @@ static void CustomData_bmesh_alloc_block(CustomData *data, void **block)
}
void CustomData_bmesh_copy_data(const CustomData *source, CustomData *dest,
- void *src_block, void **dest_block)
+ void *src_block, void **dest_block)
{
const LayerTypeInfo *typeInfo;
int dest_i, src_i;
@@ -2324,9 +2323,9 @@ void CustomData_bmesh_copy_data(const CustomData *source, CustomData *dest,
/* if we found a matching layer, copy the data */
if (dest->layers[dest_i].type == source->layers[src_i].type &&
- strcmp(dest->layers[dest_i].name, source->layers[src_i].name) == 0) {
- char *src_data = (char*)src_block + source->layers[src_i].offset;
- char *dest_data = (char*)*dest_block + dest->layers[dest_i].offset;
+ strcmp(dest->layers[dest_i].name, source->layers[src_i].name) == 0) {
+ char *src_data = (char *)src_block + source->layers[src_i].offset;
+ char *dest_data = (char *)*dest_block + dest->layers[dest_i].offset;
typeInfo = layerType_getInfo(source->layers[src_i].type);
@@ -2364,7 +2363,7 @@ void *CustomData_bmesh_get_n(const CustomData *data, void *block, int type, int
layer_index = CustomData_get_layer_index(data, type);
if (layer_index < 0) return NULL;
- return (char *)block + data->layers[layer_index+n].offset;
+ return (char *)block + data->layers[layer_index + n].offset;
}
/*gets from the layer at physical index n, note: doesn't check type.*/
@@ -2486,7 +2485,7 @@ void CustomData_bmesh_set_layer_n(CustomData *data, void *block, int n, void *so
}
void CustomData_bmesh_interp(CustomData *data, void **src_blocks, float *weights,
- float *sub_weights, int count, void *dest_block)
+ float *sub_weights, int count, void *dest_block)
{
int i, j;
void *source_buf[SOURCE_BUF_SIZE];
@@ -2497,7 +2496,7 @@ void CustomData_bmesh_interp(CustomData *data, void **src_blocks, float *weights
*/
if (count > SOURCE_BUF_SIZE)
sources = MEM_callocN(sizeof(*sources) * count,
- "CustomData_interp sources");
+ "CustomData_interp sources");
/* interpolates a layer at a time */
for (i = 0; i < data->totlayer; ++i) {
@@ -2508,7 +2507,7 @@ void CustomData_bmesh_interp(CustomData *data, void **src_blocks, float *weights
sources[j] = (char *)src_blocks[j] + layer->offset;
typeInfo->interp(sources, weights, sub_weights, count,
- (char *)dest_block + layer->offset);
+ (char *)dest_block + layer->offset);
}
}
@@ -2529,13 +2528,13 @@ void CustomData_bmesh_set_default(CustomData *data, void **block)
typeInfo = layerType_getInfo(data->layers[i].type);
if (typeInfo->set_default)
- typeInfo->set_default((char*)*block + offset, 1);
- else memset((char*)*block + offset, 0, typeInfo->size);
+ typeInfo->set_default((char *)*block + offset, 1);
+ else memset((char *)*block + offset, 0, typeInfo->size);
}
}
void CustomData_to_bmesh_block(const CustomData *source, CustomData *dest,
- int src_index, void **dest_block)
+ int src_index, void **dest_block)
{
const LayerTypeInfo *typeInfo;
int dest_i, src_i, src_offset;
@@ -2561,7 +2560,7 @@ void CustomData_to_bmesh_block(const CustomData *source, CustomData *dest,
if (dest->layers[dest_i].type == source->layers[src_i].type) {
int offset = dest->layers[dest_i].offset;
char *src_data = source->layers[src_i].data;
- char *dest_data = (char*)*dest_block + offset;
+ char *dest_data = (char *)*dest_block + offset;
typeInfo = layerType_getInfo(dest->layers[dest_i].type);
src_offset = src_index * typeInfo->size;
@@ -2581,7 +2580,7 @@ void CustomData_to_bmesh_block(const CustomData *source, CustomData *dest,
}
void CustomData_from_bmesh_block(const CustomData *source, CustomData *dest,
- void *src_block, int dest_index)
+ void *src_block, int dest_index)
{
const LayerTypeInfo *typeInfo;
int dest_i, src_i, dest_offset;
@@ -2603,7 +2602,7 @@ void CustomData_from_bmesh_block(const CustomData *source, CustomData *dest,
/* if we found a matching layer, copy the data */
if (dest->layers[dest_i].type == source->layers[src_i].type) {
int offset = source->layers[src_i].offset;
- char *src_data = (char*)src_block + offset;
+ char *src_data = (char *)src_block + offset;
char *dest_data = dest->layers[dest_i].data;
typeInfo = layerType_getInfo(dest->layers[dest_i].type);
@@ -2665,17 +2664,17 @@ static int cd_layer_find_dupe(CustomData *data, const char *name, int type, int
{
int i;
/* see if there is a duplicate */
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
if (i != index) {
- CustomDataLayer *layer= &data->layers[i];
+ CustomDataLayer *layer = &data->layers[i];
if (CustomData_is_property_layer(type)) {
- if (CustomData_is_property_layer(layer->type) && strcmp(layer->name, name)==0) {
+ if (CustomData_is_property_layer(layer->type) && strcmp(layer->name, name) == 0) {
return 1;
}
}
else {
- if (i!=index && layer->type==type && strcmp(layer->name, name)==0) {
+ if (i != index && layer->type == type && strcmp(layer->name, name) == 0) {
return 1;
}
}
@@ -2687,19 +2686,19 @@ static int cd_layer_find_dupe(CustomData *data, const char *name, int type, int
static int customdata_unique_check(void *arg, const char *name)
{
- struct {CustomData *data; int type; int index;} *data_arg= arg;
+ struct {CustomData *data; int type; int index; } *data_arg = arg;
return cd_layer_find_dupe(data_arg->data, name, data_arg->type, data_arg->index);
}
void CustomData_set_layer_unique_name(CustomData *data, int index)
{
- CustomDataLayer *nlayer= &data->layers[index];
- const LayerTypeInfo *typeInfo= layerType_getInfo(nlayer->type);
+ CustomDataLayer *nlayer = &data->layers[index];
+ const LayerTypeInfo *typeInfo = layerType_getInfo(nlayer->type);
- struct {CustomData *data; int type; int index;} data_arg;
- data_arg.data= data;
- data_arg.type= nlayer->type;
- data_arg.index= index;
+ struct {CustomData *data; int type; int index; } data_arg;
+ data_arg.data = data;
+ data_arg.type = nlayer->type;
+ data_arg.index = index;
if (!typeInfo->defaultname)
return;
@@ -2739,15 +2738,15 @@ int CustomData_verify_versions(struct CustomData *data, int index)
typeInfo = layerType_getInfo(layer->type);
if (!typeInfo->defaultname && (index > 0) &&
- data->layers[index-1].type == layer->type)
+ data->layers[index - 1].type == layer->type)
{
keeplayer = 0; /* multiple layers of which we only support one */
}
}
if (!keeplayer) {
- for (i=index+1; i < data->totlayer; ++i)
- data->layers[i-1] = data->layers[i];
+ for (i = index + 1; i < data->totlayer; ++i)
+ data->layers[i - 1] = data->layers[i];
data->totlayer--;
}
@@ -2768,11 +2767,11 @@ void CustomData_external_reload(CustomData *data, ID *UNUSED(id), CustomDataMask
const LayerTypeInfo *typeInfo;
int i;
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
- if (!(mask & CD_TYPE_AS_MASK(layer->type)));
+ if (!(mask & CD_TYPE_AS_MASK(layer->type))) ;
else if ((layer->flag & CD_FLAG_EXTERNAL) && (layer->flag & CD_FLAG_IN_MEMORY)) {
if (typeInfo->free)
typeInfo->free(layer->data, totelem, typeInfo->size);
@@ -2783,7 +2782,7 @@ void CustomData_external_reload(CustomData *data, ID *UNUSED(id), CustomDataMask
void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int totelem)
{
- CustomDataExternal *external= data->external;
+ CustomDataExternal *external = data->external;
CustomDataLayer *layer;
CDataFile *cdf;
CDataFileLayer *blay;
@@ -2794,14 +2793,14 @@ void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int
if (!external)
return;
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
- if (!(mask & CD_TYPE_AS_MASK(layer->type)));
- else if (layer->flag & CD_FLAG_IN_MEMORY);
+ if (!(mask & CD_TYPE_AS_MASK(layer->type))) ;
+ else if (layer->flag & CD_FLAG_IN_MEMORY) ;
else if ((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->read)
- update= 1;
+ update = 1;
}
if (!update)
@@ -2809,24 +2808,24 @@ void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int
customdata_external_filename(filename, id, external);
- cdf= cdf_create(CDF_TYPE_MESH);
+ cdf = cdf_create(CDF_TYPE_MESH);
if (!cdf_read_open(cdf, filename)) {
fprintf(stderr, "Failed to read %s layer from %s.\n", layerType_getName(layer->type), filename);
return;
}
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
- if (!(mask & CD_TYPE_AS_MASK(layer->type)));
- else if (layer->flag & CD_FLAG_IN_MEMORY);
+ if (!(mask & CD_TYPE_AS_MASK(layer->type))) ;
+ else if (layer->flag & CD_FLAG_IN_MEMORY) ;
else if ((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->read) {
- blay= cdf_layer_find(cdf, layer->type, layer->name);
+ blay = cdf_layer_find(cdf, layer->type, layer->name);
if (blay) {
if (cdf_read_layer(cdf, blay)) {
- if (typeInfo->read(cdf, layer->data, totelem));
+ if (typeInfo->read(cdf, layer->data, totelem)) ;
else break;
layer->flag |= CD_FLAG_IN_MEMORY;
}
@@ -2842,7 +2841,7 @@ void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int
void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, int totelem, int free)
{
- CustomDataExternal *external= data->external;
+ CustomDataExternal *external = data->external;
CustomDataLayer *layer;
CDataFile *cdf;
CDataFileLayer *blay;
@@ -2854,13 +2853,13 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in
return;
/* test if there is anything to write */
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
- if (!(mask & CD_TYPE_AS_MASK(layer->type)));
+ if (!(mask & CD_TYPE_AS_MASK(layer->type))) ;
else if ((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->write)
- update= 1;
+ update = 1;
}
if (!update)
@@ -2870,16 +2869,16 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in
CustomData_external_read(data, id, mask, totelem);
customdata_external_filename(filename, id, external);
- cdf= cdf_create(CDF_TYPE_MESH);
+ cdf = cdf_create(CDF_TYPE_MESH);
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
if ((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->filesize) {
if (layer->flag & CD_FLAG_IN_MEMORY) {
cdf_layer_add(cdf, layer->type, layer->name,
- typeInfo->filesize(cdf, layer->data, totelem));
+ typeInfo->filesize(cdf, layer->data, totelem));
}
else {
cdf_free(cdf);
@@ -2893,15 +2892,15 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in
return;
}
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
if ((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->write) {
- blay= cdf_layer_find(cdf, layer->type, layer->name);
+ blay = cdf_layer_find(cdf, layer->type, layer->name);
if (cdf_write_layer(cdf, blay)) {
- if (typeInfo->write(cdf, layer->data, totelem));
+ if (typeInfo->write(cdf, layer->data, totelem)) ;
else break;
}
else
@@ -2915,7 +2914,7 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in
return;
}
- for (i=0; i<data->totlayer; i++) {
+ for (i = 0; i < data->totlayer; i++) {
layer = &data->layers[i];
typeInfo = layerType_getInfo(layer->type);
@@ -2934,7 +2933,7 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in
void CustomData_external_add(CustomData *data, ID *UNUSED(id), int type, int UNUSED(totelem), const char *filename)
{
- CustomDataExternal *external= data->external;
+ CustomDataExternal *external = data->external;
CustomDataLayer *layer;
int layer_index;
@@ -2947,17 +2946,17 @@ void CustomData_external_add(CustomData *data, ID *UNUSED(id), int type, int UNU
return;
if (!external) {
- external= MEM_callocN(sizeof(CustomDataExternal), "CustomDataExternal");
- data->external= external;
+ external = MEM_callocN(sizeof(CustomDataExternal), "CustomDataExternal");
+ data->external = external;
}
BLI_strncpy(external->filename, filename, sizeof(external->filename));
- layer->flag |= CD_FLAG_EXTERNAL|CD_FLAG_IN_MEMORY;
+ layer->flag |= CD_FLAG_EXTERNAL | CD_FLAG_IN_MEMORY;
}
void CustomData_external_remove(CustomData *data, ID *id, int type, int totelem)
{
- CustomDataExternal *external= data->external;
+ CustomDataExternal *external = data->external;
CustomDataLayer *layer;
//char filename[FILE_MAX];
int layer_index; // i, remove_file;
@@ -2977,10 +2976,10 @@ void CustomData_external_remove(CustomData *data, ID *id, int type, int totelem)
layer->flag &= ~CD_FLAG_EXTERNAL;
#if 0
- remove_file= 1;
- for (i=0; i<data->totlayer; i++)
+ remove_file = 1;
+ for (i = 0; i < data->totlayer; i++)
if (data->layers[i].flag & CD_FLAG_EXTERNAL)
- remove_file= 0;
+ remove_file = 0;
if (remove_file) {
customdata_external_filename(filename, id, external);
@@ -3006,7 +3005,7 @@ int CustomData_external_test(CustomData *data, int type)
#if 0
void CustomData_external_remove_object(CustomData *data, ID *id)
{
- CustomDataExternal *external= data->external;
+ CustomDataExternal *external = data->external;
char filename[FILE_MAX];
if (!external)
diff --git a/source/blender/blenkernel/intern/customdata_file.c b/source/blender/blenkernel/intern/customdata_file.c
index 6d0dabede47..71801c4729f 100644
--- a/source/blender/blenkernel/intern/customdata_file.c
+++ b/source/blender/blenkernel/intern/customdata_file.c
@@ -39,47 +39,47 @@
/************************* File Format Definitions ***************************/
-#define CDF_ENDIAN_LITTLE 0
-#define CDF_ENDIAN_BIG 1
+#define CDF_ENDIAN_LITTLE 0
+#define CDF_ENDIAN_BIG 1
-#define CDF_DATA_FLOAT 0
+#define CDF_DATA_FLOAT 0
typedef struct CDataFileHeader {
- char ID[4]; /* "BCDF" */
- char endian; /* little, big */
- char version; /* non-compatible versions */
- char subversion; /* compatible sub versions */
- char pad; /* padding */
-
- int structbytes; /* size of this struct in bytes */
- int type; /* image, mesh */
- int totlayer; /* number of layers in the file */
+ char ID[4]; /* "BCDF" */
+ char endian; /* little, big */
+ char version; /* non-compatible versions */
+ char subversion; /* compatible sub versions */
+ char pad; /* padding */
+
+ int structbytes; /* size of this struct in bytes */
+ int type; /* image, mesh */
+ int totlayer; /* number of layers in the file */
} CDataFileHeader;
typedef struct CDataFileImageHeader {
- int structbytes; /* size of this struct in bytes */
- int width; /* image width */
- int height; /* image height */
- int tile_size; /* tile size (required power of 2) */
+ int structbytes; /* size of this struct in bytes */
+ int width; /* image width */
+ int height; /* image height */
+ int tile_size; /* tile size (required power of 2) */
} CDataFileImageHeader;
typedef struct CDataFileMeshHeader {
- int structbytes; /* size of this struct in bytes */
+ int structbytes; /* size of this struct in bytes */
} CDataFileMeshHeader;
struct CDataFileLayer {
- int structbytes; /* size of this struct in bytes */
- int datatype; /* only float for now */
- uint64_t datasize; /* size of data in layer */
- int type; /* layer type */
- char name[CDF_LAYER_NAME_MAX]; /* layer name */
+ int structbytes; /* size of this struct in bytes */
+ int datatype; /* only float for now */
+ uint64_t datasize; /* size of data in layer */
+ int type; /* layer type */
+ char name[CDF_LAYER_NAME_MAX]; /* layer name */
};
/**************************** Other Definitions ******************************/
-#define CDF_VERSION 0
-#define CDF_SUBVERSION 0
-#define CDF_TILE_SIZE 64
+#define CDF_VERSION 0
+#define CDF_SUBVERSION 0
+#define CDF_TILE_SIZE 64
struct CDataFile {
int type;
@@ -121,9 +121,9 @@ static int cdf_data_type_size(int datatype)
CDataFile *cdf_create(int type)
{
- CDataFile *cdf= MEM_callocN(sizeof(CDataFile), "CDataFile");
+ CDataFile *cdf = MEM_callocN(sizeof(CDataFile), "CDataFile");
- cdf->type= type;
+ cdf->type = type;
return cdf;
}
@@ -147,11 +147,11 @@ static int cdf_read_header(CDataFile *cdf)
CDataFileImageHeader *image;
CDataFileMeshHeader *mesh;
CDataFileLayer *layer;
- FILE *f= cdf->readf;
+ FILE *f = cdf->readf;
size_t offset = 0;
int a;
- header= &cdf->header;
+ header = &cdf->header;
if (!fread(header, sizeof(CDataFileHeader), 1, cdf->readf))
return 0;
@@ -161,8 +161,8 @@ static int cdf_read_header(CDataFile *cdf)
if (header->version > CDF_VERSION)
return 0;
- cdf->switchendian= header->endian != cdf_endian();
- header->endian= cdf_endian();
+ cdf->switchendian = header->endian != cdf_endian();
+ header->endian = cdf_endian();
if (cdf->switchendian) {
SWITCH_INT(header->type);
@@ -174,13 +174,13 @@ static int cdf_read_header(CDataFile *cdf)
return 0;
offset += header->structbytes;
- header->structbytes= sizeof(CDataFileHeader);
+ header->structbytes = sizeof(CDataFileHeader);
if (fseek(f, offset, SEEK_SET) != 0)
return 0;
if (header->type == CDF_TYPE_IMAGE) {
- image= &cdf->btype.image;
+ image = &cdf->btype.image;
if (!fread(image, sizeof(CDataFileImageHeader), 1, f))
return 0;
@@ -192,10 +192,10 @@ static int cdf_read_header(CDataFile *cdf)
}
offset += image->structbytes;
- image->structbytes= sizeof(CDataFileImageHeader);
+ image->structbytes = sizeof(CDataFileImageHeader);
}
else if (header->type == CDF_TYPE_MESH) {
- mesh= &cdf->btype.mesh;
+ mesh = &cdf->btype.mesh;
if (!fread(mesh, sizeof(CDataFileMeshHeader), 1, f))
return 0;
@@ -203,17 +203,17 @@ static int cdf_read_header(CDataFile *cdf)
SWITCH_INT(mesh->structbytes);
offset += mesh->structbytes;
- mesh->structbytes= sizeof(CDataFileMeshHeader);
+ mesh->structbytes = sizeof(CDataFileMeshHeader);
}
if (fseek(f, offset, SEEK_SET) != 0)
return 0;
- cdf->layer= MEM_callocN(sizeof(CDataFileLayer)*header->totlayer, "CDataFileLayer");
- cdf->totlayer= header->totlayer;
+ cdf->layer = MEM_callocN(sizeof(CDataFileLayer) * header->totlayer, "CDataFileLayer");
+ cdf->totlayer = header->totlayer;
- for (a=0; a<header->totlayer; a++) {
- layer= &cdf->layer[a];
+ for (a = 0; a < header->totlayer; a++) {
+ layer = &cdf->layer[a];
if (!fread(layer, sizeof(CDataFileLayer), 1, f))
return 0;
@@ -229,13 +229,13 @@ static int cdf_read_header(CDataFile *cdf)
return 0;
offset += layer->structbytes;
- layer->structbytes= sizeof(CDataFileLayer);
+ layer->structbytes = sizeof(CDataFileLayer);
if (fseek(f, offset, SEEK_SET) != 0)
return 0;
}
- cdf->dataoffset= offset;
+ cdf->dataoffset = offset;
return 1;
}
@@ -246,27 +246,27 @@ static int cdf_write_header(CDataFile *cdf)
CDataFileImageHeader *image;
CDataFileMeshHeader *mesh;
CDataFileLayer *layer;
- FILE *f= cdf->writef;
+ FILE *f = cdf->writef;
int a;
- header= &cdf->header;
+ header = &cdf->header;
if (!fwrite(header, sizeof(CDataFileHeader), 1, f))
return 0;
if (header->type == CDF_TYPE_IMAGE) {
- image= &cdf->btype.image;
+ image = &cdf->btype.image;
if (!fwrite(image, sizeof(CDataFileImageHeader), 1, f))
return 0;
}
else if (header->type == CDF_TYPE_MESH) {
- mesh= &cdf->btype.mesh;
+ mesh = &cdf->btype.mesh;
if (!fwrite(mesh, sizeof(CDataFileMeshHeader), 1, f))
return 0;
}
- for (a=0; a<header->totlayer; a++) {
- layer= &cdf->layer[a];
+ for (a = 0; a < header->totlayer; a++) {
+ layer = &cdf->layer[a];
if (!fwrite(layer, sizeof(CDataFileLayer), 1, f))
return 0;
@@ -279,11 +279,11 @@ int cdf_read_open(CDataFile *cdf, const char *filename)
{
FILE *f;
- f= BLI_fopen(filename, "rb");
+ f = BLI_fopen(filename, "rb");
if (!f)
return 0;
- cdf->readf= f;
+ cdf->readf = f;
if (!cdf_read_header(cdf)) {
cdf_read_close(cdf);
@@ -304,8 +304,8 @@ int cdf_read_layer(CDataFile *cdf, CDataFileLayer *blay)
int a;
/* seek to right location in file */
- offset= cdf->dataoffset;
- for (a=0; a<cdf->totlayer; a++) {
+ offset = cdf->dataoffset;
+ for (a = 0; a < cdf->totlayer; a++) {
if (&cdf->layer[a] == blay)
break;
else
@@ -326,9 +326,9 @@ int cdf_read_data(CDataFile *cdf, unsigned int size, void *data)
/* switch endian if necessary */
if (cdf->switchendian) {
- fdata= data;
+ fdata = data;
- for (a=0; a<size/sizeof(float); a++) {
+ for (a = 0; a < size / sizeof(float); a++) {
SWITCH_INT(fdata[a]);
}
}
@@ -340,7 +340,7 @@ void cdf_read_close(CDataFile *cdf)
{
if (cdf->readf) {
fclose(cdf->readf);
- cdf->readf= NULL;
+ cdf->readf = NULL;
}
}
@@ -351,34 +351,34 @@ int cdf_write_open(CDataFile *cdf, const char *filename)
CDataFileMeshHeader *mesh;
FILE *f;
- f= BLI_fopen(filename, "wb");
+ f = BLI_fopen(filename, "wb");
if (!f)
return 0;
- cdf->writef= f;
+ cdf->writef = f;
/* fill header */
- header= &cdf->header;
+ header = &cdf->header;
/* strcpy(, "BCDF"); // terminator out of range */
- header->ID[0]= 'B'; header->ID[1]= 'C'; header->ID[2]= 'D'; header->ID[3]= 'F';
- header->endian= cdf_endian();
- header->version= CDF_VERSION;
- header->subversion= CDF_SUBVERSION;
+ header->ID[0] = 'B'; header->ID[1] = 'C'; header->ID[2] = 'D'; header->ID[3] = 'F';
+ header->endian = cdf_endian();
+ header->version = CDF_VERSION;
+ header->subversion = CDF_SUBVERSION;
- header->structbytes= sizeof(CDataFileHeader);
- header->type= cdf->type;
- header->totlayer= cdf->totlayer;
+ header->structbytes = sizeof(CDataFileHeader);
+ header->type = cdf->type;
+ header->totlayer = cdf->totlayer;
if (cdf->type == CDF_TYPE_IMAGE) {
/* fill image header */
- image= &cdf->btype.image;
- image->structbytes= sizeof(CDataFileImageHeader);
- image->tile_size= CDF_TILE_SIZE;
+ image = &cdf->btype.image;
+ image->structbytes = sizeof(CDataFileImageHeader);
+ image->tile_size = CDF_TILE_SIZE;
}
else if (cdf->type == CDF_TYPE_MESH) {
/* fill mesh header */
- mesh= &cdf->btype.mesh;
- mesh->structbytes= sizeof(CDataFileMeshHeader);
+ mesh = &cdf->btype.mesh;
+ mesh->structbytes = sizeof(CDataFileMeshHeader);
}
cdf_write_header(cdf);
@@ -404,7 +404,7 @@ void cdf_write_close(CDataFile *cdf)
{
if (cdf->writef) {
fclose(cdf->writef);
- cdf->writef= NULL;
+ cdf->writef = NULL;
}
}
@@ -420,8 +420,8 @@ CDataFileLayer *cdf_layer_find(CDataFile *cdf, int type, const char *name)
CDataFileLayer *layer;
int a;
- for (a=0; a<cdf->totlayer; a++) {
- layer= &cdf->layer[a];
+ for (a = 0; a < cdf->totlayer; a++) {
+ layer = &cdf->layer[a];
if (layer->type == type && strcmp(layer->name, name) == 0)
return layer;
@@ -435,18 +435,18 @@ CDataFileLayer *cdf_layer_add(CDataFile *cdf, int type, const char *name, size_t
CDataFileLayer *newlayer, *layer;
/* expand array */
- newlayer= MEM_callocN(sizeof(CDataFileLayer)*(cdf->totlayer+1), "CDataFileLayer");
- memcpy(newlayer, cdf->layer, sizeof(CDataFileLayer)*cdf->totlayer);
- cdf->layer= newlayer;
+ newlayer = MEM_callocN(sizeof(CDataFileLayer) * (cdf->totlayer + 1), "CDataFileLayer");
+ memcpy(newlayer, cdf->layer, sizeof(CDataFileLayer) * cdf->totlayer);
+ cdf->layer = newlayer;
cdf->totlayer++;
/* fill in new layer */
- layer= &cdf->layer[cdf->totlayer-1];
- layer->structbytes= sizeof(CDataFileLayer);
- layer->datatype= CDF_DATA_FLOAT;
- layer->datasize= datasize;
- layer->type= type;
+ layer = &cdf->layer[cdf->totlayer - 1];
+ layer->structbytes = sizeof(CDataFileLayer);
+ layer->datatype = CDF_DATA_FLOAT;
+ layer->datasize = datasize;
+ layer->type = type;
BLI_strncpy(layer->name, name, CDF_LAYER_NAME_MAX);
return layer;
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index ebf5735c1cd..0396733760f 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -251,7 +251,7 @@ void defvert_flip(MDeformVert *dvert, const int *flip_map, const int flip_map_le
MDeformWeight *dw;
int i;
- for (dw = dvert->dw, i = 0; i<dvert->totweight; dw++, i++) {
+ for (dw = dvert->dw, i = 0; i < dvert->totweight; dw++, i++) {
if (dw->def_nr < flip_map_len) {
if (flip_map[dw->def_nr] >= 0) {
dw->def_nr = flip_map[dw->def_nr];
@@ -424,13 +424,13 @@ static int defgroup_find_name_dupe(const char *name, bDeformGroup *dg, Object *o
static int defgroup_unique_check(void *arg, const char *name)
{
- struct {Object *ob; void *dg;} *data = arg;
+ struct {Object *ob; void *dg; } *data = arg;
return defgroup_find_name_dupe(name, data->dg, data->ob);
}
void defgroup_unique_name(bDeformGroup *dg, Object *ob)
{
- struct {Object *ob; void *dg;} data;
+ struct {Object *ob; void *dg; } data;
data.ob = ob;
data.dg = dg;
@@ -595,7 +595,7 @@ void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_
}
}
- BLI_snprintf (name, MAX_VGROUP_NAME, "%s%s%s%s", prefix, replace, suffix, number);
+ BLI_snprintf(name, MAX_VGROUP_NAME, "%s%s%s%s", prefix, replace, suffix, number);
}
float defvert_find_weight(const struct MDeformVert *dvert, const int defgroup)
@@ -710,7 +710,7 @@ void defvert_remove_group(MDeformVert *dvert, MDeformWeight *dw)
if (dvert->totweight) {
dw_new = MEM_mallocN(sizeof(MDeformWeight) * (dvert->totweight), __func__);
if (dvert->dw) {
-#if 1 /* since we don't care about order, swap this with the last, save a memcpy */
+#if 1 /* since we don't care about order, swap this with the last, save a memcpy */
if (i != dvert->totweight) {
dvert->dw[i] = dvert->dw[dvert->totweight];
}
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index fc54ea6eed5..e44264c8d4b 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -718,7 +718,8 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
dag_add_relation(dag, scenenode, node, DAG_RL_SCENE, "Scene Relation");
}
-struct DagForest *build_dag(Main *bmain, Scene *sce, short mask){
+DagForest *build_dag(Main *bmain, Scene *sce, short mask)
+{
Base *base;
Object *ob;
Group *group;
@@ -867,7 +868,7 @@ DagNode *dag_add_node(DagForest *forest, void *fob)
}
if (!forest->nodeHash)
- forest->nodeHash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "dag_add_node gh");
+ forest->nodeHash = BLI_ghash_ptr_new("dag_add_node gh");
BLI_ghash_insert(forest->nodeHash, fob, node);
}
@@ -1253,7 +1254,7 @@ DagNodeQueue *graph_dfs(void)
int maxpos = 0;
/* int is_cycle = 0; */ /* UNUSED */
/*
- *fprintf(stderr, "starting DFS\n ------------\n");
+ *fprintf(stderr, "starting DFS\n ------------\n");
*/
nqueue = queue_create(DAGQUEUEALLOC);
retqueue = queue_create(MainDag->numNodes);
@@ -1458,7 +1459,8 @@ int pre_and_post_source_DFS(DagForest *dag, short mask, DagNode *source, graph_a
// used to get the obs owning a datablock
-struct DagNodeQueue *get_obparents(struct DagForest *dag, void *ob){
+DagNodeQueue *get_obparents(struct DagForest *dag, void *ob)
+{
DagNode *node, *node1;
DagNodeQueue *nqueue;
DagAdjList *itA;
@@ -1491,7 +1493,8 @@ struct DagNodeQueue *get_obparents(struct DagForest *dag, void *ob){
return nqueue;
}
-struct DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob){
+DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob)
+{
DagNode *node, *node1;
DagNodeQueue *nqueue;
DagAdjList *itA;
@@ -1519,7 +1522,8 @@ struct DagNodeQueue *get_first_ancestors(struct DagForest *dag, void *ob){
}
// standard DFS list
-struct DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob){
+DagNodeQueue *get_all_childs(struct DagForest *dag, void *ob)
+{
DagNode *node;
DagNodeQueue *nqueue;
DagNodeQueue *retqueue;
@@ -2385,7 +2389,7 @@ static void dag_current_scene_layers(Main *bmain, Scene **sce, unsigned int *lay
/* if we have a windowmanager, look into windows */
for (win = wm->windows.first; win; win = win->next) {
if (win->screen) {
- if (!*sce) *sce = win->screen->scene;
+ if (*sce == NULL) *sce = win->screen->scene;
*lay |= BKE_screen_visible_layers(win->screen, win->screen->scene);
}
}
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 0154a2fa1e5..9274d7aefcb 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -425,8 +425,8 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i
void BKE_displist_fill(ListBase *dispbase, ListBase *to, int flipnormal)
{
ScanFillContext sf_ctx;
- ScanFillVert *eve, *v1, *vlast;
- ScanFillFace *efa;
+ ScanFillVert *sf_vert, *sf_vert_new, *sf_vert_last;
+ ScanFillFace *sf_tri;
DispList *dlnew = NULL, *dl;
float *f1;
int colnr = 0, charidx = 0, cont = 1, tot, a, *index, nextcol = 0;
@@ -454,24 +454,24 @@ void BKE_displist_fill(ListBase *dispbase, ListBase *to, int flipnormal)
/* make editverts and edges */
f1 = dl->verts;
a = dl->nr;
- eve = v1 = NULL;
+ sf_vert = sf_vert_new = NULL;
while (a--) {
- vlast = eve;
+ sf_vert_last = sf_vert;
- eve = BLI_scanfill_vert_add(&sf_ctx, f1);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, f1);
totvert++;
- if (vlast == NULL)
- v1 = eve;
+ if (sf_vert_last == NULL)
+ sf_vert_new = sf_vert;
else {
- BLI_scanfill_edge_add(&sf_ctx, vlast, eve);
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert);
}
f1 += 3;
}
- if (eve != NULL && v1 != NULL) {
- BLI_scanfill_edge_add(&sf_ctx, eve, v1);
+ if (sf_vert != NULL && sf_vert_new != NULL) {
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert, sf_vert_new);
}
}
else if (colnr < dl->col) {
@@ -499,31 +499,31 @@ void BKE_displist_fill(ListBase *dispbase, ListBase *to, int flipnormal)
/* vert data */
f1 = dlnew->verts;
totvert = 0;
- eve = sf_ctx.fillvertbase.first;
- while (eve) {
- copy_v3_v3(f1, eve->co);
+ sf_vert = sf_ctx.fillvertbase.first;
+ while (sf_vert) {
+ copy_v3_v3(f1, sf_vert->co);
f1 += 3;
/* index number */
- eve->tmp.l = totvert;
+ sf_vert->tmp.l = totvert;
totvert++;
- eve = eve->next;
+ sf_vert = sf_vert->next;
}
/* index data */
- efa = sf_ctx.fillfacebase.first;
+ sf_tri = sf_ctx.fillfacebase.first;
index = dlnew->index;
- while (efa) {
- index[0] = (intptr_t)efa->v1->tmp.l;
- index[1] = (intptr_t)efa->v2->tmp.l;
- index[2] = (intptr_t)efa->v3->tmp.l;
+ while (sf_tri) {
+ index[0] = (intptr_t)sf_tri->v1->tmp.l;
+ index[1] = (intptr_t)sf_tri->v2->tmp.l;
+ index[2] = (intptr_t)sf_tri->v3->tmp.l;
if (flipnormal)
SWAP(int, index[0], index[2]);
index += 3;
- efa = efa->next;
+ sf_tri = sf_tri->next;
}
}
@@ -752,7 +752,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl
Curve *cu = ob->data;
ListBase *nurb = BKE_curve_nurbs_get(cu);
int numVerts = 0;
- const int editmode = (!forRender && cu->editnurb);
+ const int editmode = (!forRender && (cu->editnurb || cu->editfont));
ModifierApplyFlag app_flag = 0;
float (*originalVerts)[3] = NULL;
float (*deformedVerts)[3] = NULL;
@@ -793,9 +793,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl
md->scene = scene;
- if ((md->mode & required_mode) != required_mode)
- continue;
- if (mti->isDisabled && mti->isDisabled(md, forRender))
+ if (!modifier_isEnabled(scene, md, required_mode))
continue;
if (mti->type != eModifierTypeType_OnlyDeform)
continue;
@@ -867,7 +865,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
Curve *cu = ob->data;
ListBase *nurb = BKE_curve_nurbs_get(cu);
int required_mode = 0, totvert = 0;
- int editmode = (!forRender && cu->editnurb);
+ int editmode = (!forRender && (cu->editnurb || cu->editfont));
DerivedMesh *dm = NULL, *ndm;
float (*vertCos)[3] = NULL;
int useCache = !forRender;
@@ -899,9 +897,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
md->scene = scene;
- if ((md->mode & required_mode) != required_mode)
- continue;
- if (mti->isDisabled && mti->isDisabled(md, forRender))
+ if (!modifier_isEnabled(scene, md, required_mode))
continue;
if (mti->type == eModifierTypeType_OnlyDeform ||
@@ -1095,7 +1091,7 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *derivedFina
ModifierData *pretessellatePoint;
Curve *cu = ob->data;
int required_mode;
- int editmode = (!forRender && cu->editnurb);
+ int editmode = (!forRender && (cu->editnurb || cu->editfont));
DerivedMesh *ndm, *orcodm = NULL;
const ModifierApplyFlag app_flag = forRender ? MOD_APPLY_RENDER : 0;
@@ -1118,9 +1114,7 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *derivedFina
md->scene = scene;
- if ((md->mode & required_mode) != required_mode)
- continue;
- if (mti->isDisabled && mti->isDisabled(md, forRender))
+ if (!modifier_isEnabled(scene, md, required_mode))
continue;
if (mti->type != eModifierTypeType_Constructive)
continue;
@@ -1606,19 +1600,13 @@ static void boundbox_displist(Object *ob)
if (cu->bb == NULL) cu->bb = MEM_callocN(sizeof(BoundBox), "boundbox");
bb = cu->bb;
- dl = ob->disp.first;
-
- while (dl) {
- if (dl->type == DL_INDEX3) tot = dl->nr;
- else tot = dl->nr * dl->parts;
-
+ for (dl = ob->disp.first; dl; dl = dl->next) {
+ tot = (dl->type == DL_INDEX3) ? dl->nr : dl->nr * dl->parts;
vert = dl->verts;
for (a = 0; a < tot; a++, vert += 3) {
- doit = 1;
- DO_MINMAX(vert, min, max);
+ minmax_v3v3_v3(min, max, vert);
}
-
- dl = dl->next;
+ doit = (tot != 0);
}
if (!doit) {
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 2bde31cfd63..b3ed3dcaf1d 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -46,7 +46,7 @@
#include "DNA_texture_types.h"
#include "BKE_animsys.h"
-#include "BKE_bvhutils.h" /* bvh tree */
+#include "BKE_bvhutils.h" /* bvh tree */
#include "BKE_blender.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_constraint.h"
@@ -86,11 +86,11 @@
#endif
/* precalculated gaussian factors for 5x super sampling */
-static float gaussianFactors[5] = { 0.996849f,
- 0.596145f,
- 0.596145f,
- 0.596145f,
- 0.524141f};
+static float gaussianFactors[5] = {0.996849f,
+ 0.596145f,
+ 0.596145f,
+ 0.596145f,
+ 0.524141f};
static float gaussianTotal = 3.309425f;
/* UV Image neighboring pixel table x and y list */
@@ -98,11 +98,11 @@ static int neighX[8] = {1, 1, 0, -1, -1, -1, 0, 1};
static int neighY[8] = {0, 1, 1, 1, 0, -1, -1, -1};
/* subframe_updateObject() flags */
-#define UPDATE_PARENTS (1<<0)
-#define UPDATE_MESH (1<<1)
-#define UPDATE_EVERYTHING (UPDATE_PARENTS|UPDATE_MESH)
+#define UPDATE_PARENTS (1 << 0)
+#define UPDATE_MESH (1 << 1)
+#define UPDATE_EVERYTHING (UPDATE_PARENTS | UPDATE_MESH)
/* surface_getBrushFlags() return vals */
-#define BRUSH_USES_VELOCITY (1<<0)
+#define BRUSH_USES_VELOCITY (1 << 0)
/* brush mesh raycast status */
#define HIT_VOLUME 1
#define HIT_PROXIMITY 2
@@ -113,13 +113,13 @@ static int neighY[8] = {0, 1, 1, 1, 0, -1, -1, -1};
/* paint effect default movement per frame in global units */
#define EFF_MOVEMENT_PER_FRAME 0.05f
/* initial wave time factor */
-#define WAVE_TIME_FAC (1.0f/24.f)
+#define WAVE_TIME_FAC (1.0f / 24.f)
#define CANVAS_REL_SIZE 5.0f
/* drying limits */
#define MIN_WETNESS 0.001f
#define MAX_WETNESS 5.0f
/* dissolve macro */
-#define VALUE_DISSOLVE(VALUE, TIME, SCALE, LOG) (VALUE) = (LOG) ? (VALUE) * (pow(MIN_WETNESS, 1.0f/(1.2f*((float)(TIME))/(SCALE)))) : (VALUE) - 1.0f/(TIME)*(SCALE)
+#define VALUE_DISSOLVE(VALUE, TIME, SCALE, LOG) (VALUE) = (LOG) ? (VALUE) *(pow(MIN_WETNESS, 1.0f / (1.2f * ((float)(TIME)) / (SCALE)))) : (VALUE) -1.0f / (TIME)*(SCALE)
/***************************** Internal Structs ***************************/
@@ -136,11 +136,11 @@ typedef struct VolumeGrid {
int dim[3];
Bounds3D grid_bounds; /* whole grid bounds */
- Bounds3D *bounds; /* (x*y*z) precalculated grid cell bounds */
+ Bounds3D *bounds; /* (x*y*z) precalculated grid cell bounds */
int *s_pos; /* (x*y*z) t_index begin id */
int *s_num; /* (x*y*z) number of t_index points */
int *t_index; /* actual surface point index,
- access: (s_pos+s_num) */
+ * access: (s_pos+s_num) */
} VolumeGrid;
typedef struct Vec3f {
@@ -148,8 +148,8 @@ typedef struct Vec3f {
} Vec3f;
typedef struct BakeAdjPoint {
- float dir[3]; /* vector pointing towards this neighbor */
- float dist; /* distance to */
+ float dir[3]; /* vector pointing towards this neighbor */
+ float dist; /* distance to */
} BakeAdjPoint;
/* Surface data used while processing a frame */
@@ -162,8 +162,8 @@ typedef struct PaintBakeNormal {
typedef struct PaintBakeData {
/* point space data */
PaintBakeNormal *bNormal;
- int *s_pos; /* index to start reading point sample realCoord */
- int *s_num; /* num of realCoord samples */
+ int *s_pos; /* index to start reading point sample realCoord */
+ int *s_num; /* num of realCoord samples */
Vec3f *realCoord; /* current pixel center world-space coordinates for each sample
* ordered as (s_pos+s_num)*/
Bounds3D mesh_bounds;
@@ -172,44 +172,44 @@ typedef struct PaintBakeData {
BakeAdjPoint *bNeighs; /* current global neighbor distances and directions, if required */
double average_dist;
/* space partitioning */
- VolumeGrid *grid; /* space partitioning grid to optimize brush checks */
+ VolumeGrid *grid; /* space partitioning grid to optimize brush checks */
/* velocity and movement */
- Vec3f *velocity; /* speed vector in global space movement per frame, if required */
+ Vec3f *velocity; /* speed vector in global space movement per frame, if required */
Vec3f *prev_velocity;
- float *brush_velocity; /* special temp data for post-p velocity based brushes like smudge
- * 3 float dir vec + 1 float str */
- MVert *prev_verts; /* copy of previous frame vertices. used to observe surface movement */
+ float *brush_velocity; /* special temp data for post-p velocity based brushes like smudge
+ * 3 float dir vec + 1 float str */
+ MVert *prev_verts; /* copy of previous frame vertices. used to observe surface movement */
float prev_obmat[4][4]; /* previous frame object matrix */
- int clear; /* flag to check if surface was cleared/reset -> have to redo velocity etc. */
+ int clear; /* flag to check if surface was cleared/reset -> have to redo velocity etc. */
} PaintBakeData;
/* UV Image sequence format point */
typedef struct PaintUVPoint {
/* Pixel / mesh data */
- unsigned int face_index, pixel_index; /* face index on domain derived mesh */
- unsigned int v1, v2, v3; /* vertex indexes */
+ unsigned int face_index, pixel_index; /* face index on domain derived mesh */
+ unsigned int v1, v2, v3; /* vertex indexes */
- unsigned int neighbour_pixel; /* If this pixel isn't uv mapped to any face,
- but it's neighboring pixel is */
+ unsigned int neighbour_pixel; /* If this pixel isn't uv mapped to any face,
+ * but it's neighboring pixel is */
short quad;
} PaintUVPoint;
typedef struct ImgSeqFormatData {
PaintUVPoint *uv_p;
- Vec3f *barycentricWeights; /* b-weights for all pixel samples */
+ Vec3f *barycentricWeights; /* b-weights for all pixel samples */
} ImgSeqFormatData;
/* adjacency data flags */
-#define ADJ_ON_MESH_EDGE (1<<0)
+#define ADJ_ON_MESH_EDGE (1 << 0)
typedef struct PaintAdjData {
- int *n_target; /* array of neighboring point indexes,
- for single sample use (n_index+neigh_num) */
- int *n_index; /* index to start reading n_target for each point */
- int *n_num; /* num of neighs for each point */
- int *flags; /* vertex adjacency flags */
+ int *n_target; /* array of neighboring point indexes,
+ * for single sample use (n_index + neigh_num) */
+ int *n_index; /* index to start reading n_target for each point */
+ int *n_num; /* num of neighs for each point */
+ int *flags; /* vertex adjacency flags */
int total_targets; /* size of n_target */
} PaintAdjData;
@@ -230,7 +230,7 @@ static int dynamicPaint_surfaceNumOfPoints(DynamicPaintSurface *surface)
return 0; /* not supported atm */
}
else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
- if (!surface->canvas->dm) return 0; /* invalid derived mesh */
+ if (!surface->canvas->dm) return 0; /* invalid derived mesh */
return surface->canvas->dm->getNumVerts(surface->canvas->dm);
}
else
@@ -259,12 +259,12 @@ int dynamicPaint_surfaceHasColorPreview(DynamicPaintSurface *surface)
}
/* get currently active surface (in user interface) */
-struct DynamicPaintSurface *get_activeSurface(DynamicPaintCanvasSettings *canvas)
+DynamicPaintSurface *get_activeSurface(DynamicPaintCanvasSettings *canvas)
{
DynamicPaintSurface *surface = canvas->surfaces.first;
int i;
- for (i=0; surface; surface=surface->next) {
+ for (i = 0; surface; surface = surface->next) {
if (i == canvas->active_sur)
return surface;
i++;
@@ -276,12 +276,12 @@ struct DynamicPaintSurface *get_activeSurface(DynamicPaintCanvasSettings *canvas
void dynamicPaint_resetPreview(DynamicPaintCanvasSettings *canvas)
{
DynamicPaintSurface *surface = canvas->surfaces.first;
- int done=0;
+ int done = 0;
- for (; surface; surface=surface->next) {
+ for (; surface; surface = surface->next) {
if (!done && dynamicPaint_surfaceHasColorPreview(surface)) {
surface->flags |= MOD_DPAINT_PREVIEW;
- done=1;
+ done = 1;
}
else
surface->flags &= ~MOD_DPAINT_PREVIEW;
@@ -292,7 +292,7 @@ void dynamicPaint_resetPreview(DynamicPaintCanvasSettings *canvas)
static void dynamicPaint_setPreview(DynamicPaintSurface *t_surface)
{
DynamicPaintSurface *surface = t_surface->canvas->surfaces.first;
- for (; surface; surface=surface->next) {
+ for (; surface; surface = surface->next) {
if (surface == t_surface)
surface->flags |= MOD_DPAINT_PREVIEW;
else
@@ -325,14 +325,15 @@ int dynamicPaint_outputLayerExists(struct DynamicPaintSurface *surface, Object *
static int surface_duplicateOutputExists(void *arg, const char *name)
{
- DynamicPaintSurface *t_surface = (DynamicPaintSurface*)arg;
+ DynamicPaintSurface *t_surface = (DynamicPaintSurface *)arg;
DynamicPaintSurface *surface = t_surface->canvas->surfaces.first;
- for (; surface; surface=surface->next) {
- if (surface!=t_surface && surface->type==t_surface->type &&
- surface->format==t_surface->format) {
- if (surface->output_name[0]!='\0' && !BLI_path_cmp(name, surface->output_name)) return 1;
- if (surface->output_name2[0]!='\0' && !BLI_path_cmp(name, surface->output_name2)) return 1;
+ for (; surface; surface = surface->next) {
+ if (surface != t_surface && surface->type == t_surface->type &&
+ surface->format == t_surface->format)
+ {
+ if (surface->output_name[0] != '\0' && !BLI_path_cmp(name, surface->output_name)) return 1;
+ if (surface->output_name2[0] != '\0' && !BLI_path_cmp(name, surface->output_name2)) return 1;
}
}
return 0;
@@ -351,11 +352,11 @@ static void surface_setUniqueOutputName(DynamicPaintSurface *surface, char *base
static int surface_duplicateNameExists(void *arg, const char *name)
{
- DynamicPaintSurface *t_surface = (DynamicPaintSurface*)arg;
+ DynamicPaintSurface *t_surface = (DynamicPaintSurface *)arg;
DynamicPaintSurface *surface = t_surface->canvas->surfaces.first;
- for (; surface; surface=surface->next) {
- if (surface!=t_surface && !strcmp(name, surface->name)) return 1;
+ for (; surface; surface = surface->next) {
+ if (surface != t_surface && !strcmp(name, surface->name)) return 1;
}
return 0;
}
@@ -372,8 +373,8 @@ void dynamicPaintSurface_setUniqueName(DynamicPaintSurface *surface, const char
void dynamicPaintSurface_updateType(struct DynamicPaintSurface *surface)
{
if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
- surface->output_name[0]='\0';
- surface->output_name2[0]='\0';
+ surface->output_name[0] = '\0';
+ surface->output_name2[0] = '\0';
surface->flags |= MOD_DPAINT_ANTIALIAS;
surface->depth_clamp = 1.0f;
}
@@ -418,22 +419,22 @@ static int surface_totalSamples(DynamicPaintSurface *surface)
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX &&
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 + surface->data->adj_data->total_targets);
}
return surface->data->total_points;
}
-static void blendColors(float t_color[3], float t_alpha, float s_color[3], float s_alpha, float result[4])
+static void blendColors(const float t_color[3], float t_alpha, const float s_color[3], float s_alpha, float result[4])
{
int i;
float i_alpha = 1.0f - s_alpha;
- float f_alpha = t_alpha*i_alpha + s_alpha;
+ float f_alpha = t_alpha * i_alpha + s_alpha;
/* blend colors */
if (f_alpha) {
- for (i=0; i<3; i++) {
- result[i] = (t_color[i]*t_alpha*i_alpha + s_color[i]*s_alpha)/f_alpha;
+ for (i = 0; i < 3; i++) {
+ result[i] = (t_color[i] * t_alpha * i_alpha + s_color[i] * s_alpha) / f_alpha;
}
}
else {
@@ -451,23 +452,23 @@ static float mixColors(float a_color[3], float a_weight, float b_color[3], float
/* if first value has no weight just use b_color */
if (!a_weight) {
copy_v3_v3(a_color, b_color);
- return b_weight*ratio;
+ return b_weight * ratio;
}
- weight_ratio = b_weight/(a_weight+b_weight);
+ weight_ratio = b_weight / (a_weight + b_weight);
}
- else return a_weight*(1.0f-ratio);
+ else return a_weight * (1.0f - ratio);
/* calculate final interpolation factor */
- if (ratio<=0.5f) {
- factor = weight_ratio*(ratio*2.0f);
+ if (ratio <= 0.5f) {
+ factor = weight_ratio * (ratio * 2.0f);
}
else {
- ratio = (ratio*2.0f - 1.0f);
- factor = weight_ratio*(1.0f-ratio) + ratio;
+ ratio = (ratio * 2.0f - 1.0f);
+ factor = weight_ratio * (1.0f - ratio) + ratio;
}
/* mix final color */
interp_v3_v3v3(a_color, a_color, b_color, factor);
- return (1.0f-factor)*a_weight + factor*b_weight;
+ return (1.0f - factor) * a_weight + factor * b_weight;
}
/* set "ignore cache" flag for all caches on this object */
@@ -477,7 +478,7 @@ static void object_cacheIgnoreClear(Object *ob, int state)
PTCacheID *pid;
BKE_ptcache_ids_from_object(&pidlist, ob, NULL, 0);
- for (pid=pidlist.first; pid; pid=pid->next) {
+ for (pid = pidlist.first; pid; pid = pid->next) {
if (pid->cache) {
if (state)
pid->cache->flag |= PTCACHE_IGNORE_CLEAR;
@@ -505,19 +506,19 @@ static int subframe_updateObject(Scene *scene, Object *ob, int flags, float fram
if (ob->track) is_canvas += subframe_updateObject(scene, ob->track, 0, frame);
/* skip subframe if object is parented
- * to vertex of a dynamic paint canvas */
+ * to vertex of a dynamic paint canvas */
if (is_canvas && (ob->partype == PARVERT1 || ob->partype == PARVERT3))
return 0;
/* also update constraint targets */
- for (con = ob->constraints.first; con; con=con->next) {
- bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
+ for (con = ob->constraints.first; con; con = con->next) {
+ bConstraintTypeInfo *cti = constraint_get_typeinfo(con);
ListBase targets = {NULL, NULL};
if (cti && cti->get_constraint_targets) {
bConstraintTarget *ct;
cti->get_constraint_targets(con, &targets);
- for (ct= targets.first; ct; ct= ct->next) {
+ for (ct = targets.first; ct; ct = ct->next) {
if (ct->tar)
subframe_updateObject(scene, ct->tar, 0, frame);
}
@@ -528,8 +529,8 @@ static int subframe_updateObject(Scene *scene, Object *ob, int flags, float fram
}
}
/* for curve following objects, parented curve has to be updated too */
- if (ob->type==OB_CURVE) {
- Curve *cu= ob->data;
+ if (ob->type == OB_CURVE) {
+ Curve *cu = ob->data;
BKE_animsys_evaluate_animdata(scene, &cu->id, cu->adt, frame, ADT_RECALC_ANIM);
}
@@ -538,7 +539,7 @@ static int subframe_updateObject(Scene *scene, Object *ob, int flags, float fram
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, frame, ADT_RECALC_ANIM);
if (flags & UPDATE_MESH) {
/* ignore cache clear during subframe updates
- * to not mess up cache validity */
+ * to not mess up cache validity */
object_cacheIgnoreClear(ob, 1);
BKE_object_handle_update(scene, ob);
object_cacheIgnoreClear(ob, 0);
@@ -575,21 +576,21 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene)
/* select object */
if (surface->brush_group) {
- if (go->ob) brushObj = go->ob;
+ if (go->ob) brushObj = go->ob;
}
else
brushObj = base->object;
if (!brushObj) {
if (surface->brush_group) go = go->next;
- else base= base->next;
+ else base = base->next;
continue;
}
if (surface->brush_group)
go = go->next;
else
- base= base->next;
+ base = base->next;
md = modifiers_findByType(brushObj, eModifierType_DynamicPaint);
if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) {
@@ -615,9 +616,9 @@ static int brush_usesMaterial(DynamicPaintBrushSettings *brush, Scene *scene)
/* check whether two bounds intersect */
static int boundsIntersect(Bounds3D *b1, Bounds3D *b2)
{
- int i=2;
+ int i = 2;
if (!b1->valid || !b2->valid) return 0;
- for (; i>=0; i-=1)
+ for (; i >= 0; i -= 1)
if (!(b1->min[i] <= b2->max[i] && b1->max[i] >= b2->min[i])) return 0;
return 1;
}
@@ -625,36 +626,36 @@ static int boundsIntersect(Bounds3D *b1, Bounds3D *b2)
/* check whether two bounds intersect inside defined proximity */
static int boundsIntersectDist(Bounds3D *b1, Bounds3D *b2, float dist)
{
- int i=2;
+ int i = 2;
if (!b1->valid || !b2->valid) return 0;
- for (; i>=0; i-=1)
- if (!(b1->min[i] <= (b2->max[i]+dist) && b1->max[i] >= (b2->min[i]-dist))) return 0;
+ for (; i >= 0; i -= 1)
+ if (!(b1->min[i] <= (b2->max[i] + dist) && b1->max[i] >= (b2->min[i] - dist))) return 0;
return 1;
}
/* check whether bounds intersects a point with given radius */
static int boundIntersectPoint(Bounds3D *b, float point[3], float radius)
{
- int i=2;
+ int i = 2;
if (!b->valid) return 0;
- for (; i>=0; i-=1)
- if (!(b->min[i] <= (point[i]+radius) && b->max[i] >= (point[i]-radius))) return 0;
+ for (; i >= 0; i -= 1)
+ if (!(b->min[i] <= (point[i] + radius) && b->max[i] >= (point[i] - radius))) return 0;
return 1;
}
/* expand bounds by a new point */
static void boundInsert(Bounds3D *b, float point[3])
{
- int i=2;
+ int i = 2;
if (!b->valid) {
copy_v3_v3(b->min, point);
copy_v3_v3(b->max, point);
b->valid = 1;
}
else {
- for (; i>=0; i-=1) {
- if (point[i] < b->min[i]) b->min[i]=point[i];
- if (point[i] > b->max[i]) b->max[i]=point[i];
+ for (; i >= 0; i -= 1) {
+ if (point[i] < b->min[i]) b->min[i] = point[i];
+ if (point[i] > b->max[i]) b->max[i] = point[i];
}
}
}
@@ -662,7 +663,7 @@ static void boundInsert(Bounds3D *b, float point[3])
float getSurfaceDimension(PaintSurfaceData *sData)
{
Bounds3D *mb = &sData->bData->mesh_bounds;
- return MAX3((mb->max[0]-mb->min[0]), (mb->max[1]-mb->min[1]), (mb->max[2]-mb->min[2]));
+ return MAX3((mb->max[0] - mb->min[0]), (mb->max[1] - mb->min[1]), (mb->max[2] - mb->min[2]));
}
static void freeGrid(PaintSurfaceData *data)
@@ -699,7 +700,7 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
freeGrid(sData);
/* allocate separate bounds for each thread */
- grid_bounds = MEM_callocN(sizeof(Bounds3D)*num_of_threads, "Grid Bounds");
+ grid_bounds = MEM_callocN(sizeof(Bounds3D) * num_of_threads, "Grid Bounds");
bData->grid = MEM_callocN(sizeof(VolumeGrid), "Surface Grid");
grid = bData->grid;
@@ -711,7 +712,7 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
/* calculate canvas dimensions */
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
#ifdef _OPENMP
int id = omp_get_thread_num();
boundInsert(&grid_bounds[id], (bData->realCoord[bData->s_pos[i]].v));
@@ -721,7 +722,7 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
}
/* get final dimensions */
- for (i=0; i<num_of_threads; i++) {
+ for (i = 0; i < num_of_threads; i++) {
boundInsert(&grid->grid_bounds, grid_bounds[i].min);
boundInsert(&grid->grid_bounds, grid_bounds[i].max);
}
@@ -732,8 +733,8 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
min_dim = MAX3(td[0], td[1], td[2]) / 1000.f;
/* deactivate zero axises */
- for (i=0; i<3; i++) {
- if (td[i]<min_dim) {td[i]=1.0f; axis-=1;}
+ for (i = 0; i < 3; i++) {
+ if (td[i] < min_dim) {td[i] = 1.0f; axis -= 1; }
}
if (axis == 0 || MAX3(td[0], td[1], td[2]) < 0.0001f) {
@@ -744,22 +745,22 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
}
/* now calculate grid volume/area/width depending on num of active axis */
- volume = td[0]*td[1]*td[2];
+ volume = td[0] * td[1] * td[2];
/* determine final grid size by trying to fit average 10.000 points per grid cell */
- dim_factor = (float)pow(volume / ((double)sData->total_points / 10000.0), 1.0/(double)axis);
+ dim_factor = (float)pow(volume / ((double)sData->total_points / 10000.0), 1.0 / (double)axis);
/* define final grid size using dim_factor, use min 3 for active axises */
- for (i=0; i<3; i++) {
+ for (i = 0; i < 3; i++) {
grid->dim[i] = (int)floor(td[i] / dim_factor);
- CLAMP(grid->dim[i], (dim[i]>=min_dim) ? 3 : 1, 100);
+ CLAMP(grid->dim[i], (dim[i] >= min_dim) ? 3 : 1, 100);
}
- grid_cells = grid->dim[0]*grid->dim[1]*grid->dim[2];
+ grid_cells = grid->dim[0] * grid->dim[1] * grid->dim[2];
/* allocate memory for grids */
grid->bounds = MEM_callocN(sizeof(Bounds3D) * grid_cells, "Surface Grid Bounds");
grid->s_pos = MEM_callocN(sizeof(int) * grid_cells, "Surface Grid Position");
- grid->s_num = MEM_callocN(sizeof(int) * grid_cells*num_of_threads, "Surface Grid Points");
+ grid->s_num = MEM_callocN(sizeof(int) * grid_cells * num_of_threads, "Surface Grid Points");
temp_s_num = MEM_callocN(sizeof(int) * grid_cells, "Temp Surface Grid Points");
grid->t_index = MEM_callocN(sizeof(int) * sData->total_points, "Surface Grid Target Ids");
temp_t_index = MEM_callocN(sizeof(int) * sData->total_points, "Temp Surface Grid Target Ids");
@@ -771,37 +772,37 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
if (!error) {
/* calculate number of points withing each cell */
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
int co[3], j;
- for (j=0; j<3; j++) {
- co[j] = (int)floor((bData->realCoord[bData->s_pos[i]].v[j] - grid->grid_bounds.min[j])/dim[j]*grid->dim[j]);
- CLAMP(co[j], 0, grid->dim[j]-1);
+ for (j = 0; j < 3; j++) {
+ co[j] = (int)floor((bData->realCoord[bData->s_pos[i]].v[j] - grid->grid_bounds.min[j]) / dim[j] * grid->dim[j]);
+ CLAMP(co[j], 0, grid->dim[j] - 1);
}
- temp_t_index[i] = co[0] + co[1] * grid->dim[0] + co[2] * grid->dim[0]*grid->dim[1];
+ temp_t_index[i] = co[0] + co[1] * grid->dim[0] + co[2] * grid->dim[0] * grid->dim[1];
#ifdef _OPENMP
- grid->s_num[temp_t_index[i]+omp_get_thread_num()*grid_cells]++;
+ grid->s_num[temp_t_index[i] + omp_get_thread_num() * grid_cells]++;
#else
grid->s_num[temp_t_index[i]]++;
#endif
}
/* for first cell only calc s_num */
- for (i=1; i<num_of_threads; i++) {
- grid->s_num[0] += grid->s_num[i*grid_cells];
+ for (i = 1; i < num_of_threads; i++) {
+ grid->s_num[0] += grid->s_num[i * grid_cells];
}
/* calculate grid indexes */
- for (i=1; i<grid_cells; i++) {
+ for (i = 1; i < grid_cells; i++) {
int id;
- for (id=1; id<num_of_threads; id++) {
- grid->s_num[i] += grid->s_num[i+id*grid_cells];
+ for (id = 1; id < num_of_threads; id++) {
+ grid->s_num[i] += grid->s_num[i + id * grid_cells];
}
- grid->s_pos[i] = grid->s_pos[i-1] + grid->s_num[i-1];
+ grid->s_pos[i] = grid->s_pos[i - 1] + grid->s_num[i - 1];
}
/* save point indexes to final array */
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
int pos = grid->s_pos[temp_t_index[i]] + temp_s_num[temp_t_index[i]];
grid->t_index[pos] = i;
@@ -812,17 +813,17 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
{
int x;
#pragma omp parallel for schedule(static)
- for (x=0; x<grid->dim[0]; x++) {
+ for (x = 0; x < grid->dim[0]; x++) {
int y;
- for (y=0; y<grid->dim[1]; y++) {
+ for (y = 0; y < grid->dim[1]; y++) {
int z;
- for (z=0; z<grid->dim[2]; z++) {
- int j, b_index = x + y * grid->dim[0] + z * grid->dim[0]*grid->dim[1];
+ for (z = 0; z < grid->dim[2]; z++) {
+ int j, b_index = x + y * grid->dim[0] + z * grid->dim[0] * grid->dim[1];
/* set bounds */
- for (j=0; j<3; j++) {
- int s = (j==0) ? x : ((j==1) ? y : z);
- grid->bounds[b_index].min[j] = grid->grid_bounds.min[j] + dim[j]/grid->dim[j]*s;
- grid->bounds[b_index].max[j] = grid->grid_bounds.min[j] + dim[j]/grid->dim[j]*(s+1);
+ for (j = 0; j < 3; j++) {
+ int s = (j == 0) ? x : ((j == 1) ? y : z);
+ grid->bounds[b_index].min[j] = grid->grid_bounds.min[j] + dim[j] / grid->dim[j] * s;
+ grid->bounds[b_index].max[j] = grid->grid_bounds.min[j] + dim[j] / grid->dim[j] * (s + 1);
}
grid->bounds[b_index].valid = 1;
}
@@ -857,10 +858,10 @@ void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd)
pmd->brush->dm = NULL;
if (pmd->brush->paint_ramp)
- MEM_freeN(pmd->brush->paint_ramp);
+ MEM_freeN(pmd->brush->paint_ramp);
pmd->brush->paint_ramp = NULL;
if (pmd->brush->vel_ramp)
- MEM_freeN(pmd->brush->vel_ramp);
+ MEM_freeN(pmd->brush->vel_ramp);
pmd->brush->vel_ramp = NULL;
MEM_freeN(pmd->brush);
@@ -919,7 +920,7 @@ void dynamicPaint_freeSurfaceData(DynamicPaintSurface *surface)
if (data->format_data) {
/* format specific free */
if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
- ImgSeqFormatData *format_data = (ImgSeqFormatData*)data->format_data;
+ ImgSeqFormatData *format_data = (ImgSeqFormatData *)data->format_data;
if (format_data->uv_p)
MEM_freeN(format_data->uv_p);
if (format_data->barycentricWeights)
@@ -989,13 +990,13 @@ void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd)
/***************************** Initialize and reset ******************************/
/*
-* Creates a new surface and adds it to the list
-* If scene is null, frame range of 1-250 is used
-* A pointer to this surface is returned
-*/
-struct DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSettings *canvas, Scene *scene)
+ * Creates a new surface and adds it to the list
+ * If scene is null, frame range of 1-250 is used
+ * A pointer to this surface is returned
+ */
+DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSettings *canvas, Scene *scene)
{
- DynamicPaintSurface *surface= MEM_callocN(sizeof(DynamicPaintSurface), "DynamicPaintSurface");
+ DynamicPaintSurface *surface = MEM_callocN(sizeof(DynamicPaintSurface), "DynamicPaintSurface");
if (!surface) return NULL;
surface->canvas = canvas;
@@ -1009,7 +1010,7 @@ struct DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSett
/* Set initial values */
surface->flags = MOD_DPAINT_ANTIALIAS | MOD_DPAINT_MULALPHA | MOD_DPAINT_DRY_LOG | MOD_DPAINT_DISSOLVE_LOG |
- MOD_DPAINT_ACTIVE | MOD_DPAINT_PREVIEW | MOD_DPAINT_OUT1 | MOD_DPAINT_USE_DRYING;
+ MOD_DPAINT_ACTIVE | MOD_DPAINT_PREVIEW | MOD_DPAINT_OUT1 | MOD_DPAINT_USE_DRYING;
surface->effect = 0;
surface->effect_ui = 1;
@@ -1064,8 +1065,8 @@ struct DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSett
}
/*
-* Initialize modifier data
-*/
+ * Initialize modifier data
+ */
int dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, struct Scene *scene)
{
if (pmd) {
@@ -1212,16 +1213,16 @@ static void dynamicPaint_allocateSurfaceType(DynamicPaintSurface *surface)
switch (surface->type) {
case MOD_DPAINT_SURFACE_T_PAINT:
- sData->type_data = MEM_callocN(sizeof(PaintPoint)*sData->total_points, "DynamicPaintSurface Data");
+ sData->type_data = MEM_callocN(sizeof(PaintPoint) * sData->total_points, "DynamicPaintSurface Data");
break;
case MOD_DPAINT_SURFACE_T_DISPLACE:
- sData->type_data = MEM_callocN(sizeof(float)*sData->total_points, "DynamicPaintSurface DepthData");
+ sData->type_data = MEM_callocN(sizeof(float) * sData->total_points, "DynamicPaintSurface DepthData");
break;
case MOD_DPAINT_SURFACE_T_WEIGHT:
- sData->type_data = MEM_callocN(sizeof(float)*sData->total_points, "DynamicPaintSurface WeightData");
+ sData->type_data = MEM_callocN(sizeof(float) * sData->total_points, "DynamicPaintSurface WeightData");
break;
case MOD_DPAINT_SURFACE_T_WAVE:
- sData->type_data = MEM_callocN(sizeof(PaintWavePoint)*sData->total_points, "DynamicPaintSurface WaveData");
+ sData->type_data = MEM_callocN(sizeof(PaintWavePoint) * sData->total_points, "DynamicPaintSurface WaveData");
break;
}
@@ -1261,21 +1262,21 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, int for
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
/* For vertex format, neighbors are connected by edges */
- neigh_points = 2*dm->getNumEdges(dm);
+ neigh_points = 2 * dm->getNumEdges(dm);
}
else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
- neigh_points = sData->total_points*8;
+ neigh_points = sData->total_points * 8;
if (!neigh_points) return;
/* allocate memory */
ad = sData->adj_data = MEM_callocN(sizeof(PaintAdjData), "Surface Adj Data");
if (!ad) return;
- ad->n_index = MEM_callocN(sizeof(int)*sData->total_points, "Surface Adj Index");
- ad->n_num = MEM_callocN(sizeof(int)*sData->total_points, "Surface Adj Counts");
- temp_data = MEM_callocN(sizeof(int)*sData->total_points, "Temp Adj Data");
- ad->n_target = MEM_callocN(sizeof(int)*neigh_points, "Surface Adj Targets");
- ad->flags = MEM_callocN(sizeof(int)*sData->total_points, "Surface Adj Flags");
+ ad->n_index = MEM_callocN(sizeof(int) * sData->total_points, "Surface Adj Index");
+ ad->n_num = MEM_callocN(sizeof(int) * sData->total_points, "Surface Adj Counts");
+ temp_data = MEM_callocN(sizeof(int) * sData->total_points, "Temp Adj Data");
+ ad->n_target = MEM_callocN(sizeof(int) * neigh_points, "Surface Adj Targets");
+ ad->flags = MEM_callocN(sizeof(int) * sData->total_points, "Surface Adj Flags");
ad->total_targets = neigh_points;
/* in case of allocation error, free memory */
@@ -1298,7 +1299,7 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, int for
struct MLoop *mloop = dm->getLoopArray(dm);
/* count number of edges per vertex */
- for (i=0; i<numOfEdges; i++) {
+ for (i = 0; i < numOfEdges; i++) {
ad->n_num[edge[i].v1]++;
ad->n_num[edge[i].v2]++;
@@ -1307,17 +1308,17 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, int for
}
/* also add number of vertices to temp_data
- * to locate points on "mesh edge" */
- for (i=0; i<numOfPolys; i++) {
- int j=0;
- for (; j<mpoly[i].totloop; j++) {
+ * to locate points on "mesh edge" */
+ for (i = 0; i < numOfPolys; i++) {
+ int j = 0;
+ for (; j < mpoly[i].totloop; j++) {
temp_data[mloop[mpoly[i].loopstart + j].v]++;
}
}
/* now check if total number of edges+faces for
- * each vertex is even, if not -> vertex is on mesh edge */
- for (i=0; i<sData->total_points; i++) {
+ * each vertex is even, if not -> vertex is on mesh edge */
+ for (i = 0; i < sData->total_points; i++) {
if ((temp_data[i] % 2) ||
(temp_data[i] < 4))
{
@@ -1330,29 +1331,29 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, int for
/* order n_index array */
n_pos = 0;
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
ad->n_index[i] = n_pos;
n_pos += ad->n_num[i];
}
/* and now add neighbor data using that info */
- for (i=0; i<numOfEdges; i++) {
+ for (i = 0; i < numOfEdges; i++) {
/* first vertex */
int index = edge[i].v1;
- n_pos = ad->n_index[index]+temp_data[index];
+ n_pos = ad->n_index[index] + temp_data[index];
ad->n_target[n_pos] = edge[i].v2;
temp_data[index]++;
/* second vertex */
index = edge[i].v2;
- n_pos = ad->n_index[index]+temp_data[index];
+ n_pos = ad->n_index[index] + temp_data[index];
ad->n_target[n_pos] = edge[i].v1;
temp_data[index]++;
}
}
else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
/* for image sequences, only allocate memory.
- * bake initialization takes care of rest */
+ * bake initialization takes care of rest */
}
MEM_freeN(temp_data);
@@ -1361,7 +1362,7 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, int for
void dynamicPaint_setInitialColor(DynamicPaintSurface *surface)
{
PaintSurfaceData *sData = surface->data;
- PaintPoint* pPoint = (PaintPoint*)sData->type_data;
+ PaintPoint *pPoint = (PaintPoint *)sData->type_data;
DerivedMesh *dm = surface->canvas->dm;
int i;
@@ -1374,7 +1375,7 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface)
else if (surface->init_color_type == MOD_DPAINT_INITIAL_COLOR) {
/* apply color to every surface point */
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
copy_v3_v3(pPoint[i].color, surface->init_color);
pPoint[i].alpha = surface->init_color[3];
}
@@ -1395,20 +1396,20 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface)
if (!tface) return;
/* for vertex surface loop through tfaces and find uv color
- * that provides highest alpha */
+ * that provides highest alpha */
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
#pragma omp parallel for schedule(static)
- for (i=0; i<numOfFaces; i++) {
+ for (i = 0; i < numOfFaces; i++) {
int numOfVert = (mface[i].v4) ? 4 : 3;
float uv[3] = {0.0f};
int j;
- for (j=0; j<numOfVert; j++) {
+ for (j = 0; j < numOfVert; j++) {
TexResult texres = {0};
- unsigned int *vert = (&mface[i].v1)+j;
+ unsigned int *vert = (&mface[i].v1) + j;
/* remap to -1.0 to 1.0 */
- uv[0] = tface[i].uv[j][0]*2.0f - 1.0f;
- uv[1] = tface[i].uv[j][1]*2.0f - 1.0f;
+ uv[0] = tface[i].uv[j][0] * 2.0f - 1.0f;
+ uv[1] = tface[i].uv[j][1] * 2.0f - 1.0f;
multitex_ext_safe(tex, uv, &texres);
@@ -1420,28 +1421,28 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface)
}
}
else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
- ImgSeqFormatData *f_data = (ImgSeqFormatData*)sData->format_data;
+ ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
int samples = (surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
float uv[9] = {0.0f};
float uv_final[3] = {0.0f};
int j;
TexResult texres = {0};
/* collect all uvs */
- for (j=0; j<3; j++) {
- int v=(f_data->uv_p[i].quad && j>0) ? j+1 : j;
- copy_v2_v2(&uv[j*3], tface[f_data->uv_p[i].face_index].uv[v]);
+ for (j = 0; j < 3; j++) {
+ int v = (f_data->uv_p[i].quad && j > 0) ? j + 1 : j;
+ copy_v2_v2(&uv[j * 3], tface[f_data->uv_p[i].face_index].uv[v]);
}
/* interpolate final uv pos */
interp_v3_v3v3v3(uv_final, &uv[0], &uv[3], &uv[6],
- f_data->barycentricWeights[i*samples].v);
+ f_data->barycentricWeights[i * samples].v);
/* remap to -1.0 to 1.0 */
- uv_final[0] = uv_final[0]*2.0f - 1.0f;
- uv_final[1] = uv_final[1]*2.0f - 1.0f;
+ uv_final[0] = uv_final[0] * 2.0f - 1.0f;
+ uv_final[1] = uv_final[1] * 2.0f - 1.0f;
multitex_ext_safe(tex, uv_final, &texres);
@@ -1462,37 +1463,37 @@ void dynamicPaint_setInitialColor(DynamicPaintSurface *surface)
if (!col) return;
#pragma omp parallel for schedule(static)
- for (i=0; i<numOfLoops; i++) {
- pPoint[mloop[i].v].color[0] = 1.0f/255.f*(float)col[i].b;
- pPoint[mloop[i].v].color[1] = 1.0f/255.f*(float)col[i].g;
- pPoint[mloop[i].v].color[2] = 1.0f/255.f*(float)col[i].r;
- pPoint[mloop[i].v].alpha = 1.0f/255.f*(float)col[i].a;
+ for (i = 0; i < numOfLoops; i++) {
+ pPoint[mloop[i].v].color[0] = 1.0f / 255.f * (float)col[i].b;
+ pPoint[mloop[i].v].color[1] = 1.0f / 255.f * (float)col[i].g;
+ pPoint[mloop[i].v].color[2] = 1.0f / 255.f * (float)col[i].r;
+ pPoint[mloop[i].v].alpha = 1.0f / 255.f * (float)col[i].a;
}
}
else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
- ImgSeqFormatData *f_data = (ImgSeqFormatData*)sData->format_data;
+ ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
int samples = (surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
MCol *col = CustomData_get_layer_named(&dm->faceData, CD_MCOL, surface->init_layername);
if (!col) return;
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
int face_ind = f_data->uv_p[i].face_index;
float colors[3][4] = {{0.0f, 0.0f, 0.0f, 0.0f}};
float final_color[4];
int j;
/* collect color values */
- for (j=0; j<3; j++) {
- int v=(f_data->uv_p[i].quad && j>0) ? j+1 : j;
- colors[j][0] = 1.0f/255.f*(float)col[face_ind*4+v].b;
- colors[j][1] = 1.0f/255.f*(float)col[face_ind*4+v].g;
- colors[j][2] = 1.0f/255.f*(float)col[face_ind*4+v].r;
- colors[j][3] = 1.0f/255.f*(float)col[face_ind*4+v].a;
+ for (j = 0; j < 3; j++) {
+ int v = (f_data->uv_p[i].quad && j > 0) ? j + 1 : j;
+ colors[j][0] = 1.0f / 255.f * (float)col[face_ind * 4 + v].b;
+ colors[j][1] = 1.0f / 255.f * (float)col[face_ind * 4 + v].g;
+ colors[j][2] = 1.0f / 255.f * (float)col[face_ind * 4 + v].r;
+ colors[j][3] = 1.0f / 255.f * (float)col[face_ind * 4 + v].a;
}
/* interpolate final color */
interp_v4_v4v4v4(final_color, colors[0], colors[1], colors[2],
- f_data->barycentricWeights[i*samples].v);
+ f_data->barycentricWeights[i * samples].v);
copy_v3_v3(pPoint[i].color, final_color);
pPoint[i].alpha = final_color[3];
@@ -1577,28 +1578,28 @@ static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Deri
if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
MVert *mvert = result->getVertArray(result);
int i;
- float* value = (float*)sData->type_data;
+ float *value = (float *)sData->type_data;
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
- float normal[3], val=value[i]*surface->disp_factor;
+ for (i = 0; i < sData->total_points; i++) {
+ float normal[3], val = value[i] * surface->disp_factor;
normal_short_to_float_v3(normal, mvert[i].no);
normalize_v3(normal);
- mvert[i].co[0] -= normal[0]*val;
- mvert[i].co[1] -= normal[1]*val;
- mvert[i].co[2] -= normal[2]*val;
+ mvert[i].co[0] -= normal[0] * val;
+ mvert[i].co[1] -= normal[1] * val;
+ mvert[i].co[2] -= normal[2] * val;
}
}
}
/*
-* Apply canvas data to the object derived mesh
-*/
-static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd,
- Object *ob,
- DerivedMesh *dm)
-{
+ * Apply canvas data to the object derived mesh
+ */
+struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd,
+ Object *ob,
+ DerivedMesh *dm)
+{
DerivedMesh *result = CDDM_copy(dm);
if (pmd->canvas && !(pmd->canvas->flags & MOD_DPAINT_BAKING)) {
@@ -1607,7 +1608,7 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
int update_normals = 0;
/* loop through surfaces */
- for (surface = pmd->canvas->surfaces.first; surface; surface=surface->next) {
+ for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
PaintSurfaceData *sData = surface->data;
if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ && sData) {
@@ -1620,18 +1621,18 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
int i;
- PaintPoint* pPoint = (PaintPoint*)sData->type_data;
+ PaintPoint *pPoint = (PaintPoint *)sData->type_data;
MLoopCol *col = NULL;
MLoop *mloop = CDDM_get_loops(result);
int totloop = result->numLoopData;
/* paint is stored on dry and wet layers, so mix final color first */
- float *fcolor = MEM_callocN(sizeof(float)*sData->total_points*4, "Temp paint color");
+ float *fcolor = MEM_callocN(sizeof(float) * sData->total_points * 4, "Temp paint color");
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
/* blend dry and wet layer */
- blendColors(pPoint[i].color, pPoint[i].alpha, pPoint[i].e_color, pPoint[i].e_alpha, &fcolor[i*4]);
+ blendColors(pPoint[i].color, pPoint[i].alpha, pPoint[i].e_color, pPoint[i].e_alpha, &fcolor[i * 4]);
}
/* viewport preview */
@@ -1649,7 +1650,7 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
#endif
/* Save preview results to weight layer to be
- * able to share same drawing methods */
+ * able to share same drawing methods */
col = CustomData_get_layer(&result->loopData, CD_PREVIEW_MLOOPCOL);
if (!col)
col = CustomData_add_layer(&result->loopData, CD_PREVIEW_MLOOPCOL, CD_CALLOC,
@@ -1657,11 +1658,11 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
if (col) {
#pragma omp parallel for schedule(static)
- for (i=0; i<totpoly; i++) {
- int j=0;
+ for (i = 0; i < totpoly; i++) {
+ int j = 0;
Material *material = give_current_material(ob, mp[i].mat_nr + 1);
- for (; j<mp[i].totloop; j++) {
+ for (; j < mp[i].totloop; j++) {
int l_index = mp[i].loopstart + j;
int v_index = mloop[l_index].v;
@@ -1682,14 +1683,14 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
c[2] = 0.65f;
}
/* mix surface color */
- interp_v3_v3v3(c, c, &fcolor[v_index], fcolor[v_index+3]);
+ interp_v3_v3v3(c, c, &fcolor[v_index], fcolor[v_index + 3]);
rgb_float_to_uchar((unsigned char *)&col[l_index].r, c);
}
else {
col[l_index].r =
- col[l_index].g =
- col[l_index].b = FTOCHAR(pPoint[v_index].wetness);
+ col[l_index].g =
+ col[l_index].b = FTOCHAR(pPoint[v_index].wetness);
col[l_index].a = 255;
}
}
@@ -1708,10 +1709,10 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
/* apply color */
if (col) {
#pragma omp parallel for schedule(static)
- for (i=0; i<totloop; i++) {
- int index = mloop[i].v*4;
+ for (i = 0; i < totloop; i++) {
+ int index = mloop[i].v * 4;
rgb_float_to_uchar((unsigned char *)&col[i].r, &fcolor[index]);
- col[i].a = FTOCHAR(fcolor[index+3]); /* IS THIS NEEDED? */
+ col[i].a = FTOCHAR(fcolor[index + 3]); /* IS THIS NEEDED? */
}
}
@@ -1725,11 +1726,11 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
/* apply color */
if (col) {
#pragma omp parallel for schedule(static)
- for (i=0; i<totloop; i++) {
+ for (i = 0; i < totloop; i++) {
int index = mloop[i].v;
col[i].r =
- col[i].g =
- col[i].b = FTOCHAR(pPoint[index].wetness);
+ col[i].g =
+ col[i].b = FTOCHAR(pPoint[index].wetness);
col[i].a = 255;
}
}
@@ -1741,7 +1742,7 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
else if (surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) {
int defgrp_index = defgroup_name_index(ob, surface->output_name);
MDeformVert *dvert = result->getVertDataArray(result, CD_MDEFORMVERT);
- float *weight = (float*)sData->type_data;
+ float *weight = (float *)sData->type_data;
/* viewport preview */
if (surface->flags & MOD_DPAINT_PREVIEW) {
@@ -1754,11 +1755,11 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
/* apply weights into a vertex group, if doesnt exists add a new layer */
if (defgrp_index >= 0 && !dvert && (surface->output_name[0] != '\0'))
dvert = CustomData_add_layer_named(&result->vertData, CD_MDEFORMVERT, CD_CALLOC,
- NULL, sData->total_points, surface->output_name);
+ NULL, sData->total_points, surface->output_name);
if (defgrp_index >= 0 && dvert) {
int i;
- for (i=0; i<sData->total_points; i++) {
- MDeformVert *dv= &dvert[i];
+ for (i = 0; i < sData->total_points; i++) {
+ MDeformVert *dv = &dvert[i];
MDeformWeight *def_weight = defvert_find_index(dv, defgrp_index);
/* skip if weight value is 0 and no existing weight is found */
@@ -1766,7 +1767,7 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
/* if not found, add a weight for it */
if (def_weight == NULL) {
- def_weight= defvert_verify_index(dv, defgrp_index);
+ def_weight = defvert_verify_index(dv, defgrp_index);
}
/* set weight value */
@@ -1779,10 +1780,10 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
MVert *mvert = result->getVertArray(result);
int i;
- PaintWavePoint* wPoint = (PaintWavePoint*)sData->type_data;
+ PaintWavePoint *wPoint = (PaintWavePoint *)sData->type_data;
#pragma omp parallel for schedule(static)
- for (i=0; i<sData->total_points; i++) {
+ for (i = 0; i < sData->total_points; i++) {
float normal[3];
normal_short_to_float_v3(normal, mvert[i].no);
madd_v3_v3fl(mvert[i].co, normal, wPoint[i].height);
@@ -1827,8 +1828,8 @@ void canvas_copyDerivedMesh(DynamicPaintCanvasSettings *canvas, DerivedMesh *dm)
}
/*
-* Updates derived mesh copy and processes dynamic paint step / caches.
-*/
+ * Updates derived mesh copy and processes dynamic paint step / caches.
+ */
static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
{
if (pmd->canvas) {
@@ -1842,7 +1843,7 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene
if (canvas->flags & MOD_DPAINT_BAKING) return;
/* loop through surfaces */
- for (; surface; surface=surface->next) {
+ for (; surface; surface = surface->next) {
int current_frame = (int)scene->r.cfra;
/* free bake data if not required anymore */
@@ -1903,10 +1904,10 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene
}
/* Modifier call. Processes dynamic paint modifier step. */
-struct DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
-{
+DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
+{
/* For now generate tessfaces in every case
- * XXX - move/remove when most of dpaint functions are converted to use bmesh types */
+ * XXX - move/remove when most of dpaint functions are converted to use bmesh types */
DM_ensure_tessface(dm);
/* Update canvas data for a new frame */
@@ -1920,19 +1921,19 @@ struct DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scen
/***************************** Image Sequence / UV Image Surface Calls ******************************/
/*
-* Tries to find the neighboring pixel in given (uv space) direction.
-* Result is used by effect system to move paint on the surface.
-*
-* px, py : origin pixel x and y
-* n_index : lookup direction index (use neighX, neighY to get final index)
-*/
+ * Tries to find the neighboring pixel in given (uv space) direction.
+ * Result is used by effect system to move paint on the surface.
+ *
+ * px, py : origin pixel x and y
+ * n_index : lookup direction index (use neighX, neighY to get final index)
+ */
static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh *dm,
const char *uvname, int w, int h, int px, int py, int n_index)
{
/* Note: Current method only uses polygon edges to detect neighboring pixels.
- * -> It doesn't always lead to the optimum pixel but is accurate enough
- * and faster/simplier than including possible face tip point links)
- */
+ * -> It doesn't always lead to the optimum pixel but is accurate enough
+ * and faster/simplier than including possible face tip point links)
+ */
int x, y;
PaintUVPoint *tPoint = NULL;
@@ -1942,44 +1943,44 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
x = px + neighX[n_index];
y = py + neighY[n_index];
- if (x<0 || x>=w) return OUT_OF_TEXTURE;
- if (y<0 || y>=h) return OUT_OF_TEXTURE;
+ if (x < 0 || x >= w) return OUT_OF_TEXTURE;
+ if (y < 0 || y >= h) return OUT_OF_TEXTURE;
- tPoint = &tempPoints[x+w*y]; /* UV neighbor */
- cPoint = &tempPoints[px+w*py]; /* Origin point */
+ tPoint = &tempPoints[x + w * y]; /* UV neighbor */
+ cPoint = &tempPoints[px + w * py]; /* Origin point */
/*
- * Check if shifted point is on same face -> it's a correct neighbor
- * (and if it isn't marked as an "edge pixel")
- */
+ * Check if shifted point is on same face -> it's a correct neighbor
+ * (and if it isn't marked as an "edge pixel")
+ */
if ((tPoint->face_index == cPoint->face_index) && (tPoint->neighbour_pixel == -1))
- return (x+w*y);
+ return (x + w * y);
/*
- * Even if shifted point is on another face
- * -> use this point.
- *
- * !! Replace with "is uv faces linked" check !!
- * This should work fine as long as uv island
- * margin is > 1 pixel.
- */
+ * Even if shifted point is on another face
+ * -> use this point.
+ *
+ * !! Replace with "is uv faces linked" check !!
+ * This should work fine as long as uv island
+ * margin is > 1 pixel.
+ */
if ((tPoint->face_index != -1) && (tPoint->neighbour_pixel == -1)) {
- return (x+w*y);
+ return (x + w * y);
}
/*
- * If we get here, the actual neighboring pixel
- * is located on a non-linked uv face, and we have to find
- * it's "real" position.
- *
- * Simple neighboring face finding algorithm:
- * - find closest uv edge to shifted pixel and get
- * the another face that shares that edge
- * - find corresponding position of that new face edge
- * in uv space
- *
- * TODO: Implement something more accurate / optimized?
- */
+ * If we get here, the actual neighboring pixel
+ * is located on a non-linked uv face, and we have to find
+ * it's "real" position.
+ *
+ * Simple neighboring face finding algorithm:
+ * - find closest uv edge to shifted pixel and get
+ * the another face that shares that edge
+ * - find corresponding position of that new face edge
+ * in uv space
+ *
+ * TODO: Implement something more accurate / optimized?
+ */
{
int numOfFaces = dm->getNumTessFaces(dm);
MFace *mface = dm->getTessFaceArray(dm);
@@ -1989,7 +1990,7 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
{
float pixel[2], dist, t_dist;
int i, uindex[3], edge1_index, edge2_index,
- e1_index, e2_index, target_face;
+ e1_index, e2_index, target_face;
float closest_point[2], lambda, dir_vec[2];
int target_uv1, target_uv2, final_pixel[2], final_index;
@@ -2007,41 +2008,41 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
}
/*
- * Find closest edge to that pixel
- */
+ * Find closest edge to that pixel
+ */
/* Dist to first edge */
e1_index = cPoint->v1; e2_index = cPoint->v2; edge1_index = uindex[0]; edge2_index = uindex[1];
dist = dist_to_line_segment_v2(pixel, tface[cPoint->face_index].uv[edge1_index], tface[cPoint->face_index].uv[edge2_index]);
/* Dist to second edge */
t_dist = dist_to_line_segment_v2(pixel, tface[cPoint->face_index].uv[uindex[1]], tface[cPoint->face_index].uv[uindex[2]]);
- if (t_dist < dist) {e1_index = cPoint->v2; e2_index = cPoint->v3; edge1_index = uindex[1]; edge2_index = uindex[2]; dist = t_dist;}
+ if (t_dist < dist) {e1_index = cPoint->v2; e2_index = cPoint->v3; edge1_index = uindex[1]; edge2_index = uindex[2]; dist = t_dist; }
/* Dist to third edge */
t_dist = dist_to_line_segment_v2(pixel, tface[cPoint->face_index].uv[uindex[2]], tface[cPoint->face_index].uv[uindex[0]]);
- if (t_dist < dist) {e1_index = cPoint->v3; e2_index = cPoint->v1; edge1_index = uindex[2]; edge2_index = uindex[0]; dist = t_dist;}
+ if (t_dist < dist) {e1_index = cPoint->v3; e2_index = cPoint->v1; edge1_index = uindex[2]; edge2_index = uindex[0]; dist = t_dist; }
/*
- * Now find another face that is linked to that edge
- */
+ * Now find another face that is linked to that edge
+ */
target_face = -1;
- for (i=0; i<numOfFaces; i++) {
+ for (i = 0; i < numOfFaces; i++) {
/*
- * Check if both edge vertices share this face
- */
+ * Check if both edge vertices share this face
+ */
int v4 = (mface[i].v4) ? mface[i].v4 : -1;
if ((e1_index == mface[i].v1 || e1_index == mface[i].v2 || e1_index == mface[i].v3 || e1_index == v4) &&
- (e2_index == mface[i].v1 || e2_index == mface[i].v2 || e2_index == mface[i].v3 || e2_index == v4)) {
+ (e2_index == mface[i].v1 || e2_index == mface[i].v2 || e2_index == mface[i].v3 || e2_index == v4)) {
if (i == cPoint->face_index) continue;
target_face = i;
/*
- * Get edge UV index
- */
+ * Get edge UV index
+ */
if (e1_index == mface[i].v1) target_uv1 = 0;
else if (e1_index == mface[i].v2) target_uv1 = 1;
else if (e1_index == mface[i].v3) target_uv1 = 2;
@@ -2060,8 +2061,8 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
if (target_face == -1) return ON_MESH_EDGE;
/*
- * If target face is connected in UV space as well, just use original index
- */
+ * If target face is connected in UV space as well, just use original index
+ */
s_uv1 = (float *)tface[cPoint->face_index].uv[edge1_index];
s_uv2 = (float *)tface[cPoint->face_index].uv[edge2_index];
t_uv1 = (float *)tface[target_face].uv[target_uv1];
@@ -2074,13 +2075,13 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
((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]));
+ return ((px + neighX[n_index]) + w * (py + neighY[n_index]));
}
/*
- * Find a point that is relatively at same edge position
- * on this other face UV
- */
+ * Find a point that is relatively at same edge position
+ * on this other face UV
+ */
lambda = closest_to_line_v2(closest_point, pixel, tface[cPoint->face_index].uv[edge1_index], tface[cPoint->face_index].uv[edge2_index]);
if (lambda < 0.0f) lambda = 0.0f;
if (lambda > 1.0f) lambda = 1.0f;
@@ -2104,13 +2105,13 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
final_index = final_pixel[0] + w * final_pixel[1];
/* If we ended up to our origin point ( mesh has smaller than pixel sized faces) */
- if (final_index == (px+w*py)) return NOT_FOUND;
+ if (final_index == (px + w * py)) return NOT_FOUND;
/* If found pixel still lies on wrong face ( mesh has smaller than pixel sized faces) */
if (tempPoints[final_index].face_index != target_face) return NOT_FOUND;
/*
- * If final point is an "edge pixel", use it's "real" neighbor instead
- */
+ * If final point is an "edge pixel", use it's "real" neighbor instead
+ */
if (tempPoints[final_index].neighbour_pixel != -1) final_index = cPoint->neighbour_pixel;
return final_index;
@@ -2119,16 +2120,16 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh
}
/*
-* Create a surface for uv image sequence format
-*/
+ * Create a surface for uv image sequence format
+ */
int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
{
/* Antialias jitter point relative coords */
float jitter5sample[10] = {0.0f, 0.0f,
- -0.2f, -0.4f,
- 0.2f, 0.4f,
- 0.4f, -0.2f,
- -0.4f, 0.3f};
+ -0.2f, -0.4f,
+ 0.2f, 0.4f,
+ 0.4f, -0.2f,
+ -0.4f, 0.3f};
int ty;
int w, h;
int numOfFaces;
@@ -2165,8 +2166,8 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
w = h = surface->image_resolution;
/*
- * Start generating the surface
- */
+ * Start generating the surface
+ */
printf("DynamicPaint: Preparing UV surface of %ix%i pixels and %i faces.\n", w, h, numOfFaces);
/* Init data struct */
@@ -2175,55 +2176,55 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
if (!surface->data) return setError(canvas, "Not enough free memory.");
aa_samples = (surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
- tempPoints = (struct PaintUVPoint *) MEM_callocN(w*h*sizeof(struct PaintUVPoint), "Temp PaintUVPoint");
- if (!tempPoints) error=1;
+ tempPoints = (struct PaintUVPoint *) MEM_callocN(w * h * sizeof(struct PaintUVPoint), "Temp PaintUVPoint");
+ if (!tempPoints) error = 1;
- final_index = (int *) MEM_callocN(w*h*sizeof(int), "Temp UV Final Indexes");
- if (!final_index) error=1;
+ final_index = (int *) MEM_callocN(w * h * sizeof(int), "Temp UV Final Indexes");
+ if (!final_index) error = 1;
- tempWeights = (struct Vec3f *) MEM_mallocN(w*h*aa_samples*sizeof(struct Vec3f), "Temp bWeights");
- if (!tempWeights) error=1;
+ tempWeights = (struct Vec3f *) MEM_mallocN(w * h * aa_samples * sizeof(struct Vec3f), "Temp bWeights");
+ if (!tempWeights) error = 1;
/*
- * Generate a temporary bounding box array for UV faces to optimize
- * the pixel-inside-a-face search.
- */
+ * Generate a temporary bounding box array for UV faces to optimize
+ * the pixel-inside-a-face search.
+ */
if (!error) {
- faceBB = (struct Bounds2D *) MEM_mallocN(numOfFaces*sizeof(struct Bounds2D), "MPCanvasFaceBB");
- if (!faceBB) error=1;
+ faceBB = (struct Bounds2D *) MEM_mallocN(numOfFaces * sizeof(struct Bounds2D), "MPCanvasFaceBB");
+ if (!faceBB) error = 1;
}
if (!error)
- for (ty=0; ty<numOfFaces; ty++) {
- int numOfVert = (mface[ty].v4) ? 4 : 3;
- int i;
+ for (ty = 0; ty < numOfFaces; ty++) {
+ int numOfVert = (mface[ty].v4) ? 4 : 3;
+ int i;
- copy_v2_v2(faceBB[ty].min, tface[ty].uv[0]);
- copy_v2_v2(faceBB[ty].max, tface[ty].uv[0]);
+ copy_v2_v2(faceBB[ty].min, tface[ty].uv[0]);
+ copy_v2_v2(faceBB[ty].max, tface[ty].uv[0]);
- for (i = 1; i<numOfVert; i++) {
- if (tface[ty].uv[i][0] < faceBB[ty].min[0]) faceBB[ty].min[0] = tface[ty].uv[i][0];
- if (tface[ty].uv[i][1] < faceBB[ty].min[1]) faceBB[ty].min[1] = tface[ty].uv[i][1];
- if (tface[ty].uv[i][0] > faceBB[ty].max[0]) faceBB[ty].max[0] = tface[ty].uv[i][0];
- if (tface[ty].uv[i][1] > faceBB[ty].max[1]) faceBB[ty].max[1] = tface[ty].uv[i][1];
+ for (i = 1; i < numOfVert; i++) {
+ if (tface[ty].uv[i][0] < faceBB[ty].min[0]) faceBB[ty].min[0] = tface[ty].uv[i][0];
+ if (tface[ty].uv[i][1] < faceBB[ty].min[1]) faceBB[ty].min[1] = tface[ty].uv[i][1];
+ if (tface[ty].uv[i][0] > faceBB[ty].max[0]) faceBB[ty].max[0] = tface[ty].uv[i][0];
+ if (tface[ty].uv[i][1] > faceBB[ty].max[1]) faceBB[ty].max[1] = tface[ty].uv[i][1];
+ }
}
- }
/*
- * Loop through every pixel and check
- * if pixel is uv-mapped on a canvas face.
- */
+ * Loop through every pixel and check
+ * if pixel is uv-mapped on a canvas face.
+ */
if (!error) {
#pragma omp parallel for schedule(static)
for (ty = 0; ty < h; ty++) {
int tx;
for (tx = 0; tx < w; tx++) {
int i, sample;
- int index = tx+w*ty;
+ int index = tx + w * ty;
PaintUVPoint *tPoint = (&tempPoints[index]);
- short isInside = 0; /* if point is inside a uv face */
+ short isInside = 0; /* if point is inside a uv face */
float d1[2], d2[2], d3[2], point[5][2];
float dot00, dot01, dot02, dot11, dot12, invDenom, u, v;
@@ -2238,27 +2239,27 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
point[0][1] = ((float)ty + 0.5f) / h;
/*
- * A pixel middle sample isn't enough to find very narrow polygons
- * So using 4 samples of each corner too
- */
+ * A pixel middle sample isn't enough to find very narrow polygons
+ * So using 4 samples of each corner too
+ */
point[1][0] = ((float)tx) / w;
point[1][1] = ((float)ty) / h;
- point[2][0] = ((float)tx+1) / w;
+ point[2][0] = ((float)tx + 1) / w;
point[2][1] = ((float)ty) / h;
point[3][0] = ((float)tx) / w;
- point[3][1] = ((float)ty+1) / h;
+ point[3][1] = ((float)ty + 1) / h;
- point[4][0] = ((float)tx+1) / w;
- point[4][1] = ((float)ty+1) / h;
+ point[4][0] = ((float)tx + 1) / w;
+ point[4][1] = ((float)ty + 1) / h;
/* Loop through samples, starting from middle point */
- for (sample=0; sample<5; sample++) {
+ for (sample = 0; sample < 5; sample++) {
/* Loop through every face in the mesh */
- for (i=0; i<numOfFaces; i++) {
+ for (i = 0; i < numOfFaces; i++) {
/* Check uv bb */
if (faceBB[i].min[0] > (point[sample][0])) continue;
@@ -2267,55 +2268,55 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
if (faceBB[i].max[1] < (point[sample][1])) continue;
/* Calculate point inside a triangle check
- * for uv0, 1, 2 */
- sub_v2_v2v2(d1, tface[i].uv[2], tface[i].uv[0]); // uv2 - uv0
- sub_v2_v2v2(d2, tface[i].uv[1], tface[i].uv[0]); // uv1 - uv0
- sub_v2_v2v2(d3, point[sample], tface[i].uv[0]); // point - uv0
+ * for uv0, 1, 2 */
+ sub_v2_v2v2(d1, tface[i].uv[2], tface[i].uv[0]); // uv2 - uv0
+ sub_v2_v2v2(d2, tface[i].uv[1], tface[i].uv[0]); // uv1 - uv0
+ sub_v2_v2v2(d3, point[sample], tface[i].uv[0]); // point - uv0
- dot00 = d1[0]*d1[0] + d1[1]*d1[1];
- dot01 = d1[0]*d2[0] + d1[1]*d2[1];
- dot02 = d1[0]*d3[0] + d1[1]*d3[1];
- dot11 = d2[0]*d2[0] + d2[1]*d2[1];
- dot12 = d2[0]*d3[0] + d2[1]*d3[1];
+ dot00 = d1[0] * d1[0] + d1[1] * d1[1];
+ dot01 = d1[0] * d2[0] + d1[1] * d2[1];
+ dot02 = d1[0] * d3[0] + d1[1] * d3[1];
+ dot11 = d2[0] * d2[0] + d2[1] * d2[1];
+ dot12 = d2[0] * d3[0] + d2[1] * d3[1];
invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
u = (dot11 * dot02 - dot01 * dot12) * invDenom;
v = (dot00 * dot12 - dot01 * dot02) * invDenom;
- if ((u > 0) && (v > 0) && (u + v < 1)) {isInside=1;} /* is inside a triangle */
+ if ((u > 0) && (v > 0) && (u + v < 1)) {isInside = 1; } /* is inside a triangle */
/* If collision wasn't found but the face is a quad
- * do another check for the second half */
+ * do another check for the second half */
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
+ sub_v2_v2v2(d2, tface[i].uv[3], tface[i].uv[0]); // uv3 - uv0
/* test again */
- dot00 = d1[0]*d1[0] + d1[1]*d1[1];
- dot01 = d1[0]*d2[0] + d1[1]*d2[1];
- dot02 = d1[0]*d3[0] + d1[1]*d3[1];
- dot11 = d2[0]*d2[0] + d2[1]*d2[1];
- dot12 = d2[0]*d3[0] + d2[1]*d3[1];
+ dot00 = d1[0] * d1[0] + d1[1] * d1[1];
+ dot01 = d1[0] * d2[0] + d1[1] * d2[1];
+ dot02 = d1[0] * d3[0] + d1[1] * d3[1];
+ dot11 = d2[0] * d2[0] + d2[1] * d2[1];
+ dot12 = d2[0] * d3[0] + d2[1] * d3[1];
invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
u = (dot11 * dot02 - dot01 * dot12) * invDenom;
v = (dot00 * dot12 - dot01 * dot02) * invDenom;
- if ((u > 0) && (v > 0) && (u + v < 1)) {isInside=2;} /* is inside the second half of the quad */
+ if ((u > 0) && (v > 0) && (u + v < 1)) {isInside = 2; } /* is inside the second half of the quad */
}
/*
- * If point was inside the face
- */
+ * If point was inside the face
+ */
if (isInside != 0) {
float uv1co[2], uv2co[2], uv3co[2], uv[2];
int j;
/* Get triagnle uvs */
- if (isInside==1) {
+ if (isInside == 1) {
copy_v2_v2(uv1co, tface[i].uv[0]);
copy_v2_v2(uv2co, tface[i].uv[1]);
copy_v2_v2(uv3co, tface[i].uv[2]);
@@ -2327,23 +2328,23 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
}
/* Add b-weights per anti-aliasing sample */
- for (j=0; j<aa_samples; j++) {
- uv[0] = point[0][0] + jitter5sample[j*2] / w;
- uv[1] = point[0][1] + jitter5sample[j*2+1] / h;
+ for (j = 0; j < aa_samples; j++) {
+ uv[0] = point[0][0] + jitter5sample[j * 2] / w;
+ uv[1] = point[0][1] + jitter5sample[j * 2 + 1] / h;
- barycentric_weights_v2(uv1co, uv2co, uv3co, uv, tempWeights[index*aa_samples+j].v);
+ barycentric_weights_v2(uv1co, uv2co, uv3co, uv, tempWeights[index * aa_samples + j].v);
}
/* Set surface point face values */
- tPoint->face_index = i; /* face index */
- tPoint->quad = (isInside == 2) ? 1 : 0; /* quad or tri part*/
+ tPoint->face_index = i; /* face index */
+ tPoint->quad = (isInside == 2) ? 1 : 0; /* quad or tri part*/
/* save vertex indexes */
tPoint->v1 = mface[i].v1;
tPoint->v2 = (isInside == 2) ? mface[i].v3 : mface[i].v2;
tPoint->v3 = (isInside == 2) ? mface[i].v4 : mface[i].v3;
- sample = 5; /* make sure we exit sample loop as well */
+ sample = 5; /* make sure we exit sample loop as well */
break;
}
}
@@ -2352,16 +2353,16 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
}
/*
- * Now loop through every pixel that was left without index
- * and find if they have neighboring pixels that have an index.
- * If so use that polygon as pixel surface.
- * (To avoid seams on uv island edges)
- */
+ * Now loop through every pixel that was left without index
+ * and find if they have neighboring pixels that have an index.
+ * If so use that polygon as pixel surface.
+ * (To avoid seams on uv island edges)
+ */
#pragma omp parallel for schedule(static)
for (ty = 0; ty < h; ty++) {
int tx;
for (tx = 0; tx < w; tx++) {
- int index = tx+w*ty;
+ int index = tx + w * ty;
PaintUVPoint *tPoint = (&tempPoints[index]);
/* If point isn't't on canvas mesh */
@@ -2372,19 +2373,19 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
/* get loop area */
u_min = (tx > 0) ? -1 : 0;
- u_max = (tx < (w-1)) ? 1 : 0;
+ u_max = (tx < (w - 1)) ? 1 : 0;
v_min = (ty > 0) ? -1 : 0;
- v_max = (ty < (h-1)) ? 1 : 0;
+ v_max = (ty < (h - 1)) ? 1 : 0;
point[0] = ((float)tx + 0.5f) / w;
point[1] = ((float)ty + 0.5f) / h;
/* search through defined area for neighbor */
- for (u=u_min; u<=u_max; u++)
- for (v=v_min; v<=v_max; v++) {
+ for (u = u_min; u <= u_max; u++)
+ for (v = v_min; v <= v_max; v++) {
/* if not this pixel itself */
- if (u!=0 || v!=0) {
- ind = (tx+u)+w*(ty+v);
+ if (u != 0 || v != 0) {
+ ind = (tx + u) + w * (ty + v);
/* if neighbor has index */
if (tempPoints[ind].face_index != -1) {
@@ -2405,39 +2406,39 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
}
/* Add b-weights per anti-aliasing sample */
- for (j=0; j<aa_samples; j++) {
+ for (j = 0; j < aa_samples; j++) {
- uv[0] = point[0] + jitter5sample[j*2] / w;
- uv[1] = point[1] + jitter5sample[j*2+1] / h;
- barycentric_weights_v2(uv1co, uv2co, uv3co, uv, tempWeights[index*aa_samples+j].v);
+ uv[0] = point[0] + jitter5sample[j * 2] / w;
+ uv[1] = point[1] + jitter5sample[j * 2 + 1] / h;
+ barycentric_weights_v2(uv1co, uv2co, uv3co, uv, tempWeights[index * aa_samples + j].v);
}
/* Set values */
- tPoint->neighbour_pixel = ind; // face index
- tPoint->quad = tempPoints[ind].quad; // quad or tri
+ tPoint->neighbour_pixel = ind; // face index
+ tPoint->quad = tempPoints[ind].quad; // quad or tri
/* save vertex indexes */
tPoint->v1 = mface[i].v1;
tPoint->v2 = (tPoint->quad) ? mface[i].v3 : mface[i].v2;
tPoint->v3 = (tPoint->quad) ? mface[i].v4 : mface[i].v3;
- u = u_max + 1; /* make sure we exit outer loop as well */
+ u = u_max + 1; /* make sure we exit outer loop as well */
break;
}
+ }
}
- }
}
}
}
/*
- * When base loop is over convert found neighbor indexes to real ones
- * Also count the final number of active surface points
- */
+ * 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++) {
int tx;
for (tx = 0; tx < w; tx++) {
- int index = tx+w*ty;
+ int index = tx + w * ty;
PaintUVPoint *tPoint = (&tempPoints[index]);
if (tPoint->face_index == -1 && tPoint->neighbour_pixel != -1) tPoint->face_index = tempPoints[tPoint->neighbour_pixel].face_index;
@@ -2447,18 +2448,18 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
/* Generate surface adjacency data. */
{
- int i, cursor=0;
+ int i, cursor = 0;
/* Create a temporary array of final indexes (before unassigned
- * pixels have been dropped) */
- for (i=0; i<w*h; i++) {
+ * pixels have been dropped) */
+ for (i = 0; i < w * h; i++) {
if (tempPoints[i].face_index != -1) {
final_index[i] = cursor;
cursor++;
}
}
/* allocate memory */
- sData->total_points = w*h;
+ sData->total_points = w * h;
dynamicPaint_initAdjacencyData(surface, 1);
if (sData->adj_data) {
@@ -2467,16 +2468,16 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
for (ty = 0; ty < h; ty++) {
int tx;
for (tx = 0; tx < w; tx++) {
- int i, index = tx+w*ty;
+ int i, index = tx + w * ty;
if (tempPoints[index].face_index != -1) {
ed->n_index[final_index[index]] = n_pos;
ed->n_num[final_index[index]] = 0;
- for (i=0; i<8; i++) {
+ for (i = 0; i < 8; i++) {
/* Try to find a neighboring pixel in defined direction
- * If not found, -1 is returned */
+ * If not found, -1 is returned */
int n_target = dynamicPaint_findNeighbourPixel(tempPoints, dm, uvname, w, h, tx, ty, i);
if (n_target >= 0) {
@@ -2498,12 +2499,12 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
{
ImgSeqFormatData *f_data = MEM_callocN(sizeof(struct ImgSeqFormatData), "ImgSeqFormatData");
if (f_data) {
- f_data->uv_p = MEM_callocN(active_points*sizeof(struct PaintUVPoint), "PaintUVPoint");
- f_data->barycentricWeights = MEM_callocN(active_points*aa_samples*sizeof(struct Vec3f), "PaintUVPoint");
+ f_data->uv_p = MEM_callocN(active_points * sizeof(struct PaintUVPoint), "PaintUVPoint");
+ f_data->barycentricWeights = MEM_callocN(active_points * aa_samples * sizeof(struct Vec3f), "PaintUVPoint");
- if (!f_data->uv_p || !f_data->barycentricWeights) error=1;
+ if (!f_data->uv_p || !f_data->barycentricWeights) error = 1;
}
- else error=1;
+ else error = 1;
sData->total_points = active_points;
@@ -2520,17 +2521,17 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
sData->total_points = active_points;
sData->format_data = f_data;
- for (index = 0; index < (w*h); index++) {
+ for (index = 0; index < (w * h); index++) {
if (tempPoints[index].face_index != -1) {
memcpy(&f_data->uv_p[cursor], &tempPoints[index], sizeof(PaintUVPoint));
- memcpy(&f_data->barycentricWeights[cursor*aa_samples], &tempWeights[index*aa_samples], sizeof(Vec3f)*aa_samples);
+ memcpy(&f_data->barycentricWeights[cursor * aa_samples], &tempWeights[index * aa_samples], sizeof(Vec3f) * aa_samples);
cursor++;
}
}
}
}
}
- if (error==1) setError(canvas, "Not enough free memory.");
+ if (error == 1) setError(canvas, "Not enough free memory.");
if (faceBB) MEM_freeN(faceBB);
if (tempPoints) MEM_freeN(tempPoints);
@@ -2543,22 +2544,22 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
#if 0
/* -----------------------------------------------------------------
- * For debug, output pixel statuses to the color map
- * -----------------------------------------------------------------*/
+ * For debug, output pixel statuses to the color map
+ * -----------------------------------------------------------------*/
#pragma omp parallel for schedule(static)
for (index = 0; index < sData->total_points; index++)
{
- ImgSeqFormatData *f_data = (ImgSeqFormatData*)sData->format_data;
- PaintUVPoint *uvPoint = &((PaintUVPoint*)f_data->uv_p)[index];
- PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
- pPoint->alpha=1.0f;
+ ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
+ PaintUVPoint *uvPoint = &((PaintUVPoint *)f_data->uv_p)[index];
+ PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
+ pPoint->alpha = 1.0f;
/* Every pixel that is assigned as "edge pixel" gets blue color */
if (uvPoint->neighbour_pixel != -1) pPoint->color[2] = 1.0f;
/* and every pixel that finally got an polygon gets red color */
if (uvPoint->face_index != -1) pPoint->color[0] = 1.0f;
/* green color shows pixel face index hash */
- if (uvPoint->face_index != -1) pPoint->color[1] = (float)(uvPoint->face_index % 255)/256.0f;
+ if (uvPoint->face_index != -1) pPoint->color[1] = (float)(uvPoint->face_index % 255) / 256.0f;
}
#endif
@@ -2569,19 +2570,19 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface)
}
/*
-* Outputs an image file from uv surface data.
-*/
-void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface, char* filename, short output_layer)
+ * Outputs an image file from uv surface data.
+ */
+void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface, char *filename, short output_layer)
{
int index;
- ImBuf* ibuf = NULL;
+ ImBuf *ibuf = NULL;
PaintSurfaceData *sData = surface->data;
- ImgSeqFormatData *f_data = (ImgSeqFormatData*)sData->format_data;
+ ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
/* OpenEXR or PNG */
int format = (surface->image_fileformat & MOD_DPAINT_IMGFORMAT_OPENEXR) ? R_IMF_IMTYPE_OPENEXR : R_IMF_IMTYPE_PNG;
char output_file[FILE_MAX];
- if (!sData || !sData->type_data) {setError(surface->canvas, "Image save failed: Invalid surface.");return;}
+ if (!sData || !sData->type_data) {setError(surface->canvas, "Image save failed: Invalid surface."); return; }
/* if selected format is openexr, but current build doesnt support one */
#ifndef WITH_OPENEXR
if (format == R_IMF_IMTYPE_OPENEXR) format = R_IMF_IMTYPE_PNG;
@@ -2595,78 +2596,78 @@ void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface, char* filenam
/* Init image buffer */
ibuf = IMB_allocImBuf(surface->image_resolution, surface->image_resolution, 32, IB_rectfloat);
- if (ibuf == NULL) {setError(surface->canvas, "Image save failed: Not enough free memory.");return;}
+ 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++) {
- int pos=f_data->uv_p[index].pixel_index*4; /* image buffer position */
+ int pos = f_data->uv_p[index].pixel_index * 4; /* image buffer position */
/* Set values of preferred type */
if (output_layer == 1) {
/* wetmap */
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
- PaintPoint *point = &((PaintPoint*)sData->type_data)[index];
+ PaintPoint *point = &((PaintPoint *)sData->type_data)[index];
float value = (point->wetness > 1.0f) ? 1.0f : point->wetness;
- ibuf->rect_float[pos]=value;
- ibuf->rect_float[pos+1]=value;
- ibuf->rect_float[pos+2]=value;
- ibuf->rect_float[pos+3]=1.0f;
+ ibuf->rect_float[pos] = value;
+ ibuf->rect_float[pos + 1] = value;
+ ibuf->rect_float[pos + 2] = value;
+ ibuf->rect_float[pos + 3] = 1.0f;
}
}
else if (output_layer == 0) {
/* Paintmap */
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
- PaintPoint *point = &((PaintPoint*)sData->type_data)[index];
+ PaintPoint *point = &((PaintPoint *)sData->type_data)[index];
/* blend wet and dry layers */
blendColors(point->color, point->alpha, point->e_color, point->e_alpha, &ibuf->rect_float[pos]);
/* Multiply color by alpha if enabled */
if (surface->flags & MOD_DPAINT_MULALPHA) {
- ibuf->rect_float[pos] *= ibuf->rect_float[pos+3];
- ibuf->rect_float[pos+1] *= ibuf->rect_float[pos+3];
- ibuf->rect_float[pos+2] *= ibuf->rect_float[pos+3];
+ ibuf->rect_float[pos] *= ibuf->rect_float[pos + 3];
+ ibuf->rect_float[pos + 1] *= ibuf->rect_float[pos + 3];
+ ibuf->rect_float[pos + 2] *= ibuf->rect_float[pos + 3];
}
}
/* displace */
else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
- float depth = ((float*)sData->type_data)[index];
+ float depth = ((float *)sData->type_data)[index];
if (surface->depth_clamp)
depth /= surface->depth_clamp;
if (surface->disp_type == MOD_DPAINT_DISP_DISPLACE) {
- depth = (0.5f - depth/2.0f);
+ depth = (0.5f - depth / 2.0f);
}
CLAMP(depth, 0.0f, 1.0f);
- ibuf->rect_float[pos]=depth;
- ibuf->rect_float[pos+1]=depth;
- ibuf->rect_float[pos+2]=depth;
- ibuf->rect_float[pos+3]=1.0f;
+ ibuf->rect_float[pos] = depth;
+ ibuf->rect_float[pos + 1] = depth;
+ ibuf->rect_float[pos + 2] = depth;
+ ibuf->rect_float[pos + 3] = 1.0f;
}
/* waves */
else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
- PaintWavePoint *wPoint = &((PaintWavePoint*)sData->type_data)[index];
+ PaintWavePoint *wPoint = &((PaintWavePoint *)sData->type_data)[index];
float depth = wPoint->height;
if (surface->depth_clamp)
- depth /= surface->depth_clamp;
- depth = (0.5f + depth/2.0f);
+ depth /= surface->depth_clamp;
+ depth = (0.5f + depth / 2.0f);
CLAMP(depth, 0.0f, 1.0f);
- ibuf->rect_float[pos]=depth;
- ibuf->rect_float[pos+1]=depth;
- ibuf->rect_float[pos+2]=depth;
- ibuf->rect_float[pos+3]=1.0f;
+ ibuf->rect_float[pos] = depth;
+ ibuf->rect_float[pos + 1] = depth;
+ ibuf->rect_float[pos + 2] = depth;
+ ibuf->rect_float[pos + 3] = 1.0f;
}
}
}
/* Set output format, png in case exr isn't supported */
- ibuf->ftype= PNG|95;
+ ibuf->ftype = PNG | 95;
#ifdef WITH_OPENEXR
- if (format == R_IMF_IMTYPE_OPENEXR) { /* OpenEXR 32-bit float */
+ if (format == R_IMF_IMTYPE_OPENEXR) { /* OpenEXR 32-bit float */
ibuf->ftype = OPENEXR | OPENEXR_COMPRESS;
}
#endif
@@ -2680,7 +2681,7 @@ void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface, char* filenam
/***************************** Material / Texture Sampling ******************************/
/* stores a copy of required materials to allow doing adjustments
-* without interfering the render/preview */
+ * without interfering the render/preview */
typedef struct BrushMaterials {
Material *mat;
Material **ob_mats;
@@ -2688,24 +2689,24 @@ typedef struct BrushMaterials {
} BrushMaterials;
/* Initialize materials for brush object:
-* Calculates inverse matrices for linked objects, updates
-* volume caches etc. */
+ * Calculates inverse matrices for linked objects, updates
+ * volume caches etc. */
static void dynamicPaint_updateBrushMaterials(Object *brushOb, Material *ui_mat, Scene *scene, BrushMaterials *bMats)
{
/* Calculate inverse transformation matrix
- * for this object */
+ * for this object */
invert_m4_m4(brushOb->imat, brushOb->obmat);
copy_m4_m4(brushOb->imat_ren, brushOb->imat);
/* Now process every material linked to this brush object */
if ((ui_mat == NULL) && brushOb->mat && brushOb->totcol) {
- int i, tot=(*give_totcolp(brushOb));
+ int i, tot = (*give_totcolp(brushOb));
/* allocate material pointer array */
if (tot) {
- bMats->ob_mats = MEM_callocN(sizeof(Material*)*(tot), "BrushMaterials");
- for (i=0; i<tot; i++) {
- bMats->ob_mats[i] = RE_init_sample_material(give_current_material(brushOb, (i+1)), scene);
+ bMats->ob_mats = MEM_callocN(sizeof(Material *) * (tot), "BrushMaterials");
+ for (i = 0; i < tot; i++) {
+ bMats->ob_mats[i] = RE_init_sample_material(give_current_material(brushOb, (i + 1)), scene);
}
}
bMats->tot = tot;
@@ -2721,7 +2722,7 @@ static void dynamicPaint_freeBrushMaterials(BrushMaterials *bMats)
/* Now process every material linked to this brush object */
if (bMats->ob_mats) {
int i;
- for (i=0; i<bMats->tot; i++) {
+ for (i = 0; i < bMats->tot; i++) {
RE_free_sample_material(bMats->ob_mats[i]);
}
MEM_freeN(bMats->ob_mats);
@@ -2732,8 +2733,8 @@ static void dynamicPaint_freeBrushMaterials(BrushMaterials *bMats)
}
/*
-* Get material diffuse color and alpha (including linked textures) in given coordinates
-*/
+ * Get material diffuse color and alpha (including linked textures) in given coordinates
+ */
void dynamicPaint_doMaterialTex(BrushMaterials *bMats, float color[3], float *alpha, Object *brushOb, const float volume_co[3], const float surface_co[3], int faceIndex, short isQuad, DerivedMesh *orcoDm)
{
Material *mat = bMats->mat;
@@ -2745,7 +2746,7 @@ void dynamicPaint_doMaterialTex(BrushMaterials *bMats, float color[3], float *al
int mat_nr = mface[faceIndex].mat_nr;
if (mat_nr >= (*give_totcolp(brushOb))) return;
mat = bMats->ob_mats[mat_nr];
- if (mat == NULL) return; /* No material assigned */
+ if (mat == NULL) return; /* No material assigned */
}
else return;
}
@@ -2758,26 +2759,25 @@ void dynamicPaint_doMaterialTex(BrushMaterials *bMats, float color[3], float *al
/* A modified callback to bvh tree raycast. The tree must bust have been built using bvhtree_from_mesh_faces.
-* userdata must be a BVHMeshCallbackUserdata built from the same mesh as the tree.
-*
-* To optimize brush detection speed this doesn't calculate hit coordinates or normal.
-* If ray hit the second half of a quad, no[0] is set to 1.0f.
-*/
+ * userdata must be a BVHMeshCallbackUserdata built from the same mesh as the tree.
+ *
+ * To optimize brush detection speed this doesn't calculate hit coordinates or normal.
+ * If ray hit the second half of a quad, no[0] is set to 1.0f.
+ */
static void mesh_faces_spherecast_dp(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
{
- const BVHTreeFromMesh *data = (BVHTreeFromMesh*) userdata;
- MVert *vert = data->vert;
+ const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
+ MVert *vert = data->vert;
MFace *face = data->face + index;
short quad = 0;
float *t0, *t1, *t2, *t3;
- t0 = vert[ face->v1 ].co;
- t1 = vert[ face->v2 ].co;
- t2 = vert[ face->v3 ].co;
- t3 = face->v4 ? vert[ face->v4].co : NULL;
+ t0 = vert[face->v1].co;
+ t1 = vert[face->v2].co;
+ t2 = vert[face->v3].co;
+ t3 = face->v4 ? vert[face->v4].co : NULL;
- do
- {
+ do {
float dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
if (dist >= 0 && dist < hit->dist) {
@@ -2795,26 +2795,25 @@ static void mesh_faces_spherecast_dp(void *userdata, int index, const BVHTreeRay
}
/* A modified callback to bvh tree nearest point. The tree must bust have been built using bvhtree_from_mesh_faces.
-* userdata must be a BVHMeshCallbackUserdata built from the same mesh as the tree.
-*
-* 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
-*/
+ * userdata must be a BVHMeshCallbackUserdata built from the same mesh as the tree.
+ *
+ * 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[3], BVHTreeNearest *nearest)
{
- const BVHTreeFromMesh *data = (BVHTreeFromMesh*) userdata;
- MVert *vert = data->vert;
+ const BVHTreeFromMesh *data = (BVHTreeFromMesh *) userdata;
+ MVert *vert = data->vert;
MFace *face = data->face + index;
short quad = 0;
float *t0, *t1, *t2, *t3;
- t0 = vert[ face->v1 ].co;
- t1 = vert[ face->v2 ].co;
- t2 = vert[ face->v3 ].co;
- t3 = face->v4 ? vert[ face->v4].co : NULL;
+ t0 = vert[face->v1].co;
+ t1 = vert[face->v2].co;
+ t2 = vert[face->v3].co;
+ t3 = face->v4 ? vert[face->v4].co : NULL;
- do
- {
+ do {
float nearest_tmp[3], dist;
int vertex, edge;
@@ -2838,18 +2837,19 @@ static void mesh_faces_nearest_point_dp(void *userdata, int index, const float c
/***************************** Brush Painting Calls ******************************/
/*
-* Mix color values to canvas point.
-*
-* surface : canvas surface
-* index : surface point index
-* paintFlags : paint object flags
-* paintColor,Alpha,Wetness : to be mixed paint values
-* timescale : value used to adjust time dependand
-* operations when using substeps
-*/
-static void dynamicPaint_mixPaintColors(DynamicPaintSurface *surface, int index, int paintFlags, float *paintColor, float *paintAlpha, float *paintWetness, float *timescale)
+ * Mix color values to canvas point.
+ *
+ * surface : canvas surface
+ * index : surface point index
+ * paintFlags : paint object flags
+ * paintColor,Alpha,Wetness : to be mixed paint values
+ * timescale : value used to adjust time dependand
+ * operations when using substeps
+ */
+static void dynamicPaint_mixPaintColors(DynamicPaintSurface *surface, int index, int paintFlags,
+ const float paintColor[3], float *paintAlpha, float *paintWetness, float *timescale)
{
- PaintPoint *pPoint = &((PaintPoint*)surface->data->type_data)[index];
+ PaintPoint *pPoint = &((PaintPoint *)surface->data->type_data)[index];
/* Add paint */
if (!(paintFlags & MOD_DPAINT_ERASE)) {
@@ -2870,10 +2870,10 @@ static void dynamicPaint_mixPaintColors(DynamicPaintSurface *surface, int index,
float wetness = (*paintWetness);
CLAMP(wetness, 0.0f, 1.0f);
pPoint->e_alpha = mix[3];
- pPoint->wetness = pPoint->wetness*(1.0f-wetness) + wetness;
+ pPoint->wetness = pPoint->wetness * (1.0f - wetness) + wetness;
}
- if (pPoint->wetness<MIN_WETNESS) pPoint->wetness = MIN_WETNESS;
+ if (pPoint->wetness < MIN_WETNESS) pPoint->wetness = MIN_WETNESS;
pPoint->state = DPAINT_PAINT_NEW;
}
@@ -2884,9 +2884,9 @@ static void dynamicPaint_mixPaintColors(DynamicPaintSurface *surface, int index,
float invFact = 1.0f - (*paintAlpha);
/*
- * Make highest alpha to match erased value
- * but maintain alpha ratio
- */
+ * Make highest alpha to match erased value
+ * but maintain alpha ratio
+ */
if (paintFlags & MOD_DPAINT_ABS_ALPHA) {
a_highest = (pPoint->e_alpha > pPoint->alpha) ? pPoint->e_alpha : pPoint->alpha;
if (a_highest > invFact) {
@@ -2937,100 +2937,100 @@ static void dynamicPaint_mixWaveHeight(PaintWavePoint *wPoint, DynamicPaintBrush
wPoint->state = DPAINT_WAVE_REFLECT_ONLY;
else if (brush->wave_type == MOD_DPAINT_WAVEB_CHANGE) {
if (isect_change < 0.0f)
- wPoint->height += isect_change*brush->wave_factor;
+ wPoint->height += isect_change * brush->wave_factor;
}
}
}
/*
-* add brush results to the surface data depending on surface type
-*/
+ * add brush results to the surface data depending on surface type
+ */
static void dynamicPaint_updatePointData(DynamicPaintSurface *surface, unsigned int index, DynamicPaintBrushSettings *brush,
- float paint[3], float influence, float depth, float vel_factor, float timescale)
+ float paint[3], float influence, float depth, float vel_factor, float timescale)
{
- PaintSurfaceData *sData = surface->data;
- float strength;
-
- /* apply influence scale */
- influence *= surface->influence_scale;
- depth *= surface->influence_scale;
-
- strength = influence * brush->alpha;
- CLAMP(strength, 0.0f, 1.0f);
-
- /* Sample velocity colorband if required */
- if (brush->flags & (MOD_DPAINT_VELOCITY_ALPHA|MOD_DPAINT_VELOCITY_COLOR|MOD_DPAINT_VELOCITY_DEPTH)) {
- float coba_res[4];
- vel_factor /= brush->max_velocity;
- CLAMP(vel_factor, 0.0f, 1.0f);
-
- if (do_colorband(brush->vel_ramp, vel_factor, coba_res)) {
- if (brush->flags & MOD_DPAINT_VELOCITY_COLOR) {
- paint[0] = coba_res[0];
- paint[1] = coba_res[1];
- paint[2] = coba_res[2];
- }
- if (brush->flags & MOD_DPAINT_VELOCITY_ALPHA)
- strength *= coba_res[3];
- if (brush->flags & MOD_DPAINT_VELOCITY_DEPTH)
- depth *= coba_res[3];
+ PaintSurfaceData *sData = surface->data;
+ float strength;
+
+ /* apply influence scale */
+ influence *= surface->influence_scale;
+ depth *= surface->influence_scale;
+
+ strength = influence * brush->alpha;
+ CLAMP(strength, 0.0f, 1.0f);
+
+ /* Sample velocity colorband if required */
+ if (brush->flags & (MOD_DPAINT_VELOCITY_ALPHA | MOD_DPAINT_VELOCITY_COLOR | MOD_DPAINT_VELOCITY_DEPTH)) {
+ float coba_res[4];
+ vel_factor /= brush->max_velocity;
+ CLAMP(vel_factor, 0.0f, 1.0f);
+
+ if (do_colorband(brush->vel_ramp, vel_factor, coba_res)) {
+ if (brush->flags & MOD_DPAINT_VELOCITY_COLOR) {
+ paint[0] = coba_res[0];
+ paint[1] = coba_res[1];
+ paint[2] = coba_res[2];
}
+ if (brush->flags & MOD_DPAINT_VELOCITY_ALPHA)
+ strength *= coba_res[3];
+ if (brush->flags & MOD_DPAINT_VELOCITY_DEPTH)
+ depth *= coba_res[3];
}
+ }
- /* mix paint surface */
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
-
- float paintWetness = brush->wetness * strength;
- float paintAlpha = strength;
+ /* mix paint surface */
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
- dynamicPaint_mixPaintColors(surface, index, brush->flags, paint, &paintAlpha, &paintWetness, &timescale);
+ float paintWetness = brush->wetness * strength;
+ float paintAlpha = strength;
- }
- /* displace surface */
- else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
- float *value = (float*)sData->type_data;
+ dynamicPaint_mixPaintColors(surface, index, brush->flags, paint, &paintAlpha, &paintWetness, &timescale);
- if (surface->flags & MOD_DPAINT_DISP_INCREMENTAL)
- depth = value[index] + depth;
+ }
+ /* displace surface */
+ else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
+ float *value = (float *)sData->type_data;
- if (surface->depth_clamp) {
- CLAMP(depth, 0.0f-surface->depth_clamp, surface->depth_clamp);
- }
+ if (surface->flags & MOD_DPAINT_DISP_INCREMENTAL)
+ depth = value[index] + depth;
- if (brush->flags & MOD_DPAINT_ERASE) {
- value[index] *= (1.0f - strength);
- if (value[index] < 0.0f) value[index] = 0.0f;
- }
- else {
- if (value[index] < depth) value[index] = depth;
- }
+ if (surface->depth_clamp) {
+ CLAMP(depth, 0.0f - surface->depth_clamp, surface->depth_clamp);
}
- /* vertex weight group surface */
- else if (surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) {
- float *value = (float*)sData->type_data;
- if (brush->flags & MOD_DPAINT_ERASE) {
- value[index] *= (1.0f - strength);
- if (value[index] < 0.0f) value[index] = 0.0f;
- }
- else {
- if (value[index] < strength) value[index] = strength;
- }
+ if (brush->flags & MOD_DPAINT_ERASE) {
+ value[index] *= (1.0f - strength);
+ if (value[index] < 0.0f) value[index] = 0.0f;
}
- /* wave surface */
- else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
- if (brush->wave_clamp) {
- CLAMP(depth, 0.0f-brush->wave_clamp, brush->wave_clamp);
- }
-
- dynamicPaint_mixWaveHeight(&((PaintWavePoint*)sData->type_data)[index],
- brush, 0.0f-depth);
+ else {
+ if (value[index] < depth) value[index] = depth;
}
+ }
+ /* vertex weight group surface */
+ else if (surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) {
+ float *value = (float *)sData->type_data;
- /* doing velocity based painting */
- if (sData->bData->brush_velocity) {
- sData->bData->brush_velocity[index*4+3] *= influence;
+ if (brush->flags & MOD_DPAINT_ERASE) {
+ value[index] *= (1.0f - strength);
+ if (value[index] < 0.0f) value[index] = 0.0f;
+ }
+ else {
+ if (value[index] < strength) value[index] = strength;
+ }
+ }
+ /* wave surface */
+ else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
+ if (brush->wave_clamp) {
+ CLAMP(depth, 0.0f - brush->wave_clamp, brush->wave_clamp);
}
+
+ dynamicPaint_mixWaveHeight(&((PaintWavePoint *)sData->type_data)[index],
+ brush, 0.0f - depth);
+ }
+
+ /* doing velocity based painting */
+ if (sData->bData->brush_velocity) {
+ sData->bData->brush_velocity[index * 4 + 3] *= influence;
+ }
}
/* checks whether surface and brush bounds intersect depending on brush type */
@@ -3081,17 +3081,17 @@ static void dynamicPaint_brushMeshCalculateVelocity(Scene *scene, Object *ob, Dy
numOfVerts_c = dm_c->getNumVerts(dm_c);
mvert_c = dm_p->getVertArray(dm_c);
- (*brushVel) = (struct Vec3f *) MEM_mallocN(numOfVerts_c*sizeof(Vec3f), "Dynamic Paint brush velocity");
+ (*brushVel) = (struct Vec3f *) MEM_mallocN(numOfVerts_c * sizeof(Vec3f), "Dynamic Paint brush velocity");
if (!(*brushVel)) return;
/* if mesh is constructive -> num of verts has changed,
- * only use current frame derived mesh */
+ * only use current frame derived mesh */
if (numOfVerts_p != numOfVerts_c)
mvert_p = mvert_c;
/* calculate speed */
#pragma omp parallel for schedule(static)
- for (i=0; i<numOfVerts_c; i++) {
+ for (i = 0; i < numOfVerts_c; i++) {
float p1[3], p2[3];
copy_v3_v3(p1, mvert_p[i].co);
@@ -3101,7 +3101,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(Scene *scene, Object *ob, Dy
mul_m4_v3(ob->obmat, p2);
sub_v3_v3v3((*brushVel)[i].v, p2, p1);
- mul_v3_fl((*brushVel)[i].v, 1.0f/timescale);
+ mul_v3_fl((*brushVel)[i].v, 1.0f / timescale);
}
dm_p->release(dm_p);
@@ -3139,12 +3139,12 @@ static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob,
mul_m4_v3(ob->obmat, cur_loc);
sub_v3_v3v3(brushVel->v, cur_loc, prev_loc);
- mul_v3_fl(brushVel->v, 1.0f/timescale);
+ mul_v3_fl(brushVel->v, 1.0f / timescale);
}
/*
-* Paint a brush object mesh to the surface
-*/
+ * Paint a brush object mesh to the surface
+ */
static int dynamicPaint_paintMesh(DynamicPaintSurface *surface,
DynamicPaintBrushSettings *brush,
Object *brushOb,
@@ -3178,9 +3178,9 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface,
numOfVerts = dm->getNumVerts(dm);
/* Transform collider vertices to global space
- * (Faster than transforming per surface point
- * coordinates and normals to object space) */
- for (ii=0; ii<numOfVerts; ii++) {
+ * (Faster than transforming per surface point
+ * coordinates and normals to object space) */
+ for (ii = 0; ii < numOfVerts; ii++) {
mul_m4_v3(brushOb->obmat, mvert[ii].co);
boundInsert(&mesh_bb, mvert[ii].co);
@@ -3196,7 +3196,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface,
}
if (brush->flags & MOD_DPAINT_PROX_PROJECT && brush->collision != MOD_DPAINT_COL_VOLUME) {
- mul_v3_fl(avg_brushNor, 1.0f/(float)numOfVerts);
+ mul_v3_fl(avg_brushNor, 1.0f / (float)numOfVerts);
/* instead of null vector use positive z */
if (!(MIN3(avg_brushNor[0], avg_brushNor[1], avg_brushNor[2])))
avg_brushNor[2] = 1.0f;
@@ -3205,316 +3205,318 @@ 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)) {
- int c_index;
- int total_cells = grid->dim[0]*grid->dim[1]*grid->dim[2];
-
- /* loop through space partitioning grid */
- for (c_index=0; c_index<total_cells; c_index++) {
- int id;
+ 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)) {
+ int c_index;
+ int total_cells = grid->dim[0] * grid->dim[1] * grid->dim[2];
+
+ /* loop through space partitioning grid */
+ for (c_index = 0; c_index < total_cells; c_index++) {
+ int id;
- /* check grid cell bounding box */
- if (!grid->s_num[c_index] || !meshBrush_boundsIntersect(&grid->bounds[c_index], &mesh_bb, brush, brush_radius))
- continue;
+ /* check grid cell bounding box */
+ if (!grid->s_num[c_index] || !meshBrush_boundsIntersect(&grid->bounds[c_index], &mesh_bb, brush, brush_radius))
+ continue;
- /* loop through cell points and process brush */
+ /* loop through cell points and process brush */
#pragma omp parallel for schedule(static)
- 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;
- float brushStrength = 0.0f; /* brush influence factor */
- float depth = 0.0f; /* brush intersection depth */
- float velocity_val = 0.0f;
-
- float paintColor[3] = {0.0f};
- int numOfHits = 0;
-
- /* for image sequence anti-aliasing, use gaussian factors */
- if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
- total_sample = gaussianTotal;
-
- /* Supersampling */
- for (ss=0; ss<samples; ss++) {
-
- float ray_start[3], ray_dir[3];
- float sample_factor = 0.0f;
- float sampleStrength = 0.0f;
- BVHTreeRayHit hit;
- BVHTreeNearest nearest;
- short hit_found = 0;
-
- /* volume sample */
- float volume_factor = 0.0f;
- /* proximity sample */
- float proximity_factor = 0.0f;
- float prox_colorband[4] = {0.0f};
- int inner_proximity = (brush->flags & MOD_DPAINT_INVERSE_PROX &&
- brush->collision == MOD_DPAINT_COL_VOLDIST);
-
- /* hit data */
- float hitCoord[3];
- int hitFace = -1;
- short hitQuad = 0;
-
- /* Supersampling factor */
+ 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;
+ float brushStrength = 0.0f; /* brush influence factor */
+ float depth = 0.0f; /* brush intersection depth */
+ float velocity_val = 0.0f;
+
+ float paintColor[3] = {0.0f};
+ int numOfHits = 0;
+
+ /* for image sequence anti-aliasing, use gaussian factors */
if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
- sample_factor = gaussianFactors[ss];
- else
- sample_factor = 1.0f;
-
- /* Get current sample position in world coordinates */
- copy_v3_v3(ray_start, bData->realCoord[bData->s_pos[index]+ss].v);
- copy_v3_v3(ray_dir, bData->bNormal[index].invNorm);
-
- /* a simple hack to minimize chance of ray leaks at identical ray <-> edge locations */
- add_v3_fl(ray_start, 0.001f);
-
- hit.index = -1;
- hit.dist = 9999;
- nearest.index = -1;
- nearest.dist = brush_radius * brush_radius; /* find_nearest uses squared distance */
-
- /* Check volume collision */
- if (brush->collision == 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) {
- /* 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 */
- int v1=mface[hit.index].v1, v2=mface[hit.index].v2, v3=mface[hit.index].v3, quad=(hit.no[0] == 1.0f);
- float dot;
-
- if (quad) {v2=mface[hit.index].v3; v3=mface[hit.index].v4;}
- normal_tri_v3(hit.no, mvert[v1].co, mvert[v2].co, mvert[v3].co);
- dot = ray_dir[0]*hit.no[0] + ray_dir[1]*hit.no[1] + ray_dir[2]*hit.no[2];
-
- /* If ray and hit face normal are facing same direction
- * hit point is inside a closed mesh. */
- if (dot>=0) {
- float dist = hit.dist;
- int f_index = hit.index;
-
- /* Also cast a ray in opposite direction to make sure
- * point is at least surrounded by two brush faces */
- negate_v3(ray_dir);
- hit.index = -1;
- hit.dist = 9999;
-
- BLI_bvhtree_ray_cast(treeData.tree, ray_start, ray_dir, 0.0f, &hit, mesh_faces_spherecast_dp, &treeData);
-
- if (hit.index != -1) {
- /* Add factor on supersample filter */
- volume_factor = 1.0f;
- hit_found = HIT_VOLUME;
-
- /* Mark hit info */
- madd_v3_v3v3fl(hitCoord, ray_start, ray_dir, hit.dist); /* Calculate final hit coordinates */
- depth += dist*sample_factor;
- hitFace = f_index;
- hitQuad = quad;
- }
- }
- }
+ total_sample = gaussianTotal;
- /* Check proximity collision */
- if ((brush->collision == MOD_DPAINT_COL_DIST || brush->collision == MOD_DPAINT_COL_VOLDIST) &&
- (!hit_found || (brush->flags & MOD_DPAINT_INVERSE_PROX)))
- {
- float proxDist = -1.0f;
- float hitCo[3];
- short hQuad;
- int face;
-
- /* if inverse prox and no hit found, skip this sample */
- if (inner_proximity && !hit_found) continue;
-
- /* If pure distance proximity, find the nearest point on the mesh */
- if (!(brush->flags & MOD_DPAINT_PROX_PROJECT)) {
- if (BLI_bvhtree_find_nearest(treeData.tree, ray_start, &nearest, mesh_faces_nearest_point_dp, &treeData) != -1) {
- proxDist = sqrtf(nearest.dist);
- copy_v3_v3(hitCo, nearest.co);
- hQuad = (nearest.no[0] == 1.0f);
- face = nearest.index;
+ /* Supersampling */
+ for (ss = 0; ss < samples; ss++) {
+
+ float ray_start[3], ray_dir[3];
+ float sample_factor = 0.0f;
+ float sampleStrength = 0.0f;
+ BVHTreeRayHit hit;
+ BVHTreeNearest nearest;
+ short hit_found = 0;
+
+ /* volume sample */
+ float volume_factor = 0.0f;
+ /* proximity sample */
+ float proximity_factor = 0.0f;
+ float prox_colorband[4] = {0.0f};
+ int inner_proximity = (brush->flags & MOD_DPAINT_INVERSE_PROX &&
+ brush->collision == MOD_DPAINT_COL_VOLDIST);
+
+ /* hit data */
+ float hitCoord[3];
+ int hitFace = -1;
+ short hitQuad = 0;
+
+ /* Supersampling factor */
+ if (samples > 1 && surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
+ sample_factor = gaussianFactors[ss];
+ else
+ sample_factor = 1.0f;
+
+ /* Get current sample position in world coordinates */
+ copy_v3_v3(ray_start, bData->realCoord[bData->s_pos[index] + ss].v);
+ copy_v3_v3(ray_dir, bData->bNormal[index].invNorm);
+
+ /* a simple hack to minimize chance of ray leaks at identical ray <-> edge locations */
+ add_v3_fl(ray_start, 0.001f);
+
+ hit.index = -1;
+ hit.dist = 9999;
+ nearest.index = -1;
+ nearest.dist = brush_radius * brush_radius; /* find_nearest uses squared distance */
+
+ /* Check volume collision */
+ if (brush->collision == 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) {
+ /* 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 */
+ int v1 = mface[hit.index].v1, v2 = mface[hit.index].v2, v3 = mface[hit.index].v3, quad = (hit.no[0] == 1.0f);
+ float dot;
+
+ if (quad) {v2 = mface[hit.index].v3; v3 = mface[hit.index].v4; }
+ normal_tri_v3(hit.no, mvert[v1].co, mvert[v2].co, mvert[v3].co);
+ dot = ray_dir[0] * hit.no[0] + ray_dir[1] * hit.no[1] + ray_dir[2] * hit.no[2];
+
+ /* If ray and hit face normal are facing same direction
+ * hit point is inside a closed mesh. */
+ if (dot >= 0) {
+ float dist = hit.dist;
+ int f_index = hit.index;
+
+ /* Also cast a ray in opposite direction to make sure
+ * point is at least surrounded by two brush faces */
+ negate_v3(ray_dir);
+ hit.index = -1;
+ hit.dist = 9999;
+
+ BLI_bvhtree_ray_cast(treeData.tree, ray_start, ray_dir, 0.0f, &hit, mesh_faces_spherecast_dp, &treeData);
+
+ if (hit.index != -1) {
+ /* Add factor on supersample filter */
+ volume_factor = 1.0f;
+ hit_found = HIT_VOLUME;
+
+ /* Mark hit info */
+ madd_v3_v3v3fl(hitCoord, ray_start, ray_dir, hit.dist); /* Calculate final hit coordinates */
+ depth += dist * sample_factor;
+ hitFace = f_index;
+ hitQuad = quad;
+ }
+ }
}
- }
- else { /* else cast a ray in defined projection direction */
- float proj_ray[3] = {0.0f};
- if (brush->ray_dir == MOD_DPAINT_RAY_CANVAS) {
- copy_v3_v3(proj_ray, bData->bNormal[index].invNorm);
- negate_v3(proj_ray);
- }
- else if (brush->ray_dir == MOD_DPAINT_RAY_BRUSH_AVG) {
- copy_v3_v3(proj_ray, avg_brushNor);
- }
- else { /* MOD_DPAINT_RAY_ZPLUS */
- proj_ray[2] = 1.0f;
+ /* Check proximity collision */
+ if ((brush->collision == MOD_DPAINT_COL_DIST || brush->collision == MOD_DPAINT_COL_VOLDIST) &&
+ (!hit_found || (brush->flags & MOD_DPAINT_INVERSE_PROX)))
+ {
+ float proxDist = -1.0f;
+ float hitCo[3];
+ short hQuad;
+ int face;
+
+ /* if inverse prox and no hit found, skip this sample */
+ if (inner_proximity && !hit_found) continue;
+
+ /* If pure distance proximity, find the nearest point on the mesh */
+ if (!(brush->flags & MOD_DPAINT_PROX_PROJECT)) {
+ if (BLI_bvhtree_find_nearest(treeData.tree, ray_start, &nearest, mesh_faces_nearest_point_dp, &treeData) != -1) {
+ proxDist = sqrtf(nearest.dist);
+ copy_v3_v3(hitCo, nearest.co);
+ hQuad = (nearest.no[0] == 1.0f);
+ face = nearest.index;
+ }
}
- hit.index = -1;
- 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) {
- proxDist = hit.dist;
- madd_v3_v3v3fl(hitCo, ray_start, proj_ray, hit.dist); /* Calculate final hit coordinates */
- hQuad = (hit.no[0] == 1.0f);
- face = hit.index;
+ else { /* else cast a ray in defined projection direction */
+ float proj_ray[3] = {0.0f};
+
+ if (brush->ray_dir == MOD_DPAINT_RAY_CANVAS) {
+ copy_v3_v3(proj_ray, bData->bNormal[index].invNorm);
+ negate_v3(proj_ray);
+ }
+ else if (brush->ray_dir == MOD_DPAINT_RAY_BRUSH_AVG) {
+ copy_v3_v3(proj_ray, avg_brushNor);
+ }
+ else { /* MOD_DPAINT_RAY_ZPLUS */
+ proj_ray[2] = 1.0f;
+ }
+ hit.index = -1;
+ 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) {
+ proxDist = hit.dist;
+ madd_v3_v3v3fl(hitCo, ray_start, proj_ray, hit.dist); /* Calculate final hit coordinates */
+ hQuad = (hit.no[0] == 1.0f);
+ face = hit.index;
+ }
}
- }
- /* If a hit was found, calculate required values */
- if (proxDist >= 0.0f && proxDist <= brush_radius) {
- proximity_factor = proxDist / brush_radius;
- CLAMP(proximity_factor, 0.0f, 1.0f);
- if (!inner_proximity)
- proximity_factor = 1.0f - proximity_factor;
+ /* If a hit was found, calculate required values */
+ if (proxDist >= 0.0f && proxDist <= brush_radius) {
+ proximity_factor = proxDist / brush_radius;
+ CLAMP(proximity_factor, 0.0f, 1.0f);
+ if (!inner_proximity)
+ proximity_factor = 1.0f - proximity_factor;
- hit_found = HIT_PROXIMITY;
+ hit_found = HIT_PROXIMITY;
- /* if no volume hit, use prox point face info */
- if (hitFace == -1) {
- copy_v3_v3(hitCoord, hitCo);
- hitQuad = hQuad;
- hitFace = face;
+ /* if no volume hit, use prox point face info */
+ if (hitFace == -1) {
+ copy_v3_v3(hitCoord, hitCo);
+ hitQuad = hQuad;
+ hitFace = face;
+ }
}
}
- }
- /* mix final sample strength depending on brush settings */
- if (hit_found) {
- /* if "negate volume" enabled, negate all factors within volume*/
- if (brush->collision == MOD_DPAINT_COL_VOLDIST && brush->flags & MOD_DPAINT_NEGATE_VOLUME) {
- volume_factor = 1.0f - volume_factor;
- if (inner_proximity)
- proximity_factor = 1.0f - proximity_factor;
- }
+ /* mix final sample strength depending on brush settings */
+ if (hit_found) {
+ /* if "negate volume" enabled, negate all factors within volume*/
+ if (brush->collision == MOD_DPAINT_COL_VOLDIST && brush->flags & MOD_DPAINT_NEGATE_VOLUME) {
+ volume_factor = 1.0f - volume_factor;
+ if (inner_proximity)
+ proximity_factor = 1.0f - proximity_factor;
+ }
- /* apply final sample depending on final hit type */
- if (hit_found == HIT_VOLUME) {
- sampleStrength = volume_factor;
- }
- else if (hit_found == HIT_PROXIMITY) {
- /* apply falloff curve to the proximity_factor */
- if (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP && do_colorband(brush->paint_ramp, (1.0f-proximity_factor), prox_colorband))
- proximity_factor = prox_colorband[3];
- else if (brush->proximity_falloff == MOD_DPAINT_PRFALL_CONSTANT)
- proximity_factor = (!inner_proximity || brush->flags & MOD_DPAINT_NEGATE_VOLUME) ? 1.0f : 0.0f;
- /* apply sample */
- sampleStrength = proximity_factor;
- }
+ /* apply final sample depending on final hit type */
+ if (hit_found == HIT_VOLUME) {
+ sampleStrength = volume_factor;
+ }
+ else if (hit_found == HIT_PROXIMITY) {
+ /* apply falloff curve to the proximity_factor */
+ if (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP && do_colorband(brush->paint_ramp, (1.0f - proximity_factor), prox_colorband))
+ proximity_factor = prox_colorband[3];
+ else if (brush->proximity_falloff == MOD_DPAINT_PRFALL_CONSTANT)
+ proximity_factor = (!inner_proximity || brush->flags & MOD_DPAINT_NEGATE_VOLUME) ? 1.0f : 0.0f;
+ /* apply sample */
+ sampleStrength = proximity_factor;
+ }
- sampleStrength *= sample_factor;
- }
- else continue;
-
- /* velocity brush, only do on main sample */
- if (brush->flags & MOD_DPAINT_USES_VELOCITY && ss==0 && brushVelocity) {
- int v1, v2, v3;
- float weights[4];
- float brushPointVelocity[3];
- float velocity[3];
-
- if (!hitQuad) {
- v1 = mface[hitFace].v1;
- v2 = mface[hitFace].v2;
- v3 = mface[hitFace].v3;
- }
- else {
- v1 = mface[hitFace].v2;
- v2 = mface[hitFace].v3;
- v3 = mface[hitFace].v4;
+ sampleStrength *= sample_factor;
}
- /* calculate barycentric weights for hit point */
- interp_weights_face_v3(weights, mvert[v1].co, mvert[v2].co, mvert[v3].co, NULL, hitCoord);
+ else continue;
+
+ /* velocity brush, only do on main sample */
+ if (brush->flags & MOD_DPAINT_USES_VELOCITY && ss == 0 && brushVelocity) {
+ int v1, v2, v3;
+ float weights[4];
+ float brushPointVelocity[3];
+ float velocity[3];
+
+ if (!hitQuad) {
+ v1 = mface[hitFace].v1;
+ v2 = mface[hitFace].v2;
+ v3 = mface[hitFace].v3;
+ }
+ else {
+ v1 = mface[hitFace].v2;
+ v2 = mface[hitFace].v3;
+ v3 = mface[hitFace].v4;
+ }
+ /* calculate barycentric weights for hit point */
+ interp_weights_face_v3(weights, mvert[v1].co, mvert[v2].co, mvert[v3].co, NULL, hitCoord);
- /* simple check based on brush surface velocity,
- * todo: perhaps implement something that handles volume movement as well */
+ /* simple check based on brush surface velocity,
+ * todo: perhaps implement something that handles volume movement as well */
- /* interpolate vertex speed vectors to get hit point velocity */
- interp_v3_v3v3v3(brushPointVelocity,
- brushVelocity[v1].v,
- brushVelocity[v2].v,
- brushVelocity[v3].v, weights);
-
- /* substract canvas point velocity */
- if (bData->velocity) {
- sub_v3_v3v3(velocity, brushPointVelocity, bData->velocity[index].v);
- }
- else {
- copy_v3_v3(velocity, brushPointVelocity);
- }
- velocity_val = len_v3(velocity);
-
- /* if brush has smudge enabled store brush velocity */
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT &&
- brush->flags & MOD_DPAINT_DO_SMUDGE && bData->brush_velocity) {
- copy_v3_v3(&bData->brush_velocity[index*4], velocity);
- mul_v3_fl(&bData->brush_velocity[index*4], 1.0f/velocity_val);
- bData->brush_velocity[index*4+3] = velocity_val;
+ /* interpolate vertex speed vectors to get hit point velocity */
+ interp_v3_v3v3v3(brushPointVelocity,
+ brushVelocity[v1].v,
+ brushVelocity[v2].v,
+ brushVelocity[v3].v, weights);
+
+ /* substract canvas point velocity */
+ if (bData->velocity) {
+ sub_v3_v3v3(velocity, brushPointVelocity, bData->velocity[index].v);
+ }
+ else {
+ copy_v3_v3(velocity, brushPointVelocity);
+ }
+ velocity_val = len_v3(velocity);
+
+ /* if brush has smudge enabled store brush velocity */
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT &&
+ brush->flags & MOD_DPAINT_DO_SMUDGE && bData->brush_velocity)
+ {
+ copy_v3_v3(&bData->brush_velocity[index * 4], velocity);
+ mul_v3_fl(&bData->brush_velocity[index * 4], 1.0f / velocity_val);
+ bData->brush_velocity[index * 4 + 3] = velocity_val;
+ }
}
- }
- /*
- * Process hit color and alpha
- */
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
- float sampleColor[3];
- float alpha_factor = 1.0f;
-
- sampleColor[0] = brush->r;
- sampleColor[1] = brush->g;
- sampleColor[2] = brush->b;
-
- /* Get material+textures color on hit point if required */
- if (brush_usesMaterial(brush, scene))
- dynamicPaint_doMaterialTex(bMats, sampleColor, &alpha_factor, brushOb, bData->realCoord[bData->s_pos[index]+ss].v, hitCoord, hitFace, hitQuad, brush->dm);
-
- /* Sample proximity colorband if required */
- if ((hit_found == HIT_PROXIMITY) && (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP)) {
- if (!(brush->flags & MOD_DPAINT_RAMP_ALPHA)) {
- sampleColor[0] = prox_colorband[0];
- sampleColor[1] = prox_colorband[1];
- sampleColor[2] = prox_colorband[2];
+ /*
+ * Process hit color and alpha
+ */
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
+ float sampleColor[3];
+ float alpha_factor = 1.0f;
+
+ sampleColor[0] = brush->r;
+ sampleColor[1] = brush->g;
+ sampleColor[2] = brush->b;
+
+ /* Get material+textures color on hit point if required */
+ if (brush_usesMaterial(brush, scene))
+ dynamicPaint_doMaterialTex(bMats, sampleColor, &alpha_factor, brushOb, bData->realCoord[bData->s_pos[index] + ss].v, hitCoord, hitFace, hitQuad, brush->dm);
+
+ /* Sample proximity colorband if required */
+ if ((hit_found == HIT_PROXIMITY) && (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP)) {
+ if (!(brush->flags & MOD_DPAINT_RAMP_ALPHA)) {
+ sampleColor[0] = prox_colorband[0];
+ sampleColor[1] = prox_colorband[1];
+ sampleColor[2] = prox_colorband[2];
+ }
}
+
+ /* Add AA sample */
+ paintColor[0] += sampleColor[0];
+ paintColor[1] += sampleColor[1];
+ paintColor[2] += sampleColor[2];
+ sampleStrength *= alpha_factor;
+ numOfHits++;
}
- /* Add AA sample */
- paintColor[0] += sampleColor[0];
- paintColor[1] += sampleColor[1];
- paintColor[2] += sampleColor[2];
- sampleStrength *= alpha_factor;
- numOfHits++;
- }
+ /* apply sample strength */
+ brushStrength += sampleStrength;
+ } // end supersampling
- /* apply sample strength */
- brushStrength += sampleStrength;
- } // end supersampling
+ /* if any sample was inside paint range */
+ if (brushStrength > 0.0f || depth > 0.0f) {
- /* if any sample was inside paint range */
- if (brushStrength > 0.0f || depth > 0.0f) {
+ /* apply supersampling results */
+ if (samples > 1) {
+ brushStrength /= total_sample;
+ }
+ CLAMP(brushStrength, 0.0f, 1.0f);
- /* apply supersampling results */
- if (samples > 1) {
- brushStrength /= total_sample;
- }
- CLAMP(brushStrength, 0.0f, 1.0f);
+ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
+ /* Get final pixel color and alpha */
+ paintColor[0] /= numOfHits;
+ paintColor[1] /= numOfHits;
+ paintColor[2] /= numOfHits;
+ }
+ /* get final object space depth */
+ else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE ||
+ surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
+ depth /= bData->bNormal[index].normal_scale * total_sample;
+ }
- if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
- /* Get final pixel color and alpha */
- paintColor[0] /= numOfHits;
- paintColor[1] /= numOfHits;
- paintColor[2] /= numOfHits;
+ dynamicPaint_updatePointData(surface, index, brush, paintColor, brushStrength, depth, velocity_val, timescale);
}
- /* get final object space depth */
- else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE ||
- surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
- depth /= bData->bNormal[index].normal_scale * total_sample;
- }
-
- dynamicPaint_updatePointData(surface, index, brush, paintColor, brushStrength, depth, velocity_val, timescale);
}
}
}
@@ -3533,14 +3535,14 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface,
}
/*
-* Paint a particle system to the surface
-*/
+ * Paint a particle system to the surface
+ */
static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
ParticleSystem *psys,
DynamicPaintBrushSettings *brush,
float timescale)
{
- ParticleSettings *part=psys->part;
+ ParticleSettings *part = psys->part;
ParticleData *pa = NULL;
PaintSurfaceData *sData = surface->data;
PaintBakeData *bData = sData->bData;
@@ -3551,8 +3553,8 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
int invalidParticles = 0;
int p = 0;
- float solidradius = surface->radius_scale*((brush->flags & MOD_DPAINT_PART_RAD) ? psys->part->size : brush->particle_radius);
- float smooth = brush->particle_smooth*surface->radius_scale;
+ float solidradius = surface->radius_scale * ((brush->flags & MOD_DPAINT_PART_RAD) ? psys->part->size : brush->particle_radius);
+ float smooth = brush->particle_smooth * surface->radius_scale;
float range = solidradius + smooth;
float particle_timestep = 0.04f * part->timetweak;
@@ -3562,21 +3564,21 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
if (psys->totpart < 1) return 1;
/*
- * Build a kd-tree to optimize distance search
- */
- tree= BLI_kdtree_new(psys->totpart);
+ * Build a kd-tree to optimize distance search
+ */
+ tree = BLI_kdtree_new(psys->totpart);
/* loop through particles and insert valid ones to the tree */
- for (p=0, pa=psys->particles; p<psys->totpart; p++, pa++) {
+ for (p = 0, pa = psys->particles; p < psys->totpart; p++, pa++) {
/* Proceed only if particle is active */
- if (pa->alive == PARS_UNBORN && (part->flag & PART_UNBORN)==0) continue;
- else if (pa->alive == PARS_DEAD && (part->flag & PART_DIED)==0) continue;
+ if (pa->alive == PARS_UNBORN && (part->flag & PART_UNBORN) == 0) continue;
+ else if (pa->alive == PARS_DEAD && (part->flag & PART_DIED) == 0) continue;
else if (pa->flag & PARS_UNEXIST) continue;
/* for debug purposes check if any NAN particle proceeds
- * For some reason they get past activity check, this should rule most of them out */
- if (isnan(pa->state.co[0]) || isnan(pa->state.co[1]) || isnan(pa->state.co[2])) {invalidParticles++;continue;}
+ * For some reason they get past activity check, this should rule most of them out */
+ if (isnan(pa->state.co[0]) || isnan(pa->state.co[1]) || isnan(pa->state.co[2])) {invalidParticles++; continue; }
/* make sure particle is close enough to canvas */
if (!boundIntersectPoint(&grid->grid_bounds, pa->state.co, range)) continue;
@@ -3603,13 +3605,13 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
/* only continue if particle bb is close enough to canvas bb */
if (boundsIntersectDist(&grid->grid_bounds, &part_bb, range)) {
int c_index;
- int total_cells = grid->dim[0]*grid->dim[1]*grid->dim[2];
+ int total_cells = grid->dim[0] * grid->dim[1] * grid->dim[2];
/* balance tree */
BLI_kdtree_balance(tree);
/* loop through space partitioning grid */
- for (c_index=0; c_index<total_cells; c_index++) {
+ for (c_index = 0; c_index < total_cells; c_index++) {
int id;
/* check cell bounding box */
@@ -3627,12 +3629,12 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
float radius = 0.0f;
float strength = 0.0f;
float velocity_val = 0.0f;
- int part_index= -1;
+ int part_index = -1;
/*
- * With predefined radius, there is no variation between particles.
- * It's enough to just find the nearest one.
- */
+ * With predefined radius, there is no variation between particles.
+ * It's enough to just find the nearest one.
+ */
{
KDTreeNearest nearest;
float smooth_range, part_solidradius;
@@ -3654,9 +3656,9 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
if (nearest.dist < radius) {
/* distances inside solid radius has maximum influence -> dist = 0 */
smooth_range = (nearest.dist - part_solidradius);
- if (smooth_range<0.0f) smooth_range=0.0f;
+ if (smooth_range < 0.0f) smooth_range = 0.0f;
/* do smoothness if enabled */
- if (smooth) smooth_range/=smooth;
+ if (smooth) smooth_range /= smooth;
strength = 1.0f - smooth_range;
disp_intersect = radius - nearest.dist;
@@ -3666,20 +3668,20 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
/* If using random per particle radius and closest particle didn't give max influence */
if (brush->flags & MOD_DPAINT_PART_RAD && strength < 1.0f && psys->part->randsize > 0.0f) {
/*
- * If we use per particle radius, we have to sample all particles
- * within max radius range
- */
+ * If we use per particle radius, we have to sample all particles
+ * within max radius range
+ */
KDTreeNearest *nearest;
int n, particles = 0;
- float smooth_range = smooth * (1.0f-strength), dist;
+ float smooth_range = smooth * (1.0f - strength), dist;
/* calculate max range that can have particles with higher influence than the nearest one */
- float max_range = smooth - strength*smooth + solidradius;
+ float max_range = smooth - strength * smooth + solidradius;
particles = BLI_kdtree_range_search(tree, max_range, bData->realCoord[bData->s_pos[index]].v, NULL, &nearest);
/* Find particle that produces highest influence */
- for (n=0; n<particles; n++) {
+ for (n = 0; n < particles; n++) {
ParticleData *pa = psys->particles + nearest[n].index;
float s_range;
@@ -3712,14 +3714,14 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
/* now calculate influence for this particle */
{
float rad = radius + smooth, str;
- if ((rad-dist) > disp_intersect) {
+ if ((rad - dist) > disp_intersect) {
disp_intersect = radius - dist;
radius = rad;
}
/* do smoothness if enabled */
- if (smooth_range<0.0f) smooth_range=0.0f;
- if (smooth) smooth_range/=smooth;
+ if (smooth_range < 0.0f) smooth_range = 0.0f;
+ if (smooth) smooth_range /= smooth;
str = 1.0f - smooth_range;
/* if influence is greater, use this one */
if (str > strength) strength = str;
@@ -3746,9 +3748,9 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
if ( (surface->type == MOD_DPAINT_SURFACE_T_PAINT) &&
(brush->flags & MOD_DPAINT_DO_SMUDGE && bData->brush_velocity))
{
- copy_v3_v3(&bData->brush_velocity[index*4], velocity);
- mul_v3_fl(&bData->brush_velocity[index*4], 1.0f/velocity_val);
- bData->brush_velocity[index*4+3] = velocity_val;
+ copy_v3_v3(&bData->brush_velocity[index * 4], velocity);
+ mul_v3_fl(&bData->brush_velocity[index * 4], 1.0f / velocity_val);
+ bData->brush_velocity[index * 4 + 3] = velocity_val;
}
}
@@ -3758,10 +3760,10 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface,
else if ( (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) ||
(surface->type == MOD_DPAINT_SURFACE_T_WAVE))
{
- /* get displace depth */
+ /* get displace depth */
disp_intersect = (1.0f - sqrtf(disp_intersect / radius)) * radius;
depth = (radius - disp_intersect) / bData->bNormal[index].normal_scale;
- if (depth<0.0f) depth = 0.0f;
+ if (depth < 0.0f) depth = 0.0f;
}
dynamicPaint_updatePointData(surface, index, brush, paintColor, strength, depth, velocity_val, timescale);
@@ -3789,8 +3791,8 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po
dynamicPaint_brushObjectCalculateVelocity(scene, brushOb, &brushVel, timescale);
/*
- * Loop through every surface point
- */
+ * Loop through every surface point
+ */
#pragma omp parallel for schedule(static)
for (index = 0; index < sData->total_points; index++) {
float distance = len_v3v3(pointCoord, bData->realCoord[bData->s_pos[index]].v);
@@ -3801,7 +3803,7 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po
/* Smooth range or color ramp */
if (brush->proximity_falloff == MOD_DPAINT_PRFALL_SMOOTH ||
- brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP) {
+ brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP) {
strength = 1.0f - distance / brush_radius;
CLAMP(strength, 0.0f, 1.0f);
@@ -3826,7 +3828,7 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po
}
/* color ramp */
- if (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP && do_colorband(brush->paint_ramp, (1.0f-strength), colorband))
+ if (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP && do_colorband(brush->paint_ramp, (1.0f - strength), colorband))
strength = colorband[3];
if (brush->flags & MOD_DPAINT_USES_VELOCITY) {
@@ -3843,16 +3845,17 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po
/* store brush velocity for smudge */
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT &&
- brush->flags & MOD_DPAINT_DO_SMUDGE && bData->brush_velocity) {
- copy_v3_v3(&bData->brush_velocity[index*4], velocity);
- mul_v3_fl(&bData->brush_velocity[index*4], 1.0f/velocity_val);
- bData->brush_velocity[index*4+3] = velocity_val;
+ brush->flags & MOD_DPAINT_DO_SMUDGE && bData->brush_velocity)
+ {
+ copy_v3_v3(&bData->brush_velocity[index * 4], velocity);
+ mul_v3_fl(&bData->brush_velocity[index * 4], 1.0f / velocity_val);
+ bData->brush_velocity[index * 4 + 3] = velocity_val;
}
}
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
if (brush->proximity_falloff == MOD_DPAINT_PRFALL_RAMP &&
- !(brush->flags & MOD_DPAINT_RAMP_ALPHA)) {
+ !(brush->flags & MOD_DPAINT_RAMP_ALPHA)) {
paintColor[0] = colorband[0];
paintColor[1] = colorband[1];
paintColor[2] = colorband[2];
@@ -3866,11 +3869,12 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po
}
}
else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE ||
- surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
- /* get displace depth */
- float disp_intersect = (1.0f - sqrtf((brush_radius-distance) / brush_radius)) * brush_radius;
+ surface->type == MOD_DPAINT_SURFACE_T_WAVE)
+ {
+ /* get displace depth */
+ float disp_intersect = (1.0f - sqrtf((brush_radius - distance) / brush_radius)) * brush_radius;
depth = (brush_radius - disp_intersect) / bData->bNormal[index].normal_scale;
- if (depth<0.0f) depth = 0.0f;
+ if (depth < 0.0f) depth = 0.0f;
}
dynamicPaint_updatePointData(surface, index, brush, paintColor, strength, depth, velocity_val, timescale);
}
@@ -3883,8 +3887,8 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po
/***************************** Dynamic Paint Step / Baking ******************************/
/*
-* Calculate current frame distances and directions for adjacency data
-*/
+ * Calculate current frame distances and directions for adjacency data
+ */
static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int force_init)
{
PaintSurfaceData *sData = surface->data;
@@ -3897,7 +3901,7 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int
if ((!surface_usesAdjDistance(surface) && !force_init) || !sData->adj_data) return;
if (bData->bNeighs) MEM_freeN(bData->bNeighs);
- bNeighs = bData->bNeighs = MEM_mallocN(sData->adj_data->total_targets*sizeof(struct BakeAdjPoint), "PaintEffectBake");
+ bNeighs = bData->bNeighs = MEM_mallocN(sData->adj_data->total_targets * sizeof(struct BakeAdjPoint), "PaintEffectBake");
if (!bNeighs) return;
#pragma omp parallel for schedule(static)
@@ -3905,8 +3909,8 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int
int i;
int numOfNeighs = adj_data->n_num[index];
- for (i=0; i<numOfNeighs; i++) {
- int n_index = adj_data->n_index[index]+i;
+ for (i = 0; i < numOfNeighs; i++) {
+ int n_index = adj_data->n_index[index] + i;
int t_index = adj_data->n_target[n_index];
/* dir vec */
@@ -3914,7 +3918,7 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int
/* dist */
bNeighs[n_index].dist = len_v3(bNeighs[n_index].dir);
/* normalize dir */
- if (bNeighs[n_index].dist) mul_v3_fl(bNeighs[n_index].dir, 1.0f/bNeighs[n_index].dist);
+ if (bNeighs[n_index].dist) mul_v3_fl(bNeighs[n_index].dir, 1.0f / bNeighs[n_index].dist);
}
}
@@ -3924,8 +3928,8 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int
int i;
int numOfNeighs = adj_data->n_num[index];
- for (i=0; i<numOfNeighs; i++) {
- bData->average_dist += (double)bNeighs[adj_data->n_index[index]+i].dist;
+ for (i = 0; i < numOfNeighs; i++) {
+ bData->average_dist += (double)bNeighs[adj_data->n_index[index] + i].dist;
}
}
bData->average_dist /= adj_data->total_targets;
@@ -3938,34 +3942,36 @@ void surface_determineForceTargetPoints(PaintSurfaceData *sData, int index, floa
int numOfNeighs = sData->adj_data->n_num[index];
int i;
- closest_id[0]=closest_id[1]= -1;
- closest_d[0]=closest_d[1]= -1.0f;
+ closest_id[0] = closest_id[1] = -1;
+ closest_d[0] = closest_d[1] = -1.0f;
/* find closest neigh */
- for (i=0; i<numOfNeighs; i++) {
- int n_index = sData->adj_data->n_index[index]+i;
+ for (i = 0; i < numOfNeighs; i++) {
+ int n_index = sData->adj_data->n_index[index] + i;
float dir_dot = dot_v3v3(bNeighs[n_index].dir, force);
- if (dir_dot>closest_d[0] && dir_dot>0.0f) {closest_d[0]=dir_dot; closest_id[0]=n_index;}
+ if (dir_dot > closest_d[0] && dir_dot > 0.0f) {closest_d[0] = dir_dot; closest_id[0] = n_index; }
}
if (closest_d[0] < 0.0f) return;
/* find second closest neigh */
- for (i=0; i<numOfNeighs; i++) {
- int n_index = sData->adj_data->n_index[index]+i;
+ for (i = 0; i < numOfNeighs; i++) {
+ int n_index = sData->adj_data->n_index[index] + i;
float dir_dot = dot_v3v3(bNeighs[n_index].dir, force);
float closest_dot = dot_v3v3(bNeighs[n_index].dir, bNeighs[closest_id[0]].dir);
if (n_index == closest_id[0]) continue;
/* only accept neighbor at "other side" of the first one in relation to force dir
- * so make sure angle between this and closest neigh is greater than first angle */
- if (dir_dot>closest_d[1] && closest_dot<closest_d[0] && dir_dot>0.0f) {closest_d[1]=dir_dot; closest_id[1]=n_index;}
+ * so make sure angle between this and closest neigh is greater than first angle */
+ if (dir_dot > closest_d[1] && closest_dot < closest_d[0] && dir_dot > 0.0f) {
+ closest_d[1] = dir_dot; closest_id[1] = n_index;
+ }
}
/* if two valid neighs found, calculate how force effect is divided
- * evenly between them (so that d[0]+d[1] = 1.0)*/
+ * evenly between them (so that d[0]+d[1] = 1.0)*/
if (closest_id[1] != -1) {
float force_proj[3];
float tangent[3];
@@ -3974,28 +3980,27 @@ void surface_determineForceTargetPoints(PaintSurfaceData *sData, int index, floa
float temp;
/* project force vector on the plane determined by these two neightbour points
- * and calculate relative force angle from it*/
+ * and calculate relative force angle from it*/
cross_v3_v3v3(tangent, bNeighs[closest_id[0]].dir, bNeighs[closest_id[1]].dir);
normalize_v3(tangent);
force_intersect = dot_v3v3(force, tangent);
- madd_v3_v3v3fl(force_proj, force, tangent, (-1.0f)*force_intersect);
+ madd_v3_v3v3fl(force_proj, force, tangent, (-1.0f) * force_intersect);
normalize_v3(force_proj);
/* get drip factor based on force dir in relation to angle between those neighbors */
temp = dot_v3v3(bNeighs[closest_id[0]].dir, force_proj);
CLAMP(temp, -1.0f, 1.0f); /* float precision might cause values > 1.0f that return infinite */
- closest_d[1] = acosf(temp)/neigh_diff;
+ closest_d[1] = acosf(temp) / neigh_diff;
closest_d[0] = 1.0f - closest_d[1];
/* and multiply depending on how deeply force intersects surface */
temp = fabs(force_intersect);
CLAMP(temp, 0.0f, 1.0f);
- closest_d[0] *= acosf(temp)/1.57079633f;
- closest_d[1] *= acosf(temp)/1.57079633f;
+ mul_v2_fl(closest_d, acosf(temp) / (float)M_PI_2);
}
else {
/* if only single neighbor, still linearize force intersection effect */
- closest_d[0] = 1.0f - acosf(closest_d[0])/1.57079633f;
+ closest_d[0] = 1.0f - acosf(closest_d[0]) / (float)M_PI_2;
}
}
@@ -4011,20 +4016,20 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface, DynamicPaintBrus
/* find max velocity */
for (index = 0; index < sData->total_points; index++) {
- float vel = bData->brush_velocity[index*4+3];
+ float vel = bData->brush_velocity[index * 4 + 3];
if (vel > max_velocity) max_velocity = vel;
}
steps = (int)ceil(max_velocity / bData->average_dist * timescale);
CLAMP(steps, 0, 12);
- eff_scale = brush->smudge_strength/(float)steps*timescale;
+ eff_scale = brush->smudge_strength / (float)steps * timescale;
- for (step=0; step<steps; step++) {
+ for (step = 0; step < steps; step++) {
for (index = 0; index < sData->total_points; index++) {
int i;
- PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
- float smudge_str = bData->brush_velocity[index*4+3];
+ PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
+ float smudge_str = bData->brush_velocity[index * 4 + 3];
/* force targets */
int closest_id[2];
@@ -4033,15 +4038,15 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface, DynamicPaintBrus
if (!smudge_str) continue;
/* get force affect points */
- surface_determineForceTargetPoints(sData, index, &bData->brush_velocity[index*4], closest_d, closest_id);
+ surface_determineForceTargetPoints(sData, index, &bData->brush_velocity[index * 4], closest_d, closest_id);
/* Apply movement towards those two points */
- for (i=0; i<2; i++) {
+ for (i = 0; i < 2; i++) {
int n_index = closest_id[i];
- if (n_index != -1 && closest_d[i]>0.0f) {
+ if (n_index != -1 && closest_d[i] > 0.0f) {
float dir_dot = closest_d[i], dir_factor;
- float speed_scale = eff_scale*smudge_str/bNeighs[n_index].dist;
- PaintPoint *ePoint = &((PaintPoint*)sData->type_data)[sData->adj_data->n_target[n_index]];
+ float speed_scale = eff_scale * smudge_str / bNeighs[n_index].dist;
+ PaintPoint *ePoint = &((PaintPoint *)sData->type_data)[sData->adj_data->n_target[n_index]];
/* just skip if angle is too extreme */
if (dir_dot <= 0.0f) continue;
@@ -4051,12 +4056,12 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface, DynamicPaintBrus
/* mix new color and alpha */
mixColors(ePoint->color, ePoint->alpha, pPoint->color, pPoint->alpha, dir_factor);
- ePoint->alpha = ePoint->alpha*(1.0f-dir_factor) + pPoint->alpha*dir_factor;
+ ePoint->alpha = ePoint->alpha * (1.0f - dir_factor) + pPoint->alpha * dir_factor;
/* smudge "wet layer" */
mixColors(ePoint->e_color, ePoint->e_alpha, pPoint->e_color, pPoint->e_alpha, dir_factor);
- ePoint->e_alpha = ePoint->e_alpha*(1.0f-dir_factor) + pPoint->e_alpha*dir_factor;
- pPoint->wetness *= (1.0f-dir_factor);
+ ePoint->e_alpha = ePoint->e_alpha * (1.0f - dir_factor) + pPoint->e_alpha * dir_factor;
+ pPoint->wetness *= (1.0f - dir_factor);
}
}
}
@@ -4064,13 +4069,13 @@ static void dynamicPaint_doSmudge(DynamicPaintSurface *surface, DynamicPaintBrus
}
/*
-* Prepare data required by effects for current frame.
-* Returns number of steps required
-*/
+ * Prepare data required by effects for current frame.
+ * Returns number of steps required
+ */
static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *scene, Object *ob, float **force, float timescale)
{
double average_force = 0.0f;
- float shrink_speed=0.0f, spread_speed=0.0f;
+ float shrink_speed = 0.0f, spread_speed = 0.0f;
float fastest_effect, avg_dist;
int steps;
PaintSurfaceData *sData = surface->data;
@@ -4084,7 +4089,7 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s
ListBase *effectors = pdInitEffectors(scene, ob, NULL, surface->effector_weights);
/* allocate memory for force data (dir vector + strength) */
- *force = MEM_mallocN(sData->total_points*4*sizeof(float), "PaintEffectForces");
+ *force = MEM_mallocN(sData->total_points * 4 * sizeof(float), "PaintEffectForces");
if (*force) {
#pragma omp parallel for schedule(static)
@@ -4102,34 +4107,34 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s
/* if global gravity is enabled, add it too */
if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY)
/* also divide by 10 to about match default grav
- * with default force strength (1.0) */
+ * with default force strength (1.0) */
madd_v3_v3fl(forc, scene->physics_settings.gravity,
- surface->effector_weights->global_gravity*surface->effector_weights->weight[0] / 10.f);
+ surface->effector_weights->global_gravity * surface->effector_weights->weight[0] / 10.f);
/* add surface point velocity and acceleration if enabled */
if (bData->velocity) {
if (surface->drip_vel)
- madd_v3_v3fl(forc, bData->velocity[index].v, surface->drip_vel*(-1.0f));
+ madd_v3_v3fl(forc, bData->velocity[index].v, surface->drip_vel * (-1.0f));
/* acceleration */
if (bData->prev_velocity && surface->drip_acc) {
float acc[3];
copy_v3_v3(acc, bData->velocity[index].v);
sub_v3_v3(acc, bData->prev_velocity[index].v);
- madd_v3_v3fl(forc, acc, surface->drip_acc*(-1.0f));
+ madd_v3_v3fl(forc, acc, surface->drip_acc * (-1.0f));
}
}
/* force strength */
- (*force)[index*4+3] = len_v3(forc);
+ (*force)[index * 4 + 3] = len_v3(forc);
/* normalize and copy */
- if ((*force)[index*4+3]) mul_v3_fl(forc, 1.0f/(*force)[index*4+3]);
- copy_v3_v3(&((*force)[index*4]), forc);
+ if ((*force)[index * 4 + 3]) mul_v3_fl(forc, 1.0f / (*force)[index * 4 + 3]);
+ copy_v3_v3(&((*force)[index * 4]), forc);
}
/* calculate average values (single thread) */
for (index = 0; index < sData->total_points; index++) {
- average_force += (*force)[index*4+3];
+ average_force += (*force)[index * 4 + 3];
}
average_force /= sData->total_points;
}
@@ -4137,7 +4142,7 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s
}
/* Get number of required steps using averate point distance
- * so that just a few ultra close pixels wont up substeps to max */
+ * so that just a few ultra close pixels wont up substeps to max */
/* adjust number of required substep by fastest active effect */
if (surface->effect & MOD_DPAINT_EFFECT_DO_SPREAD)
@@ -4146,9 +4151,9 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s
shrink_speed = surface->shrink_speed;
fastest_effect = MAX3(spread_speed, shrink_speed, average_force);
- avg_dist = bData->average_dist*CANVAS_REL_SIZE/getSurfaceDimension(sData);
+ avg_dist = bData->average_dist * CANVAS_REL_SIZE / getSurfaceDimension(sData);
- steps = (int)ceil(1.5f*EFF_MOVEMENT_PER_FRAME*fastest_effect/avg_dist*timescale);
+ steps = (int)ceil(1.5f * EFF_MOVEMENT_PER_FRAME * fastest_effect / avg_dist * timescale);
CLAMP(steps, 1, 20);
return steps;
@@ -4161,7 +4166,7 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force
{
PaintSurfaceData *sData = surface->data;
BakeAdjPoint *bNeighs = sData->bData->bNeighs;
- float distance_scale = getSurfaceDimension(sData)/CANVAS_REL_SIZE;
+ float distance_scale = getSurfaceDimension(sData) / CANVAS_REL_SIZE;
int index;
timescale /= steps;
@@ -4171,39 +4176,39 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force
* Spread Effect
*/
if (surface->effect & MOD_DPAINT_EFFECT_DO_SPREAD) {
- float eff_scale = distance_scale*EFF_MOVEMENT_PER_FRAME*surface->spread_speed*timescale;
+ float eff_scale = distance_scale * EFF_MOVEMENT_PER_FRAME * surface->spread_speed * timescale;
/* Copy current surface to the previous points array to read unmodified values */
- memcpy(prevPoint, sData->type_data, sData->total_points*sizeof(struct PaintPoint));
+ 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++) {
int i;
int numOfNeighs = sData->adj_data->n_num[index];
- PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
+ PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
/* Only reads values from the surface copy (prevPoint[]),
* so this one is thread safe */
/* Loop through neighboring points */
- for (i=0; i<numOfNeighs; i++) {
- int n_index = sData->adj_data->n_index[index]+i;
+ for (i = 0; i < numOfNeighs; i++) {
+ int n_index = sData->adj_data->n_index[index] + i;
float w_factor;
PaintPoint *ePoint = &prevPoint[sData->adj_data->n_target[n_index]];
- float speed_scale = (bNeighs[n_index].dist<eff_scale) ? 1.0f : eff_scale/bNeighs[n_index].dist;
- float color_mix = (MIN3(ePoint->wetness, pPoint->wetness, 1.0f))*0.25f*surface->color_spread_speed;
+ float speed_scale = (bNeighs[n_index].dist < eff_scale) ? 1.0f : eff_scale / bNeighs[n_index].dist;
+ float color_mix = (MIN3(ePoint->wetness, pPoint->wetness, 1.0f)) * 0.25f * surface->color_spread_speed;
/* do color mixing */
if (color_mix) mixColors(pPoint->e_color, pPoint->e_alpha, ePoint->e_color, ePoint->e_alpha, color_mix);
/* Only continue if surrounding point has higher wetness */
- if (ePoint->wetness<pPoint->wetness || ePoint->wetness<MIN_WETNESS) continue;
+ if (ePoint->wetness < pPoint->wetness || ePoint->wetness < MIN_WETNESS) continue;
- w_factor = 1.0f/numOfNeighs * MIN2(ePoint->wetness, 1.0f) * speed_scale;
+ w_factor = 1.0f / numOfNeighs *MIN2(ePoint->wetness, 1.0f) * speed_scale;
CLAMP(w_factor, 0.0f, 1.0f);
/* mix new wetness and color */
- pPoint->wetness = (1.0f-w_factor)*pPoint->wetness + w_factor*ePoint->wetness;
+ pPoint->wetness = (1.0f - w_factor) * pPoint->wetness + w_factor * ePoint->wetness;
pPoint->e_alpha = mixColors(pPoint->e_color, pPoint->e_alpha, ePoint->e_color, ePoint->e_alpha, w_factor);
}
}
@@ -4213,21 +4218,21 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force
* Shrink Effect
*/
if (surface->effect & MOD_DPAINT_EFFECT_DO_SHRINK) {
- float eff_scale = distance_scale*EFF_MOVEMENT_PER_FRAME*surface->shrink_speed*timescale;
+ float eff_scale = distance_scale * EFF_MOVEMENT_PER_FRAME * surface->shrink_speed * timescale;
/* Copy current surface to the previous points array to read unmodified values */
- memcpy(prevPoint, sData->type_data, sData->total_points*sizeof(struct PaintPoint));
+ 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++) {
int i;
int numOfNeighs = sData->adj_data->n_num[index];
float totalAlpha = 0.0f;
- PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
+ PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
- for (i=0; i<numOfNeighs; i++) {
- int n_index = sData->adj_data->n_index[index]+i;
- float speed_scale = (bNeighs[n_index].dist<eff_scale) ? 1.0f : eff_scale/bNeighs[n_index].dist;
+ for (i = 0; i < numOfNeighs; i++) {
+ int n_index = sData->adj_data->n_index[index] + i;
+ float speed_scale = (bNeighs[n_index].dist < eff_scale) ? 1.0f : eff_scale / bNeighs[n_index].dist;
PaintPoint *ePoint = &prevPoint[sData->adj_data->n_target[n_index]];
float a_factor, ea_factor, w_factor;
@@ -4238,13 +4243,13 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force
if (pPoint->alpha <= 0.0f && pPoint->e_alpha <= 0.0f && pPoint->wetness <= 0.0f) continue;
/* decrease factor for dry paint alpha */
- a_factor = (1.0f - ePoint->alpha)/numOfNeighs * (pPoint->alpha - ePoint->alpha) * speed_scale;
+ a_factor = (1.0f - ePoint->alpha) / numOfNeighs * (pPoint->alpha - ePoint->alpha) * speed_scale;
if (a_factor < 0.0f) a_factor = 0.0f;
/* decrease factor for wet paint alpha */
- ea_factor = (1.0f - ePoint->e_alpha)/8 * (pPoint->e_alpha - ePoint->e_alpha) * speed_scale;
+ ea_factor = (1.0f - ePoint->e_alpha) / 8 * (pPoint->e_alpha - ePoint->e_alpha) * speed_scale;
if (ea_factor < 0.0f) ea_factor = 0.0f;
/* decrease factor for paint wetness */
- w_factor = (1.0f - ePoint->wetness)/8 * (pPoint->wetness - ePoint->wetness) * speed_scale;
+ w_factor = (1.0f - ePoint->wetness) / 8 * (pPoint->wetness - ePoint->wetness) * speed_scale;
if (w_factor < 0.0f) w_factor = 0.0f;
pPoint->alpha -= a_factor;
@@ -4261,13 +4266,13 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force
* Drip Effect
*/
if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP && force) {
- float eff_scale = distance_scale*EFF_MOVEMENT_PER_FRAME*timescale/2.0f;
+ 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));
+ memcpy(prevPoint, sData->type_data, sData->total_points * sizeof(struct PaintPoint));
for (index = 0; index < sData->total_points; index++) {
int i;
- PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
+ PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
PaintPoint *pPoint_prev = &prevPoint[index];
int closest_id[2];
@@ -4279,15 +4284,15 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force
CLAMP(w_factor, 0.0f, 1.0f);
/* get force affect points */
- surface_determineForceTargetPoints(sData, index, &force[index*4], closest_d, closest_id);
+ surface_determineForceTargetPoints(sData, index, &force[index * 4], closest_d, closest_id);
/* Apply movement towards those two points */
- for (i=0; i<2; i++) {
+ for (i = 0; i < 2; i++) {
int n_index = closest_id[i];
- if (n_index != -1 && closest_d[i]>0.0f) {
+ if (n_index != -1 && closest_d[i] > 0.0f) {
float dir_dot = closest_d[i], dir_factor, a_factor;
- float speed_scale = eff_scale*force[index*4+3]/bNeighs[n_index].dist;
- PaintPoint *ePoint = &((PaintPoint*)sData->type_data)[sData->adj_data->n_target[n_index]];
+ float speed_scale = eff_scale * force[index * 4 + 3] / bNeighs[n_index].dist;
+ PaintPoint *ePoint = &((PaintPoint *)sData->type_data)[sData->adj_data->n_target[n_index]];
float e_wet = ePoint->wetness;
/* just skip if angle is too extreme */
@@ -4330,11 +4335,11 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale)
float wave_speed = surface->wave_speed;
double average_dist = 0.0f;
Bounds3D *mb = &sData->bData->mesh_bounds;
- float canvas_size = MAX3((mb->max[0]-mb->min[0]), (mb->max[1]-mb->min[1]), (mb->max[2]-mb->min[2]));
- float wave_scale = CANVAS_REL_SIZE/canvas_size;
+ float canvas_size = MAX3((mb->max[0] - mb->min[0]), (mb->max[1] - mb->min[1]), (mb->max[2] - mb->min[2]));
+ float wave_scale = CANVAS_REL_SIZE / canvas_size;
/* allocate memory */
- PaintWavePoint *prevPoint = MEM_mallocN(sData->total_points*sizeof(PaintWavePoint), "Temp previous points for wave simulation");
+ PaintWavePoint *prevPoint = MEM_mallocN(sData->total_points * sizeof(PaintWavePoint), "Temp previous points for wave simulation");
if (!prevPoint) return;
/* calculate average neigh distance (single thread) */
@@ -4342,30 +4347,30 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale)
int i;
int numOfNeighs = sData->adj_data->n_num[index];
- for (i=0; i<numOfNeighs; i++) {
- average_dist += bNeighs[sData->adj_data->n_index[index]+i].dist;
+ for (i = 0; i < numOfNeighs; i++) {
+ average_dist += bNeighs[sData->adj_data->n_index[index] + i].dist;
}
}
- average_dist *= wave_scale/sData->adj_data->total_targets;
+ average_dist *= wave_scale / sData->adj_data->total_targets;
/* determine number of required steps */
- steps = (int)ceil((WAVE_TIME_FAC*timescale*surface->wave_timescale) / (average_dist/wave_speed/3));
+ steps = (int)ceil((WAVE_TIME_FAC * timescale * surface->wave_timescale) / (average_dist / wave_speed / 3));
CLAMP(steps, 1, 20);
timescale /= steps;
/* apply simulation values for final timescale */
- dt = WAVE_TIME_FAC*timescale*surface->wave_timescale;
- min_dist = wave_speed*dt*1.5f;
- damp_factor = pow((1.0f-surface->wave_damping), timescale*surface->wave_timescale);
+ dt = WAVE_TIME_FAC * timescale * surface->wave_timescale;
+ min_dist = wave_speed * dt * 1.5f;
+ damp_factor = pow((1.0f - surface->wave_damping), timescale * surface->wave_timescale);
- for (ss=0; ss<steps; ss++) {
+ for (ss = 0; ss < steps; ss++) {
/* copy previous frame data */
- memcpy(prevPoint, sData->type_data, sData->total_points*sizeof(PaintWavePoint));
+ memcpy(prevPoint, sData->type_data, sData->total_points * sizeof(PaintWavePoint));
#pragma omp parallel for schedule(static)
for (index = 0; index < sData->total_points; index++) {
- PaintWavePoint *wPoint = &((PaintWavePoint*)sData->type_data)[index];
+ PaintWavePoint *wPoint = &((PaintWavePoint *)sData->type_data)[index];
int numOfNeighs = sData->adj_data->n_num[index];
float force = 0.0f, avg_dist = 0.0f, avg_height = 0.0f;
int numOfN = 0, numOfRN = 0;
@@ -4374,13 +4379,13 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale)
if (wPoint->state > 0) continue;
/* calculate force from surrounding points */
- for (i=0; i<numOfNeighs; i++) {
- int n_index = sData->adj_data->n_index[index]+i;
- float dist = bNeighs[n_index].dist*wave_scale;
+ for (i = 0; i < numOfNeighs; i++) {
+ int n_index = sData->adj_data->n_index[index] + i;
+ float dist = bNeighs[n_index].dist * wave_scale;
PaintWavePoint *tPoint = &prevPoint[sData->adj_data->n_target[n_index]];
- if (!dist || tPoint->state>0) continue;
- if (dist<min_dist) dist=min_dist;
+ if (!dist || tPoint->state > 0) continue;
+ if (dist < min_dist) dist = min_dist;
avg_dist += dist;
numOfN++;
@@ -4390,28 +4395,28 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale)
numOfRN++;
}
- force += (tPoint->height - wPoint->height) / (dist*dist);
+ force += (tPoint->height - wPoint->height) / (dist * dist);
}
- avg_dist = (numOfN) ? avg_dist/numOfN : 0.0f;
+ avg_dist = (numOfN) ? avg_dist / numOfN : 0.0f;
if (surface->flags & MOD_DPAINT_WAVE_OPEN_BORDERS &&
- sData->adj_data->flags[index] & ADJ_ON_MESH_EDGE) {
+ sData->adj_data->flags[index] & ADJ_ON_MESH_EDGE) {
/* if open borders, apply a fake height to keep waves going on */
- avg_height = (numOfRN) ? avg_height/numOfRN : 0.0f;
- wPoint->height = (dt*wave_speed*avg_height + wPoint->height*avg_dist) / (avg_dist + dt*wave_speed);
+ avg_height = (numOfRN) ? avg_height / numOfRN : 0.0f;
+ wPoint->height = (dt * wave_speed * avg_height + wPoint->height * avg_dist) / (avg_dist + dt * wave_speed);
}
/* else do wave eq */
else {
/* add force towards zero height based on average dist */
if (avg_dist)
- force += (0.0f - wPoint->height) * surface->wave_spring / (avg_dist*avg_dist) / 2.0f;
+ force += (0.0f - wPoint->height) * surface->wave_spring / (avg_dist * avg_dist) / 2.0f;
/* change point velocity */
- wPoint->velocity += force*dt * wave_speed*wave_speed;
+ wPoint->velocity += force * dt * wave_speed * wave_speed;
/* damping */
wPoint->velocity *= damp_factor;
/* and new height */
- wPoint->height += wPoint->velocity*dt;
+ wPoint->height += wPoint->velocity * dt;
}
}
}
@@ -4419,7 +4424,7 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale)
/* reset state */
#pragma omp parallel for schedule(static)
for (index = 0; index < sData->total_points; index++) {
- PaintWavePoint *wPoint = &((PaintWavePoint*)sData->type_data)[index];
+ PaintWavePoint *wPoint = &((PaintWavePoint *)sData->type_data)[index];
/* if there wasnt any brush intersection, clear isect height */
if (wPoint->state == DPAINT_WAVE_NONE) {
wPoint->brush_isect = 0.0f;
@@ -4437,10 +4442,10 @@ static void dynamicPaint_surfacePreStep(DynamicPaintSurface *surface, float time
int index;
#pragma omp parallel for schedule(static)
- for (index=0; index<sData->total_points; index++) {
+ for (index = 0; index < sData->total_points; index++) {
/* Do drying dissolve effects */
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
- PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
+ PaintPoint *pPoint = &((PaintPoint *)sData->type_data)[index];
/* drying */
if (surface->flags & MOD_DPAINT_USE_DRYING) {
if (pPoint->wetness >= MIN_WETNESS) {
@@ -4448,10 +4453,10 @@ static void dynamicPaint_surfacePreStep(DynamicPaintSurface *surface, float time
float dry_ratio, f_color[4];
float p_wetness = pPoint->wetness;
VALUE_DISSOLVE(pPoint->wetness, surface->dry_speed, timescale, (surface->flags & MOD_DPAINT_DRY_LOG));
- if (pPoint->wetness<0.0f) pPoint->wetness=0.0f;
+ if (pPoint->wetness < 0.0f) pPoint->wetness = 0.0f;
if (pPoint->wetness < surface->color_dry_threshold) {
- dry_ratio = pPoint->wetness/p_wetness;
+ dry_ratio = pPoint->wetness / p_wetness;
/*
* Slowly "shift" paint from wet layer to dry layer as it drys:
@@ -4466,12 +4471,12 @@ static void dynamicPaint_surfacePreStep(DynamicPaintSurface *surface, float time
pPoint->e_alpha *= dry_ratio;
/* now calculate new alpha for dry layer that keeps final blended color unchanged */
- pPoint->alpha = (f_color[3] - pPoint->e_alpha)/(1.0f-pPoint->e_alpha);
+ pPoint->alpha = (f_color[3] - pPoint->e_alpha) / (1.0f - pPoint->e_alpha);
/* for each rgb component, calculate a new dry layer color that keeps the final blend color
* with these new alpha values. (wet layer color doesnt change)*/
if (pPoint->alpha) {
- for (i=0; i<3; i++) {
- pPoint->color[i] = (f_color[i]*f_color[3] - pPoint->e_color[i]*pPoint->e_alpha)/(pPoint->alpha*(1.0f-pPoint->e_alpha));
+ for (i = 0; i < 3; i++) {
+ pPoint->color[i] = (f_color[i] * f_color[3] - pPoint->e_color[i] * pPoint->e_alpha) / (pPoint->alpha * (1.0f - pPoint->e_alpha));
}
}
}
@@ -4501,10 +4506,10 @@ static void dynamicPaint_surfacePreStep(DynamicPaintSurface *surface, float time
}
/* dissolve for float types */
else if (surface->flags & MOD_DPAINT_DISSOLVE &&
- (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE ||
- surface->type == MOD_DPAINT_SURFACE_T_WEIGHT)) {
+ (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE ||
+ surface->type == MOD_DPAINT_SURFACE_T_WEIGHT)) {
- float *point = &((float*)sData->type_data)[index];
+ float *point = &((float *)sData->type_data)[index];
/* log or linear */
VALUE_DISSOLVE(*point, surface->diss_speed, timescale, (surface->flags & MOD_DPAINT_DISSOLVE_LOG));
if (*point < 0.0f) *point = 0.0f;
@@ -4526,17 +4531,17 @@ static int dynamicPaint_surfaceHasMoved(DynamicPaintSurface *surface, Object *ob
if (!bData->prev_verts) return 1;
/* matrix comparison */
- for (i=0; i<4; i++) {
+ for (i = 0; i < 4; i++) {
int j;
- for (j=0; j<4; j++)
- if (bData->prev_obmat[i][j] != ob->obmat[i][j]) return 1;
+ for (j = 0; j < 4; j++)
+ if (bData->prev_obmat[i][j] != ob->obmat[i][j]) return 1;
}
/* vertices */
#pragma omp parallel for schedule(static)
- for (i=0; i<numOfVerts; i++) {
+ for (i = 0; i < numOfVerts; i++) {
int j;
- for (j=0; j<3; j++)
+ for (j = 0; j < 3; j++)
if (bData->prev_verts[i].co[j] != mvert[i].co[j]) {
ret = 1;
break;
@@ -4585,18 +4590,18 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
/* get previous speed for accelertaion */
if (do_accel_data && bData->prev_velocity && bData->velocity)
- memcpy(bData->prev_velocity, bData->velocity, sData->total_points*sizeof(Vec3f));
+ memcpy(bData->prev_velocity, bData->velocity, sData->total_points * sizeof(Vec3f));
/* reset speed vectors */
if (do_velocity_data && bData->velocity && (bData->clear || !surface_moved))
- memset(bData->velocity, 0, sData->total_points*sizeof(Vec3f));
+ memset(bData->velocity, 0, sData->total_points * sizeof(Vec3f));
/* if previous data exists and mesh hasn't moved, no need to recalc */
if (!surface_moved)
return 1;
}
- canvas_verts = (struct Vec3f *) MEM_mallocN(canvasNumOfVerts*sizeof(struct Vec3f), "Dynamic Paint transformed canvas verts");
+ canvas_verts = (struct Vec3f *) MEM_mallocN(canvasNumOfVerts * sizeof(struct Vec3f), "Dynamic Paint transformed canvas verts");
if (!canvas_verts) return 0;
/* allocate memory if required */
@@ -4608,11 +4613,11 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
}
/* Init bdata */
- bData->bNormal = (struct PaintBakeNormal *) MEM_mallocN(sData->total_points*sizeof(struct PaintBakeNormal), "Dynamic Paint step data");
- bData->s_pos = MEM_mallocN(sData->total_points*sizeof(unsigned int), "Dynamic Paint bData s_pos");
- bData->s_num = MEM_mallocN(sData->total_points*sizeof(unsigned int), "Dynamic Paint bData s_num");
- bData->realCoord = (struct Vec3f *) MEM_mallocN(surface_totalSamples(surface)*sizeof(Vec3f), "Dynamic Paint point coords");
- bData->prev_verts = MEM_mallocN(canvasNumOfVerts*sizeof(MVert), "Dynamic Paint bData prev_verts");
+ bData->bNormal = (struct PaintBakeNormal *) MEM_mallocN(sData->total_points * sizeof(struct PaintBakeNormal), "Dynamic Paint step data");
+ bData->s_pos = MEM_mallocN(sData->total_points * sizeof(unsigned int), "Dynamic Paint bData s_pos");
+ bData->s_num = MEM_mallocN(sData->total_points * sizeof(unsigned int), "Dynamic Paint bData s_num");
+ bData->realCoord = (struct Vec3f *) MEM_mallocN(surface_totalSamples(surface) * sizeof(Vec3f), "Dynamic Paint point coords");
+ bData->prev_verts = MEM_mallocN(canvasNumOfVerts * sizeof(MVert), "Dynamic Paint bData prev_verts");
/* if any allocation failed, free everything */
if (!bData->bNormal || !bData->s_pos || !bData->s_num || !bData->realCoord || !canvas_verts) {
@@ -4629,20 +4634,20 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
}
if (do_velocity_data && !bData->velocity) {
- bData->velocity = (struct Vec3f *) MEM_callocN(sData->total_points*sizeof(Vec3f), "Dynamic Paint velocity");
+ bData->velocity = (struct Vec3f *) MEM_callocN(sData->total_points * sizeof(Vec3f), "Dynamic Paint velocity");
}
if (do_accel_data && !bData->prev_velocity) {
- bData->prev_velocity = (struct Vec3f *) MEM_mallocN(sData->total_points*sizeof(Vec3f), "Dynamic Paint prev velocity");
+ bData->prev_velocity = (struct Vec3f *) MEM_mallocN(sData->total_points * sizeof(Vec3f), "Dynamic Paint prev velocity");
/* copy previous vel */
if (bData->prev_velocity && bData->velocity)
- memcpy(bData->prev_velocity, bData->velocity, sData->total_points*sizeof(Vec3f));
+ memcpy(bData->prev_velocity, bData->velocity, sData->total_points * sizeof(Vec3f));
}
/*
* Make a transformed copy of canvas derived mesh vertices to avoid recalculation.
*/
bData->mesh_bounds.valid = 0;
- for (index=0; index<canvasNumOfVerts; index++) {
+ for (index = 0; index < canvasNumOfVerts; index++) {
copy_v3_v3(canvas_verts[index].v, mvert[index].co);
mul_m4_v3(ob->obmat, canvas_verts[index].v);
boundInsert(&bData->mesh_bounds, canvas_verts[index].v);
@@ -4652,7 +4657,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; index<sData->total_points; index++) {
+ for (index = 0; index < sData->total_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);
@@ -4662,16 +4667,16 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
*/
if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
float n1[3], n2[3], n3[3];
- ImgSeqFormatData *f_data = (ImgSeqFormatData*)sData->format_data;
- PaintUVPoint *tPoint = &((PaintUVPoint*)f_data->uv_p)[index];
+ ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
+ PaintUVPoint *tPoint = &((PaintUVPoint *)f_data->uv_p)[index];
int ss;
bData->s_num[index] = (surface->flags & MOD_DPAINT_ANTIALIAS) ? 5 : 1;
bData->s_pos[index] = index * bData->s_num[index];
/* per sample coordinates */
- for (ss=0; ss<bData->s_num[index]; ss++) {
- interp_v3_v3v3v3(bData->realCoord[bData->s_pos[index]+ss].v,
+ for (ss = 0; ss < bData->s_num[index]; ss++) {
+ interp_v3_v3v3v3(bData->realCoord[bData->s_pos[index] + ss].v,
canvas_verts[tPoint->v1].v,
canvas_verts[tPoint->v2].v,
canvas_verts[tPoint->v3].v,
@@ -4684,7 +4689,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
normal_short_to_float_v3(n3, mvert[tPoint->v3].no);
interp_v3_v3v3v3(bData->bNormal[index].invNorm,
- n1, n2, n3, f_data->barycentricWeights[index*bData->s_num[index]].v);
+ n1, n2, n3, f_data->barycentricWeights[index * bData->s_num[index]].v);
mul_mat3_m4_v3(ob->obmat, bData->bNormal[index].invNorm);
normalize_v3(bData->bNormal[index].invNorm);
negate_v3(bData->bNormal[index].invNorm);
@@ -4692,8 +4697,8 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
int ss;
if (surface->flags & MOD_DPAINT_ANTIALIAS && adj_data) {
- bData->s_num[index] = adj_data->n_num[index]+1;
- bData->s_pos[index] = adj_data->n_index[index]+index;
+ bData->s_num[index] = adj_data->n_num[index] + 1;
+ bData->s_pos[index] = adj_data->n_index[index] + index;
}
else {
bData->s_num[index] = 1;
@@ -4701,14 +4706,14 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
}
/* calculate position for each sample */
- for (ss=0; ss<bData->s_num[index]; ss++) {
+ for (ss = 0; ss < bData->s_num[index]; ss++) {
/* first sample is always point center */
- copy_v3_v3(bData->realCoord[bData->s_pos[index]+ss].v, canvas_verts[index].v);
+ copy_v3_v3(bData->realCoord[bData->s_pos[index] + ss].v, canvas_verts[index].v);
if (ss > 0) {
- int t_index = adj_data->n_index[index]+(ss-1);
+ int t_index = adj_data->n_index[index] + (ss - 1);
/* get vertex position at 1/3 of each neigh edge */
- mul_v3_fl(bData->realCoord[bData->s_pos[index]+ss].v, 2.0f/3.0f);
- madd_v3_v3fl(bData->realCoord[bData->s_pos[index]+ss].v, canvas_verts[adj_data->n_target[t_index]].v, 1.0f/3.0f);
+ mul_v3_fl(bData->realCoord[bData->s_pos[index] + ss].v, 2.0f / 3.0f);
+ madd_v3_v3fl(bData->realCoord[bData->s_pos[index] + ss].v, canvas_verts[adj_data->n_target[t_index]].v, 1.0f / 3.0f);
}
}
@@ -4722,7 +4727,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
/* Prepare surface normal directional scale to easily convert
* brush intersection amount between global and local space */
if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE ||
- surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
+ surface->type == MOD_DPAINT_SURFACE_T_WAVE) {
float temp_nor[3];
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
normal_short_to_float_v3(temp_nor, mvert[index].no);
@@ -4730,14 +4735,14 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
}
else {
float n1[3], n2[3], n3[3];
- ImgSeqFormatData *f_data = (ImgSeqFormatData*)sData->format_data;
- PaintUVPoint *tPoint = &((PaintUVPoint*)f_data->uv_p)[index];
+ ImgSeqFormatData *f_data = (ImgSeqFormatData *)sData->format_data;
+ PaintUVPoint *tPoint = &((PaintUVPoint *)f_data->uv_p)[index];
normal_short_to_float_v3(n1, mvert[tPoint->v1].no);
normal_short_to_float_v3(n2, mvert[tPoint->v2].no);
normal_short_to_float_v3(n3, mvert[tPoint->v3].no);
interp_v3_v3v3v3(temp_nor,
- n1, n2, n3, f_data->barycentricWeights[index*bData->s_num[index]].v);
+ n1, n2, n3, f_data->barycentricWeights[index * bData->s_num[index]].v);
}
mul_v3_v3(temp_nor, ob->size);
@@ -4759,7 +4764,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc
/* Copy current frame vertices to check against in next frame */
copy_m4_m4(bData->prev_obmat, ob->obmat);
- memcpy(bData->prev_verts, mvert, canvasNumOfVerts*sizeof(MVert));
+ memcpy(bData->prev_verts, mvert, canvasNumOfVerts * sizeof(MVert));
bData->clear = 0;
@@ -4801,7 +4806,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
brushObj = NULL;
/* select object */
if (surface->brush_group) {
- if (go->ob) brushObj = go->ob;
+ if (go->ob) brushObj = go->ob;
}
else
brushObj = base->object;
@@ -4809,7 +4814,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
if (!brushObj) {
/* skip item */
if (surface->brush_group) go = go->next;
- else base= base->next;
+ else base = base->next;
continue;
}
@@ -4817,7 +4822,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
if (surface->brush_group)
go = go->next;
else
- base= base->next;
+ base = base->next;
/* check if target has an active dp modifier */
md = modifiers_findByType(brushObj, eModifierType_DynamicPaint);
@@ -4830,7 +4835,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
/* calculate brush speed vectors if required */
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT && brush->flags & MOD_DPAINT_DO_SMUDGE) {
- bData->brush_velocity = MEM_callocN(sData->total_points*sizeof(float)*4, "Dynamic Paint brush velocity");
+ bData->brush_velocity = MEM_callocN(sData->total_points * sizeof(float) * 4, "Dynamic Paint brush velocity");
/* init adjacency data if not already */
if (!sData->adj_data)
dynamicPaint_initAdjacencyData(surface, 1);
@@ -4850,8 +4855,8 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
/* Apply brush on the surface depending on it's collision type */
/* Particle brush: */
if (brush->collision == MOD_DPAINT_COL_PSYS) {
- if (brush && brush->psys && brush->psys->part && brush->psys->part->type==PART_EMITTER &&
- psys_check_enabled(brushObj, brush->psys)) {
+ if (brush && brush->psys && brush->psys->part && brush->psys->part->type == PART_EMITTER &&
+ psys_check_enabled(brushObj, brush->psys)) {
/* Paint a particle system */
BKE_animsys_evaluate_animdata(scene, &brush->psys->part->id, brush->psys->part->adt, BKE_scene_frame_get(scene), ADT_RECALC_ANIM);
@@ -4903,7 +4908,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
float *force = NULL;
/* Allocate memory for surface previous points to read unchanged values from */
- prevPoint = MEM_mallocN(sData->total_points*sizeof(struct PaintPoint), "PaintSurfaceDataCopy");
+ prevPoint = MEM_mallocN(sData->total_points * sizeof(struct PaintPoint), "PaintSurfaceDataCopy");
if (!prevPoint)
return setError(canvas, "Not enough free memory.");
@@ -4939,10 +4944,10 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje
/* don't do substeps for first frame */
if (surface->substeps && (frame != surface->start_frame)) {
int st;
- timescale = 1.0f / (surface->substeps+1);
+ timescale = 1.0f / (surface->substeps + 1);
for (st = 1; st <= surface->substeps; st++) {
- float subframe = ((float) st) / (surface->substeps+1);
+ float subframe = ((float) st) / (surface->substeps + 1);
if (!dynamicPaint_doStep(scene, cObject, surface, timescale, subframe)) return 0;
}
}
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 428dc176e1d..3e25281dd08 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -113,10 +113,10 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm)
#define USE_TESSFACE_SPEEDUP
BMesh *bm = tm->bm;
- BMLoop *(*looptris)[3]= NULL;
+ BMLoop *(*looptris)[3] = NULL;
BLI_array_declare(looptris);
BMIter iter, liter;
- BMFace *f;
+ BMFace *efa;
BMLoop *l;
int i = 0, j;
@@ -150,9 +150,9 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm)
#endif
- BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+ BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
/*don't consider two-edged faces*/
- if (f->len < 3) {
+ if (efa->len < 3) {
/* do nothing */
}
@@ -160,20 +160,18 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm)
/* no need to ensure the loop order, we know its ok */
- else if (f->len == 3) {
+ else if (efa->len == 3) {
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++) {
+ BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, j) {
looptris[i][j] = l;
}
i += 1;
}
- else if (f->len == 4) {
+ else if (efa->len == 4) {
BMLoop *ltmp[4];
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++) {
+ BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, j) {
ltmp[j] = l;
}
@@ -191,43 +189,43 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm)
#endif /* USE_TESSFACE_SPEEDUP */
else {
- ScanFillVert *v, *lastv=NULL, *firstv=NULL;
+ ScanFillVert *sf_vert, *sf_vert_last = NULL, *sf_vert_first = NULL;
/* ScanFillEdge *e; */ /* UNUSED */
- ScanFillFace *efa;
+ ScanFillFace *sf_tri;
int totfilltri;
BLI_scanfill_begin(&sf_ctx);
- /*scanfill time*/
- l = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, f);
- for (j=0; l; l=BM_iter_step(&liter), j++) {
+
+ /* scanfill time */
+ BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, j) {
/*mark order*/
BM_elem_index_set(l, j); /* set_loop */
- v = BLI_scanfill_vert_add(&sf_ctx, l->v->co);
- v->tmp.p = l;
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, l->v->co);
+ sf_vert->tmp.p = l;
- if (lastv) {
- /* e = */ BLI_scanfill_edge_add(&sf_ctx, lastv, v);
+ if (sf_vert_last) {
+ /* e = */ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert);
}
- lastv = v;
- if (firstv==NULL) firstv = v;
+ sf_vert_last = sf_vert;
+ if (sf_vert_first == NULL) sf_vert_first = sf_vert;
}
- /*complete the loop*/
- BLI_scanfill_edge_add(&sf_ctx, firstv, v);
+ /* complete the loop */
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_first, sf_vert);
- totfilltri = BLI_scanfill_calc_ex(&sf_ctx, FALSE, f->no);
+ totfilltri = BLI_scanfill_calc_ex(&sf_ctx, FALSE, efa->no);
BLI_array_grow_items(looptris, totfilltri);
- for (efa = sf_ctx.fillfacebase.first; efa; efa=efa->next) {
- BMLoop *l1= efa->v1->tmp.p;
- BMLoop *l2= efa->v2->tmp.p;
- BMLoop *l3= efa->v3->tmp.p;
+ for (sf_tri = sf_ctx.fillfacebase.first; sf_tri; sf_tri = sf_tri->next) {
+ BMLoop *l1 = sf_tri->v1->tmp.p;
+ BMLoop *l2 = sf_tri->v2->tmp.p;
+ BMLoop *l3 = sf_tri->v3->tmp.p;
- if (BM_elem_index_get(l1) > BM_elem_index_get(l2)) { SWAP(BMLoop*, l1, l2); }
- if (BM_elem_index_get(l2) > BM_elem_index_get(l3)) { SWAP(BMLoop*, l2, l3); }
- if (BM_elem_index_get(l1) > BM_elem_index_get(l2)) { SWAP(BMLoop*, l1, l2); }
+ if (BM_elem_index_get(l1) > BM_elem_index_get(l2)) { SWAP(BMLoop *, l1, l2); }
+ if (BM_elem_index_get(l2) > BM_elem_index_get(l3)) { SWAP(BMLoop *, l2, l3); }
+ if (BM_elem_index_get(l1) > BM_elem_index_get(l2)) { SWAP(BMLoop *, l1, l2); }
looptris[i][0] = l1;
looptris[i][1] = l2;
@@ -289,16 +287,16 @@ void BMEdit_UpdateLinkedCustomData(BMEditMesh *em)
void BMEdit_Free(BMEditMesh *em)
{
if (em->derivedFinal) {
- if (em->derivedFinal!=em->derivedCage) {
- em->derivedFinal->needsFree= 1;
+ if (em->derivedFinal != em->derivedCage) {
+ em->derivedFinal->needsFree = 1;
em->derivedFinal->release(em->derivedFinal);
}
- em->derivedFinal= NULL;
+ em->derivedFinal = NULL;
}
if (em->derivedCage) {
- em->derivedCage->needsFree= 1;
+ em->derivedCage->needsFree = 1;
em->derivedCage->release(em->derivedCage);
- em->derivedCage= NULL;
+ em->derivedCage = NULL;
}
if (em->looptris) MEM_freeN(em->looptris);
@@ -351,12 +349,11 @@ static void emDM_recalcTessellation(DerivedMesh *UNUSED(dm))
/* do nothing */
}
-static void emDM_foreachMappedVert(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3]),
- void *userData)
+static void emDM_foreachMappedVert(DerivedMesh *dm,
+ void (*func)(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3]),
+ void *userData)
{
- EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMVert *eve;
BMIter iter;
int i;
@@ -372,12 +369,11 @@ static void emDM_foreachMappedVert(
}
}
}
-static void emDM_foreachMappedEdge(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float v0co[3], const float v1co[3]),
- void *userData)
+static void emDM_foreachMappedEdge(DerivedMesh *dm,
+ void (*func)(void *userData, int index, const float v0co[3], const float v1co[3]),
+ void *userData)
{
- EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMEdge *eed;
BMIter iter;
int i;
@@ -386,25 +382,24 @@ static void emDM_foreachMappedEdge(
BM_mesh_elem_index_ensure(bmdm->tc->bm, BM_VERT);
- eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
- for (i=0; eed; i++, eed=BM_iter_step(&iter))
+ BM_ITER_MESH_INDEX (eed, &iter, bmdm->tc->bm, BM_EDGES_OF_MESH, i) {
func(userData, i,
- bmdm->vertexCos[BM_elem_index_get(eed->v1)],
- bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
+ bmdm->vertexCos[BM_elem_index_get(eed->v1)],
+ bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
+ }
}
else {
- eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
- for (i=0; eed; i++, eed=BM_iter_step(&iter))
+ BM_ITER_MESH_INDEX (eed, &iter, bmdm->tc->bm, BM_EDGES_OF_MESH, i) {
func(userData, i, eed->v1->co, eed->v2->co);
+ }
}
}
-static void emDM_drawMappedEdges(
- DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- void *userData)
+static void emDM_drawMappedEdges(DerivedMesh *dm,
+ DMSetDrawOptions setDrawOptions,
+ void *userData)
{
- EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMEdge *eed;
BMIter iter;
int i;
@@ -414,8 +409,7 @@ static void emDM_drawMappedEdges(
BM_mesh_elem_index_ensure(bmdm->tc->bm, BM_VERT);
glBegin(GL_LINES);
- eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
- for (i=0; eed; i++, eed=BM_iter_step(&iter)) {
+ BM_ITER_MESH_INDEX (eed, &iter, bmdm->tc->bm, BM_EDGES_OF_MESH, i) {
if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]);
glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
@@ -425,8 +419,7 @@ static void emDM_drawMappedEdges(
}
else {
glBegin(GL_LINES);
- eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
- for (i=0; eed; i++, eed=BM_iter_step(&iter)) {
+ BM_ITER_MESH_INDEX (eed, &iter, bmdm->tc->bm, BM_EDGES_OF_MESH, i) {
if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
glVertex3fv(eed->v1->co);
glVertex3fv(eed->v2->co);
@@ -435,21 +428,19 @@ static void emDM_drawMappedEdges(
glEnd();
}
}
-static void emDM_drawEdges(
- DerivedMesh *dm,
- int UNUSED(drawLooseEdges),
- int UNUSED(drawAllEdges))
+static void emDM_drawEdges(DerivedMesh *dm,
+ int UNUSED(drawLooseEdges),
+ int UNUSED(drawAllEdges))
{
emDM_drawMappedEdges(dm, NULL, NULL);
}
-static void emDM_drawMappedEdgesInterp(
- DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- DMSetDrawInterpOptions setDrawInterpOptions,
- void *userData)
+static void emDM_drawMappedEdgesInterp(DerivedMesh *dm,
+ DMSetDrawOptions setDrawOptions,
+ DMSetDrawInterpOptions setDrawInterpOptions,
+ void *userData)
{
- EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMEdge *eed;
BMIter iter;
int i;
@@ -459,8 +450,7 @@ static void emDM_drawMappedEdgesInterp(
BM_mesh_elem_index_ensure(bmdm->tc->bm, BM_VERT);
glBegin(GL_LINES);
- eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
- for (i=0; eed; i++, eed=BM_iter_step(&iter)) {
+ BM_ITER_MESH_INDEX (eed, &iter, bmdm->tc->bm, BM_EDGES_OF_MESH, i) {
if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
setDrawInterpOptions(userData, i, 0.0);
glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]);
@@ -472,8 +462,7 @@ static void emDM_drawMappedEdgesInterp(
}
else {
glBegin(GL_LINES);
- eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
- for (i=0; eed; i++, eed=BM_iter_step(&iter)) {
+ BM_ITER_MESH_INDEX (eed, &iter, bmdm->tc->bm, BM_EDGES_OF_MESH, i) {
if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
setDrawInterpOptions(userData, i, 0.0);
glVertex3fv(eed->v1->co);
@@ -487,7 +476,7 @@ static void emDM_drawMappedEdgesInterp(
static void emDM_drawUVEdges(DerivedMesh *dm)
{
- EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMEditMesh *em = bmdm->tc;
BMFace *efa;
BMIter iter;
@@ -523,9 +512,9 @@ static void emDM_drawUVEdges(DerivedMesh *dm)
glEnd();
}
-static void emDM__calcFaceCent(BMesh *bm, BMFace *efa, float cent[3], float (*vertexCos)[3])
+static void emDM__calcFaceCent(BMFace *efa, float cent[3], float (*vertexCos)[3])
{
- BMIter iter;
+ BMIter liter;
BMLoop *l;
int tot = 0;
@@ -534,30 +523,27 @@ static void emDM__calcFaceCent(BMesh *bm, BMFace *efa, float cent[3], float (*ve
/*simple (and stupid) median (average) based method :/ */
if (vertexCos) {
- l = BM_iter_new(&iter, bm, BM_LOOPS_OF_FACE, efa);
- for (; l; l=BM_iter_step(&iter)) {
+ BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
add_v3_v3(cent, vertexCos[BM_elem_index_get(l->v)]);
tot++;
}
}
else {
- l = BM_iter_new(&iter, bm, BM_LOOPS_OF_FACE, efa);
- for (; l; l=BM_iter_step(&iter)) {
+ BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
add_v3_v3(cent, l->v->co);
tot++;
}
}
- if (tot==0) return;
- mul_v3_fl(cent, 1.0f/(float)tot);
+ if (tot == 0) return;
+ mul_v3_fl(cent, 1.0f / (float)tot);
}
-static void emDM_foreachMappedFaceCenter(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float co[3], const float no[3]),
- void *userData)
+static void emDM_foreachMappedFaceCenter(DerivedMesh *dm,
+ void (*func)(void *userData, int index, const float co[3], const float no[3]),
+ void *userData)
{
- EditDerivedBMesh *bmdm= (EditDerivedBMesh *)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
float (*polyNos)[3] = NULL;
BMFace *efa;
BMIter iter;
@@ -573,18 +559,17 @@ static void emDM_foreachMappedFaceCenter(
}
BM_ITER_MESH_INDEX (efa, &iter, bmdm->tc->bm, BM_FACES_OF_MESH, i) {
- emDM__calcFaceCent(bmdm->tc->bm, efa, cent, bmdm->vertexCos);
+ emDM__calcFaceCent(efa, cent, bmdm->vertexCos);
func(userData, i, cent, polyNos ? polyNos[i] : efa->no);
}
}
-static void emDM_drawMappedFaces(
- DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- DMSetMaterial setMaterial,
- DMCompareDrawOptions compareDrawOptions,
- void *userData,
- DMDrawFlag flag)
+static void emDM_drawMappedFaces(DerivedMesh *dm,
+ DMSetDrawOptions setDrawOptions,
+ DMSetMaterial setMaterial,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData,
+ DMDrawFlag flag)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMFace *efa;
@@ -621,8 +606,8 @@ static void emDM_drawMappedFaces(
drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
draw_option = (!setDrawOptions ?
- DM_DRAW_OPTION_NORMAL :
- setDrawOptions(userData, BM_elem_index_get(efa)));
+ DM_DRAW_OPTION_NORMAL :
+ setDrawOptions(userData, BM_elem_index_get(efa)));
if (draw_option != DM_DRAW_OPTION_SKIP) {
const GLenum poly_type = GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */
if (draw_option == DM_DRAW_OPTION_STIPPLE) { /* enabled with stipple */
@@ -673,7 +658,7 @@ static void emDM_drawMappedFaces(
flush = (draw_option == DM_DRAW_OPTION_STIPPLE);
if (!skip_normals && !flush && (i != lasttri))
- flush |= efa->mat_nr != looptris[i + 1][0]->f->mat_nr; /* TODO, make this neater */
+ flush |= efa->mat_nr != looptris[i + 1][0]->f->mat_nr; /* TODO, make this neater */
if (flush) {
glEnd();
@@ -687,16 +672,16 @@ static void emDM_drawMappedFaces(
else {
BM_mesh_elem_index_ensure(bmdm->tc->bm, BM_FACE);
- for (i=0; i < tottri; i++) {
+ for (i = 0; i < tottri; i++) {
BMLoop **l = looptris[i];
int drawSmooth;
efa = l[0]->f;
- drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
+ drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
draw_option = (!setDrawOptions ?
- DM_DRAW_OPTION_NORMAL :
- setDrawOptions(userData, BM_elem_index_get(efa)));
+ DM_DRAW_OPTION_NORMAL :
+ setDrawOptions(userData, BM_elem_index_get(efa)));
if (draw_option != DM_DRAW_OPTION_SKIP) {
const GLenum poly_type = GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */
if (draw_option == DM_DRAW_OPTION_STIPPLE) { /* enabled with stipple */
@@ -752,7 +737,7 @@ static void emDM_drawMappedFaces(
if (flush) {
glEnd();
- poly_prev= GL_ZERO; /* force glBegin */
+ poly_prev = GL_ZERO; /* force glBegin */
glDisable(GL_POLYGON_STIPPLE);
}
@@ -782,12 +767,11 @@ static void bmdm_get_tri_tex(BMesh *bm, BMLoop **ls, MLoopUV *luv[3], MLoopCol *
}
-static void emDM_drawFacesTex_common(
- DerivedMesh *dm,
- DMSetDrawOptionsTex drawParams,
- DMSetDrawOptions drawParamsMapped,
- DMCompareDrawOptions compareDrawOptions,
- void *userData)
+static void emDM_drawFacesTex_common(DerivedMesh *dm,
+ DMSetDrawOptionsTex drawParams,
+ DMSetDrawOptions drawParamsMapped,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMEditMesh *em = bmdm->tc;
@@ -965,29 +949,26 @@ static void emDM_drawFacesTex_common(
glShadeModel(GL_FLAT);
}
-static void emDM_drawFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData)
+static void emDM_drawFacesTex(DerivedMesh *dm,
+ DMSetDrawOptionsTex setDrawOptions,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData)
{
emDM_drawFacesTex_common(dm, setDrawOptions, NULL, compareDrawOptions, userData);
}
-static void emDM_drawMappedFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptions setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData)
+static void emDM_drawMappedFacesTex(DerivedMesh *dm,
+ DMSetDrawOptions setDrawOptions,
+ DMCompareDrawOptions compareDrawOptions,
+ void *userData)
{
emDM_drawFacesTex_common(dm, NULL, setDrawOptions, compareDrawOptions, userData);
}
-static void emDM_drawMappedFacesGLSL(
- DerivedMesh *dm,
- DMSetMaterial setMaterial,
- DMSetDrawOptions setDrawOptions,
- void *userData)
+static void emDM_drawMappedFacesGLSL(DerivedMesh *dm,
+ DMSetMaterial setMaterial,
+ DMSetDrawOptions setDrawOptions,
+ void *userData)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMesh *bm = bmdm->tc->bm;
@@ -1010,26 +991,28 @@ static void emDM_drawMappedFacesGLSL(
glShadeModel(GL_SMOOTH);
BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE);
-#define PASSATTRIB(loop, eve, vert) { \
- if (attribs.totorco) { \
- float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \
- glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \
- } \
- for (b = 0; b < attribs.tottface; b++) { \
- MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPUV, b);\
- glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \
- } \
- for (b = 0; b < attribs.totmcol; b++) { \
- MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPCOL, b);\
- GLubyte _col[4]; \
- _col[0]= _cp->b; _col[1]= _cp->g; _col[2]= _cp->r; _col[3]= _cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \
- } \
- if (attribs.tottang) { \
- float *tang = attribs.tang.array[i*4 + vert]; \
- glVertexAttrib3fvARB(attribs.tang.gl_index, tang); \
- } \
- }
+#define PASSATTRIB(loop, eve, vert) { \
+ if (attribs.totorco) { \
+ float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \
+ glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \
+ } \
+ for (b = 0; b < attribs.tottface; b++) { \
+ MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \
+ CD_MLOOPUV, b); \
+ glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \
+ } \
+ for (b = 0; b < attribs.totmcol; b++) { \
+ MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \
+ CD_MLOOPCOL, b); \
+ GLubyte _col[4]; \
+ _col[0] = _cp->b; _col[1] = _cp->g; _col[2] = _cp->r; _col[3] = _cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \
+ } \
+ if (attribs.tottang) { \
+ float *tang = attribs.tang.array[i * 4 + vert]; \
+ glVertexAttrib3fvARB(attribs.tang.gl_index, tang); \
+ } \
+ } (void)0
for (i = 0, ltri = em->looptris[0]; i < em->tottri; i++, ltri += 3) {
@@ -1103,17 +1086,15 @@ static void emDM_drawMappedFacesGLSL(
#undef PASSATTRIB
}
-static void emDM_drawFacesGLSL(
- DerivedMesh *dm,
- int (*setMaterial)(int, void *attribs))
+static void emDM_drawFacesGLSL(DerivedMesh *dm,
+ int (*setMaterial)(int, void *attribs))
{
dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
}
-static void emDM_drawMappedFacesMat(
- DerivedMesh *dm,
- void (*setMaterial)(void *userData, int, void *attribs),
- int (*setFace)(void *userData, int index), void *userData)
+static void emDM_drawMappedFacesMat(DerivedMesh *dm,
+ void (*setMaterial)(void *userData, int, void *attribs),
+ int (*setFace)(void *userData, int index), void *userData)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMesh *bm = bmdm->tc->bm;
@@ -1133,32 +1114,34 @@ static void emDM_drawMappedFacesMat(
BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE);
-#define PASSATTRIB(loop, eve, vert) { \
- if (attribs.totorco) { \
- float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \
- if (attribs.orco.gl_texco) \
- glTexCoord3fv(orco); \
- else \
- glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \
- } \
- for (b = 0; b < attribs.tottface; b++) { \
- MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPUV, b);\
- if (attribs.tface[b].gl_texco) \
- glTexCoord2fv(_luv->uv); \
- else \
- glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \
- } \
- for (b = 0; b < attribs.totmcol; b++) { \
- MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, CD_MLOOPCOL, b);\
- GLubyte _col[4]; \
- _col[0]= _cp->b; _col[1]= _cp->g; _col[2]= _cp->r; _col[3]= _cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \
- } \
- if (attribs.tottang) { \
- float *tang = attribs.tang.array[i*4 + vert]; \
- glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
- } \
-}
+#define PASSATTRIB(loop, eve, vert) { \
+ if (attribs.totorco) { \
+ float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \
+ if (attribs.orco.gl_texco) \
+ glTexCoord3fv(orco); \
+ else \
+ glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \
+ } \
+ for (b = 0; b < attribs.tottface; b++) { \
+ MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \
+ CD_MLOOPUV, b); \
+ if (attribs.tface[b].gl_texco) \
+ glTexCoord2fv(_luv->uv); \
+ else \
+ glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \
+ } \
+ for (b = 0; b < attribs.totmcol; b++) { \
+ MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \
+ CD_MLOOPCOL, b); \
+ GLubyte _col[4]; \
+ _col[0] = _cp->b; _col[1] = _cp->g; _col[2] = _cp->r; _col[3] = _cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \
+ } \
+ if (attribs.tottang) { \
+ float *tang = attribs.tang.array[i * 4 + vert]; \
+ glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
+ } \
+ } (void)0
for (i = 0, ltri = em->looptris[0]; i < em->tottri; i++, ltri += 3) {
int drawSmooth;
@@ -1242,12 +1225,12 @@ static void emDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
if (bmdm->tc->bm->totvert) {
if (bmdm->vertexCos) {
BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) {
- DO_MINMAX(bmdm->vertexCos[i], min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, bmdm->vertexCos[i]);
}
}
else {
BM_ITER_MESH (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH) {
- DO_MINMAX(eve->co, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, eve->co);
}
}
}
@@ -1300,7 +1283,7 @@ static int bmvert_to_mvert(BMesh *bm, BMVert *ev, MVert *vert_r)
vert_r->flag = BM_vert_flag_to_mflag(ev);
if (CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
- vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, ev, CD_BWEIGHT)*255.0f);
+ vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, ev, CD_BWEIGHT) * 255.0f);
}
return 1;
@@ -1339,11 +1322,11 @@ static void emDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r)
e = BM_edge_at_index(bmdm->tc->bm, index); /* warning, does list loop, _not_ ideal */
if (CustomData_has_layer(&bm->edata, CD_BWEIGHT)) {
- edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, e, CD_BWEIGHT)*255.0f);
+ edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, e, CD_BWEIGHT) * 255.0f);
}
if (CustomData_has_layer(&bm->edata, CD_CREASE)) {
- edge_r->crease = (unsigned char) (BM_elem_float_data_get(&bm->edata, e, CD_CREASE)*255.0f);
+ edge_r->crease = (unsigned char) (BM_elem_float_data_get(&bm->edata, e, CD_CREASE) * 255.0f);
}
edge_r->flag = BM_edge_flag_to_mflag(e);
@@ -1382,23 +1365,34 @@ static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMesh *bm = bmdm->tc->bm;
- BMVert *ev;
+ BMVert *eve;
BMIter iter;
- int i;
+ const int has_bweight = CustomData_has_layer(&bm->vdata, CD_BWEIGHT);
- ev = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL);
- for (i = 0 ; ev; ev = BM_iter_step(&iter), ++vert_r, ++i) {
- if (bmdm->vertexCos)
- copy_v3_v3(vert_r->co, bmdm->vertexCos[i]);
- else
- copy_v3_v3(vert_r->co, ev->co);
+ if (bmdm->vertexCos) {
+ int i;
- normal_float_to_short_v3(vert_r->no, ev->no);
+ BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
+ copy_v3_v3(vert_r->co, bmdm->vertexCos[i]);
+ normal_float_to_short_v3(vert_r->no, eve->no);
+ vert_r->flag = BM_vert_flag_to_mflag(eve);
- vert_r->flag = BM_vert_flag_to_mflag(ev);
+ if (has_bweight) {
+ vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f);
+ }
+ vert_r++;
+ }
+ }
+ else {
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ copy_v3_v3(vert_r->co, eve->co);
+ normal_float_to_short_v3(vert_r->no, eve->no);
+ vert_r->flag = BM_vert_flag_to_mflag(eve);
- if (CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
- vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, ev, CD_BWEIGHT)*255.0f);
+ if (has_bweight) {
+ vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f);
+ }
+ vert_r++;
}
}
}
@@ -1406,26 +1400,28 @@ static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r)
static void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r)
{
BMesh *bm = ((EditDerivedBMesh *)dm)->tc->bm;
- BMEdge *ee;
+ BMEdge *eed;
BMIter iter;
- int has_bweight = CustomData_has_layer(&bm->edata, CD_BWEIGHT);
- int has_crease = CustomData_has_layer(&bm->edata, CD_CREASE);
+ const int has_bweight = CustomData_has_layer(&bm->edata, CD_BWEIGHT);
+ const int has_crease = CustomData_has_layer(&bm->edata, CD_CREASE);
BM_mesh_elem_index_ensure(bm, BM_VERT);
- for (ee = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); ee; ee = BM_iter_step(&iter), edge_r++) {
+ BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) {
if (has_bweight) {
- edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, ee, CD_BWEIGHT)*255.0f);
+ edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, eed, CD_BWEIGHT) * 255.0f);
}
if (has_crease) {
- edge_r->crease = (unsigned char) (BM_elem_float_data_get(&bm->edata, ee, CD_CREASE)*255.0f);
+ edge_r->crease = (unsigned char) (BM_elem_float_data_get(&bm->edata, eed, CD_CREASE) * 255.0f);
}
- edge_r->flag = BM_edge_flag_to_mflag(ee);
+ edge_r->flag = BM_edge_flag_to_mflag(eed);
- edge_r->v1 = BM_elem_index_get(ee->v1);
- edge_r->v2 = BM_elem_index_get(ee->v2);
+ edge_r->v1 = BM_elem_index_get(eed->v1);
+ edge_r->v2 = BM_elem_index_get(eed->v2);
+
+ edge_r++;
}
}
@@ -1456,19 +1452,18 @@ static void emDM_copyTessFaceArray(DerivedMesh *dm, MFace *face_r)
}
}
-
static void emDM_copyLoopArray(DerivedMesh *dm, MLoop *loop_r)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMesh *bm = bmdm->tc->bm;
BMIter iter, liter;
- BMFace *f;
+ BMFace *efa;
BMLoop *l;
BM_mesh_elem_index_ensure(bm, BM_VERT | BM_EDGE);
- BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
- BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
+ BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
+ BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
loop_r->v = BM_elem_index_get(l->v);
loop_r->e = BM_elem_index_get(l->e);
loop_r++;
@@ -1481,18 +1476,18 @@ static void emDM_copyPolyArray(DerivedMesh *dm, MPoly *poly_r)
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMesh *bm = bmdm->tc->bm;
BMIter iter;
- BMFace *f;
+ BMFace *efa;
int i;
i = 0;
- BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
- poly_r->flag = BM_face_flag_to_mflag(f);
+ BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
+ poly_r->flag = BM_face_flag_to_mflag(efa);
poly_r->loopstart = i;
- poly_r->totloop = f->len;
- poly_r->mat_nr = f->mat_nr;
+ poly_r->totloop = efa->len;
+ poly_r->mat_nr = efa->mat_nr;
poly_r++;
- i += f->len;
+ i += efa->len;
}
}
@@ -1586,52 +1581,51 @@ static void emDM_release(DerivedMesh *dm)
static CustomData *bmDm_getVertDataLayout(DerivedMesh *dm)
{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
return &bmdm->tc->bm->vdata;
}
static CustomData *bmDm_getEdgeDataLayout(DerivedMesh *dm)
{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
return &bmdm->tc->bm->edata;
}
static CustomData *bmDm_getTessFaceDataLayout(DerivedMesh *dm)
{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
return &bmdm->dm.faceData;
}
static CustomData *bmDm_getLoopDataLayout(DerivedMesh *dm)
{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
return &bmdm->tc->bm->ldata;
}
static CustomData *bmDm_getPolyDataLayout(DerivedMesh *dm)
{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+ EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
return &bmdm->tc->bm->pdata;
}
-DerivedMesh *getEditDerivedBMesh(
- BMEditMesh *em,
- Object *UNUSED(ob),
- float (*vertexCos)[3])
+DerivedMesh *getEditDerivedBMesh(BMEditMesh *em,
+ Object *UNUSED(ob),
+ float (*vertexCos)[3])
{
EditDerivedBMesh *bmdm = MEM_callocN(sizeof(*bmdm), __func__);
BMesh *bm = em->bm;
bmdm->tc = em;
- DM_init((DerivedMesh*)bmdm, DM_TYPE_EDITBMESH, em->bm->totvert,
- em->bm->totedge, em->tottri, em->bm->totloop, em->bm->totface);
+ DM_init((DerivedMesh *)bmdm, DM_TYPE_EDITBMESH, em->bm->totvert,
+ em->bm->totedge, em->tottri, em->bm->totloop, em->bm->totface);
bmdm->dm.getVertCos = emDM_getVertCos;
bmdm->dm.getMinMax = emDM_getMinMax;
@@ -1690,7 +1684,7 @@ DerivedMesh *getEditDerivedBMesh(
BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) {
DM_set_vert_data(&bmdm->dm, i, CD_MDEFORMVERT,
- CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT));
+ CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT));
}
}
@@ -1704,7 +1698,7 @@ DerivedMesh *getEditDerivedBMesh(
BM_mesh_elem_index_ensure(bm, BM_VERT);
bmdm->vertexNos = MEM_callocN(sizeof(*bmdm->vertexNos) * bm->totvert, "bmdm_vno");
- bmdm->polyNos = MEM_mallocN(sizeof(*bmdm->polyNos)*bm->totface, "bmdm_pno");
+ bmdm->polyNos = MEM_mallocN(sizeof(*bmdm->polyNos) * bm->totface, "bmdm_pno");
BM_ITER_MESH_INDEX (efa, &fiter, bm, BM_FACES_OF_MESH, i) {
BM_elem_index_set(efa, i); /* set_inline */
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index fda078f5c42..07c5d6d0329 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -520,7 +520,8 @@ static float char_width(Curve *cu, VChar *che, CharInfo *info)
}
}
-struct chartrans *BKE_vfont_to_curve(Main *bmain, Scene *scene, Object *ob, int mode){
+struct chartrans *BKE_vfont_to_curve(Main *bmain, Scene *scene, Object *ob, int mode)
+{
VFont *vfont, *oldvfont;
VFontData *vfd = NULL;
Curve *cu;
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index edde21ed7c8..8a49cba7649 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -51,11 +51,9 @@
#include "BLO_sys_types.h" // for intptr_t support
-#define GS(a) (*((short *)(a)))
-
/* GLOBALS */
-static GHash* gIcons = NULL;
+static GHash *gIcons = NULL;
static int gNextIconId = 1;
@@ -64,7 +62,7 @@ static int gFirstIconId = 1;
static void icon_free(void *val)
{
- Icon* icon = val;
+ Icon *icon = val;
if (icon) {
if (icon->drawinfo_free) {
@@ -84,15 +82,15 @@ static int get_next_free_id(void)
int startId = gFirstIconId;
/* if we haven't used up the int number range, we just return the next int */
- if (gNextIconId>=gFirstIconId)
+ if (gNextIconId >= gFirstIconId)
return gNextIconId++;
/* now we try to find the smallest icon id not stored in the gIcons hash */
- while (BLI_ghash_lookup(gIcons, SET_INT_IN_POINTER(startId)) && startId>=gFirstIconId)
+ while (BLI_ghash_lookup(gIcons, SET_INT_IN_POINTER(startId)) && startId >= gFirstIconId)
startId++;
/* if we found a suitable one that isn't used yet, return it */
- if (startId>=gFirstIconId)
+ if (startId >= gFirstIconId)
return startId;
/* fail */
@@ -105,7 +103,7 @@ void BKE_icons_init(int first_dyn_id)
gFirstIconId = first_dyn_id;
if (!gIcons)
- gIcons = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "icons_init gh");
+ gIcons = BLI_ghash_int_new("icons_init gh");
}
void BKE_icons_free(void)
@@ -115,14 +113,14 @@ void BKE_icons_free(void)
gIcons = NULL;
}
-struct PreviewImage* BKE_previewimg_create(void)
+PreviewImage *BKE_previewimg_create(void)
{
- PreviewImage* prv_img = NULL;
+ PreviewImage *prv_img = NULL;
int i;
prv_img = MEM_callocN(sizeof(PreviewImage), "img_prv");
- for (i=0; i<NUM_ICON_SIZES; ++i) {
+ for (i = 0; i < NUM_ICON_SIZES; ++i) {
prv_img->changed[i] = 1;
prv_img->changed_timestamp[i] = 0;
}
@@ -135,7 +133,7 @@ void BKE_previewimg_freefunc(void *link)
if (prv) {
int i;
- for (i=0; i<NUM_ICON_SIZES;++i) {
+ for (i = 0; i < NUM_ICON_SIZES; ++i) {
if (prv->rect[i]) {
MEM_freeN(prv->rect[i]);
prv->rect[i] = NULL;
@@ -153,14 +151,14 @@ void BKE_previewimg_free(PreviewImage **prv)
}
}
-struct PreviewImage* BKE_previewimg_copy(PreviewImage *prv)
+PreviewImage *BKE_previewimg_copy(PreviewImage *prv)
{
- PreviewImage* prv_img = NULL;
+ PreviewImage *prv_img = NULL;
int i;
if (prv) {
prv_img = MEM_dupallocN(prv);
- for (i=0; i < NUM_ICON_SIZES; ++i) {
+ for (i = 0; i < NUM_ICON_SIZES; ++i) {
if (prv->rect[i]) {
prv_img->rect[i] = MEM_dupallocN(prv->rect[i]);
}
@@ -175,62 +173,62 @@ struct PreviewImage* BKE_previewimg_copy(PreviewImage *prv)
void BKE_previewimg_free_id(ID *id)
{
if (GS(id->name) == ID_MA) {
- Material *mat = (Material*)id;
+ Material *mat = (Material *)id;
BKE_previewimg_free(&mat->preview);
}
else if (GS(id->name) == ID_TE) {
- Tex *tex = (Tex*)id;
+ Tex *tex = (Tex *)id;
BKE_previewimg_free(&tex->preview);
}
else if (GS(id->name) == ID_WO) {
- World *wo = (World*)id;
+ World *wo = (World *)id;
BKE_previewimg_free(&wo->preview);
}
else if (GS(id->name) == ID_LA) {
- Lamp *la = (Lamp*)id;
+ Lamp *la = (Lamp *)id;
BKE_previewimg_free(&la->preview);
}
else if (GS(id->name) == ID_IM) {
- Image *img = (Image*)id;
+ Image *img = (Image *)id;
BKE_previewimg_free(&img->preview);
}
else if (GS(id->name) == ID_BR) {
- Brush *br = (Brush*)id;
+ Brush *br = (Brush *)id;
BKE_previewimg_free(&br->preview);
}
}
-PreviewImage* BKE_previewimg_get(ID *id)
+PreviewImage *BKE_previewimg_get(ID *id)
{
- PreviewImage* prv_img = NULL;
+ PreviewImage *prv_img = NULL;
if (GS(id->name) == ID_MA) {
- Material *mat = (Material*)id;
+ Material *mat = (Material *)id;
if (!mat->preview) mat->preview = BKE_previewimg_create();
prv_img = mat->preview;
}
else if (GS(id->name) == ID_TE) {
- Tex *tex = (Tex*)id;
+ Tex *tex = (Tex *)id;
if (!tex->preview) tex->preview = BKE_previewimg_create();
prv_img = tex->preview;
}
else if (GS(id->name) == ID_WO) {
- World *wo = (World*)id;
+ World *wo = (World *)id;
if (!wo->preview) wo->preview = BKE_previewimg_create();
prv_img = wo->preview;
}
else if (GS(id->name) == ID_LA) {
- Lamp *la = (Lamp*)id;
+ Lamp *la = (Lamp *)id;
if (!la->preview) la->preview = BKE_previewimg_create();
prv_img = la->preview;
}
else if (GS(id->name) == ID_IM) {
- Image *img = (Image*)id;
+ Image *img = (Image *)id;
if (!img->preview) img->preview = BKE_previewimg_create();
prv_img = img->preview;
}
else if (GS(id->name) == ID_BR) {
- Brush *br = (Brush*)id;
+ Brush *br = (Brush *)id;
if (!br->preview) br->preview = BKE_previewimg_create();
prv_img = br->preview;
}
@@ -240,19 +238,19 @@ PreviewImage* BKE_previewimg_get(ID *id)
void BKE_icon_changed(int id)
{
- Icon* icon = NULL;
+ Icon *icon = NULL;
if (!id || G.background) return;
icon = BLI_ghash_lookup(gIcons, SET_INT_IN_POINTER(id));
if (icon) {
- PreviewImage *prv = BKE_previewimg_get((ID*)icon->obj);
+ PreviewImage *prv = BKE_previewimg_get((ID *)icon->obj);
/* all previews changed */
if (prv) {
int i;
- for (i=0; i<NUM_ICON_SIZES; ++i) {
+ for (i = 0; i < NUM_ICON_SIZES; ++i) {
prv->changed[i] = 1;
prv->changed_timestamp[i]++;
}
@@ -260,9 +258,9 @@ void BKE_icon_changed(int id)
}
}
-int BKE_icon_getid(struct ID* id)
+int BKE_icon_getid(struct ID *id)
{
- Icon* new_icon = NULL;
+ Icon *new_icon = NULL;
if (!id || G.background)
return 0;
@@ -291,9 +289,9 @@ int BKE_icon_getid(struct ID* id)
return id->icon_id;
}
-Icon* BKE_icon_get(int icon_id)
+Icon *BKE_icon_get(int icon_id)
{
- Icon* icon = NULL;
+ Icon *icon = NULL;
icon = BLI_ghash_lookup(gIcons, SET_INT_IN_POINTER(icon_id));
@@ -305,9 +303,9 @@ Icon* BKE_icon_get(int icon_id)
return icon;
}
-void BKE_icon_set(int icon_id, struct Icon* icon)
+void BKE_icon_set(int icon_id, struct Icon *icon)
{
- Icon* old_icon = NULL;
+ Icon *old_icon = NULL;
old_icon = BLI_ghash_lookup(gIcons, SET_INT_IN_POINTER(icon_id));
@@ -319,10 +317,10 @@ void BKE_icon_set(int icon_id, struct Icon* icon)
BLI_ghash_insert(gIcons, SET_INT_IN_POINTER(icon_id), icon);
}
-void BKE_icon_delete(struct ID* id)
+void BKE_icon_delete(struct ID *id)
{
- if (!id->icon_id) return; /* no icon defined for library object */
+ if (!id->icon_id) return; /* no icon defined for library object */
BLI_ghash_remove(gIcons, SET_INT_IN_POINTER(id->icon_id), NULL, icon_free);
id->icon_id = 0;
diff --git a/source/blender/blenkernel/intern/idcode.c b/source/blender/blenkernel/intern/idcode.c
index c3bd36348c6..c5d25276085 100644
--- a/source/blender/blenkernel/intern/idcode.c
+++ b/source/blender/blenkernel/intern/idcode.c
@@ -43,62 +43,62 @@ typedef struct {
const char *name, *plural;
int flags;
-#define IDTYPE_FLAGS_ISLINKABLE (1<<0)
+#define IDTYPE_FLAGS_ISLINKABLE (1 << 0)
} IDType;
/* plural need to match rna_main.c's MainCollectionDef */
-static IDType idtypes[]= {
- { ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE},
- { ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE},
- { ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE},
- { ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE},
- { ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE},
- { ID_GD, "GPencil", "grease_pencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */
- { ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE},
- { ID_ID, "ID", "ids", 0}, /* plural is fake */
- { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE},
- { ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */
- { ID_KE, "Key", "shape_keys", 0},
- { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
- { ID_LI, "Library", "libraries", 0},
- { ID_LS, "FreestyleLineStyle", "linestyles", IDTYPE_FLAGS_ISLINKABLE},
- { ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE},
- { ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE},
- { ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE},
- { ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE},
- { ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE},
- { ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE},
- { ID_PA, "ParticleSettings", "particles", 0},
- { ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE},
- { ID_SCR, "Screen", "screens", 0},
- { ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */
- { ID_SPK, "Speaker", "speakers", IDTYPE_FLAGS_ISLINKABLE},
- { ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE},
- { ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE},
- { ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE},
- { ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE},
- { ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE},
- { ID_WM, "WindowManager", "window_managers", 0},
- { ID_MC, "MovieClip", "movieclips", IDTYPE_FLAGS_ISLINKABLE},
+static IDType idtypes[] = {
+ { ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_GD, "GPencil", "grease_pencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */
+ { ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_ID, "ID", "ids", 0}, /* plural is fake */
+ { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */
+ { ID_KE, "Key", "shape_keys", 0},
+ { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_LI, "Library", "libraries", 0},
+ { ID_LS, "FreestyleLineStyle", "linestyles", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_PA, "ParticleSettings", "particles", 0},
+ { ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_SCR, "Screen", "screens", 0},
+ { ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */
+ { ID_SPK, "Speaker", "speakers", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_WM, "WindowManager", "window_managers", 0},
+ { ID_MC, "MovieClip", "movieclips", IDTYPE_FLAGS_ISLINKABLE},
};
-static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]);
+static int nidtypes = sizeof(idtypes) / sizeof(idtypes[0]);
static IDType *idtype_from_name(const char *str)
{
- int i= nidtypes;
+ int i = nidtypes;
while (i--)
- if (strcmp(str, idtypes[i].name)==0)
+ if (strcmp(str, idtypes[i].name) == 0)
return &idtypes[i];
return NULL;
}
static IDType *idtype_from_code(int code)
{
- int i= nidtypes;
+ int i = nidtypes;
while (i--)
- if (code==idtypes[i].code)
+ if (code == idtypes[i].code)
return &idtypes[i];
return NULL;
@@ -106,34 +106,34 @@ static IDType *idtype_from_code(int code)
int BKE_idcode_is_valid(int code)
{
- return idtype_from_code(code)?1:0;
+ return idtype_from_code(code) ? 1 : 0;
}
int BKE_idcode_is_linkable(int code)
{
- IDType *idt= idtype_from_code(code);
- return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0;
+ IDType *idt = idtype_from_code(code);
+ return idt ? (idt->flags & IDTYPE_FLAGS_ISLINKABLE) : 0;
}
const char *BKE_idcode_to_name(int code)
{
- IDType *idt= idtype_from_code(code);
+ IDType *idt = idtype_from_code(code);
- return idt?idt->name:NULL;
+ return idt ? idt->name : NULL;
}
int BKE_idcode_from_name(const char *name)
{
- IDType *idt= idtype_from_name(name);
+ IDType *idt = idtype_from_name(name);
- return idt?idt->code:0;
+ return idt ? idt->code : 0;
}
const char *BKE_idcode_to_name_plural(int code)
{
- IDType *idt= idtype_from_code(code);
+ IDType *idt = idtype_from_code(code);
- return idt?idt->plural:NULL;
+ return idt ? idt->plural : NULL;
}
int BKE_idcode_iter_step(int *index)
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index e3735cfd374..42c7869a365 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -299,7 +299,8 @@ static IDProperty *IDP_CopyArray(IDProperty *prop)
s_i = p_i[0]; p_i[0] = p_i[7]; p_i[7] = s_i; \
s_i = p_i[1]; p_i[1] = p_i[6]; p_i[6] = s_i; \
s_i = p_i[2]; p_i[2] = p_i[5]; p_i[5] = s_i; \
- s_i = p_i[3]; p_i[3] = p_i[4]; p_i[4] = s_i; }
+ s_i = p_i[3]; p_i[3] = p_i[4]; p_i[4] = s_i; \
+ } (void)0
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index aff1e65224b..797a2093729 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -505,6 +505,20 @@ void BKE_image_merge(Image *dest, Image *source)
}
}
+/* note, we could be clever and scale all imbuf's but since some are mipmaps its not so simple */
+void BKE_image_scale(Image *image, int width, int height)
+{
+ ImBuf *ibuf;
+ void *lock;
+
+ ibuf = BKE_image_acquire_ibuf(image, NULL, &lock);
+
+ IMB_scaleImBuf(ibuf, width, height);
+ ibuf->userflags |= IB_BITMAPDIRTY;
+
+ BKE_image_release_ibuf(image, lock);
+}
+
Image *BKE_image_load(const char *filepath)
{
Image *ima;
@@ -1729,7 +1743,8 @@ void BKE_makepicstring(char *string, const char *base, const char *relbase, int
}
/* used by sequencer too */
-struct anim *openanim(const char *name, int flags, int streamindex){
+struct anim *openanim(const char *name, int flags, int streamindex)
+{
struct anim *anim;
struct ImBuf *ibuf;
@@ -2177,7 +2192,8 @@ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra)
flag = IB_rect | IB_multilayer;
if (ima->flag & IMA_DO_PREMUL) flag |= IB_premul;
- ibuf = IMB_ibImageFromMemory((unsigned char *)ima->packedfile->data, ima->packedfile->size, flag, "<packed data>");
+ ibuf = IMB_ibImageFromMemory((unsigned char *)ima->packedfile->data,
+ ima->packedfile->size, flag, "<packed data>");
}
else {
flag = IB_rect | IB_multilayer | IB_metadata;
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index e36e7bf6cf3..f4ec223a2fe 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -1055,8 +1055,7 @@ static float *get_weights_array(Object *ob, char *vgroup)
weights = MEM_callocN(totvert * sizeof(float), "weights");
if (em) {
- eve = BM_iter_new(&iter, em->bm, BM_VERTS_OF_MESH, NULL);
- for (i = 0; eve; eve = BM_iter_step(&iter), i++) {
+ BM_ITER_MESH_INDEX (eve, &iter, em->bm, BM_VERTS_OF_MESH, i) {
dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT);
if (dvert) {
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index c6f2bb75858..6a69ffb474a 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -701,7 +701,7 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target,
if (defvert_find_weight(dvert, index) > 0.0f) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
- DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ minmax_v3v3_v3(cd.dmin, cd.dmax, vertexCos[a]);
}
}
@@ -736,7 +736,7 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target,
for (a = 0; a < numVerts; a++) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
- DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ minmax_v3v3_v3(cd.dmin, cd.dmax, vertexCos[a]);
}
for (a = 0; a < numVerts; a++) {
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 8075aaa21d3..7da0661fef6 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -368,7 +368,7 @@ void BKE_mball_texspace_calc(Object *ob)
data = dl->verts;
while (tot--) {
/* Also weird... but longer. From utildefines. */
- DO_MINMAX(data, min, max);
+ minmax_v3v3_v3(min, max, data);
data += 3;
}
dl = dl->next;
@@ -2397,7 +2397,7 @@ int BKE_mball_minmax(MetaBall *mb, float min[3], float max[3])
INIT_MINMAX(min, max);
for (ml = mb->elems.first; ml; ml = ml->next) {
- DO_MINMAX(&ml->x, min, max);
+ minmax_v3v3_v3(min, max, &ml->x);
}
return (mb->elems.first != NULL);
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 944f06cf740..7a5c43b28f8 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -2092,8 +2092,9 @@ void BKE_mesh_convert_mfaces_to_mpolys(Mesh *mesh)
mp->mat_nr = mf->mat_nr;
mp->flag = mf->flag;
-# define ML(v1, v2) {ml->v = mf->v1; ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v1, mf->v2)); ml++; j++; \
-}
+# define ML(v1, v2) { \
+ ml->v = mf->v1; ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v1, mf->v2)); ml++; j++; \
+ } (void)0
ML(v1, v2);
ML(v2, v3);
@@ -2287,21 +2288,39 @@ void create_vert_poly_map(MeshElemMap **map, int **mem,
/* Generates a map where the key is the vertex and the value is a list
* of edges that use that vertex as an endpoint. The lists are allocated
* from one memory pool. */
-void create_vert_edge_map(ListBase **map, IndexNode **mem, const MEdge *medge, const int totvert, const int totedge)
+void create_vert_edge_map(MeshElemMap **map, int **mem,
+ const MEdge *medge, int totvert, int totedge)
{
- int i, j;
- IndexNode *node = NULL;
-
- (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert edge map");
- (*mem) = MEM_callocN(sizeof(IndexNode) * totedge * 2, "vert edge map mem");
- node = *mem;
+ int i, *indices;
+
+ (*map) = MEM_callocN(sizeof(MeshElemMap) * totvert, "vert-edge map");
+ (*mem) = MEM_mallocN(sizeof(int) * totedge * 2, "vert-edge map mem");
+
+ /* Count number of edges for each vertex */
+ for (i = 0; i < totedge; i++) {
+ (*map)[medge[i].v1].count++;
+ (*map)[medge[i].v2].count++;
+ }
+
+ /* Assign indices mem */
+ indices = (*mem);
+ for (i = 0; i < totvert; i++) {
+ (*map)[i].indices = indices;
+ indices += (*map)[i].count;
+ /* Reset 'count' for use as index in last loop */
+ (*map)[i].count = 0;
+ }
+
/* Find the users */
- for (i = 0; i < totedge; ++i) {
- for (j = 0; j < 2; ++j, ++node) {
- node->index = i;
- BLI_addtail(&(*map)[((unsigned int *)(&medge[i].v1))[j]], node);
- }
+ for (i = 0; i < totedge; i++) {
+ const int v[2] = {medge[i].v1, medge[i].v2};
+
+ (*map)[v[0]].indices[(*map)[v[0]].count] = i;
+ (*map)[v[1]].indices[(*map)[v[1]].count] = i;
+
+ (*map)[v[0]].count++;
+ (*map)[v[1]].count++;
}
}
@@ -2391,8 +2410,8 @@ int BKE_mesh_recalc_tessellation(CustomData *fdata,
MFace *mface = NULL, *mf;
BLI_array_declare(mface);
ScanFillContext sf_ctx;
- ScanFillVert *v, *lastv, *firstv;
- ScanFillFace *f;
+ ScanFillVert *sf_vert, *sf_vert_last, *sf_vert_first;
+ ScanFillFace *sf_tri;
int *mface_orig_index = NULL;
BLI_array_declare(mface_orig_index);
int *mface_to_poly_map = NULL;
@@ -2485,21 +2504,21 @@ int BKE_mesh_recalc_tessellation(CustomData *fdata,
ml = mloop + mp->loopstart;
BLI_scanfill_begin(&sf_ctx);
- firstv = NULL;
- lastv = NULL;
+ sf_vert_first = NULL;
+ sf_vert_last = NULL;
for (j = 0; j < mp->totloop; j++, ml++) {
- v = BLI_scanfill_vert_add(&sf_ctx, mvert[ml->v].co);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, mvert[ml->v].co);
- v->keyindex = mp->loopstart + j;
+ sf_vert->keyindex = mp->loopstart + j;
- if (lastv)
- BLI_scanfill_edge_add(&sf_ctx, lastv, v);
+ if (sf_vert_last)
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert);
- if (!firstv)
- firstv = v;
- lastv = v;
+ if (!sf_vert_first)
+ sf_vert_first = sf_vert;
+ sf_vert_last = sf_vert;
}
- BLI_scanfill_edge_add(&sf_ctx, lastv, firstv);
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert_first);
totfilltri = BLI_scanfill_calc(&sf_ctx, FALSE);
if (totfilltri) {
@@ -2509,14 +2528,14 @@ int BKE_mesh_recalc_tessellation(CustomData *fdata,
BLI_array_grow_items(mface_orig_index, totfilltri);
}
- for (f = sf_ctx.fillfacebase.first; f; f = f->next, mf++) {
+ for (sf_tri = sf_ctx.fillfacebase.first; sf_tri; sf_tri = sf_tri->next, mf++) {
mface_to_poly_map[mface_index] = poly_index;
mf = &mface[mface_index];
/* set loop indices, transformed to vert indices later */
- mf->v1 = f->v1->keyindex;
- mf->v2 = f->v2->keyindex;
- mf->v3 = f->v3->keyindex;
+ mf->v1 = sf_tri->v1->keyindex;
+ mf->v2 = sf_tri->v2->keyindex;
+ mf->v3 = sf_tri->v3->keyindex;
mf->v4 = 0;
mf->mat_nr = mp->mat_nr;
@@ -2771,16 +2790,19 @@ static void mesh_calc_ngon_normal(MPoly *mpoly, MLoop *loopstart,
{
const int nverts = mpoly->totloop;
float const *v_prev = mvert[loopstart[nverts - 1].v].co;
- float const *v_curr = mvert[loopstart->v].co;
- float n[3] = {0.0f};
+ float const *v_curr;
int i;
+ zero_v3(normal);
+
/* Newell's Method */
- for (i = 0; i < nverts; v_prev = v_curr, v_curr = mvert[loopstart[++i].v].co) {
- add_newell_cross_v3_v3v3(n, v_prev, v_curr);
+ for (i = 0; i < nverts; i++) {
+ v_curr = mvert[loopstart[i].v].co;
+ add_newell_cross_v3_v3v3(normal, v_prev, v_curr);
+ v_prev = v_curr;
}
- if (UNLIKELY(normalize_v3_v3(normal, n) == 0.0f)) {
+ if (UNLIKELY(normalize_v3(normal) == 0.0f)) {
normal[2] = 1.0f; /* other axis set to 0.0 */
}
}
@@ -2818,16 +2840,19 @@ static void mesh_calc_ngon_normal_coords(MPoly *mpoly, MLoop *loopstart,
{
const int nverts = mpoly->totloop;
float const *v_prev = vertex_coords[loopstart[nverts - 1].v];
- float const *v_curr = vertex_coords[loopstart->v];
- float n[3] = {0.0f};
+ float const *v_curr;
int i;
+ zero_v3(normal);
+
/* Newell's Method */
- for (i = 0; i < nverts; v_prev = v_curr, v_curr = vertex_coords[loopstart[++i].v]) {
- add_newell_cross_v3_v3v3(n, v_prev, v_curr);
+ for (i = 0; i < nverts; i++) {
+ v_curr = vertex_coords[loopstart[i].v];
+ add_newell_cross_v3_v3v3(normal, v_prev, v_curr);
+ v_prev = v_curr;
}
- if (UNLIKELY(normalize_v3_v3(normal, n) == 0.0f)) {
+ if (UNLIKELY(normalize_v3(normal) == 0.0f)) {
normal[2] = 1.0f; /* other axis set to 0.0 */
}
}
@@ -3011,7 +3036,7 @@ int BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3])
int i = me->totvert;
MVert *mvert;
for (mvert = me->mvert; i--; mvert++) {
- DO_MINMAX(mvert->co, r_min, r_max);
+ minmax_v3v3_v3(r_min, r_max, mvert->co);
}
return (me->totvert != 0);
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 724d80afdd9..4e8b67bd55b 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -600,7 +600,7 @@ static void multires_copy_dm_grid(CCGElem *gridA, CCGElem *gridB, CCGKey *keyA,
}
/* Reallocate gpm->data at a lower resolution and copy values over
- from the original high-resolution data */
+ * from the original high-resolution data */
static void multires_grid_paint_mask_downsample(GridPaintMask *gpm, int level)
{
if (level < gpm->level) {
@@ -1056,12 +1056,10 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm
dispgrid = mdisp->disps;
/* if needed, reallocate multires paint mask */
- if (gpm && op == CALC_DISPLACEMENTS) {
- if (gpm->level < key.level) {
- gpm->level = key.level;
- MEM_freeN(gpm->data);
- gpm->data = MEM_callocN(sizeof(float) * key.grid_area, "gpm.data");
- }
+ if (gpm && gpm->level < key.level) {
+ gpm->level = key.level;
+ MEM_freeN(gpm->data);
+ gpm->data = MEM_callocN(sizeof(float) * key.grid_area, "gpm.data");
}
for (y = 0; y < gridSize; y++) {
@@ -1094,7 +1092,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm
break;
case CALC_DISPLACEMENTS:
/* Calculate displacement between new and old
- * grid points and convert to tangent space */
+ * grid points and convert to tangent space */
sub_v3_v3v3(disp, co, sco);
invert_m3(mat);
mul_v3_m3v3(data, mat, disp);
@@ -1483,7 +1481,7 @@ DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm,
}
/**** Old Multires code ****
-***************************/
+ ***************************/
/* Adapted from sculptmode.c */
void old_mdisps_bilinear(float out[3], float (*disps)[3], const int st, float u, float v)
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 96c62a32139..2b4fe72e8bb 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -82,8 +82,8 @@ void free_nlastrip(ListBase *strips, NlaStrip *strip)
return;
/* free child-strips */
- for (cs= strip->strips.first; cs; cs= csn) {
- csn= cs->next;
+ for (cs = strip->strips.first; cs; cs = csn) {
+ csn = cs->next;
free_nlastrip(&strip->strips, cs);
}
@@ -120,8 +120,8 @@ void free_nlatrack(ListBase *tracks, NlaTrack *nlt)
return;
/* free strips */
- for (strip= nlt->strips.first; strip; strip= stripn) {
- stripn= strip->next;
+ for (strip = nlt->strips.first; strip; strip = stripn) {
+ stripn = strip->next;
free_nlastrip(&nlt->strips, strip);
}
@@ -144,19 +144,19 @@ void free_nladata(ListBase *tracks)
return;
/* free tracks one by one */
- for (nlt= tracks->first; nlt; nlt= nltn) {
- nltn= nlt->next;
+ for (nlt = tracks->first; nlt; nlt = nltn) {
+ nltn = nlt->next;
free_nlatrack(tracks, nlt);
}
/* clear the list's pointers to be safe */
- tracks->first= tracks->last= NULL;
+ tracks->first = tracks->last = NULL;
}
/* Copying ------------------------------------------- */
/* Copy NLA strip */
-NlaStrip *copy_nlastrip (NlaStrip *strip)
+NlaStrip *copy_nlastrip(NlaStrip *strip)
{
NlaStrip *strip_d;
NlaStrip *cs, *cs_d;
@@ -166,8 +166,8 @@ NlaStrip *copy_nlastrip (NlaStrip *strip)
return NULL;
/* make a copy */
- strip_d= MEM_dupallocN(strip);
- strip_d->next= strip_d->prev= NULL;
+ strip_d = MEM_dupallocN(strip);
+ strip_d->next = strip_d->prev = NULL;
/* increase user-count of action */
if (strip_d->act)
@@ -178,10 +178,10 @@ NlaStrip *copy_nlastrip (NlaStrip *strip)
copy_fmodifiers(&strip_d->modifiers, &strip->modifiers);
/* make a copy of all the child-strips, one at a time */
- strip_d->strips.first= strip_d->strips.last= NULL;
+ strip_d->strips.first = strip_d->strips.last = NULL;
- for (cs= strip->strips.first; cs; cs= cs->next) {
- cs_d= copy_nlastrip(cs);
+ for (cs = strip->strips.first; cs; cs = cs->next) {
+ cs_d = copy_nlastrip(cs);
BLI_addtail(&strip_d->strips, cs_d);
}
@@ -190,7 +190,7 @@ NlaStrip *copy_nlastrip (NlaStrip *strip)
}
/* Copy NLA Track */
-NlaTrack *copy_nlatrack (NlaTrack *nlt)
+NlaTrack *copy_nlatrack(NlaTrack *nlt)
{
NlaStrip *strip, *strip_d;
NlaTrack *nlt_d;
@@ -200,14 +200,14 @@ NlaTrack *copy_nlatrack (NlaTrack *nlt)
return NULL;
/* make a copy */
- nlt_d= MEM_dupallocN(nlt);
- nlt_d->next= nlt_d->prev= NULL;
+ nlt_d = MEM_dupallocN(nlt);
+ nlt_d->next = nlt_d->prev = NULL;
/* make a copy of all the strips, one at a time */
- nlt_d->strips.first= nlt_d->strips.last= NULL;
+ nlt_d->strips.first = nlt_d->strips.last = NULL;
- for (strip= nlt->strips.first; strip; strip= strip->next) {
- strip_d= copy_nlastrip(strip);
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
+ strip_d = copy_nlastrip(strip);
BLI_addtail(&nlt_d->strips, strip_d);
}
@@ -225,12 +225,12 @@ void copy_nladata(ListBase *dst, ListBase *src)
return;
/* clear out the destination list first for precautions... */
- dst->first= dst->last= NULL;
+ dst->first = dst->last = NULL;
/* copy each NLA-track, one at a time */
- for (nlt= src->first; nlt; nlt= nlt->next) {
+ for (nlt = src->first; nlt; nlt = nlt->next) {
/* make a copy, and add the copy to the destination list */
- nlt_d= copy_nlatrack(nlt);
+ nlt_d = copy_nlatrack(nlt);
BLI_addtail(dst, nlt_d);
}
}
@@ -240,7 +240,7 @@ void copy_nladata(ListBase *dst, ListBase *src)
/* Add a NLA Track to the given AnimData
* - prev: NLA-Track to add the new one after
*/
-NlaTrack *add_nlatrack (AnimData *adt, NlaTrack *prev)
+NlaTrack *add_nlatrack(AnimData *adt, NlaTrack *prev)
{
NlaTrack *nlt;
@@ -249,11 +249,11 @@ NlaTrack *add_nlatrack (AnimData *adt, NlaTrack *prev)
return NULL;
/* allocate new track */
- nlt= MEM_callocN(sizeof(NlaTrack), "NlaTrack");
+ nlt = MEM_callocN(sizeof(NlaTrack), "NlaTrack");
/* set settings requiring the track to not be part of the stack yet */
nlt->flag = NLATRACK_SELECTED;
- nlt->index= BLI_countlist(&adt->nla_tracks);
+ nlt->index = BLI_countlist(&adt->nla_tracks);
/* add track to stack, and make it the active one */
if (prev)
@@ -271,7 +271,7 @@ NlaTrack *add_nlatrack (AnimData *adt, NlaTrack *prev)
}
/* Add a NLA Strip referencing the given Action */
-NlaStrip *add_nlastrip (bAction *act)
+NlaStrip *add_nlastrip(bAction *act)
{
NlaStrip *strip;
@@ -280,7 +280,7 @@ NlaStrip *add_nlastrip (bAction *act)
return NULL;
/* allocate new strip */
- strip= MEM_callocN(sizeof(NlaStrip), "NlaStrip");
+ strip = MEM_callocN(sizeof(NlaStrip), "NlaStrip");
/* generic settings
* - selected flag to highlight this to the user
@@ -290,10 +290,10 @@ NlaStrip *add_nlastrip (bAction *act)
* is not done though, since this should only really happens in editmode for strips now
* though this decision is still subject to further review...
*/
- strip->flag = NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_AUTO_BLENDS;
+ strip->flag = NLASTRIP_FLAG_SELECT | NLASTRIP_FLAG_AUTO_BLENDS;
/* assign the action reference */
- strip->act= act;
+ strip->act = act;
id_us_plus(&act->id);
/* determine initial range
@@ -302,10 +302,10 @@ NlaStrip *add_nlastrip (bAction *act)
calc_action_range(strip->act, &strip->actstart, &strip->actend, 0);
strip->start = strip->actstart;
- strip->end = (IS_EQF(strip->actstart, strip->actend)) ? (strip->actstart + 1.0f): (strip->actend);
+ strip->end = (IS_EQF(strip->actstart, strip->actend)) ? (strip->actstart + 1.0f) : (strip->actend);
/* strip should be referenced as-is */
- strip->scale= 1.0f;
+ strip->scale = 1.0f;
strip->repeat = 1.0f;
/* return the new strip */
@@ -313,7 +313,7 @@ NlaStrip *add_nlastrip (bAction *act)
}
/* Add new NLA-strip to the top of the NLA stack - i.e. into the last track if space, or a new one otherwise */
-NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act)
+NlaStrip *add_nlastrip_to_stack(AnimData *adt, bAction *act)
{
NlaStrip *strip;
NlaTrack *nlt;
@@ -323,7 +323,7 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act)
return NULL;
/* create a new NLA strip */
- strip= add_nlastrip(act);
+ strip = add_nlastrip(act);
if (strip == NULL)
return NULL;
@@ -332,7 +332,7 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act)
/* trying to add to the last track failed (no track or no space),
* so add a new track to the stack, and add to that...
*/
- nlt= add_nlatrack(adt, NULL);
+ nlt = add_nlatrack(adt, NULL);
BKE_nlatrack_add_strip(nlt, strip);
}
@@ -344,7 +344,7 @@ NlaStrip *add_nlastrip_to_stack (AnimData *adt, bAction *act)
}
/* Add a NLA Strip referencing the given speaker's sound */
-NlaStrip *add_nla_soundstrip (Scene *scene, Speaker *speaker)
+NlaStrip *add_nla_soundstrip(Scene *scene, Speaker *speaker)
{
NlaStrip *strip = MEM_callocN(sizeof(NlaStrip), "NlaSoundStrip");
@@ -388,7 +388,7 @@ NlaStrip *add_nla_soundstrip (Scene *scene, Speaker *speaker)
/* non clipped mapping for strip-time <-> global time (for Action-Clips)
* invert = convert action-strip time to global time
*/
-static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short mode)
+static float nlastrip_get_frame_actionclip(NlaStrip *strip, float cframe, short mode)
{
float actlength, scale;
// float repeat; // UNUSED
@@ -398,7 +398,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short
// repeat = strip->repeat; // UNUSED
/* scaling */
- if (IS_EQF(strip->scale, 0.0f)) strip->scale= 1.0f;
+ if (IS_EQF(strip->scale, 0.0f)) strip->scale = 1.0f;
scale = fabsf(strip->scale); /* scale must be positive - we've got a special flag for reversing */
/* length of referenced action */
@@ -409,12 +409,12 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short
if (strip->flag & NLASTRIP_FLAG_REVERSE) {
// FIXME: this won't work right with Graph Editor?
if (mode == NLATIME_CONVERT_MAP) {
- return strip->end - scale*(cframe - strip->actstart);
+ return strip->end - scale * (cframe - strip->actstart);
}
else if (mode == NLATIME_CONVERT_UNMAP) {
return (strip->end + (strip->actstart * scale - cframe)) / scale;
}
- else /* if (mode == NLATIME_CONVERT_EVAL) */{
+ else { /* if (mode == NLATIME_CONVERT_EVAL) */
if (IS_EQF(cframe, strip->end) && IS_EQF(strip->repeat, ((int)strip->repeat))) {
/* this case prevents the motion snapping back to the first frame at the end of the strip
* by catching the case where repeats is a whole number, which means that the end of the strip
@@ -426,18 +426,18 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short
/* - the 'fmod(..., actlength*scale)' is needed to get the repeats working
* - the '/ scale' is needed to ensure that scaling influences the timing within the repeat
*/
- return strip->actend - fmodf(cframe - strip->start, actlength*scale) / scale;
+ return strip->actend - fmodf(cframe - strip->start, actlength * scale) / scale;
}
}
}
else {
if (mode == NLATIME_CONVERT_MAP) {
- return strip->start + scale*(cframe - strip->actstart);
+ return strip->start + scale * (cframe - strip->actstart);
}
else if (mode == NLATIME_CONVERT_UNMAP) {
return strip->actstart + (cframe - strip->start) / scale;
}
- else /* if (mode == NLATIME_CONVERT_EVAL) */{
+ else { /* if (mode == NLATIME_CONVERT_EVAL) */
if (IS_EQF(cframe, strip->end) && IS_EQF(strip->repeat, ((int)strip->repeat))) {
/* this case prevents the motion snapping back to the first frame at the end of the strip
* by catching the case where repeats is a whole number, which means that the end of the strip
@@ -449,7 +449,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short
/* - the 'fmod(..., actlength*scale)' is needed to get the repeats working
* - the '/ scale' is needed to ensure that scaling influences the timing within the repeat
*/
- return strip->actstart + fmodf(cframe - strip->start, actlength*scale) / scale;
+ return strip->actstart + fmodf(cframe - strip->start, actlength * scale) / scale;
}
}
}
@@ -458,12 +458,12 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short
/* non clipped mapping for strip-time <-> global time (for Transitions)
* invert = convert action-strip time to global time
*/
-static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short mode)
+static float nlastrip_get_frame_transition(NlaStrip *strip, float cframe, short mode)
{
float length;
/* length of strip */
- length= strip->end - strip->start;
+ length = strip->end - strip->start;
/* reversed = play strip backwards */
if (strip->flag & NLASTRIP_FLAG_REVERSE) {
@@ -481,7 +481,7 @@ static float nlastrip_get_frame_transition (NlaStrip *strip, float cframe, short
}
/* non clipped mapping for strip-time <-> global time
- * mode = eNlaTime_ConvertModes[] -> NLATIME_CONVERT_*
+ * mode = eNlaTime_ConvertModes[] -> NLATIME_CONVERT_*
*
* only secure for 'internal' (i.e. within AnimSys evaluation) operations,
* but should not be directly relied on for stuff which interacts with editors
@@ -515,17 +515,17 @@ float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, short mode)
* - when not in tweakmode, the active Action does not have any scaling applied :)
* - when in tweakmode, if the no-mapping flag is set, do not map
*/
- if ((adt == NULL) || (adt->flag & ADT_NLA_EDIT_ON)==0 || (adt->flag & ADT_NLA_EDIT_NOMAP))
+ if ((adt == NULL) || (adt->flag & ADT_NLA_EDIT_ON) == 0 || (adt->flag & ADT_NLA_EDIT_NOMAP))
return cframe;
/* if the active-strip info has been stored already, access this, otherwise look this up
* and store for (very probable) future usage
*/
if (adt->actstrip == NULL) {
- NlaTrack *nlt= BKE_nlatrack_find_active(&adt->nla_tracks);
- adt->actstrip= BKE_nlastrip_find_active(nlt);
+ NlaTrack *nlt = BKE_nlatrack_find_active(&adt->nla_tracks);
+ adt->actstrip = BKE_nlastrip_find_active(nlt);
}
- strip= adt->actstrip;
+ strip = adt->actstrip;
/* sanity checks
* - in rare cases, we may not be able to find this strip for some reason (internal error)
@@ -559,7 +559,7 @@ short BKE_nlastrips_has_space(ListBase *strips, float start, float end)
}
/* loop over NLA strips checking for any overlaps with this area... */
- for (strip= strips->first; strip; strip= strip->next) {
+ for (strip = strips->first; strip; strip = strip->next) {
/* if start frame of strip is past the target end-frame, that means that
* we've gone past the window we need to check for, so things are fine
*/
@@ -592,21 +592,21 @@ void BKE_nlastrips_sort_strips(ListBase *strips)
/* we simply perform insertion sort on this list, since it is assumed that per track,
* there are only likely to be at most 5-10 strips
*/
- for (strip= strips->first; strip; strip= stripn) {
+ for (strip = strips->first; strip; strip = stripn) {
short not_added = 1;
- stripn= strip->next;
+ stripn = strip->next;
/* remove this strip from the list, and add it to the new list, searching from the end of
* the list, assuming that the lists are in order
*/
BLI_remlink(strips, strip);
- for (sstrip= tmp.last; sstrip; sstrip= sstrip->prev) {
+ for (sstrip = tmp.last; sstrip; sstrip = sstrip->prev) {
/* check if add after */
if (sstrip->end <= strip->start) {
BLI_insertlinkafter(&tmp, sstrip, strip);
- not_added= 0;
+ not_added = 0;
break;
}
}
@@ -617,8 +617,8 @@ void BKE_nlastrips_sort_strips(ListBase *strips)
}
/* reassign the start and end points of the strips */
- strips->first= tmp.first;
- strips->last= tmp.last;
+ strips->first = tmp.first;
+ strips->last = tmp.last;
}
/* Add the given NLA-Strip to the given list of strips, assuming that it
@@ -634,15 +634,15 @@ short BKE_nlastrips_add_strip(ListBase *strips, NlaStrip *strip)
return 0;
/* check if any space to add */
- if (BKE_nlastrips_has_space(strips, strip->start, strip->end)==0)
+ if (BKE_nlastrips_has_space(strips, strip->start, strip->end) == 0)
return 0;
/* find the right place to add the strip to the nominated track */
- for (ns= strips->first; ns; ns= ns->next) {
+ for (ns = strips->first; ns; ns = ns->next) {
/* if current strip occurs after the new strip, add it before */
if (ns->start >= strip->end) {
BLI_insertlinkbefore(strips, ns, strip);
- not_added= 0;
+ not_added = 0;
break;
}
}
@@ -672,14 +672,14 @@ void BKE_nlastrips_make_metas(ListBase *strips, short temp)
return;
/* group all continuous chains of selected strips into meta-strips */
- for (strip= strips->first; strip; strip= stripn) {
- stripn= strip->next;
+ for (strip = strips->first; strip; strip = stripn) {
+ stripn = strip->next;
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* if there is an existing meta-strip, add this strip to it, otherwise, create a new one */
if (mstrip == NULL) {
/* add a new meta-strip, and add it before the current strip that it will replace... */
- mstrip= MEM_callocN(sizeof(NlaStrip), "Meta-NlaStrip");
+ mstrip = MEM_callocN(sizeof(NlaStrip), "Meta-NlaStrip");
mstrip->type = NLASTRIP_TYPE_META;
BLI_insertlinkbefore(strips, strip, mstrip);
@@ -691,10 +691,10 @@ void BKE_nlastrips_make_metas(ListBase *strips, short temp)
mstrip->flag |= NLASTRIP_FLAG_TEMP_META;
/* set default repeat/scale values to prevent warnings */
- mstrip->repeat= mstrip->scale= 1.0f;
+ mstrip->repeat = mstrip->scale = 1.0f;
/* make its start frame be set to the start frame of the current strip */
- mstrip->start= strip->start;
+ mstrip->start = strip->start;
}
/* remove the selected strips from the track, and add to the meta */
@@ -702,13 +702,13 @@ void BKE_nlastrips_make_metas(ListBase *strips, short temp)
BLI_addtail(&mstrip->strips, strip);
/* expand the meta's dimensions to include the newly added strip- i.e. its last frame */
- mstrip->end= strip->end;
+ mstrip->end = strip->end;
}
else {
/* current strip wasn't selected, so the end of 'island' of selected strips has been reached,
* so stop adding strips to the current meta
*/
- mstrip= NULL;
+ mstrip = NULL;
}
}
}
@@ -725,8 +725,8 @@ void BKE_nlastrips_clear_metastrip(ListBase *strips, NlaStrip *strip)
/* move each one of the meta-strip's children before the meta-strip
* in the list of strips after unlinking them from the meta-strip
*/
- for (cs= strip->strips.first; cs; cs= csn) {
- csn= cs->next;
+ for (cs = strip->strips.first; cs; cs = csn) {
+ csn = cs->next;
BLI_remlink(&strip->strips, cs);
BLI_insertlinkbefore(strips, strip, cs);
}
@@ -748,13 +748,13 @@ void BKE_nlastrips_clear_metas(ListBase *strips, short onlySel, short onlyTemp)
return;
/* remove meta-strips fitting the criteria of the arguments */
- for (strip= strips->first; strip; strip= stripn) {
- stripn= strip->next;
+ for (strip = strips->first; strip; strip = stripn) {
+ stripn = strip->next;
/* check if strip is a meta-strip */
if (strip->type == NLASTRIP_TYPE_META) {
/* if check if selection and 'temporary-only' considerations are met */
- if ((onlySel==0) || (strip->flag & NLASTRIP_FLAG_SELECT)) {
+ if ((onlySel == 0) || (strip->flag & NLASTRIP_FLAG_SELECT)) {
if ((!onlyTemp) || (strip->flag & NLASTRIP_FLAG_TEMP_META)) {
BKE_nlastrips_clear_metastrip(strips, strip);
}
@@ -786,7 +786,7 @@ short BKE_nlameta_add_strip(NlaStrip *mstrip, NlaStrip *strip)
if ((mstrip->prev == NULL) || (mstrip->prev->end <= strip->start)) {
/* add strip to start of meta's list, and expand dimensions */
BLI_addhead(&mstrip->strips, strip);
- mstrip->start= strip->start;
+ mstrip->start = strip->start;
return 1;
}
@@ -800,7 +800,7 @@ short BKE_nlameta_add_strip(NlaStrip *mstrip, NlaStrip *strip)
if ((mstrip->next == NULL) || (mstrip->next->start >= strip->end)) {
/* add strip to end of meta's list, and expand dimensions */
BLI_addtail(&mstrip->strips, strip);
- mstrip->end= strip->end;
+ mstrip->end = strip->end;
return 1;
}
@@ -821,7 +821,7 @@ void BKE_nlameta_flush_transforms(NlaStrip *mstrip)
NlaStrip *strip;
float oStart, oEnd, offset;
float oLen, nLen;
- short scaleChanged= 0;
+ short scaleChanged = 0;
/* sanity checks
* - strip must exist
@@ -836,9 +836,9 @@ void BKE_nlameta_flush_transforms(NlaStrip *mstrip)
* - these are simply the start/end frames of the child strips,
* since we assume they weren't transformed yet
*/
- oStart= ((NlaStrip *)mstrip->strips.first)->start;
- oEnd= ((NlaStrip *)mstrip->strips.last)->end;
- offset= mstrip->start - oStart;
+ oStart = ((NlaStrip *)mstrip->strips.first)->start;
+ oEnd = ((NlaStrip *)mstrip->strips.last)->end;
+ offset = mstrip->start - oStart;
/* optimization:
* don't flush if nothing changed yet
@@ -851,20 +851,20 @@ void BKE_nlameta_flush_transforms(NlaStrip *mstrip)
oLen = oEnd - oStart;
nLen = mstrip->end - mstrip->start;
if (IS_EQF(nLen, oLen) == 0)
- scaleChanged= 1;
+ scaleChanged = 1;
/* for each child-strip, calculate new start/end points based on this new info */
- for (strip= mstrip->strips.first; strip; strip= strip->next) {
+ for (strip = mstrip->strips.first; strip; strip = strip->next) {
if (scaleChanged) {
float p1, p2;
/* compute positions of endpoints relative to old extents of strip */
- p1= (strip->start - oStart) / oLen;
- p2= (strip->end - oStart) / oLen;
+ p1 = (strip->start - oStart) / oLen;
+ p2 = (strip->end - oStart) / oLen;
/* apply new strip endpoints using the proportions, then wait for second pass to flush scale properly */
- strip->start= (p1 * nLen) + mstrip->start;
- strip->end= (p2 * nLen) + mstrip->start;
+ strip->start = (p1 * nLen) + mstrip->start;
+ strip->end = (p2 * nLen) + mstrip->start;
}
else {
/* just apply the changes in offset to both ends of the strip */
@@ -874,7 +874,7 @@ void BKE_nlameta_flush_transforms(NlaStrip *mstrip)
}
/* apply a second pass over child strips, to finish up unfinished business */
- for (strip= mstrip->strips.first; strip; strip= strip->next) {
+ for (strip = mstrip->strips.first; strip; strip = strip->next) {
/* only if scale changed, need to perform RNA updates */
if (scaleChanged) {
PointerRNA ptr;
@@ -894,7 +894,7 @@ void BKE_nlameta_flush_transforms(NlaStrip *mstrip)
/* NLA-Tracks ---------------------------------------- */
/* Find the active NLA-track for the given stack */
-NlaTrack *BKE_nlatrack_find_active (ListBase *tracks)
+NlaTrack *BKE_nlatrack_find_active(ListBase *tracks)
{
NlaTrack *nlt;
@@ -903,7 +903,7 @@ NlaTrack *BKE_nlatrack_find_active (ListBase *tracks)
return NULL;
/* try to find the first active track */
- for (nlt= tracks->first; nlt; nlt= nlt->next) {
+ for (nlt = tracks->first; nlt; nlt = nlt->next) {
if (nlt->flag & NLATRACK_ACTIVE)
return nlt;
}
@@ -924,7 +924,7 @@ void BKE_nlatrack_solo_toggle(AnimData *adt, NlaTrack *nlt)
return;
/* firstly, make sure 'solo' flag for all tracks is disabled */
- for (nt= adt->nla_tracks.first; nt; nt= nt->next) {
+ for (nt = adt->nla_tracks.first; nt; nt = nt->next) {
if (nt != nlt)
nt->flag &= ~NLATRACK_SOLO;
}
@@ -956,7 +956,7 @@ void BKE_nlatrack_set_active(ListBase *tracks, NlaTrack *nlt_a)
return;
/* deactive all the rest */
- for (nlt= tracks->first; nlt; nlt= nlt->next)
+ for (nlt = tracks->first; nlt; nlt = nlt->next)
nlt->flag &= ~NLATRACK_ACTIVE;
/* set the given one as the active one */
@@ -968,9 +968,9 @@ void BKE_nlatrack_set_active(ListBase *tracks, NlaTrack *nlt_a)
short BKE_nlatrack_has_space(NlaTrack *nlt, float start, float end)
{
/* sanity checks
- * - track must exist
- * - track must be editable
- * - bounds cannot be equal (0-length is nasty)
+ * - track must exist
+ * - track must be editable
+ * - bounds cannot be equal (0-length is nasty)
*/
if ((nlt == NULL) || (nlt->flag & NLATRACK_PROTECTED) || IS_EQF(start, end))
return 0;
@@ -1042,7 +1042,7 @@ short BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2])
/* NLA Strips -------------------------------------- */
/* Find the active NLA-strip within the given track */
-NlaStrip *BKE_nlastrip_find_active (NlaTrack *nlt)
+NlaStrip *BKE_nlastrip_find_active(NlaTrack *nlt)
{
NlaStrip *strip;
@@ -1051,7 +1051,7 @@ NlaStrip *BKE_nlastrip_find_active (NlaTrack *nlt)
return NULL;
/* try to find the first active strip */
- for (strip= nlt->strips.first; strip; strip= strip->next) {
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
if (strip->flag & NLASTRIP_FLAG_ACTIVE)
return strip;
}
@@ -1071,8 +1071,8 @@ void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip)
return;
/* loop over tracks, deactivating*/
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
- for (nls= nlt->strips.first; nls; nls= nls->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
+ for (nls = nlt->strips.first; nls; nls = nls->next) {
if (nls != strip)
nls->flag &= ~NLASTRIP_FLAG_ACTIVE;
else
@@ -1085,8 +1085,8 @@ void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip)
/* Does the given NLA-strip fall within the given bounds (times)? */
short BKE_nlastrip_within_bounds(NlaStrip *strip, float min, float max)
{
- const float stripLen= (strip) ? strip->end - strip->start : 0.0f;
- const float boundsLen= fabsf(max - min);
+ const float stripLen = (strip) ? strip->end - strip->start : 0.0f;
+ const float boundsLen = fabsf(max - min);
/* sanity checks */
if ((strip == NULL) || IS_EQF(stripLen, 0.0f) || IS_EQF(boundsLen, 0.0f))
@@ -1128,10 +1128,10 @@ void BKE_nlastrip_recalculate_bounds(NlaStrip *strip)
return;
/* calculate new length factors */
- actlen= strip->actend - strip->actstart;
- if (IS_EQF(actlen, 0.0f)) actlen= 1.0f;
+ actlen = strip->actend - strip->actstart;
+ if (IS_EQF(actlen, 0.0f)) actlen = 1.0f;
- mapping= strip->scale * strip->repeat;
+ mapping = strip->scale * strip->repeat;
/* adjust endpoint of strip in response to this */
if (IS_EQF(mapping, 0.0f) == 0)
@@ -1140,7 +1140,7 @@ void BKE_nlastrip_recalculate_bounds(NlaStrip *strip)
/* Is the given NLA-strip the first one to occur for the given AnimData block */
// TODO: make this an api method if necesary, but need to add prefix first
-static short nlastrip_is_first (AnimData *adt, NlaStrip *strip)
+static short nlastrip_is_first(AnimData *adt, NlaStrip *strip)
{
NlaTrack *nlt;
NlaStrip *ns;
@@ -1155,9 +1155,9 @@ static short nlastrip_is_first (AnimData *adt, NlaStrip *strip)
/* check other tracks to see if they have a strip that's earlier */
// TODO: or should we check that the strip's track is also the first?
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
/* only check the first strip, assuming that they're all in order */
- ns= nlt->strips.first;
+ ns = nlt->strips.first;
if (ns) {
if (ns->start < strip->start)
return 0;
@@ -1180,7 +1180,7 @@ short BKE_nlatrack_has_animated_strips(NlaTrack *nlt)
return 0;
/* check each strip for F-Curves only (don't care about whether the flags are set) */
- for (strip= nlt->strips.first; strip; strip= strip->next) {
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
if (strip->fcurves.first)
return 1;
}
@@ -1199,7 +1199,7 @@ short BKE_nlatracks_have_animated_strips(ListBase *tracks)
return 0;
/* check each track, stopping on the first hit */
- for (nlt= tracks->first; nlt; nlt= nlt->next) {
+ for (nlt = tracks->first; nlt; nlt = nlt->next) {
if (BKE_nlatrack_has_animated_strips(nlt))
return 1;
}
@@ -1220,19 +1220,19 @@ void BKE_nlastrip_validate_fcurves(NlaStrip *strip)
/* if controlling influence... */
if (strip->flag & NLASTRIP_FLAG_USR_INFLUENCE) {
/* try to get F-Curve */
- fcu= list_find_fcurve(&strip->fcurves, "influence", 0);
+ fcu = list_find_fcurve(&strip->fcurves, "influence", 0);
/* add one if not found */
if (fcu == NULL) {
/* make new F-Curve */
- fcu= MEM_callocN(sizeof(FCurve), "NlaStrip FCurve");
+ fcu = MEM_callocN(sizeof(FCurve), "NlaStrip FCurve");
BLI_addtail(&strip->fcurves, fcu);
/* set default flags */
- fcu->flag = (FCURVE_VISIBLE|FCURVE_SELECTED);
+ fcu->flag = (FCURVE_VISIBLE | FCURVE_SELECTED);
/* store path - make copy, and store that */
- fcu->rna_path= BLI_strdupn("influence", 9);
+ fcu->rna_path = BLI_strdupn("influence", 9);
// TODO: insert a few keyframes to ensure default behavior?
}
@@ -1241,19 +1241,19 @@ void BKE_nlastrip_validate_fcurves(NlaStrip *strip)
/* if controlling time... */
if (strip->flag & NLASTRIP_FLAG_USR_TIME) {
/* try to get F-Curve */
- fcu= list_find_fcurve(&strip->fcurves, "strip_time", 0);
+ fcu = list_find_fcurve(&strip->fcurves, "strip_time", 0);
/* add one if not found */
if (fcu == NULL) {
/* make new F-Curve */
- fcu= MEM_callocN(sizeof(FCurve), "NlaStrip FCurve");
+ fcu = MEM_callocN(sizeof(FCurve), "NlaStrip FCurve");
BLI_addtail(&strip->fcurves, fcu);
/* set default flags */
- fcu->flag = (FCURVE_VISIBLE|FCURVE_SELECTED);
+ fcu->flag = (FCURVE_VISIBLE | FCURVE_SELECTED);
/* store path - make copy, and store that */
- fcu->rna_path= BLI_strdupn("strip_time", 10);
+ fcu->rna_path = BLI_strdupn("strip_time", 10);
// TODO: insert a few keyframes to ensure default behavior?
}
@@ -1283,10 +1283,10 @@ void BKE_nlastrip_validate_name(AnimData *adt, NlaStrip *strip)
return;
/* give strip a default name if none already */
- if (strip->name[0]==0) {
+ if (strip->name[0] == 0) {
switch (strip->type) {
case NLASTRIP_TYPE_CLIP: /* act-clip */
- BLI_strncpy(strip->name, (strip->act)?(strip->act->id.name+2):("<No Action>"), sizeof(strip->name));
+ BLI_strncpy(strip->name, (strip->act) ? (strip->act->id.name + 2) : ("<No Action>"), sizeof(strip->name));
break;
case NLASTRIP_TYPE_TRANSITION: /* transition */
BLI_strncpy(strip->name, "Transition", sizeof(strip->name));
@@ -1304,10 +1304,10 @@ void BKE_nlastrip_validate_name(AnimData *adt, NlaStrip *strip)
* - this is easier than iterating over all the tracks+strips hierarchy everytime
* (and probably faster)
*/
- gh= BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "nlastrip_validate_name gh");
+ gh = BLI_ghash_str_new("nlastrip_validate_name gh");
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
- for (tstrip= nlt->strips.first; tstrip; tstrip= tstrip->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
+ for (tstrip = nlt->strips.first; tstrip; tstrip = tstrip->next) {
/* don't add the strip of interest */
if (tstrip == strip)
continue;
@@ -1333,7 +1333,7 @@ void BKE_nlastrip_validate_name(AnimData *adt, NlaStrip *strip)
* - track: nla-track that the overlapping strips should be found from
* - start, end: frames for the offending endpoints
*/
-static void nlastrip_get_endpoint_overlaps (NlaStrip *strip, NlaTrack *track, float **start, float **end)
+static void nlastrip_get_endpoint_overlaps(NlaStrip *strip, NlaTrack *track, float **start, float **end)
{
NlaStrip *nls;
@@ -1341,46 +1341,46 @@ static void nlastrip_get_endpoint_overlaps (NlaStrip *strip, NlaTrack *track, fl
* but which don't cover the entire length
*/
// TODO: this scheme could get quite slow for doing this on many strips...
- for (nls= track->strips.first; nls; nls= nls->next) {
+ for (nls = track->strips.first; nls; nls = nls->next) {
/* check if strip overlaps (extends over or exactly on) the entire range of the strip we're validating */
if ((nls->start <= strip->start) && (nls->end >= strip->end)) {
- *start= NULL;
- *end= NULL;
+ *start = NULL;
+ *end = NULL;
return;
}
/* check if strip doesn't even occur anywhere near... */
if (nls->end < strip->start)
- continue; /* skip checking this strip... not worthy of mention */
+ continue; /* skip checking this strip... not worthy of mention */
if (nls->start > strip->end)
- return; /* the range we're after has already passed */
+ return; /* the range we're after has already passed */
/* if this strip is not part of an island of continuous strips, it can be used
* - this check needs to be done for each end of the strip we try and use...
*/
- if ((nls->next == NULL) || IS_EQF(nls->next->start, nls->end)==0) {
+ if ((nls->next == NULL) || IS_EQF(nls->next->start, nls->end) == 0) {
if ((nls->end > strip->start) && (nls->end < strip->end))
- *start= &nls->end;
+ *start = &nls->end;
}
- if ((nls->prev == NULL) || IS_EQF(nls->prev->end, nls->start)==0) {
+ if ((nls->prev == NULL) || IS_EQF(nls->prev->end, nls->start) == 0) {
if ((nls->start < strip->end) && (nls->start > strip->start))
- *end= &nls->start;
+ *end = &nls->start;
}
}
}
/* Determine auto-blending for the given strip */
-static void BKE_nlastrip_validate_autoblends (NlaTrack *nlt, NlaStrip *nls)
+static void BKE_nlastrip_validate_autoblends(NlaTrack *nlt, NlaStrip *nls)
{
- float *ps=NULL, *pe=NULL;
- float *ns=NULL, *ne=NULL;
+ float *ps = NULL, *pe = NULL;
+ float *ns = NULL, *ne = NULL;
/* sanity checks */
if (ELEM(NULL, nls, nlt))
return;
if ((nlt->prev == NULL) && (nlt->next == NULL))
return;
- if ((nls->flag & NLASTRIP_FLAG_AUTO_BLENDS)==0)
+ if ((nls->flag & NLASTRIP_FLAG_AUTO_BLENDS) == 0)
return;
/* get test ranges */
@@ -1394,31 +1394,31 @@ static void BKE_nlastrip_validate_autoblends (NlaTrack *nlt, NlaStrip *nls)
* is directly followed/preceeded by another strip, forming an
* 'island' of continuous strips
*/
- if ((ps || ns) && ((nls->prev == NULL) || IS_EQF(nls->prev->end, nls->start)==0)) {
+ if ((ps || ns) && ((nls->prev == NULL) || IS_EQF(nls->prev->end, nls->start) == 0)) {
/* start overlaps - pick the largest overlap */
if ( ((ps && ns) && (*ps > *ns)) || (ps) )
- nls->blendin= *ps - nls->start;
+ nls->blendin = *ps - nls->start;
else
- nls->blendin= *ns - nls->start;
+ nls->blendin = *ns - nls->start;
}
else /* no overlap allowed/needed */
- nls->blendin= 0.0f;
+ nls->blendin = 0.0f;
- if ((pe || ne) && ((nls->next == NULL) || IS_EQF(nls->next->start, nls->end)==0)) {
+ if ((pe || ne) && ((nls->next == NULL) || IS_EQF(nls->next->start, nls->end) == 0)) {
/* end overlaps - pick the largest overlap */
if ( ((pe && ne) && (*pe > *ne)) || (pe) )
- nls->blendout= nls->end - *pe;
+ nls->blendout = nls->end - *pe;
else
- nls->blendout= nls->end - *ne;
+ nls->blendout = nls->end - *ne;
}
else /* no overlap allowed/needed */
- nls->blendout= 0.0f;
+ nls->blendout = 0.0f;
}
/* Ensure that auto-blending and other settings are set correctly */
void BKE_nla_validate_state(AnimData *adt)
{
- NlaStrip *strip, *fstrip=NULL;
+ NlaStrip *strip, *fstrip = NULL;
NlaTrack *nlt;
/* sanity checks */
@@ -1426,20 +1426,20 @@ void BKE_nla_validate_state(AnimData *adt)
return;
/* adjust blending values for auto-blending, and also do an initial pass to find the earliest strip */
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
- for (strip= nlt->strips.first; strip; strip= strip->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
/* auto-blending first */
BKE_nlastrip_validate_autoblends(nlt, strip);
/* extend mode - find first strip */
if ((fstrip == NULL) || (strip->start < fstrip->start))
- fstrip= strip;
+ fstrip = strip;
}
}
/* second pass over the strips to adjust the extend-mode to fix any problems */
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
- for (strip= nlt->strips.first; strip; strip= strip->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
/* apart from 'nothing' option which user has to explicitly choose, we don't really know if
* we should be overwriting the extend setting (but assume that's what the user wanted)
*/
@@ -1454,9 +1454,9 @@ void BKE_nla_validate_state(AnimData *adt)
* Should fix problems such as [#29869]
*/
if (strip == fstrip)
- strip->extendmode= NLASTRIP_EXTEND_HOLD;
+ strip->extendmode = NLASTRIP_EXTEND_HOLD;
else if (strip->blendmode == NLASTRIP_MODE_REPLACE)
- strip->extendmode= NLASTRIP_EXTEND_HOLD_FORWARD;
+ strip->extendmode = NLASTRIP_EXTEND_HOLD_FORWARD;
}
}
}
@@ -1489,13 +1489,13 @@ void BKE_nla_action_pushdown(AnimData *adt)
}
/* add a new NLA strip to the track, which references the active action */
- strip= add_nlastrip_to_stack(adt, adt->action);
+ strip = add_nlastrip_to_stack(adt, adt->action);
/* do other necessary work on strip */
if (strip) {
/* clear reference to action now that we've pushed it onto the stack */
id_us_min(&adt->action->id);
- adt->action= NULL;
+ adt->action = NULL;
/* if the strip is the first one in the track it lives in, check if there
* are strips in any other tracks that may be before this, and set the extend
@@ -1506,7 +1506,7 @@ void BKE_nla_action_pushdown(AnimData *adt)
* so that it doesn't override strips in previous tracks
*/
// FIXME: this needs to be more automated, since user can rearrange strips
- strip->extendmode= NLASTRIP_EXTEND_HOLD_FORWARD;
+ strip->extendmode = NLASTRIP_EXTEND_HOLD_FORWARD;
}
/* make strip the active one... */
@@ -1520,8 +1520,8 @@ void BKE_nla_action_pushdown(AnimData *adt)
*/
short BKE_nla_tweakmode_enter(AnimData *adt)
{
- NlaTrack *nlt, *activeTrack=NULL;
- NlaStrip *strip, *activeStrip=NULL;
+ NlaTrack *nlt, *activeTrack = NULL;
+ NlaStrip *strip, *activeStrip = NULL;
/* verify that data is valid */
if (ELEM(NULL, adt, adt->nla_tracks.first))
@@ -1534,16 +1534,16 @@ short BKE_nla_tweakmode_enter(AnimData *adt)
return 1;
/* go over the tracks, finding the active one, and its active strip
- * - if we cannot find both, then there's nothing to do
+ * - if we cannot find both, then there's nothing to do
*/
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
/* check if active */
if (nlt->flag & NLATRACK_ACTIVE) {
/* store reference to this active track */
- activeTrack= nlt;
+ activeTrack = nlt;
/* now try to find active strip */
- activeStrip= BKE_nlastrip_find_active(nlt);
+ activeStrip = BKE_nlastrip_find_active(nlt);
break;
}
}
@@ -1557,18 +1557,18 @@ short BKE_nla_tweakmode_enter(AnimData *adt)
for (nlt = adt->nla_tracks.last; nlt; nlt = nlt->prev) {
if (nlt->flag & NLATRACK_SELECTED) {
/* assume this is the active track */
- activeTrack= nlt;
+ activeTrack = nlt;
/* try to find active strip */
- activeStrip= BKE_nlastrip_find_active(nlt);
+ activeStrip = BKE_nlastrip_find_active(nlt);
break;
}
}
}
if ((activeTrack) && (activeStrip == NULL)) {
/* no active strip in active or last selected track; compromise for first selected (assuming only single)... */
- for (strip = activeTrack->strips.first; strip; strip= strip->next) {
- if (strip->flag & (NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_ACTIVE)) {
+ for (strip = activeTrack->strips.first; strip; strip = strip->next) {
+ if (strip->flag & (NLASTRIP_FLAG_SELECT | NLASTRIP_FLAG_ACTIVE)) {
activeStrip = strip;
break;
}
@@ -1586,8 +1586,8 @@ short BKE_nla_tweakmode_enter(AnimData *adt)
/* go over all the tracks up to the active one, tagging each strip that uses the same
* action as the active strip, but leaving everything else alone
*/
- for (nlt= activeTrack->prev; nlt; nlt= nlt->prev) {
- for (strip= nlt->strips.first; strip; strip= strip->next) {
+ for (nlt = activeTrack->prev; nlt; nlt = nlt->prev) {
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
if (strip->act == activeStrip->act)
strip->flag |= NLASTRIP_FLAG_TWEAKUSER;
else
@@ -1599,7 +1599,7 @@ short BKE_nla_tweakmode_enter(AnimData *adt)
/* go over all the tracks after AND INCLUDING the active one, tagging them as being disabled
* - the active track needs to also be tagged, otherwise, it'll overlap with the tweaks going on
*/
- for (nlt= activeTrack; nlt; nlt= nlt->next)
+ for (nlt = activeTrack; nlt; nlt = nlt->next)
nlt->flag |= NLATRACK_DISABLED;
/* handle AnimData level changes:
@@ -1608,9 +1608,9 @@ short BKE_nla_tweakmode_enter(AnimData *adt)
* - editing-flag for this AnimData block should also get turned on (for more efficient restoring)
* - take note of the active strip for mapping-correction of keyframes in the action being edited
*/
- adt->tmpact= adt->action;
- adt->action= activeStrip->act;
- adt->actstrip= activeStrip;
+ adt->tmpact = adt->action;
+ adt->action = activeStrip->act;
+ adt->actstrip = activeStrip;
id_us_plus(&activeStrip->act->id);
adt->flag |= ADT_NLA_EDIT_ON;
@@ -1637,10 +1637,10 @@ void BKE_nla_tweakmode_exit(AnimData *adt)
/* for all Tracks, clear the 'disabled' flag
* for all Strips, clear the 'tweak-user' flag
*/
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
nlt->flag &= ~NLATRACK_DISABLED;
- for (strip= nlt->strips.first; strip; strip= strip->next)
+ for (strip = nlt->strips.first; strip; strip = strip->next)
strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER;
}
@@ -1652,15 +1652,15 @@ void BKE_nla_tweakmode_exit(AnimData *adt)
* - clear pointer to active strip
*/
if (adt->action) adt->action->id.us--;
- adt->action= adt->tmpact;
- adt->tmpact= NULL;
- adt->actstrip= NULL;
+ adt->action = adt->tmpact;
+ adt->tmpact = NULL;
+ adt->actstrip = NULL;
adt->flag &= ~ADT_NLA_EDIT_ON;
}
/* Baking Tools ------------------------------------------- */
-static void UNUSED_FUNCTION(BKE_nla_bake) (Scene *scene, ID *UNUSED(id), AnimData *adt, int UNUSED(flag))
+static void UNUSED_FUNCTION(BKE_nla_bake) (Scene * scene, ID *UNUSED(id), AnimData * adt, int UNUSED(flag))
{
/* verify that data is valid
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index a25cd0d3b38..c6424580a31 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1930,6 +1930,13 @@ static void registerCompositNodes(bNodeTreeType *ttype)
register_node_type_cmp_transform(ttype);
register_node_type_cmp_stabilize2d(ttype);
register_node_type_cmp_moviedistortion(ttype);
+
+ register_node_type_cmp_colorcorrection(ttype);
+ register_node_type_cmp_boxmask(ttype);
+ register_node_type_cmp_ellipsemask(ttype);
+ register_node_type_cmp_bokehimage(ttype);
+ register_node_type_cmp_bokehblur(ttype);
+ register_node_type_cmp_switch(ttype);
}
static void registerShaderNodes(bNodeTreeType *ttype)
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 7bf0eadf088..6fec35add8b 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2269,7 +2269,7 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
for (a = 0; a < 8; a++) {
mul_m4_v3(ob->obmat, bb.vec[a]);
- DO_MINMAX(bb.vec[a], min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, bb.vec[a]);
}
change = TRUE;
}
@@ -2284,7 +2284,7 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
for (v = 0; v < lt->pntsv; v++) {
for (u = 0; u < lt->pntsu; u++, bp++) {
mul_v3_m4v3(vec, ob->obmat, bp->vec);
- DO_MINMAX(vec, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, vec);
}
}
}
@@ -2296,9 +2296,9 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
bPoseChannel *pchan;
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
- DO_MINMAX(vec, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, vec);
mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
- DO_MINMAX(vec, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, vec);
}
change = TRUE;
}
@@ -2312,7 +2312,7 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
for (a = 0; a < 8; a++) {
mul_m4_v3(ob->obmat, bb.vec[a]);
- DO_MINMAX(bb.vec[a], min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, bb.vec[a]);
}
change = TRUE;
}
@@ -2321,15 +2321,15 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
}
if (change == FALSE) {
- DO_MINMAX(ob->obmat[3], min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, ob->obmat[3]);
copy_v3_v3(vec, ob->obmat[3]);
add_v3_v3(vec, ob->size);
- DO_MINMAX(vec, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, vec);
copy_v3_v3(vec, ob->obmat[3]);
sub_v3_v3(vec, ob->size);
- DO_MINMAX(vec, min_r, max_r);
+ minmax_v3v3_v3(min_r, max_r, vec);
}
}
@@ -2353,7 +2353,7 @@ int BKE_object_minmax_dupli(Scene *scene, Object *ob, float r_min[3], float r_ma
for (i = 0; i < 8; i++) {
float vec[3];
mul_v3_m4v3(vec, dob->mat, bb->vec[i]);
- DO_MINMAX(vec, r_min, r_max);
+ minmax_v3v3_v3(r_min, r_max, vec);
}
ok = 1;
@@ -3030,6 +3030,19 @@ int BKE_object_is_deform_modified(Scene *scene, Object *ob)
return flag;
}
+/* See if an object is using an animated modifier */
+int BKE_object_is_animated(Scene *scene, Object *ob)
+{
+ ModifierData *md;
+
+ for (md = modifiers_getVirtualModifierList(ob); md; md = md->next)
+ if(modifier_dependsOnTime(md) &&
+ (modifier_isEnabled(scene, md, eModifierMode_Realtime) ||
+ modifier_isEnabled(scene, md, eModifierMode_Render)))
+ return 1;
+ return 0;
+}
+
static void copy_object__forwardModifierLinks(void *UNUSED(userData), Object *UNUSED(ob), ID **idpoin)
{
/* this is copied from ID_NEW; it might be better to have a macro */
diff --git a/source/blender/blenkernel/intern/ocean.c b/source/blender/blenkernel/intern/ocean.c
index 6242976d323..e76cde652c8 100644
--- a/source/blender/blenkernel/intern/ocean.c
+++ b/source/blender/blenkernel/intern/ocean.c
@@ -39,7 +39,7 @@
#include "BKE_ocean.h"
#include "BKE_utildefines.h"
-#include "BKE_global.h" // XXX TESTING
+#include "BKE_global.h" // XXX TESTING
#include "BLI_math_base.h"
#include "BLI_math_inline.h"
@@ -84,7 +84,7 @@ typedef struct Ocean {
float _Lx;
float _Lz;
- float normalize_factor; // init w
+ float normalize_factor; // init w
float time;
short _do_disp_y;
@@ -98,73 +98,71 @@ typedef struct Ocean {
/* ********* sim data arrays ********* */
/* two dimensional arrays of complex */
- fftw_complex *_fft_in; // init w sim w
- fftw_complex *_fft_in_x; // init w sim w
- fftw_complex *_fft_in_z; // init w sim w
- fftw_complex *_fft_in_jxx; // init w sim w
- fftw_complex *_fft_in_jzz; // init w sim w
- fftw_complex *_fft_in_jxz; // init w sim w
- fftw_complex *_fft_in_nx; // init w sim w
- fftw_complex *_fft_in_nz; // init w sim w
- fftw_complex *_htilda; // init w sim w (only once)
+ fftw_complex *_fft_in; // init w sim w
+ fftw_complex *_fft_in_x; // init w sim w
+ fftw_complex *_fft_in_z; // init w sim w
+ fftw_complex *_fft_in_jxx; // init w sim w
+ fftw_complex *_fft_in_jzz; // init w sim w
+ fftw_complex *_fft_in_jxz; // init w sim w
+ fftw_complex *_fft_in_nx; // init w sim w
+ fftw_complex *_fft_in_nz; // init w sim w
+ fftw_complex *_htilda; // init w sim w (only once)
/* fftw "plans" */
- fftw_plan _disp_y_plan; // init w sim r
- fftw_plan _disp_x_plan; // init w sim r
- fftw_plan _disp_z_plan; // init w sim r
- fftw_plan _N_x_plan; // init w sim r
- fftw_plan _N_z_plan; // init w sim r
- fftw_plan _Jxx_plan; // init w sim r
- fftw_plan _Jxz_plan; // init w sim r
- fftw_plan _Jzz_plan; // init w sim r
+ fftw_plan _disp_y_plan; // init w sim r
+ fftw_plan _disp_x_plan; // init w sim r
+ fftw_plan _disp_z_plan; // init w sim r
+ fftw_plan _N_x_plan; // init w sim r
+ fftw_plan _N_z_plan; // init w sim r
+ fftw_plan _Jxx_plan; // init w sim r
+ fftw_plan _Jxz_plan; // init w sim r
+ fftw_plan _Jzz_plan; // init w sim r
/* two dimensional arrays of float */
- double * _disp_y; // init w sim w via plan?
- double * _N_x; // init w sim w via plan?
+ double *_disp_y; // init w sim w via plan?
+ double *_N_x; // init w sim w via plan?
/*float * _N_y; all member of this array has same values, so convert this array to a float to reduce memory usage (MEM01)*/
- double _N_y; // sim w ********* can be rearranged?
- double * _N_z; // init w sim w via plan?
- double * _disp_x; // init w sim w via plan?
- double * _disp_z; // init w sim w via plan?
+ double _N_y; // sim w ********* can be rearranged?
+ double *_N_z; // init w sim w via plan?
+ double *_disp_x; // init w sim w via plan?
+ double *_disp_z; // init w sim w via plan?
/* two dimensional arrays of float */
/* Jacobian and minimum eigenvalue */
- double * _Jxx; // init w sim w
- double * _Jzz; // init w sim w
- double * _Jxz; // init w sim w
+ double *_Jxx; // init w sim w
+ double *_Jzz; // init w sim w
+ double *_Jxz; // init w sim w
/* one dimensional float array */
- float * _kx; // init w sim r
- float * _kz; // init w sim r
+ float *_kx; // init w sim r
+ float *_kz; // init w sim r
/* two dimensional complex array */
- fftw_complex * _h0; // init w sim r
- fftw_complex * _h0_minus; // init w sim r
+ fftw_complex *_h0; // init w sim r
+ fftw_complex *_h0_minus; // init w sim r
/* two dimensional float array */
- float * _k; // init w sim r
+ float *_k; // init w sim r
} Ocean;
static float nextfr(float min, float max)
{
- return BLI_frand()*(min-max)+max;
+ return BLI_frand() * (min - max) + max;
}
-static float gaussRand (void)
+static float gaussRand(void)
{
- float x; // Note: to avoid numerical problems with very small
- float y; // numbers, we make these variables singe-precision
- float length2; // floats, but later we call the double-precision log()
+ float x; // Note: to avoid numerical problems with very small
+ float y; // numbers, we make these variables singe-precision
+ float length2; // floats, but later we call the double-precision log()
// and sqrt() functions instead of logf() and sqrtf().
- do
- {
- x = (float) (nextfr (-1, 1));
- y = (float)(nextfr (-1, 1));
+ do {
+ x = (float) (nextfr(-1, 1));
+ y = (float)(nextfr(-1, 1));
length2 = x * x + y * y;
- }
- while (length2 >= 1 || length2 == 0);
+ } while (length2 >= 1 || length2 == 0);
return x * sqrtf(-2.0f * logf(length2) / length2);
}
@@ -174,63 +172,63 @@ static float gaussRand (void)
* */
MINLINE float lerp(float a, float b, float f)
{
- return a + (b-a)*f;
+ return a + (b - a) * f;
}
MINLINE float catrom(float p0, float p1, float p2, float p3, float f)
{
- return 0.5f *((2.0f * p1) +
- (-p0 + p2) * f +
- (2.0f*p0 - 5.0f*p1 + 4.0f*p2 - p3) * f*f +
- (-p0 + 3.0f*p1- 3.0f*p2 + p3) * f*f*f);
+ return 0.5f * ((2.0f * p1) +
+ (-p0 + p2) * f +
+ (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * f * f +
+ (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * f * f * f);
}
MINLINE float omega(float k, float depth)
{
- return sqrt(GRAVITY*k * tanh(k*depth));
+ return sqrt(GRAVITY * k * tanh(k * depth));
}
// modified Phillips spectrum
-static float Ph(struct Ocean* o, float kx, float kz )
+static float Ph(struct Ocean *o, float kx, float kz)
{
float tmp;
- float k2 = kx*kx + kz*kz;
+ float k2 = kx * kx + kz * kz;
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);
+ tmp = (o->_wx * kx + o->_wz * kz) / sqrtf(k2);
if (tmp < 0) {
tmp *= o->_damp_reflections;
}
- return o->_A * expf( -1.0f / (k2*(o->_L*o->_L))) * expf(-k2 * (o->_l*o->_l)) * powf(fabsf(tmp), o->_wind_alignment) / (k2*k2);
+ return o->_A * expf(-1.0f / (k2 * (o->_L * o->_L))) * expf(-k2 * (o->_l * o->_l)) * powf(fabsf(tmp), o->_wind_alignment) / (k2 * k2);
}
static void compute_eigenstuff(struct OceanResult *ocr, float jxx, float jzz, float jxz)
{
float a, b, qplus, qminus;
a = jxx + jzz;
- b = sqrt((jxx - jzz)*(jxx - jzz) + 4 * jxz * jxz);
+ b = sqrt((jxx - jzz) * (jxx - jzz) + 4 * jxz * jxz);
- ocr->Jminus = 0.5f*(a-b);
- ocr->Jplus = 0.5f*(a+b);
+ ocr->Jminus = 0.5f * (a - b);
+ ocr->Jplus = 0.5f * (a + b);
- qplus = (ocr->Jplus - jxx)/jxz;
- qminus = (ocr->Jminus - jxx)/jxz;
+ qplus = (ocr->Jplus - jxx) / jxz;
+ qminus = (ocr->Jminus - jxx) / jxz;
- a = sqrt(1 + qplus*qplus);
- b = sqrt(1 + qminus*qminus);
+ a = sqrt(1 + qplus * qplus);
+ b = sqrt(1 + qminus * qminus);
- ocr->Eplus[0] = 1.0f/ a;
+ ocr->Eplus[0] = 1.0f / a;
ocr->Eplus[1] = 0.0f;
- ocr->Eplus[2] = qplus/a;
+ ocr->Eplus[2] = qplus / a;
- ocr->Eminus[0] = 1.0f/b;
+ ocr->Eminus[0] = 1.0f / b;
ocr->Eminus[1] = 0.0f;
- ocr->Eminus[2] = qminus/b;
+ ocr->Eminus[2] = qminus / b;
}
/*
@@ -244,7 +242,7 @@ static void init_complex(fftw_complex cmpl, float real, float image)
cmpl[1] = image;
}
-#if 0 // unused
+#if 0 // unused
static void add_complex_f(fftw_complex res, fftw_complex cmpl, float f)
{
res[0] = cmpl[0] + f;
@@ -260,15 +258,15 @@ static void add_comlex_c(fftw_complex res, fftw_complex cmpl1, fftw_complex cmpl
static void mul_complex_f(fftw_complex res, fftw_complex cmpl, float f)
{
- res[0] = cmpl[0]*f;
- res[1] = cmpl[1]*f;
+ res[0] = cmpl[0] * f;
+ res[1] = cmpl[1] * f;
}
static void mul_complex_c(fftw_complex res, fftw_complex cmpl1, fftw_complex cmpl2)
{
fftwf_complex temp;
- temp[0] = cmpl1[0]*cmpl2[0]-cmpl1[1]*cmpl2[1];
- temp[1] = cmpl1[0]*cmpl2[1]+cmpl1[1]*cmpl2[0];
+ temp[0] = cmpl1[0] * cmpl2[0] - cmpl1[1] * cmpl2[1];
+ temp[1] = cmpl1[0] * cmpl2[1] + cmpl1[1] * cmpl2[0];
res[0] = temp[0];
res[1] = temp[1];
}
@@ -293,15 +291,15 @@ static void exp_complex(fftw_complex res, fftw_complex cmpl)
{
float r = expf(cmpl[0]);
- res[0] = cos(cmpl[1])*r;
- res[1] = sin(cmpl[1])*r;
+ res[0] = cos(cmpl[1]) * r;
+ res[1] = sin(cmpl[1]) * r;
}
float BKE_ocean_jminus_to_foam(float jminus, float coverage)
{
float foam = jminus * -0.005f + coverage;
CLAMP(foam, 0.0f, 1.0f);
- return foam*foam;
+ return foam * foam;
}
void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float v)
@@ -338,7 +336,7 @@ void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float
j1 = j1 % oc->_N;
-#define BILERP(m) (lerp(lerp(m[i0*oc->_N+j0], m[i1*oc->_N+j0], frac_x), lerp(m[i0*oc->_N+j1], m[i1*oc->_N+j1], frac_x), frac_z))
+#define BILERP(m) (lerp(lerp(m[i0 * oc->_N + j0], m[i1 * oc->_N + j0], frac_x), lerp(m[i0 * oc->_N + j1], m[i1 * oc->_N + j1], frac_x), frac_z))
{
if (oc->_do_disp_y) {
ocr->disp[1] = BILERP(oc->_disp_y);
@@ -346,7 +344,7 @@ void BKE_ocean_eval_uv(struct Ocean *oc, struct OceanResult *ocr, float u, float
if (oc->_do_normals) {
ocr->normal[0] = BILERP(oc->_N_x);
- ocr->normal[1] = oc->_N_y/*BILERP(oc->_N_y) (MEM01)*/;
+ ocr->normal[1] = oc->_N_y /*BILERP(oc->_N_y) (MEM01)*/;
ocr->normal[2] = BILERP(oc->_N_z);
}
@@ -402,21 +400,21 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u
i2 = i2 % oc->_M;
j2 = j2 % oc->_N;
- i0 = (i1-1);
- i3 = (i2+1);
+ i0 = (i1 - 1);
+ i3 = (i2 + 1);
i0 = i0 < 0 ? i0 + oc->_M : i0;
i3 = i3 >= oc->_M ? i3 - oc->_M : i3;
- j0 = (j1-1);
- j3 = (j2+1);
+ j0 = (j1 - 1);
+ j3 = (j2 + 1);
j0 = j0 < 0 ? j0 + oc->_N : j0;
j3 = j3 >= oc->_N ? j3 - oc->_N : j3;
-#define INTERP(m) catrom(catrom(m[i0*oc->_N+j0], m[i1*oc->_N+j0], m[i2*oc->_N+j0], m[i3*oc->_N+j0], frac_x), \
- catrom(m[i0*oc->_N+j1], m[i1*oc->_N+j1], m[i2*oc->_N+j1], m[i3*oc->_N+j1], frac_x), \
- catrom(m[i0*oc->_N+j2], m[i1*oc->_N+j2], m[i2*oc->_N+j2], m[i3*oc->_N+j2], frac_x), \
- catrom(m[i0*oc->_N+j3], m[i1*oc->_N+j3], m[i2*oc->_N+j3], m[i3*oc->_N+j3], frac_x), \
- frac_z)
+#define INTERP(m) catrom(catrom(m[i0 * oc->_N + j0], m[i1 * oc->_N + j0], m[i2 * oc->_N + j0], m[i3 * oc->_N + j0], frac_x), \
+ catrom(m[i0 * oc->_N + j1], m[i1 * oc->_N + j1], m[i2 * oc->_N + j1], m[i3 * oc->_N + j1], frac_x), \
+ catrom(m[i0 * oc->_N + j2], m[i1 * oc->_N + j2], m[i2 * oc->_N + j2], m[i3 * oc->_N + j2], frac_x), \
+ catrom(m[i0 * oc->_N + j3], m[i1 * oc->_N + j3], m[i2 * oc->_N + j3], m[i3 * oc->_N + j3], frac_x), \
+ frac_z)
{
if (oc->_do_disp_y) {
@@ -424,7 +422,7 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u
}
if (oc->_do_normals) {
ocr->normal[0] = INTERP(oc->_N_x);
- ocr->normal[1] = oc->_N_y/*INTERP(oc->_N_y) (MEM01)*/;
+ ocr->normal[1] = oc->_N_y /*INTERP(oc->_N_y) (MEM01)*/;
ocr->normal[2] = INTERP(oc->_N_z);
}
if (oc->_do_chop) {
@@ -448,12 +446,12 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u
void BKE_ocean_eval_xz(struct Ocean *oc, struct OceanResult *ocr, float x, float z)
{
- BKE_ocean_eval_uv(oc, ocr, x/oc->_Lx, z/oc->_Lz);
+ BKE_ocean_eval_uv(oc, ocr, x / oc->_Lx, z / oc->_Lz);
}
void BKE_ocean_eval_xz_catrom(struct Ocean *oc, struct OceanResult *ocr, float x, float z)
{
- BKE_ocean_eval_uv_catrom(oc, ocr, x/oc->_Lx, z/oc->_Lz);
+ BKE_ocean_eval_uv_catrom(oc, ocr, x / oc->_Lx, z / oc->_Lz);
}
// note that this doesn't wrap properly for i, j < 0, but its
@@ -466,11 +464,11 @@ void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j)
i = abs(i) % oc->_M;
j = abs(j) % oc->_N;
- ocr->disp[1] = oc->_do_disp_y ? oc->_disp_y[i*oc->_N+j] : 0.0f;
+ ocr->disp[1] = oc->_do_disp_y ? oc->_disp_y[i * oc->_N + j] : 0.0f;
if (oc->_do_chop) {
- ocr->disp[0] = oc->_disp_x[i*oc->_N+j];
- ocr->disp[2] = oc->_disp_z[i*oc->_N+j];
+ ocr->disp[0] = oc->_disp_x[i * oc->_N + j];
+ ocr->disp[2] = oc->_disp_z[i * oc->_N + j];
}
else {
ocr->disp[0] = 0.0f;
@@ -478,15 +476,15 @@ void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i, int j)
}
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];
+ 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];
normalize_v3(ocr->normal);
}
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]);
+ compute_eigenstuff(ocr, oc->_Jxx[i * oc->_N + j], oc->_Jzz[i * oc->_N + j], oc->_Jxz[i * oc->_N + j]);
}
BLI_rw_mutex_unlock(&oc->oceanmutex);
@@ -502,26 +500,26 @@ 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;
- init_complex(exp_param1, 0.0, omega(o->_k[i*(1+o->_N/2)+j], o->_depth)*t);
- init_complex(exp_param2, 0.0, -omega(o->_k[i*(1+o->_N/2)+j], o->_depth)*t);
+ init_complex(exp_param1, 0.0, omega(o->_k[i * (1 + o->_N / 2) + j], o->_depth) * t);
+ init_complex(exp_param2, 0.0, -omega(o->_k[i * (1 + o->_N / 2) + j], o->_depth) * t);
exp_complex(exp_param1, exp_param1);
exp_complex(exp_param2, exp_param2);
- conj_complex(conj_param, o->_h0_minus[i*o->_N+j]);
+ conj_complex(conj_param, o->_h0_minus[i * o->_N + j]);
- mul_complex_c(exp_param1, o->_h0[i*o->_N+j], exp_param1);
+ mul_complex_c(exp_param1, o->_h0[i * o->_N + j], exp_param1);
mul_complex_c(exp_param2, conj_param, exp_param2);
- add_comlex_c(o->_htilda[i*(1+o->_N/2)+j], exp_param1, exp_param2);
- mul_complex_f(o->_fft_in[i*(1+o->_N/2)+j], o->_htilda[i*(1+o->_N/2)+j], scale);
+ add_comlex_c(o->_htilda[i * (1 + o->_N / 2) + j], exp_param1, exp_param2);
+ mul_complex_f(o->_fft_in[i * (1 + o->_N / 2) + j], o->_htilda[i * (1 + o->_N / 2) + j], scale);
}
}
@@ -540,8 +538,8 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
{
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;
@@ -549,9 +547,9 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
init_complex(mul_param, -scale, 0);
mul_complex_f(mul_param, mul_param, chop_amount);
mul_complex_c(mul_param, mul_param, minus_i);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
- mul_complex_f(mul_param, mul_param, (o->_k[i*(1+o->_N/2)+j] == 0.0 ? 0.0 : o->_kx[i] / o->_k[i*(1+o->_N/2)+j]));
- init_complex(o->_fft_in_x[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
+ mul_complex_f(mul_param, mul_param, (o->_k[i * (1 + o->_N / 2) + j] == 0.0 ? 0.0 : o->_kx[i] / o->_k[i * (1 + o->_N / 2) + j]));
+ init_complex(o->_fft_in_x[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_disp_x_plan);
@@ -562,8 +560,8 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
{
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;
@@ -571,9 +569,9 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
init_complex(mul_param, -scale, 0);
mul_complex_f(mul_param, mul_param, chop_amount);
mul_complex_c(mul_param, mul_param, minus_i);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
- mul_complex_f(mul_param, mul_param, (o->_k[i*(1+o->_N/2)+j] == 0.0 ? 0.0 : o->_kz[j] / o->_k[i*(1+o->_N/2)+j]));
- init_complex(o->_fft_in_z[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
+ mul_complex_f(mul_param, mul_param, (o->_k[i * (1 + o->_N / 2) + j] == 0.0 ? 0.0 : o->_kz[j] / o->_k[i * (1 + o->_N / 2) + j]));
+ init_complex(o->_fft_in_z[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_disp_z_plan);
@@ -584,24 +582,24 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
{
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);
init_complex(mul_param, -1, 0);
mul_complex_f(mul_param, mul_param, chop_amount);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
- mul_complex_f(mul_param, mul_param, (o->_k[i*(1+o->_N/2)+j] == 0.0 ? 0.0 : o->_kx[i]*o->_kx[i] / o->_k[i*(1+o->_N/2)+j]));
- init_complex(o->_fft_in_jxx[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
+ mul_complex_f(mul_param, mul_param, (o->_k[i * (1 + o->_N / 2) + j] == 0.0 ? 0.0 : o->_kx[i] * o->_kx[i] / o->_k[i * (1 + o->_N / 2) + j]));
+ init_complex(o->_fft_in_jxx[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_Jxx_plan);
- for ( i = 0 ; i < o->_M ; ++i) {
- for ( j = 0 ; j < o->_N ; ++j) {
- o->_Jxx[i*o->_N+j] += 1.0;
+ for (i = 0; i < o->_M; ++i) {
+ for (j = 0; j < o->_N; ++j) {
+ o->_Jxx[i * o->_N + j] += 1.0;
}
}
}
@@ -611,23 +609,23 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
{
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);
init_complex(mul_param, -1, 0);
mul_complex_f(mul_param, mul_param, chop_amount);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
- mul_complex_f(mul_param, mul_param, (o->_k[i*(1+o->_N/2)+j] == 0.0 ? 0.0 : o->_kz[j]*o->_kz[j] / o->_k[i*(1+o->_N/2)+j]));
- init_complex(o->_fft_in_jzz[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
+ mul_complex_f(mul_param, mul_param, (o->_k[i * (1 + o->_N / 2) + j] == 0.0 ? 0.0 : o->_kz[j] * o->_kz[j] / o->_k[i * (1 + o->_N / 2) + j]));
+ init_complex(o->_fft_in_jzz[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_Jzz_plan);
- for ( i = 0 ; i < o->_M ; ++i) {
- for ( j = 0 ; j < o->_N ; ++j) {
- o->_Jzz[i*o->_N+j] += 1.0;
+ for (i = 0; i < o->_M; ++i) {
+ for (j = 0; j < o->_N; ++j) {
+ o->_Jzz[i * o->_N + j] += 1.0;
}
}
}
@@ -637,17 +635,17 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
{
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);
init_complex(mul_param, -1, 0);
mul_complex_f(mul_param, mul_param, chop_amount);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
- mul_complex_f(mul_param, mul_param, (o->_k[i*(1+o->_N/2)+j] == 0.0f ? 0.0f : o->_kx[i]*o->_kz[j] / o->_k[i*(1+o->_N/2)+j]));
- init_complex(o->_fft_in_jxz[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
+ mul_complex_f(mul_param, mul_param, (o->_k[i * (1 + o->_N / 2) + j] == 0.0f ? 0.0f : o->_kx[i] * o->_kz[j] / o->_k[i * (1 + o->_N / 2) + j]));
+ init_complex(o->_fft_in_jxz[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_Jxz_plan);
@@ -658,14 +656,14 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount
{
// fft normals
if (o->_do_normals) {
- 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, 0.0, -1.0);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
mul_complex_f(mul_param, mul_param, o->_kx[i]);
- init_complex(o->_fft_in_nx[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ init_complex(o->_fft_in_nx[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_N_x_plan);
@@ -676,27 +674,27 @@ 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) {
+ 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);
- mul_complex_c(mul_param, mul_param, o->_htilda[i*(1+o->_N/2)+j]);
+ mul_complex_c(mul_param, mul_param, o->_htilda[i * (1 + o->_N / 2) + j]);
mul_complex_f(mul_param, mul_param, o->_kz[i]);
- init_complex(o->_fft_in_nz[i*(1+o->_N/2)+j], real_c(mul_param), image_c(mul_param));
+ init_complex(o->_fft_in_nz[i * (1 + o->_N / 2) + j], real_c(mul_param), image_c(mul_param));
}
}
fftw_execute(o->_N_z_plan);
#if 0
- for ( i = 0 ; i < o->_M ; ++i) {
- for ( j = 0 ; j < o->_N ; ++j) {
- o->_N_y[i*o->_N+j] = 1.0f/scale;
+ for (i = 0; i < o->_M; ++i) {
+ for (j = 0; j < o->_N; ++j) {
+ o->_N_y[i * o->_N + j] = 1.0f / scale;
}
}
(MEM01)
#endif
- o->_N_y = 1.0f/scale;
+ o->_N_y = 1.0f / scale;
}
} // section 8
@@ -722,15 +720,15 @@ static void set_height_normalize_factor(struct Ocean *oc)
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]);
+ if (max_h < fabsf(oc->_disp_y[i * oc->_N + j])) {
+ max_h = fabsf(oc->_disp_y[i * oc->_N + j]);
}
}
}
BLI_rw_mutex_unlock(&oc->oceanmutex);
- if (max_h == 0.0f) max_h = 0.00001f; // just in case ...
+ if (max_h == 0.0f) max_h = 0.00001f; // just in case ...
res = 1.0f / (max_h);
@@ -746,8 +744,8 @@ struct Ocean *BKE_add_ocean(void)
return oc;
}
-void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp,
- float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals, short do_jacobian, int seed)
+void BKE_init_ocean(struct Ocean *o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp,
+ float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals, short do_jacobian, int seed)
{
int i, j, ii;
@@ -766,7 +764,7 @@ void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V,
o->_Lz = Lz;
o->_wx = cos(w);
o->_wz = -sin(w); // wave direction
- o->_L = V*V / GRAVITY; // largest wave for a given velocity V
+ o->_L = V * V / GRAVITY; // largest wave for a given velocity V
o->time = time;
o->_do_disp_y = do_height_field;
@@ -774,11 +772,11 @@ void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V,
o->_do_chop = do_chop;
o->_do_jacobian = do_jacobian;
- o->_k = (float*) MEM_mallocN(M * (1+N/2) * sizeof(float), "ocean_k");
- o->_h0 = (fftw_complex*) MEM_mallocN(M * N * sizeof(fftw_complex), "ocean_h0");
- o->_h0_minus = (fftw_complex*) MEM_mallocN(M * N * sizeof(fftw_complex), "ocean_h0_minus");
- o->_kx = (float*) MEM_mallocN(o->_M * sizeof(float), "ocean_kx");
- o->_kz = (float*) MEM_mallocN(o->_N * sizeof(float), "ocean_kz");
+ o->_k = (float *) MEM_mallocN(M * (1 + N / 2) * sizeof(float), "ocean_k");
+ o->_h0 = (fftw_complex *) MEM_mallocN(M * N * sizeof(fftw_complex), "ocean_h0");
+ o->_h0_minus = (fftw_complex *) MEM_mallocN(M * N * sizeof(fftw_complex), "ocean_h0_minus");
+ o->_kx = (float *) MEM_mallocN(o->_M * sizeof(float), "ocean_kx");
+ o->_kz = (float *) MEM_mallocN(o->_N * sizeof(float), "ocean_kz");
// make this robust in the face of erroneous usage
if (o->_Lx == 0.0f)
@@ -788,79 +786,79 @@ void BKE_init_ocean(struct Ocean* o, int M, int N, float Lx, float Lz, float V,
o->_Lz = 0.001f;
// the +ve components and DC
- for (i = 0 ; i <= o->_M/2 ; ++i)
+ for (i = 0; i <= o->_M / 2; ++i)
o->_kx[i] = 2.0f * (float)M_PI * i / o->_Lx;
// the -ve components
- for (i = o->_M-1, ii=0 ; i > o->_M/2 ; --i, ++ii)
+ for (i = o->_M - 1, ii = 0; i > o->_M / 2; --i, ++ii)
o->_kx[i] = -2.0f * (float)M_PI * ii / o->_Lx;
// the +ve components and DC
- for (i = 0 ; i <= o->_N/2 ; ++i)
+ for (i = 0; i <= o->_N / 2; ++i)
o->_kz[i] = 2.0f * (float)M_PI * i / o->_Lz;
// the -ve components
- for (i = o->_N-1, ii=0 ; i > o->_N/2 ; --i, ++ii)
+ for (i = o->_N - 1, ii = 0; i > o->_N / 2; --i, ++ii)
o->_kz[i] = -2.0f * (float)M_PI * ii / o->_Lz;
// pre-calculate the k matrix
- for (i = 0 ; i < o->_M ; ++i)
- for (j = 0 ; j <= o->_N / 2 ; ++j)
- o->_k[i*(1+o->_N/2)+j] = sqrt(o->_kx[i]*o->_kx[i] + o->_kz[j]*o->_kz[j] );
+ for (i = 0; i < o->_M; ++i)
+ for (j = 0; j <= o->_N / 2; ++j)
+ o->_k[i * (1 + o->_N / 2) + j] = sqrt(o->_kx[i] * o->_kx[i] + o->_kz[j] * o->_kz[j]);
/*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();
fftw_complex r1r2;
init_complex(r1r2, r1, r2);
- mul_complex_f(o->_h0[i*o->_N+j], r1r2, (float)(sqrt(Ph(o, o->_kx[i], o->_kz[j]) / 2.0f)));
- mul_complex_f(o->_h0_minus[i*o->_N+j], r1r2, (float)(sqrt(Ph(o, -o->_kx[i], -o->_kz[j]) / 2.0f)));
+ mul_complex_f(o->_h0[i * o->_N + j], r1r2, (float)(sqrt(Ph(o, o->_kx[i], o->_kz[j]) / 2.0f)));
+ mul_complex_f(o->_h0_minus[i * o->_N + j], r1r2, (float)(sqrt(Ph(o, -o->_kx[i], -o->_kz[j]) / 2.0f)));
}
}
- o->_fft_in = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in");
- o->_htilda = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_htilda");
+ o->_fft_in = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in");
+ o->_htilda = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_htilda");
if (o->_do_disp_y) {
- o->_disp_y = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_y");
+ o->_disp_y = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_y");
o->_disp_y_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in, o->_disp_y, FFTW_ESTIMATE);
}
if (o->_do_normals) {
- o->_fft_in_nx = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_nx");
- o->_fft_in_nz = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_nz");
+ o->_fft_in_nx = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_nx");
+ o->_fft_in_nz = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_nz");
- o->_N_x = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_x");
+ o->_N_x = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_x");
/*o->_N_y = (float*) fftwf_malloc(o->_M * o->_N * sizeof(float)); (MEM01)*/
- o->_N_z = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_z");
+ o->_N_z = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_z");
o->_N_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nx, o->_N_x, FFTW_ESTIMATE);
o->_N_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nz, o->_N_z, FFTW_ESTIMATE);
}
if (o->_do_chop) {
- o->_fft_in_x = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_x");
- o->_fft_in_z = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_z");
+ o->_fft_in_x = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_x");
+ o->_fft_in_z = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_z");
- o->_disp_x = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_x");
- o->_disp_z = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_z");
+ o->_disp_x = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_x");
+ o->_disp_z = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_z");
o->_disp_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_x, o->_disp_x, FFTW_ESTIMATE);
o->_disp_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_z, o->_disp_z, FFTW_ESTIMATE);
}
if (o->_do_jacobian) {
- o->_fft_in_jxx = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_jxx");
- o->_fft_in_jzz = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_jzz");
- o->_fft_in_jxz = (fftw_complex*) MEM_mallocN(o->_M * (1+o->_N/2) * sizeof(fftw_complex), "ocean_fft_in_jxz");
+ o->_fft_in_jxx = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_jxx");
+ o->_fft_in_jzz = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_jzz");
+ o->_fft_in_jxz = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_jxz");
- o->_Jxx = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxx");
- o->_Jzz = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jzz");
- o->_Jxz = (double*) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxz");
+ o->_Jxx = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxx");
+ o->_Jzz = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jzz");
+ o->_Jxz = (double *) MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxz");
o->_Jxx_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxx, o->_Jxx, FFTW_ESTIMATE);
o->_Jzz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jzz, o->_Jzz, FFTW_ESTIMATE);
@@ -947,9 +945,9 @@ void BKE_free_ocean(struct Ocean *oc)
/* ********* Baking/Caching ********* */
-#define CACHE_TYPE_DISPLACE 1
-#define CACHE_TYPE_FOAM 2
-#define CACHE_TYPE_NORMAL 3
+#define CACHE_TYPE_DISPLACE 1
+#define CACHE_TYPE_FOAM 2
+#define CACHE_TYPE_NORMAL 3
static void cache_filename(char *string, const char *path, const char *relbase, int frame, int type)
{
@@ -957,16 +955,16 @@ static void cache_filename(char *string, const char *path, const char *relbase,
const char *fname;
switch (type) {
- case CACHE_TYPE_FOAM:
- fname= "foam_";
- break;
- case CACHE_TYPE_NORMAL:
- fname= "normal_";
- break;
- case CACHE_TYPE_DISPLACE:
- default:
- fname= "disp_";
- break;
+ case CACHE_TYPE_FOAM:
+ fname = "foam_";
+ break;
+ case CACHE_TYPE_NORMAL:
+ fname = "normal_";
+ break;
+ case CACHE_TYPE_DISPLACE:
+ default:
+ fname = "disp_";
+ break;
}
BLI_join_dirfile(cachepath, sizeof(cachepath), path, fname);
@@ -977,27 +975,27 @@ static void cache_filename(char *string, const char *path, const char *relbase,
/* silly functions but useful to inline when the args do a lot of indirections */
MINLINE void rgb_to_rgba_unit_alpha(float r_rgba[4], const float rgb[3])
{
- r_rgba[0]= rgb[0];
- r_rgba[1]= rgb[1];
- r_rgba[2]= rgb[2];
- r_rgba[3]= 1.0f;
+ r_rgba[0] = rgb[0];
+ r_rgba[1] = rgb[1];
+ r_rgba[2] = rgb[2];
+ r_rgba[3] = 1.0f;
}
MINLINE void value_to_rgba_unit_alpha(float r_rgba[4], const float value)
{
- r_rgba[0]= value;
- r_rgba[1]= value;
- r_rgba[2]= value;
- r_rgba[3]= 1.0f;
+ r_rgba[0] = value;
+ r_rgba[1] = value;
+ r_rgba[2] = value;
+ r_rgba[3] = 1.0f;
}
void BKE_free_ocean_cache(struct OceanCache *och)
{
- int i, f=0;
+ int i, f = 0;
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]);
}
@@ -1006,7 +1004,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]);
}
@@ -1015,7 +1013,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]);
}
@@ -1041,17 +1039,17 @@ void BKE_ocean_cache_eval_uv(struct OceanCache *och, struct OceanResult *ocr, in
if (v < 0) v += 1.0f;
if (och->ibufs_disp[f]) {
- ibuf_sample(och->ibufs_disp[f], u, v, (1.0f/(float)res_x), (1.0f/(float)res_y), result);
+ ibuf_sample(och->ibufs_disp[f], u, v, (1.0f / (float)res_x), (1.0f / (float)res_y), result);
copy_v3_v3(ocr->disp, result);
}
if (och->ibufs_foam[f]) {
- ibuf_sample(och->ibufs_foam[f], u, v, (1.0f/(float)res_x), (1.0f/(float)res_y), result);
+ ibuf_sample(och->ibufs_foam[f], u, v, (1.0f / (float)res_x), (1.0f / (float)res_y), result);
ocr->foam = result[0];
}
if (och->ibufs_norm[f]) {
- ibuf_sample(och->ibufs_norm[f], u, v, (1.0f/(float)res_x), (1.0f/(float)res_y), result);
+ ibuf_sample(och->ibufs_norm[f], u, v, (1.0f / (float)res_x), (1.0f / (float)res_y), result);
copy_v3_v3(ocr->normal, result);
}
}
@@ -1061,22 +1059,22 @@ void BKE_ocean_cache_eval_ij(struct OceanCache *och, struct OceanResult *ocr, in
const int res_x = och->resolution_x;
const int res_y = och->resolution_y;
- if (i < 0) i= -i;
- if (j < 0) j= -j;
+ if (i < 0) i = -i;
+ if (j < 0) j = -j;
i = i % res_x;
j = j % res_y;
if (och->ibufs_disp[f]) {
- copy_v3_v3(ocr->disp, &och->ibufs_disp[f]->rect_float[4*(res_x*j + i)]);
+ copy_v3_v3(ocr->disp, &och->ibufs_disp[f]->rect_float[4 * (res_x * j + i)]);
}
if (och->ibufs_foam[f]) {
- ocr->foam = och->ibufs_foam[f]->rect_float[4*(res_x*j + i)];
+ ocr->foam = och->ibufs_foam[f]->rect_float[4 * (res_x * j + i)];
}
if (och->ibufs_norm[f]) {
- copy_v3_v3(ocr->normal, &och->ibufs_norm[f]->rect_float[4*(res_x*j + i)]);
+ copy_v3_v3(ocr->normal, &och->ibufs_norm[f]->rect_float[4 * (res_x * j + i)]);
}
}
@@ -1096,12 +1094,12 @@ struct OceanCache *BKE_init_ocean_cache(const char *bakepath, const char *relbas
och->chop_amount = chop_amount;
och->foam_coverage = foam_coverage;
och->foam_fade = foam_fade;
- och->resolution_x = resolution*resolution;
- och->resolution_y = resolution*resolution;
+ och->resolution_x = resolution * resolution;
+ och->resolution_y = resolution * resolution;
- och->ibufs_disp = MEM_callocN(sizeof(ImBuf *)*och->duration, "displacement imbuf pointer array");
- och->ibufs_foam = MEM_callocN(sizeof(ImBuf *)*och->duration, "foam imbuf pointer array");
- och->ibufs_norm = MEM_callocN(sizeof(ImBuf *)*och->duration, "normal imbuf pointer array");
+ och->ibufs_disp = MEM_callocN(sizeof(ImBuf *) * och->duration, "displacement imbuf pointer array");
+ och->ibufs_foam = MEM_callocN(sizeof(ImBuf *) * och->duration, "foam imbuf pointer array");
+ och->ibufs_norm = MEM_callocN(sizeof(ImBuf *) * och->duration, "normal imbuf pointer array");
och->time = NULL;
@@ -1116,10 +1114,10 @@ void BKE_simulate_ocean_cache(struct OceanCache *och, int frame)
/* ibufs array is zero based, but filenames are based on frame numbers */
/* still need to clamp frame numbers to valid range of images on disk though */
CLAMP(frame, och->start, och->end);
- f = frame - och->start; // shift to 0 based
+ f = frame - och->start; // shift to 0 based
/* if image is already loaded in mem, return */
- if (och->ibufs_disp[f] != NULL ) return;
+ if (och->ibufs_disp[f] != NULL) return;
cache_filename(string, och->bakepath, och->relbase, frame, CACHE_TYPE_DISPLACE);
@@ -1146,9 +1144,9 @@ void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(v
* before use - campbell */
OceanResult ocr;
- ImageFormatData imf= {0};
+ ImageFormatData imf = {0};
- int f, i=0, x, y, cancel=0;
+ int f, i = 0, x, y, cancel = 0;
float progress;
ImBuf *ibuf_foam, *ibuf_disp, *ibuf_normal;
@@ -1159,17 +1157,17 @@ void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(v
if (!o) return;
- if (o->_do_jacobian) prev_foam = MEM_callocN(res_x*res_y*sizeof(float), "previous frame foam bake data");
- else prev_foam = NULL;
+ if (o->_do_jacobian) prev_foam = MEM_callocN(res_x * res_y * sizeof(float), "previous frame foam bake data");
+ else prev_foam = NULL;
BLI_srand(0);
/* setup image format */
- imf.imtype= R_IMF_IMTYPE_OPENEXR;
- imf.depth= R_IMF_CHAN_DEPTH_16;
- imf.exr_codec= R_IMF_EXR_CODEC_ZIP;
+ imf.imtype = R_IMF_IMTYPE_OPENEXR;
+ imf.depth = R_IMF_CHAN_DEPTH_16;
+ imf.exr_codec = R_IMF_EXR_CODEC_ZIP;
- for (f=och->start, i=0; f<=och->end; f++, i++) {
+ for (f = och->start, i = 0; f <= och->end; f++, i++) {
/* create a new imbuf to store image for this frame */
ibuf_foam = IMB_allocImBuf(res_x, res_y, 32, IB_rectfloat);
@@ -1181,25 +1179,25 @@ void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(v
BKE_simulate_ocean(o, och->time[i], och->wave_scale, och->chop_amount);
/* add new foam */
- for (y=0; y < res_y; y++) {
- for (x=0; x < res_x; x++) {
+ for (y = 0; y < res_y; y++) {
+ for (x = 0; x < res_x; x++) {
BKE_ocean_eval_ij(o, &ocr, x, y);
/* add to the image */
- rgb_to_rgba_unit_alpha(&ibuf_disp->rect_float[4*(res_x*y + x)], ocr.disp);
+ rgb_to_rgba_unit_alpha(&ibuf_disp->rect_float[4 * (res_x * y + x)], ocr.disp);
if (o->_do_jacobian) {
/* TODO, cleanup unused code - campbell */
- float /*r, */ /* UNUSED */ pr=0.0f, foam_result;
+ float /*r, */ /* UNUSED */ pr = 0.0f, foam_result;
float neg_disp, neg_eplus;
ocr.foam = BKE_ocean_jminus_to_foam(ocr.Jminus, och->foam_coverage);
/* accumulate previous value for this cell */
if (i > 0) {
- pr = prev_foam[res_x*y + x];
+ pr = prev_foam[res_x * y + x];
}
/* r = BLI_frand(); */ /* UNUSED */ // randomly reduce foam
@@ -1217,12 +1215,12 @@ void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(v
CLAMP(hor_stretch, 0.0, 1.0);
#endif
- neg_disp = ocr.disp[1] < 0.0f ? 1.0f+ocr.disp[1] : 1.0f;
+ neg_disp = ocr.disp[1] < 0.0f ? 1.0f + ocr.disp[1] : 1.0f;
neg_disp = neg_disp < 0.0f ? 0.0f : neg_disp;
/* foam, 'ocr.Eplus' only initialized with do_jacobian */
- neg_eplus = ocr.Eplus[2] < 0.0f ? 1.0f + ocr.Eplus[2]:1.0f;
- neg_eplus = neg_eplus<0.0f ? 0.0f : neg_eplus;
+ neg_eplus = ocr.Eplus[2] < 0.0f ? 1.0f + ocr.Eplus[2] : 1.0f;
+ neg_eplus = neg_eplus < 0.0f ? 0.0f : neg_eplus;
//if (ocr.disp[1] < 0.0 || r > och->foam_fade)
// pr *= och->foam_fade;
@@ -1231,20 +1229,20 @@ void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(v
//pr = pr * (1.0 - hor_stretch) * ocr.disp[1];
//pr = pr * neg_disp * neg_eplus;
- if (pr < 1.0f) pr *=pr;
+ if (pr < 1.0f) pr *= pr;
pr *= och->foam_fade * (0.75f + neg_eplus * 0.25f);
foam_result = pr + ocr.foam;
- prev_foam[res_x*y + x] = foam_result;
+ prev_foam[res_x * y + x] = foam_result;
- value_to_rgba_unit_alpha(&ibuf_foam->rect_float[4*(res_x*y + x)], foam_result);
+ value_to_rgba_unit_alpha(&ibuf_foam->rect_float[4 * (res_x * y + x)], foam_result);
}
if (o->_do_normals) {
- rgb_to_rgba_unit_alpha(&ibuf_normal->rect_float[4*(res_x*y + x)], ocr.normal);
+ rgb_to_rgba_unit_alpha(&ibuf_normal->rect_float[4 * (res_x * y + x)], ocr.normal);
}
}
}
@@ -1330,8 +1328,8 @@ struct Ocean *BKE_add_ocean(void)
return oc;
}
-void BKE_init_ocean(struct Ocean* UNUSED(o), int UNUSED(M), int UNUSED(N), float UNUSED(Lx), float UNUSED(Lz), float UNUSED(V), float UNUSED(l), float UNUSED(A), float UNUSED(w), float UNUSED(damp),
- float UNUSED(alignment), float UNUSED(depth), float UNUSED(time), short UNUSED(do_height_field), short UNUSED(do_chop), short UNUSED(do_normals), short UNUSED(do_jacobian), int UNUSED(seed))
+void BKE_init_ocean(struct Ocean *UNUSED(o), int UNUSED(M), int UNUSED(N), float UNUSED(Lx), float UNUSED(Lz), float UNUSED(V), float UNUSED(l), float UNUSED(A), float UNUSED(w), float UNUSED(damp),
+ float UNUSED(alignment), float UNUSED(depth), float UNUSED(time), short UNUSED(do_height_field), short UNUSED(do_chop), short UNUSED(do_normals), short UNUSED(do_jacobian), int UNUSED(seed))
{
}
@@ -1364,7 +1362,7 @@ void BKE_ocean_cache_eval_ij(struct OceanCache *UNUSED(och), struct OceanResult
{
}
-struct OceanCache *BKE_init_ocean_cache(const char *UNUSED(bakepath), const char *UNUSED(relbase),
+OceanCache *BKE_init_ocean_cache(const char *UNUSED(bakepath), const char *UNUSED(relbase),
int UNUSED(start), int UNUSED(end), float UNUSED(wave_scale),
float UNUSED(chop_amount), float UNUSED(foam_coverage), float UNUSED(foam_fade), int UNUSED(resolution))
{
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index cd1561734cc..5397b1729f9 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -241,10 +241,10 @@ static void realloc_particles(ParticleSimulationData *sim, int new_totpart)
}
if (psys->particles) {
- totsaved=MIN2(psys->totpart, totpart);
+ totsaved=MIN2(psys->totpart,totpart);
/*save old pars*/
if (totsaved) {
- memcpy(newpars, psys->particles, totsaved*sizeof(ParticleData));
+ memcpy(newpars,psys->particles,totsaved*sizeof(ParticleData));
if (psys->particles->boid)
memcpy(newboids, psys->particles->boid, totsaved*sizeof(BoidParticle));
@@ -418,7 +418,7 @@ static void distribute_simple_children(Scene *scene, Object *ob, DerivedMesh *fi
cpa = psys->child;
for (i=0; i<child_nbr; i++) {
- for (p=0; p<psys->totpart; p++, cpa++) {
+ for (p=0; p<psys->totpart; p++,cpa++) {
float length=2.0;
cpa->parent=p;
@@ -440,7 +440,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
{
ParticleData *pa=NULL;
float min[3], max[3], delta[3], d;
- MVert *mv, *mvert = dm->getVertDataArray(dm, 0);
+ MVert *mv, *mvert = dm->getVertDataArray(dm,0);
int totvert=dm->getNumVerts(dm), from=psys->part->from;
int i, j, k, p, res=psys->part->grid_res, size[3], axis;
@@ -452,13 +452,13 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
mv++;
for (i=1; i<totvert; i++, mv++) {
- min[0]=MIN2(min[0], mv->co[0]);
- min[1]=MIN2(min[1], mv->co[1]);
- min[2]=MIN2(min[2], mv->co[2]);
+ min[0]=MIN2(min[0],mv->co[0]);
+ min[1]=MIN2(min[1],mv->co[1]);
+ min[2]=MIN2(min[2],mv->co[2]);
- max[0]=MAX2(max[0], mv->co[0]);
- max[1]=MAX2(max[1], mv->co[1]);
- max[2]=MAX2(max[2], mv->co[2]);
+ max[0]=MAX2(max[0],mv->co[0]);
+ max[1]=MAX2(max[1],mv->co[1]);
+ max[2]=MAX2(max[2],mv->co[2]);
}
sub_v3_v3v3(delta, max, min);
@@ -473,8 +473,8 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
size[(axis+2)%3] = (int)ceil(delta[(axis+2)%3]/d);
/* float errors grrr.. */
- size[(axis+1)%3] = MIN2(size[(axis+1)%3], res);
- size[(axis+2)%3] = MIN2(size[(axis+2)%3], res);
+ size[(axis+1)%3] = MIN2(size[(axis+1)%3],res);
+ size[(axis+2)%3] = MIN2(size[(axis+2)%3],res);
size[0] = MAX2(size[0], 1);
size[1] = MAX2(size[1], 1);
@@ -485,9 +485,9 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
min[1]+= d < delta[1] ? d/2.f : delta[1]/2.f;
min[2]+= d < delta[2] ? d/2.f : delta[2]/2.f;
- for (i=0, p=0, pa=psys->particles; i<res; i++) {
+ for (i=0,p=0,pa=psys->particles; i<res; i++) {
for (j=0; j<res; j++) {
- for (k=0; k<res; k++, p++, pa++) {
+ for (k=0; k<res; k++,p++,pa++) {
pa->fuv[0] = min[0] + (float)i*d;
pa->fuv[1] = min[1] + (float)j*d;
pa->fuv[2] = min[2] + (float)k*d;
@@ -507,8 +507,8 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
min[1] -= d/2.0f;
min[2] -= d/2.0f;
- for (i=0, mv=mvert; i<totvert; i++, mv++) {
- sub_v3_v3v3(vec, mv->co, min);
+ for (i=0,mv=mvert; i<totvert; i++,mv++) {
+ sub_v3_v3v3(vec,mv->co,min);
vec[0]/=delta[0];
vec[1]/=delta[1];
vec[2]/=delta[2];
@@ -517,7 +517,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
(int)(vec[2] * (size[2] - 1)))->flag &= ~PARS_UNEXIST;
}
}
- else if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ else if (ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) {
float co1[3], co2[3];
MFace *mface= NULL, *mface_array;
@@ -526,7 +526,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
int amax= from==PART_FROM_FACE ? 3 : 1;
totface=dm->getNumTessFaces(dm);
- mface=mface_array=dm->getTessFaceDataArray(dm, CD_MFACE);
+ mface=mface_array=dm->getTessFaceDataArray(dm,CD_MFACE);
for (a=0; a<amax; a++) {
if (a==0) { a0mul=res*res; a1mul=res; a2mul=1; }
@@ -545,7 +545,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
co1[a] -= 0.001f*d;
/* lets intersect the faces */
- for (i=0; i<totface; i++, mface++) {
+ for (i=0; i<totface; i++,mface++) {
copy_v3_v3(v1, mvert[mface->v1].co);
copy_v3_v3(v2, mvert[mface->v2].co);
copy_v3_v3(v3, mvert[mface->v3].co);
@@ -586,9 +586,9 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
}
if (psys->part->flag & PART_GRID_HEXAGONAL) {
- for (i=0, p=0, pa=psys->particles; i<res; i++) {
+ for (i=0,p=0,pa=psys->particles; i<res; i++) {
for (j=0; j<res; j++) {
- for (k=0; k<res; k++, p++, pa++) {
+ for (k=0; k<res; k++,p++,pa++) {
if (j%2)
pa->fuv[0] += d/2.f;
@@ -614,7 +614,7 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
if (psys->part->grid_rand > 0.f) {
float rfac = d * psys->part->grid_rand;
- for (p=0, pa=psys->particles; p<psys->totpart; p++, pa++) {
+ for (p=0,pa=psys->particles; p<psys->totpart; p++,pa++) {
if (pa->flag & PARS_UNEXIST)
continue;
@@ -708,10 +708,10 @@ static void psys_uv_to_w(float u, float v, int quad, float *w)
if (quad) {
vert[3][0]= 0.0f; vert[3][1]= 1.0f; vert[3][2]= 0.0f;
- interp_weights_poly_v3(w, vert, 4, co);
+ interp_weights_poly_v3( w,vert, 4, co);
}
else {
- interp_weights_poly_v3(w, vert, 3, co);
+ interp_weights_poly_v3( w,vert, 3, co);
w[3]= 0.0f;
}
}
@@ -771,9 +771,9 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch
KDTreeNearest ptn[3];
int w, maxw;
- psys_particle_on_dm(ctx->dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co1, 0, 0, 0, orco1, 0);
+ psys_particle_on_dm(ctx->dm,from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,orco1,0);
BKE_mesh_orco_verts_transform((Mesh*)ob->data, &orco1, 1, 1);
- maxw = BLI_kdtree_find_n_nearest(ctx->tree, 3, orco1, NULL, ptn);
+ maxw = BLI_kdtree_find_n_nearest(ctx->tree,3,orco1,NULL,ptn);
for (w=0; w<maxw; w++) {
pa->verts[w]=ptn->num;
@@ -785,7 +785,7 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch
MFace *mface;
pa->num = i = ctx->index[p];
- mface = dm->getTessFaceData(dm, i, CD_MFACE);
+ mface = dm->getTessFaceData(dm,i,CD_MFACE);
switch (distr) {
case PART_DISTR_JIT:
@@ -796,7 +796,7 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch
psys_uv_to_w(0.33333f, 0.33333f, mface->v4, pa->fuv);
}
else {
- ctx->jitoff[i] = fmod(ctx->jitoff[i], (float)ctx->jitlevel);
+ ctx->jitoff[i] = fmod(ctx->jitoff[i],(float)ctx->jitlevel);
psys_uv_to_w(ctx->jit[2*(int)ctx->jitoff[i]], ctx->jit[2*(int)ctx->jitoff[i]+1], mface->v4, pa->fuv);
ctx->jitoff[i]++;
}
@@ -813,21 +813,21 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch
/* experimental */
if (from==PART_FROM_VOLUME) {
- MVert *mvert=dm->getVertDataArray(dm, CD_MVERT);
+ MVert *mvert=dm->getVertDataArray(dm,CD_MVERT);
tot=dm->getNumTessFaces(dm);
- psys_interpolate_face(mvert, mface, 0, 0, pa->fuv, co1, nor, 0, 0, 0, 0);
+ psys_interpolate_face(mvert,mface,0,0,pa->fuv,co1,nor,0,0,0,0);
normalize_v3(nor);
- mul_v3_fl(nor, -100.0);
+ mul_v3_fl(nor,-100.0);
- add_v3_v3v3(co2, co1, nor);
+ add_v3_v3v3(co2,co1,nor);
min_d=2.0;
intersect=0;
- for (i=0, mface=dm->getTessFaceDataArray(dm, CD_MFACE); i<tot; i++, mface++) {
+ for (i=0,mface=dm->getTessFaceDataArray(dm,CD_MFACE); i<tot; i++,mface++) {
if (i==pa->num) continue;
v1=mvert[mface->v1].co;
@@ -889,14 +889,14 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch
if (ctx->tree) {
KDTreeNearest ptn[10];
- int w, maxw;//, do_seams;
- float maxd /*, mind, dd */, totw= 0.0f;
+ int w,maxw;//, do_seams;
+ float maxd /*, mind,dd */, totw= 0.0f;
int parent[10];
float pweight[10];
- psys_particle_on_dm(dm, cfrom, cpa->num, DMCACHE_ISCHILD, cpa->fuv, cpa->foffset, co1, nor1, NULL, NULL, orco1, NULL);
+ psys_particle_on_dm(dm,cfrom,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co1,nor1,NULL,NULL,orco1,NULL);
BKE_mesh_orco_verts_transform((Mesh*)ob->data, &orco1, 1, 1);
- maxw = BLI_kdtree_find_n_nearest(ctx->tree, 4, orco1, NULL, ptn);
+ maxw = BLI_kdtree_find_n_nearest(ctx->tree,4,orco1,NULL,ptn);
maxd=ptn[maxw-1].dist;
/* mind=ptn[0].dist; */ /* UNUSED */
@@ -904,14 +904,14 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch
/* the weights here could be done better */
for (w=0; w<maxw; w++) {
parent[w]=ptn[w].index;
- pweight[w]=(float)pow(2.0, (double)(-6.0f*ptn[w].dist/maxd));
+ pweight[w]=(float)pow(2.0,(double)(-6.0f*ptn[w].dist/maxd));
}
for (;w<10; w++) {
parent[w]=-1;
pweight[w]=0.0f;
}
- for (w=0, i=0; w<maxw && i<4; w++) {
+ for (w=0,i=0; w<maxw && i<4; w++) {
if (parent[w]>=0) {
cpa->pa[i]=parent[w];
cpa->w[i]=pweight[w];
@@ -997,7 +997,7 @@ static void distribute_invalid(Scene *scene, ParticleSystem *psys, int from)
int p, totchild = get_psys_tot_child(scene, psys);
if (psys->child && totchild) {
- for (p=0, cpa=psys->child; p<totchild; p++, cpa++) {
+ for (p=0,cpa=psys->child; p<totchild; p++,cpa++) {
cpa->fuv[0]=cpa->fuv[1]=cpa->fuv[2]=cpa->fuv[3]= 0.0;
cpa->foffset= 0.0f;
cpa->parent=0;
@@ -1033,7 +1033,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
int cfrom=0;
int totelem=0, totpart, *particle_element=0, children=0, totseam=0;
int jitlevel= 1, distr;
- float *element_weight=NULL, *element_sum=NULL, *jitter_offset=NULL, *vweight=NULL;
+ float *element_weight=NULL,*element_sum=NULL,*jitter_offset=NULL, *vweight=NULL;
float cur, maxweight=0.0, tweight, totweight, inv_totweight, co[3], nor[3], orco[3], ornor[3];
if (ELEM3(NULL, ob, psys, psys->part))
@@ -1065,7 +1065,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
BLI_srandom(31415926 + psys->seed);
dm= CDDM_from_mesh((Mesh*)ob->data, ob);
DM_ensure_tessface(dm);
- distribute_grid(dm, psys);
+ distribute_grid(dm,psys);
dm->release(dm);
return 0;
}
@@ -1084,8 +1084,8 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
tree=BLI_kdtree_new(totpart);
- for (p=0, pa=psys->particles; p<totpart; p++, pa++) {
- psys_particle_on_dm(dm, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, co, nor, 0, 0, orco, ornor);
+ for (p=0,pa=psys->particles; p<totpart; p++,pa++) {
+ psys_particle_on_dm(dm,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,ornor);
BKE_mesh_orco_verts_transform((Mesh*)ob->data, &orco, 1, 1);
BLI_kdtree_insert(tree, p, orco, ornor);
}
@@ -1118,12 +1118,12 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
for (p=0; p<totvert; p++) {
if (orcodata) {
- copy_v3_v3(co, orcodata[p]);
+ copy_v3_v3(co,orcodata[p]);
BKE_mesh_orco_verts_transform((Mesh*)ob->data, &co, 1, 1);
}
else
- copy_v3_v3(co, mv[p].co);
- BLI_kdtree_insert(tree, p, co, NULL);
+ copy_v3_v3(co,mv[p].co);
+ BLI_kdtree_insert(tree,p,co,NULL);
}
BLI_kdtree_balance(tree);
@@ -1137,7 +1137,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
distribute_invalid(scene, psys, children ? PART_FROM_CHILD : 0);
if (G.debug & G_DEBUG)
- fprintf(stderr, "Particle distribution error: Nothing to emit from!\n");
+ fprintf(stderr,"Particle distribution error: Nothing to emit from!\n");
if (dm != finaldm) dm->release(dm);
@@ -1160,7 +1160,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
orcodata= dm->getVertDataArray(dm, CD_ORCO);
for (i=0; i<totelem; i++) {
- MFace *mf=dm->getTessFaceData(dm, i, CD_MFACE);
+ MFace *mf=dm->getTessFaceData(dm,i,CD_MFACE);
if (orcodata) {
copy_v3_v3(co1, orcodata[mf->v1]);
@@ -1175,14 +1175,14 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
}
}
else {
- v1= (MVert*)dm->getVertData(dm, mf->v1, CD_MVERT);
- v2= (MVert*)dm->getVertData(dm, mf->v2, CD_MVERT);
- v3= (MVert*)dm->getVertData(dm, mf->v3, CD_MVERT);
+ v1= (MVert*)dm->getVertData(dm,mf->v1,CD_MVERT);
+ v2= (MVert*)dm->getVertData(dm,mf->v2,CD_MVERT);
+ v3= (MVert*)dm->getVertData(dm,mf->v3,CD_MVERT);
copy_v3_v3(co1, v1->co);
copy_v3_v3(co2, v2->co);
copy_v3_v3(co3, v3->co);
if (mf->v4) {
- v4= (MVert*)dm->getVertData(dm, mf->v4, CD_MVERT);
+ v4= (MVert*)dm->getVertData(dm,mf->v4,CD_MVERT);
copy_v3_v3(co4, v4->co);
}
}
@@ -1202,14 +1202,14 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
maxweight /= totarea;
}
else {
- float min=1.0f/(float)(MIN2(totelem, totpart));
+ float min=1.0f/(float)(MIN2(totelem,totpart));
for (i=0; i<totelem; i++)
element_weight[i]=min;
maxweight=min;
}
/* Calculate weights from vgroup */
- vweight = psys_cache_vgroup(dm, psys, PSYS_VG_DENSITY);
+ vweight = psys_cache_vgroup(dm,psys,PSYS_VG_DENSITY);
if (vweight) {
if (from==PART_FROM_VERT) {
@@ -1218,7 +1218,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
}
else { /* PART_FROM_FACE / PART_FROM_VOLUME */
for (i=0;i<totelem; i++) {
- MFace *mf=dm->getTessFaceData(dm, i, CD_MFACE);
+ MFace *mf=dm->getTessFaceData(dm,i,CD_MFACE);
tweight = vweight[mf->v1] + vweight[mf->v2] + vweight[mf->v3];
if (mf->v4) {
@@ -1303,7 +1303,7 @@ static int distribute_threads_init_data(ParticleThread *threads, Scene *scene, D
}
/* Create jittering if needed */
- if (distr==PART_DISTR_JIT && ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ if (distr==PART_DISTR_JIT && ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) {
jitlevel= part->userjit;
if (jitlevel == 0) {
@@ -1399,7 +1399,7 @@ static void distribute_particles_on_shape(ParticleSimulationData *sim, int UNUSE
{
distribute_invalid(sim->scene, sim->psys, 0);
- fprintf(stderr, "Shape emission not yet possible!\n");
+ fprintf(stderr,"Shape emission not yet possible!\n");
}
static void distribute_particles(ParticleSimulationData *sim, int from)
@@ -1419,7 +1419,7 @@ static void distribute_particles(ParticleSimulationData *sim, int from)
if (distr_error) {
distribute_invalid(sim->scene, sim->psys, from);
- fprintf(stderr, "Particle distribution error!\n");
+ fprintf(stderr,"Particle distribution error!\n");
}
}
@@ -1620,18 +1620,18 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
ParticleSystem *psys = sim->psys;
ParticleSettings *part;
ParticleTexture ptex;
- float fac, phasefac, nor[3]={0, 0, 0}, loc[3], vel[3]={0.0, 0.0, 0.0}, rot[4], q2[4];
- float r_vel[3], r_ave[3], r_rot[4], vec[3], p_vel[3]={0.0, 0.0, 0.0};
- float x_vec[3]={1.0, 0.0, 0.0}, utan[3]={0.0, 1.0, 0.0}, vtan[3]={0.0, 0.0, 1.0}, rot_vec[3]={0.0, 0.0, 0.0};
+ float fac, phasefac, nor[3]={0,0,0},loc[3],vel[3]={0.0,0.0,0.0},rot[4],q2[4];
+ float r_vel[3],r_ave[3],r_rot[4],vec[3],p_vel[3]={0.0,0.0,0.0};
+ float x_vec[3]={1.0,0.0,0.0}, utan[3]={0.0,1.0,0.0}, vtan[3]={0.0,0.0,1.0}, rot_vec[3]={0.0,0.0,0.0};
float q_phase[4];
int p = pa - psys->particles;
part=psys->part;
/* get birth location from object */
if (part->tanfac != 0.f)
- psys_particle_on_emitter(sim->psmd, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, loc, nor, utan, vtan, 0, 0);
+ psys_particle_on_emitter(sim->psmd, part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0);
else
- psys_particle_on_emitter(sim->psmd, part->from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, loc, nor, 0, 0, 0, 0);
+ psys_particle_on_emitter(sim->psmd, part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,0,0,0,0);
/* get possible textural influence */
psys_get_texture(sim, pa, &ptex, PAMAP_IVEL, cfra);
@@ -1647,16 +1647,16 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
/* -tangent */
if (part->tanfac!=0.0f) {
- //float phase=vg_rot?2.0f*(psys_particle_value_from_verts(sim->psmd->dm, part->from, pa, vg_rot)-0.5f):0.0f;
+ //float phase=vg_rot?2.0f*(psys_particle_value_from_verts(sim->psmd->dm,part->from,pa,vg_rot)-0.5f):0.0f;
float phase=0.0f;
- mul_v3_fl(vtan, -cosf((float)M_PI*(part->tanphase+phase)));
+ mul_v3_fl(vtan,-cosf((float)M_PI*(part->tanphase+phase)));
fac= -sinf((float)M_PI*(part->tanphase+phase));
madd_v3_v3fl(vtan, utan, fac);
- mul_mat3_m4_v3(ob->obmat, vtan);
+ mul_mat3_m4_v3(ob->obmat,vtan);
copy_v3_v3(utan, nor);
- mul_v3_fl(utan, dot_v3v3(vtan, nor));
+ mul_v3_fl(utan,dot_v3v3(vtan,nor));
sub_v3_v3(vtan, utan);
normalize_v3(vtan);
@@ -1679,7 +1679,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
r_ave[1] = 2.0f * (PSYS_FRAND(p + 14) - 0.5f);
r_ave[2] = 2.0f * (PSYS_FRAND(p + 15) - 0.5f);
- mul_mat3_m4_v3(ob->obmat, r_ave);
+ mul_mat3_m4_v3(ob->obmat,r_ave);
normalize_v3(r_ave);
}
@@ -1691,14 +1691,14 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
r_rot[3] = 2.0f * (PSYS_FRAND(p + 19) - 0.5f);
normalize_qt(r_rot);
- mat4_to_quat(rot, ob->obmat);
- mul_qt_qtqt(r_rot, r_rot, rot);
+ mat4_to_quat(rot,ob->obmat);
+ mul_qt_qtqt(r_rot,r_rot,rot);
}
if (part->phystype==PART_PHYS_BOIDS && pa->boid) {
float dvec[3], q[4], mat[3][3];
- copy_v3_v3(state->co, loc);
+ copy_v3_v3(state->co,loc);
/* boids don't get any initial velocity */
zero_v3(state->vel);
@@ -1721,7 +1721,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
cross_v3_v3v3(mat[1], mat[2], mat[0]);
/* apply rotation */
- mat3_to_quat_is_ok(q, mat);
+ mat3_to_quat_is_ok( q,mat);
copy_qt_qt(state->rot, q);
}
else {
@@ -1775,7 +1775,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
mul_v3_v3fl(state->vel, vel, ptex.ivel);
/* -location from emitter */
- copy_v3_v3(state->co, loc);
+ copy_v3_v3(state->co,loc);
/* -rotation */
unit_qt(state->rot);
@@ -1803,19 +1803,19 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
/* create rotation quat */
negate_v3(rot_vec);
- vec_to_quat(q2, rot_vec, OB_POSX, OB_POSZ);
+ vec_to_quat( q2,rot_vec, OB_POSX, OB_POSZ);
/* randomize rotation quat */
if (part->randrotfac!=0.0f)
interp_qt_qtqt(rot, q2, r_rot, part->randrotfac);
else
- copy_qt_qt(rot, q2);
+ copy_qt_qt(rot,q2);
/* rotation phase */
phasefac = part->phasefac;
if (part->randphasefac != 0.0f)
phasefac += part->randphasefac * PSYS_FRAND(p + 20);
- axis_angle_to_quat(q_phase, x_vec, phasefac*(float)M_PI);
+ axis_angle_to_quat( q_phase,x_vec, phasefac*(float)M_PI);
/* combine base rotation & phase */
mul_qt_qtqt(state->rot, rot, q_phase);
@@ -2133,7 +2133,7 @@ static void psys_update_effectors(ParticleSimulationData *sim)
static void integrate_particle(ParticleSettings *part, ParticleData *pa, float dtime, float *external_acceleration, void (*force_func)(void *forcedata, ParticleKey *state, float *force, float *impulse), void *forcedata)
{
ParticleKey states[5];
- float force[3], acceleration[3], impulse[3], dx[4][3], dv[4][3], oldpos[3];
+ float force[3],acceleration[3],impulse[3],dx[4][3],dv[4][3],oldpos[3];
float pa_mass= (part->flag & PART_SIZEMASS ? part->mass * pa->size : part->mass);
int i, steps=1;
int integrator = part->integrator;
@@ -2538,10 +2538,10 @@ static void sph_force_cb(void *sphdata_v, ParticleKey *state, float *force, floa
u = dot_v3v3(vec, dv);
if (u < 0.f && visc > 0.f)
- madd_v3_v3fl(force, vec, 0.5f * q * visc * u);
+ madd_v3_v3fl(force, vec, 0.5f * q * visc * u );
if (u > 0.f && stiff_visc > 0.f)
- madd_v3_v3fl(force, vec, 0.5f * q * stiff_visc * u);
+ madd_v3_v3fl(force, vec, 0.5f * q * stiff_visc * u );
}
if (spring_constant > 0.f) {
@@ -2714,23 +2714,23 @@ static void basic_integrate(ParticleSimulationData *sim, int p, float dfra, floa
time=(cfra-pa->time)/pa->lifetime;
CLAMP(time, 0.0f, 1.0f);
- copy_v3_v3(tkey.co, pa->state.co);
- copy_v3_v3(tkey.vel, pa->state.vel);
+ copy_v3_v3(tkey.co,pa->state.co);
+ copy_v3_v3(tkey.vel,pa->state.vel);
tkey.time=pa->state.time;
if (part->type != PART_HAIR) {
if (do_guides(sim->psys->effectors, &tkey, p, time)) {
- copy_v3_v3(pa->state.co, tkey.co);
+ copy_v3_v3(pa->state.co,tkey.co);
/* guides don't produce valid velocity */
sub_v3_v3v3(pa->state.vel, tkey.co, pa->prev_state.co);
- mul_v3_fl(pa->state.vel, 1.0f/dtime);
+ mul_v3_fl(pa->state.vel,1.0f/dtime);
pa->state.time=tkey.time;
}
}
}
static void basic_rotate(ParticleSettings *part, ParticleData *pa, float dfra, float timestep)
{
- float rotfac, rot1[4], rot2[4]={1.0, 0.0, 0.0, 0.0}, dtime=dfra*timestep;
+ float rotfac, rot1[4], rot2[4]={1.0,0.0,0.0,0.0}, dtime=dfra*timestep;
if ((part->flag & PART_ROTATIONS)==0) {
pa->state.rot[0]=1.0f;
@@ -2758,15 +2758,15 @@ static void basic_rotate(ParticleSettings *part, ParticleData *pa, float dfra, f
}
rotfac = len_v3(pa->state.ave);
- if (rotfac == 0.0f) { /* unit_qt(in VecRotToQuat) doesn't give unit quat [1, 0, 0, 0]?? */
+ if (rotfac == 0.0f) { /* unit_qt(in VecRotToQuat) doesn't give unit quat [1,0,0,0]?? */
rot1[0]=1.0f;
rot1[1]=rot1[2]=rot1[3]=0;
}
else {
- axis_angle_to_quat(rot1, pa->state.ave, rotfac*dtime);
+ axis_angle_to_quat(rot1,pa->state.ave,rotfac*dtime);
}
- mul_qt_qtqt(pa->state.rot, rot1, pa->prev_state.rot);
- mul_qt_qtqt(pa->state.rot, rot2, pa->state.rot);
+ mul_qt_qtqt(pa->state.rot,rot1,pa->prev_state.rot);
+ mul_qt_qtqt(pa->state.rot,rot2,pa->state.rot);
/* keep rotation quat in good health */
normalize_qt(pa->state.rot);
@@ -3257,8 +3257,8 @@ static int collision_response(ParticleData *pa, ParticleCollision *col, BVHTreeR
float frict = pd->pdef_frict + pd->pdef_rfrict * 2 * (BLI_frand() - 0.5f);
float distance, nor[3], dot;
- CLAMP(damp, 0.0f, 1.0f);
- CLAMP(frict, 0.0f, 1.0f);
+ CLAMP(damp,0.0f, 1.0f);
+ CLAMP(frict,0.0f, 1.0f);
/* get exact velocity right before collision */
madd_v3_v3v3fl(v0, col->ve1, col->acc, dt1);
@@ -3604,7 +3604,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim)
psys_mat_hair_to_object(sim->ob, sim->psmd->dm, psys->part->from, pa, hairmat);
- for (k=0, key=pa->hair; k<pa->totkey; k++, key++) {
+ for (k=0, key=pa->hair; k<pa->totkey; k++,key++) {
/* create fake root before actual root to resist bending */
if (k==0) {
@@ -3870,7 +3870,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra)
}
/* initialize all particles for dynamics */
LOOP_SHOWN_PARTICLES {
- copy_particle_key(&pa->prev_state, &pa->state, 1);
+ copy_particle_key(&pa->prev_state,&pa->state,1);
psys_get_texture(sim, pa, &ptex, PAMAP_SIZE, cfra);
@@ -3949,7 +3949,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra)
SPHData sphdata;
sph_solver_init(sim, &sphdata);
- #pragma omp parallel for firstprivate (sphdata) private (pa) schedule(dynamic, 5)
+ #pragma omp parallel for firstprivate (sphdata) private (pa) schedule(dynamic,5)
LOOP_DYNAMIC_PARTICLES {
/* do global forces & effectors */
basic_integrate(sim, p, pa->state.time, cfra);
@@ -4086,7 +4086,7 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra))
gzf = BLI_gzopen(filename, "rb");
if (!gzf) {
- BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "readFsPartData::error - Unable to open file for reading '%s'\n", filename);
+ BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer),"readFsPartData::error - Unable to open file for reading '%s'\n", filename);
// XXX bad level call elbeemDebugOut(debugStrBuffer);
return;
}
@@ -4107,23 +4107,23 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra))
for (p=0, pa=psys->particles; p<totpart; p++, pa++) {
int ptype=0;
- gzread(gzf, &ptype, sizeof(ptype));
+ gzread(gzf, &ptype, sizeof( ptype ));
if (ptype&readMask) {
activeParts++;
- gzread(gzf, &(pa->size), sizeof(float));
+ gzread(gzf, &(pa->size), sizeof( float ));
pa->size /= 10.0f;
for (j=0; j<3; j++) {
float wrf;
- gzread(gzf, &wrf, sizeof(wrf));
+ gzread(gzf, &wrf, sizeof( wrf ));
pa->state.co[j] = wrf;
- //fprintf(stderr, "Rj%d ", j);
+ //fprintf(stderr,"Rj%d ",j);
}
for (j=0; j<3; j++) {
float wrf;
- gzread(gzf, &wrf, sizeof(wrf));
+ gzread(gzf, &wrf, sizeof( wrf ));
pa->state.vel[j] = wrf;
}
@@ -4135,7 +4135,7 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra))
pa->dietime = sim->scene->r.efra + 1;
pa->lifetime = sim->scene->r.efra;
pa->alive = PARS_ALIVE;
- //if (a < 25) fprintf(stderr, "FSPARTICLE debug set %s, a%d = %f, %f, %f, life=%f\n", filename, a, pa->co[0], pa->co[1], pa->co[2], pa->lifetime );
+ //if (a < 25) fprintf(stderr,"FSPARTICLE debug set %s , a%d = %f,%f,%f , life=%f\n", filename, a, pa->co[0],pa->co[1],pa->co[2], pa->lifetime );
}
else {
// skip...
@@ -4148,7 +4148,7 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra))
gzclose(gzf);
totpart = psys->totpart = activeParts;
- BLI_snprintf(debugStrBuffer, sizeof(debugStrBuffer), "readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d\n", psys->totpart, activeParts, fileParts, readMask);
+ BLI_snprintf(debugStrBuffer,sizeof(debugStrBuffer),"readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d\n", psys->totpart,activeParts,fileParts,readMask);
// bad level call
// XXX elbeemDebugOut(debugStrBuffer);
@@ -4303,7 +4303,7 @@ static void system_step(ParticleSimulationData *sim, float cfra)
dynamics_step(sim, cfra+dframe+t_frac - 1.f);
psys->cfra = cfra+dframe+t_frac - 1.f;
#if 0
- printf("%f, %f, %f, %f\n", cfra+dframe+t_frac - 1.f, t_frac, dt_frac, sim->courant_num);
+ printf("%f,%f,%f,%f\n", cfra+dframe+t_frac - 1.f, t_frac, dt_frac, sim->courant_num);
#endif
if (part->time_flag & PART_TIME_AUTOSF)
dt_frac = update_timestep(psys, sim, t_frac);
@@ -4590,7 +4590,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
if (part->phystype == PART_PHYS_KEYED) {
psys_count_keyed_targets(&sim);
set_keyed_keys(&sim);
- psys_update_path_cache(&sim, (int)cfra);
+ psys_update_path_cache(&sim,(int)cfra);
}
break;
}
diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c
index a7df6b10f06..3a66ec23412 100644
--- a/source/blender/blenkernel/intern/report.c
+++ b/source/blender/blenkernel/intern/report.c
@@ -63,9 +63,9 @@ void BKE_reports_init(ReportList *reports, int flag)
memset(reports, 0, sizeof(ReportList));
- reports->storelevel= RPT_INFO;
- reports->printlevel= RPT_ERROR;
- reports->flag= flag;
+ reports->storelevel = RPT_INFO;
+ reports->printlevel = RPT_ERROR;
+ reports->flag = flag;
}
void BKE_reports_clear(ReportList *reports)
@@ -75,16 +75,16 @@ void BKE_reports_clear(ReportList *reports)
if (!reports)
return;
- report= reports->list.first;
+ report = reports->list.first;
while (report) {
- report_next= report->next;
+ report_next = report->next;
MEM_freeN((void *)report->message);
MEM_freeN(report);
- report= report_next;
+ report = report_next;
}
- reports->list.first= reports->list.last= NULL;
+ reports->list.first = reports->list.last = NULL;
}
void BKE_report(ReportList *reports, ReportType type, const char *message)
@@ -101,15 +101,15 @@ void BKE_report(ReportList *reports, ReportType type, const char *message)
if (reports && (reports->flag & RPT_STORE) && (type >= reports->storelevel)) {
char *message_alloc;
- report= MEM_callocN(sizeof(Report), "Report");
- report->type= type;
- report->typestr= report_type_str(type);
-
- len= strlen(message);
- message_alloc= MEM_callocN(sizeof(char)*(len+1), "ReportMessage");
- memcpy(message_alloc, message, sizeof(char)*(len+1));
- report->message= message_alloc;
- report->len= len;
+ report = MEM_callocN(sizeof(Report), "Report");
+ report->type = type;
+ report->typestr = report_type_str(type);
+
+ len = strlen(message);
+ message_alloc = MEM_callocN(sizeof(char) * (len + 1), "ReportMessage");
+ memcpy(message_alloc, message, sizeof(char) * (len + 1));
+ report->message = message_alloc;
+ report->len = len;
BLI_addtail(&reports->list, report);
}
}
@@ -129,19 +129,19 @@ void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...)
}
if (reports && (reports->flag & RPT_STORE) && (type >= reports->storelevel)) {
- report= MEM_callocN(sizeof(Report), "Report");
+ report = MEM_callocN(sizeof(Report), "Report");
- ds= BLI_dynstr_new();
+ ds = BLI_dynstr_new();
va_start(args, format);
BLI_dynstr_vappendf(ds, format, args);
va_end(args);
- report->message= BLI_dynstr_get_cstring(ds);
- report->len= BLI_dynstr_get_len(ds);
+ report->message = BLI_dynstr_get_cstring(ds);
+ report->len = BLI_dynstr_get_len(ds);
BLI_dynstr_free(ds);
- report->type= type;
- report->typestr= report_type_str(type);
+ report->type = type;
+ report->typestr = report_type_str(type);
BLI_addtail(&reports->list, report);
}
@@ -155,15 +155,15 @@ void BKE_reports_prepend(ReportList *reports, const char *prepend)
if (!reports)
return;
- for (report=reports->list.first; report; report=report->next) {
- ds= BLI_dynstr_new();
+ for (report = reports->list.first; report; report = report->next) {
+ ds = BLI_dynstr_new();
BLI_dynstr_append(ds, prepend);
BLI_dynstr_append(ds, report->message);
MEM_freeN((void *)report->message);
- report->message= BLI_dynstr_get_cstring(ds);
- report->len= BLI_dynstr_get_len(ds);
+ report->message = BLI_dynstr_get_cstring(ds);
+ report->len = BLI_dynstr_get_len(ds);
BLI_dynstr_free(ds);
}
@@ -178,8 +178,8 @@ void BKE_reports_prependf(ReportList *reports, const char *prepend, ...)
if (!reports)
return;
- for (report=reports->list.first; report; report=report->next) {
- ds= BLI_dynstr_new();
+ for (report = reports->list.first; report; report = report->next) {
+ ds = BLI_dynstr_new();
va_start(args, prepend);
BLI_dynstr_vappendf(ds, prepend, args);
va_end(args);
@@ -187,8 +187,8 @@ void BKE_reports_prependf(ReportList *reports, const char *prepend, ...)
BLI_dynstr_append(ds, report->message);
MEM_freeN((void *)report->message);
- report->message= BLI_dynstr_get_cstring(ds);
- report->len= BLI_dynstr_get_len(ds);
+ report->message = BLI_dynstr_get_cstring(ds);
+ report->len = BLI_dynstr_get_len(ds);
BLI_dynstr_free(ds);
}
@@ -207,7 +207,7 @@ void BKE_report_print_level_set(ReportList *reports, ReportType level)
if (!reports)
return;
- reports->printlevel= level;
+ reports->printlevel = level;
}
ReportType BKE_report_store_level(ReportList *reports)
@@ -223,7 +223,7 @@ void BKE_report_store_level_set(ReportList *reports, ReportType level)
if (!reports)
return;
- reports->storelevel= level;
+ reports->storelevel = level;
}
char *BKE_reports_string(ReportList *reports, ReportType level)
@@ -235,15 +235,15 @@ char *BKE_reports_string(ReportList *reports, ReportType level)
if (!reports || !reports->list.first)
return NULL;
- ds= BLI_dynstr_new();
- for (report=reports->list.first; report; report=report->next)
+ ds = BLI_dynstr_new();
+ for (report = reports->list.first; report; report = report->next)
if (report->type >= level)
BLI_dynstr_appendf(ds, "%s: %s\n", report->typestr, report->message);
if (BLI_dynstr_get_len(ds))
- cstring= BLI_dynstr_get_cstring(ds);
+ cstring = BLI_dynstr_get_cstring(ds);
else
- cstring= NULL;
+ cstring = NULL;
BLI_dynstr_free(ds);
return cstring;
@@ -265,7 +265,7 @@ Report *BKE_reports_last_displayable(ReportList *reports)
{
Report *report;
- for (report= reports->list.last; report; report=report->prev) {
+ for (report = reports->list.last; report; report = report->prev) {
if (ELEM3(report->type, RPT_ERROR, RPT_WARNING, RPT_INFO))
return report;
}
@@ -277,7 +277,7 @@ int BKE_reports_contain(ReportList *reports, ReportType level)
{
Report *report;
if (reports != NULL) {
- for (report=reports->list.first; report; report=report->next)
+ for (report = reports->list.first; report; report = report->next)
if (report->type >= level)
return TRUE;
}
diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c
index 9358b786472..ca851fd4c81 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -74,10 +74,11 @@ enum {
GlowA = 3
};
-static struct ImBuf *prepare_effect_imbufs(
- SeqRenderData context,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *prepare_effect_imbufs(
+ SeqRenderData context,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out;
int x = context.rectx;
int y = context.recty;
@@ -282,7 +283,7 @@ static ImBuf *IMB_cast_away_list(ImBuf *i)
return (ImBuf *) (((void **) i) + 2);
}
-static struct ImBuf *do_plugin_effect(
+static ImBuf *do_plugin_effect(
SeqRenderData context, Sequence *seq, float cfra,
float facf0, float facf1,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -541,7 +542,7 @@ static void do_alphaover_effect_float(float facf0, float facf1, int x, int y,
}
}
-static struct ImBuf *do_alphaover_effect(
+static ImBuf *do_alphaover_effect(
SeqRenderData context, Sequence *UNUSED(seq), float UNUSED(cfra),
float facf0, float facf1,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -719,7 +720,7 @@ static void do_alphaunder_effect_float(float facf0, float facf1, int x, int y,
}
}
-static struct ImBuf *do_alphaunder_effect(
+static ImBuf *do_alphaunder_effect(
SeqRenderData context, Sequence *UNUSED(seq), float UNUSED(cfra),
float facf0, float facf1,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -845,7 +846,7 @@ static void do_cross_effect_float(float facf0, float facf1, int x, int y,
/* careful: also used by speed effect! */
-static struct ImBuf *do_cross_effect(
+static ImBuf *do_cross_effect(
SeqRenderData context, Sequence *UNUSED(seq), float UNUSED(cfra),
float facf0, float facf1,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -1111,7 +1112,7 @@ static void do_gammacross_effect_float(float facf0, float UNUSED(facf1),
}
}
-static struct ImBuf *do_gammacross_effect(
+static ImBuf *do_gammacross_effect(
SeqRenderData context,
Sequence *UNUSED(seq), float UNUSED(cfra),
float facf0, float facf1,
@@ -1231,11 +1232,12 @@ static void do_add_effect_float(float facf0, float facf1, int x, int y,
}
}
-static struct ImBuf *do_add_effect(SeqRenderData context,
- Sequence *UNUSED(seq), float UNUSED(cfra),
- float facf0, float facf1,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *do_add_effect(SeqRenderData context,
+ Sequence *UNUSED(seq), float UNUSED(cfra),
+ float facf0, float facf1,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
if (out->rect_float) {
@@ -1347,11 +1349,12 @@ static void do_sub_effect_float(float facf0, float facf1, int x, int y,
}
}
-static struct ImBuf *do_sub_effect(
- SeqRenderData context, Sequence *UNUSED(seq), float UNUSED(cfra),
- float facf0, float facf1,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *do_sub_effect(
+ SeqRenderData context, Sequence *UNUSED(seq), float UNUSED(cfra),
+ float facf0, float facf1,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
if (out->rect_float) {
@@ -1560,7 +1563,7 @@ static void do_mul_effect_float(float facf0, float facf1, int x, int y,
}
}
-static struct ImBuf *do_mul_effect(
+static ImBuf *do_mul_effect(
SeqRenderData context, Sequence *UNUSED(seq), float UNUSED(cfra),
float facf0, float facf1,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2008,11 +2011,12 @@ static void do_wipe_effect_float(Sequence *seq, float facf0, float UNUSED(facf1)
}
}
-static struct ImBuf *do_wipe_effect(
- SeqRenderData context, Sequence *seq, float UNUSED(cfra),
- float facf0, float facf1,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *do_wipe_effect(
+ SeqRenderData context, Sequence *seq, float UNUSED(cfra),
+ float facf0, float facf1,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
if (out->rect_float) {
@@ -2155,11 +2159,12 @@ static void do_transform(Scene *scene, Sequence *seq, float UNUSED(facf0), int x
}
-static struct ImBuf *do_transform_effect(
- SeqRenderData context, Sequence *seq, float UNUSED(cfra),
- float facf0, float UNUSED(facf1),
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *do_transform_effect(
+ SeqRenderData context, Sequence *seq, float UNUSED(cfra),
+ float facf0, float UNUSED(facf1),
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
do_transform(context.scene, seq, facf0,
@@ -2671,7 +2676,7 @@ static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, fl
RVAddBitmaps_float(inbuf, outbuf, outbuf, x, y);
}
-static struct ImBuf *do_glow_effect(
+static ImBuf *do_glow_effect(
SeqRenderData context, Sequence *seq, float UNUSED(cfra),
float facf0, float facf1,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2736,11 +2741,12 @@ static int early_out_color(struct Sequence *UNUSED(seq),
return -1;
}
-static struct ImBuf *do_solid_color(
- SeqRenderData context, Sequence *seq, float UNUSED(cfra),
- float facf0, float facf1,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *do_solid_color(
+ SeqRenderData context, Sequence *seq, float UNUSED(cfra),
+ float facf0, float facf1,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
SolidColorVars *cv = (SolidColorVars *)seq->effectdata;
@@ -2833,11 +2839,12 @@ static int early_out_multicam(struct Sequence *UNUSED(seq), float UNUSED(facf0),
return -1;
}
-static struct ImBuf *do_multicam(
- SeqRenderData context, Sequence *seq, float cfra,
- float UNUSED(facf0), float UNUSED(facf1),
- struct ImBuf *UNUSED(ibuf1), struct ImBuf *UNUSED(ibuf2),
- struct ImBuf *UNUSED(ibuf3)){
+static ImBuf *do_multicam(
+ SeqRenderData context, Sequence *seq, float cfra,
+ float UNUSED(facf0), float UNUSED(facf1),
+ struct ImBuf *UNUSED(ibuf1), struct ImBuf *UNUSED(ibuf2),
+ struct ImBuf *UNUSED(ibuf3))
+{
struct ImBuf *i;
struct ImBuf *out;
Editing *ed;
@@ -2887,8 +2894,8 @@ static int early_out_adjustment(struct Sequence *UNUSED(seq), float UNUSED(facf0
return -1;
}
-static struct ImBuf *do_adjustment_impl(SeqRenderData context, Sequence *seq,
- float cfra){
+static ImBuf *do_adjustment_impl(SeqRenderData context, Sequence *seq, float cfra)
+{
Editing *ed;
ListBase *seqbasep;
struct ImBuf *i = NULL;
@@ -2920,11 +2927,12 @@ static struct ImBuf *do_adjustment_impl(SeqRenderData context, Sequence *seq,
return i;
}
-static struct ImBuf *do_adjustment(
- SeqRenderData context, Sequence *seq, float cfra,
- float UNUSED(facf0), float UNUSED(facf1),
- struct ImBuf *UNUSED(ibuf1), struct ImBuf *UNUSED(ibuf2),
- struct ImBuf *UNUSED(ibuf3)){
+static ImBuf *do_adjustment(
+ SeqRenderData context, Sequence *seq, float cfra,
+ float UNUSED(facf0), float UNUSED(facf1),
+ struct ImBuf *UNUSED(ibuf1), struct ImBuf *UNUSED(ibuf2),
+ struct ImBuf *UNUSED(ibuf3))
+{
struct ImBuf *i = NULL;
struct ImBuf *out;
Editing *ed;
@@ -3214,13 +3222,14 @@ static void get_default_fac_fade(struct Sequence *seq, float cfra,
*facf1 /= seq->len;
}
-static struct ImBuf *do_overdrop_effect(SeqRenderData context,
- Sequence *UNUSED(seq),
- float UNUSED(cfra),
- float facf0, float facf1,
- struct ImBuf *ibuf1,
- struct ImBuf *ibuf2,
- struct ImBuf *ibuf3){
+static ImBuf *do_overdrop_effect(SeqRenderData context,
+ Sequence *UNUSED(seq),
+ float UNUSED(cfra),
+ float facf0, float facf1,
+ struct ImBuf *ibuf1,
+ struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
struct ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
int x = context.rectx;
int y = context.recty;
@@ -3250,7 +3259,8 @@ static struct ImBuf *do_overdrop_effect(SeqRenderData context,
return out;
}
-static struct SeqEffectHandle get_sequence_effect_impl(int seq_type){
+static struct SeqEffectHandle get_sequence_effect_impl(int seq_type)
+{
struct SeqEffectHandle rval;
int sequence_type = seq_type;
diff --git a/source/blender/blenkernel/intern/sketch.c b/source/blender/blenkernel/intern/sketch.c
index 32681c3a041..707d97a1cf1 100644
--- a/source/blender/blenkernel/intern/sketch.c
+++ b/source/blender/blenkernel/intern/sketch.c
@@ -55,7 +55,7 @@ void freeSketch(SK_Sketch *sketch)
MEM_freeN(sketch);
}
-SK_Sketch* createSketch(void)
+SK_Sketch *createSketch(void)
{
SK_Sketch *sketch;
@@ -101,7 +101,7 @@ void sk_freeStroke(SK_Stroke *stk)
MEM_freeN(stk);
}
-SK_Stroke* sk_createStroke(void)
+SK_Stroke *sk_createStroke(void)
{
SK_Stroke *stk;
@@ -261,13 +261,13 @@ void sk_polygonizeStroke(SK_Stroke *stk, int start, int end)
int i;
/* find first exact points outside of range */
- for (;start > 0; start--) {
+ for (; start > 0; start--) {
if (stk->points[start].type == PT_EXACT) {
break;
}
}
- for (;end < stk->nb_points - 1; end++) {
+ for (; end < stk->nb_points - 1; end++) {
if (stk->points[end].type == PT_EXACT) {
break;
}
@@ -382,7 +382,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end)
work = 0;
ls = start;
- le = start+1;
+ le = start + 1;
/* while not over interval */
while (ls < end) {
@@ -400,7 +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];
@@ -412,9 +412,9 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end)
continue;
}
- mul = (float)(v1[0]*v2[0] + v1[1]*v2[1]) / (float)(v2[0]*v2[0] + v2[1]*v2[1]);
+ mul = (float)(v1[0] * v2[0] + v1[1] * v2[1]) / (float)(v2[0] * v2[0] + v2[1] * v2[1]);
- dist = mul * mul * (v2[0]*v2[0] + v2[1]*v2[1]);
+ dist = mul * mul * (v2[0] * v2[0] + v2[1] * v2[1]);
if (dist > max_dist) {
max_dist = dist;
@@ -457,7 +457,7 @@ void sk_filterLastContinuousStroke(SK_Stroke *stk)
{
int start, end;
- end = stk->nb_points -1;
+ end = stk->nb_points - 1;
for (start = end - 1; start > 0 && stk->points[start].type == PT_CONTINUOUS; start--) {
/* nothing to do here*/
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index ee70d4228de..1041fb12305 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -3233,9 +3233,9 @@ static void springs_from_mesh(Object *ob)
sb= ob->soft;
if (me && sb) {
/* using bp->origS as a container for spring calcualtions here
- ** will be overwritten sbObjectStep() to receive
- ** actual modifier stack positions
- */
+ * will be overwritten sbObjectStep() to receive
+ * actual modifier stack positions
+ */
if (me->totvert) {
bp= ob->soft->bpoint;
for (a=0; a<me->totvert; a++, bp++) {
@@ -3283,10 +3283,10 @@ static void mesh_to_softbody(Scene *scene, Object *ob)
for (a=0; a<me->totvert; a++, bp++) {
/* get scalar values needed *per vertex* from vertex group functions,
- so we can *paint* them nicly ..
- they are normalized [0.0..1.0] so may be we need amplitude for scale
- which can be done by caller but still .. i'd like it to go this way
- */
+ * so we can *paint* them nicly ..
+ * they are normalized [0.0..1.0] so may be we need amplitude for scale
+ * which can be done by caller but still .. i'd like it to go this way
+ */
if ((ob->softflag & OB_SB_GOAL) && sb->vertgroup) { /* even this is a deprecated evil hack */
/* I'd like to have it .. if (sb->namedVG_Goal[0]) */
@@ -3306,8 +3306,8 @@ static void mesh_to_softbody(Scene *scene, Object *ob)
}
/* to proove the concept
- this enables per vertex *mass painting*
- */
+ * this enables per vertex *mass painting*
+ */
if (sb->namedVG_Mass[0]) {
int grp= defgroup_name_index (ob, sb->namedVG_Mass);
@@ -3411,9 +3411,9 @@ static void reference_to_scratch(Object *ob)
}
/*
-helper function to get proper spring length
-when object is rescaled
-*/
+ * helper function to get proper spring length
+ * when object is rescaled
+ */
static float globallen(float *v1, float *v2, Object *ob)
{
float p1[3], p2[3];
@@ -3669,7 +3669,7 @@ static void sb_new_scratch(SoftBody *sb)
{
if (!sb) return;
sb->scratch = MEM_callocN(sizeof(SBScratch), "SBScratch");
- sb->scratch->colliderhash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "sb_new_scratch gh");
+ sb->scratch->colliderhash = BLI_ghash_ptr_new("sb_new_scratch gh");
sb->scratch->bodyface = NULL;
sb->scratch->totface = 0;
sb->scratch->aabbmax[0]=sb->scratch->aabbmax[1]=sb->scratch->aabbmax[2] = 1.0e30f;
@@ -3793,7 +3793,7 @@ static void softbody_update_positions(Object *ob, SoftBody *sb, float (*vertexCo
/* vertexCos came from local world, go global */
mul_m4_v3(ob->obmat, bp->origE);
/* just to be save give bp->origT a defined value
- will be calulated in interpolate_exciter()*/
+ * will be calulated in interpolate_exciter()*/
copy_v3_v3(bp->origT, bp->origE);
}
}
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 52007f1f43e..28fb75db41c 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -173,6 +173,7 @@ void sound_force_device(int device)
void sound_init_once(void)
{
AUD_initOnce();
+ atexit(sound_exit);
}
void sound_init(struct Main *bmain)
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 2c05029e82e..127f5369ca5 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -414,9 +414,7 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result,
/* make a map from original faces to CCGFaces */
faceMap = MEM_mallocN(totface * sizeof(*faceMap), "facemapuv");
-
- fi = ccgSubSurf_getFaceIterator(uvss);
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ for (fi = ccgSubSurf_getFaceIterator(uvss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
faceMap[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f))] = f;
}
@@ -664,9 +662,9 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
- CCGVertIterator *vi = ccgSubSurf_getVertIterator(ss);
- CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
- CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
+ CCGVertIterator *vi;
+ CCGEdgeIterator *ei;
+ CCGFaceIterator *fi;
CCGKey key;
int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
int gridSize = ccgSubSurf_getGridSize(ss);
@@ -676,22 +674,24 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
if (!ccgSubSurf_getNumVerts(ss))
min_r[0] = min_r[1] = min_r[2] = max_r[0] = max_r[1] = max_r[2] = 0.0;
- for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
+ for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
float *co = ccgSubSurf_getVertData(ss, v);
minmax_v3_v3v3(co, min_r, max_r);
}
+ ccgVertIterator_free(vi);
- for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
for (i = 0; i < edgeSize; i++)
minmax_v3_v3v3(CCG_elem_offset_co(&key, edgeData, i), min_r, max_r);
}
+ ccgEdgeIterator_free(ei);
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
@@ -703,10 +703,7 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
minmax_v3_v3v3(CCG_grid_elem_co(&key, faceGridData, x, y), min_r, max_r);
}
}
-
ccgFaceIterator_free(fi);
- ccgEdgeIterator_free(ei);
- ccgVertIterator_free(vi);
}
static int ccgDM_getNumVerts(DerivedMesh *dm)
@@ -1048,7 +1045,7 @@ void subsurf_copy_grid_hidden(DerivedMesh *dm, const MPoly *mpoly,
}
/* Translate GridPaintMask into vertex paint masks. Assumes vertices
- are in the order output by ccgDM_copyFinalVertArray. */
+ * are in the order output by ccgDM_copyFinalVertArray. */
void subsurf_copy_grid_paint_mask(DerivedMesh *dm, const MPoly *mpoly,
float *paint_mask,
const GridPaintMask *grid_paint_mask)
@@ -1399,8 +1396,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
totvert = ccgSubSurf_getNumVerts(ss);
vertMap2 = MEM_mallocN(totvert * sizeof(*vertMap2), "vertmap");
- vi = ccgSubSurf_getVertIterator(ss);
- for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
+ for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))] = v;
@@ -1409,8 +1405,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
totedge = ccgSubSurf_getNumEdges(ss);
edgeMap2 = MEM_mallocN(totedge * sizeof(*edgeMap2), "edgemap");
- ei = ccgSubSurf_getEdgeIterator(ss);
- for (i = 0; !ccgEdgeIterator_isStopped(ei); i++, ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss), i = 0; !ccgEdgeIterator_isStopped(ei); i++, ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))] = e;
@@ -1418,8 +1413,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
totface = ccgSubSurf_getNumFaces(ss);
faceMap2 = MEM_mallocN(totface * sizeof(*faceMap2), "facemap");
- fi = ccgSubSurf_getFaceIterator(ss);
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
faceMap2[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f))] = f;
@@ -1473,11 +1467,11 @@ static void ccgDM_foreachMappedVert(
void *userData)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
- CCGVertIterator *vi = ccgSubSurf_getVertIterator(ccgdm->ss);
+ CCGVertIterator *vi;
CCGKey key;
CCG_key_top_level(&key, ccgdm->ss);
- for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
+ for (vi = ccgSubSurf_getVertIterator(ccgdm->ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
CCGElem *vd = ccgSubSurf_getVertData(ccgdm->ss, v);
int index = ccgDM_getVertMapIndex(ccgdm->ss, v);
@@ -1496,13 +1490,13 @@ static void ccgDM_foreachMappedEdge(
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
- CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
+ CCGEdgeIterator *ei;
CCGKey key;
int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
CCG_key_top_level(&key, ss);
- for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
int index = ccgDM_getEdgeMapIndex(ss, e);
@@ -1527,15 +1521,13 @@ static void ccgDM_drawVerts(DerivedMesh *dm)
CCGFaceIterator *fi;
glBegin(GL_POINTS);
- vi = ccgSubSurf_getVertIterator(ss);
- for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
+ for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
glVertex3fv(ccgSubSurf_getVertData(ss, v));
}
ccgVertIterator_free(vi);
- ei = ccgSubSurf_getEdgeIterator(ss);
- for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
int x;
@@ -1544,8 +1536,7 @@ static void ccgDM_drawVerts(DerivedMesh *dm)
}
ccgEdgeIterator_free(ei);
- fi = ccgSubSurf_getFaceIterator(ss);
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
@@ -1805,26 +1796,27 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
doDraw = 0;
matnr = -1;
-#define PASSATTRIB(dx, dy, vert) { \
- if (attribs.totorco) { \
- index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
- glVertexAttrib3fvARB(attribs.orco.gl_index, attribs.orco.array[index]); \
- } \
- for (b = 0; b < attribs.tottface; b++) { \
- MTFace *tf = &attribs.tface[b].array[a]; \
- glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
- } \
- for (b = 0; b < attribs.totmcol; b++) { \
- MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
- GLubyte col[4]; \
- col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
- } \
- if (attribs.tottang) { \
- float *tang = attribs.tang.array[a * 4 + vert]; \
- glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
- } \
-}
+#define PASSATTRIB(dx, dy, vert) { \
+ if (attribs.totorco) { \
+ index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
+ glVertexAttrib3fvARB(attribs.orco.gl_index, \
+ attribs.orco.array[index]); \
+ } \
+ for (b = 0; b < attribs.tottface; b++) { \
+ MTFace *tf = &attribs.tface[b].array[a]; \
+ glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
+ } \
+ for (b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
+ GLubyte col[4]; \
+ col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
+ } \
+ if (attribs.tottang) { \
+ float *tang = attribs.tang.array[a * 4 + vert]; \
+ glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
+ } \
+} (void)0
totface = ccgSubSurf_getNumFaces(ss);
for (a = 0, i = 0; i < totface; i++) {
@@ -1934,7 +1926,9 @@ static void ccgDM_drawFacesGLSL(DerivedMesh *dm, DMSetMaterial setMaterial)
}
/* Only used by non-editmesh types */
-static void ccgDM_drawMappedFacesMat(DerivedMesh *dm, void (*setMaterial)(void *userData, int, void *attribs), int (*setFace)(void *userData, int index), void *userData)
+static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
+ void (*setMaterial)(void *userData, int, void *attribs),
+ int (*setFace)(void *userData, int index), void *userData)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
@@ -1952,32 +1946,33 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm, void (*setMaterial)(void *
matnr = -1;
-#define PASSATTRIB(dx, dy, vert) { \
- if (attribs.totorco) { \
- index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
- if (attribs.orco.gl_texco) \
- glTexCoord3fv(attribs.orco.array[index]); \
- else \
- glVertexAttrib3fvARB(attribs.orco.gl_index, attribs.orco.array[index]); \
- } \
- for (b = 0; b < attribs.tottface; b++) { \
- MTFace *tf = &attribs.tface[b].array[a]; \
- if (attribs.tface[b].gl_texco) \
- glTexCoord2fv(tf->uv[vert]); \
- else \
- glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
- } \
- for (b = 0; b < attribs.totmcol; b++) { \
- MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
- GLubyte col[4]; \
- col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
- } \
- if (attribs.tottang) { \
- float *tang = attribs.tang.array[a * 4 + vert]; \
- glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
- } \
-}
+#define PASSATTRIB(dx, dy, vert) { \
+ if (attribs.totorco) { \
+ index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
+ if (attribs.orco.gl_texco) \
+ glTexCoord3fv(attribs.orco.array[index]); \
+ else \
+ glVertexAttrib3fvARB(attribs.orco.gl_index, \
+ attribs.orco.array[index]); \
+ } \
+ for (b = 0; b < attribs.tottface; b++) { \
+ MTFace *tf = &attribs.tface[b].array[a]; \
+ if (attribs.tface[b].gl_texco) \
+ glTexCoord2fv(tf->uv[vert]); \
+ else \
+ glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
+ } \
+ for (b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
+ GLubyte col[4]; \
+ col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
+ } \
+ if (attribs.tottang) { \
+ float *tang = attribs.tang.array[a * 4 + vert]; \
+ glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
+ } \
+} (void)0
totface = ccgSubSurf_getNumFaces(ss);
for (a = 0, i = 0; i < totface; i++) {
@@ -2422,14 +2417,14 @@ static void ccgDM_drawMappedEdges(DerivedMesh *dm,
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
- CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
+ CCGEdgeIterator *ei;
CCGKey key;
int i, useAging, edgeSize = ccgSubSurf_getEdgeSize(ss);
CCG_key_top_level(&key, ss);
ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
- for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
int index = ccgDM_getEdgeMapIndex(ss, e);
@@ -2460,13 +2455,13 @@ static void ccgDM_drawMappedEdgesInterp(DerivedMesh *dm,
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGKey key;
- CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
+ CCGEdgeIterator *ei;
int i, useAging, edgeSize = ccgSubSurf_getEdgeSize(ss);
CCG_key_top_level(&key, ss);
ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
- for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
int index = ccgDM_getEdgeMapIndex(ss, e);
@@ -2498,11 +2493,11 @@ static void ccgDM_foreachMappedFaceCenter(
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGKey key;
- CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
+ CCGFaceIterator *fi;
CCG_key_top_level(&key, ss);
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
int index = ccgDM_getFaceMapIndex(ss, f);
@@ -3168,8 +3163,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
totvert = ccgSubSurf_getNumVerts(ss);
ccgdm->vertMap = MEM_mallocN(totvert * sizeof(*ccgdm->vertMap), "vertMap");
- vi = ccgSubSurf_getVertIterator(ss);
- for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
+ for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
ccgdm->vertMap[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))].vert = v;
@@ -3178,8 +3172,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
totedge = ccgSubSurf_getNumEdges(ss);
ccgdm->edgeMap = MEM_mallocN(totedge * sizeof(*ccgdm->edgeMap), "edgeMap");
- ei = ccgSubSurf_getEdgeIterator(ss);
- for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
ccgdm->edgeMap[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))].edge = e;
@@ -3187,8 +3180,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
totface = ccgSubSurf_getNumFaces(ss);
ccgdm->faceMap = MEM_mallocN(totface * sizeof(*ccgdm->faceMap), "faceMap");
- fi = ccgSubSurf_getFaceIterator(ss);
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
ccgdm->faceMap[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f))].face = f;
@@ -3237,7 +3229,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
has_edge_origindex = CustomData_has_layer(&ccgdm->dm.edgeData, CD_ORIGINDEX);
- loopindex = loopindex2 = 0; //current loop index
+ loopindex = loopindex2 = 0; /* current loop index */
for (index = 0; index < totface; index++) {
CCGFace *f = ccgdm->faceMap[index].face;
int numVerts = ccgSubSurf_getFaceNumVerts(f);
@@ -3587,8 +3579,7 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
ss_sync_from_derivedmesh(ss, dm, NULL, 0);
- vi = ccgSubSurf_getVertIterator(ss);
- for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
+ for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
int idx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
int N = ccgSubSurf_getVertNumEdges(v);
@@ -3596,8 +3587,8 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
float *co;
int i;
- edge_sum[0] = edge_sum[1] = edge_sum[2] = 0.0;
- face_sum[0] = face_sum[1] = face_sum[2] = 0.0;
+ zero_v3(edge_sum);
+ zero_v3(face_sum);
for (i = 0; i < N; i++) {
CCGEdge *e = ccgSubSurf_getVertEdge(v, i);
diff --git a/source/blender/blenkernel/intern/suggestions.c b/source/blender/blenkernel/intern/suggestions.c
index 8b3138066d3..99e33594a3e 100644
--- a/source/blender/blenkernel/intern/suggestions.c
+++ b/source/blender/blenkernel/intern/suggestions.c
@@ -50,8 +50,8 @@ static char *documentation = NULL;
static int txttl_cmp(const char *first, const char *second, int len)
{
int cmp, i;
- for (cmp=0, i=0; i<len; i++) {
- if ( (cmp= toupper(first[i])-toupper(second[i])) ) {
+ for (cmp = 0, i = 0; i < len; i++) {
+ if ( (cmp = toupper(first[i]) - toupper(second[i])) ) {
break;
}
}
@@ -61,7 +61,7 @@ static int txttl_cmp(const char *first, const char *second, int len)
static void txttl_free_suggest(void)
{
SuggItem *item, *prev;
- for (item = suggestions.last; item; item=prev) {
+ for (item = suggestions.last; item; item = prev) {
prev = item->prev;
MEM_freeN(item);
}
@@ -104,7 +104,7 @@ void texttool_text_clear(void)
short texttool_text_is_active(Text *text)
{
- return activeToolText==text ? 1 : 0;
+ return activeToolText == text ? 1 : 0;
}
/***************************/
@@ -135,7 +135,7 @@ void texttool_suggest_add(const char *name, char type)
}
else {
cmp = -1;
- for (item=suggestions.last; item; item=item->prev) {
+ for (item = suggestions.last; item; item = item->prev) {
cmp = txttl_cmp(name, item->name, len);
/* Newitem comes after this item, insert here */
@@ -160,7 +160,7 @@ void texttool_suggest_add(const char *name, char type)
}
}
suggestions.firstmatch = suggestions.lastmatch = suggestions.selected = NULL;
- suggestions.top= 0;
+ suggestions.top = 0;
}
void texttool_suggest_prefix(const char *prefix)
@@ -169,22 +169,22 @@ void texttool_suggest_prefix(const char *prefix)
int cmp, len = strlen(prefix), top = 0;
if (!suggestions.first) return;
- if (len==0) {
+ if (len == 0) {
suggestions.selected = suggestions.firstmatch = suggestions.first;
suggestions.lastmatch = suggestions.last;
return;
}
first = last = NULL;
- for (match=suggestions.first; match; match=match->next) {
+ for (match = suggestions.first; match; match = match->next) {
cmp = txttl_cmp(prefix, match->name, len);
- if (cmp==0) {
+ if (cmp == 0) {
if (!first) {
first = match;
suggestions.top = top;
}
}
- else if (cmp<0) {
+ else if (cmp < 0) {
if (!last) {
last = match->prev;
break;
@@ -254,13 +254,13 @@ void texttool_docs_show(const char *docs)
}
/* Ensure documentation ends with a '\n' */
- if (docs[len-1] != '\n') {
- documentation = MEM_mallocN(len+2, "Documentation");
+ if (docs[len - 1] != '\n') {
+ documentation = MEM_mallocN(len + 2, "Documentation");
strncpy(documentation, docs, len);
documentation[len++] = '\n';
}
else {
- documentation = MEM_mallocN(len+1, "Documentation");
+ documentation = MEM_mallocN(len + 1, "Documentation");
strncpy(documentation, docs, len);
}
documentation[len] = '\0';
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 4e2b4be474b..8339e973d43 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -768,7 +768,7 @@ static TracksMap *tracks_map_new(const char *object_name, int is_camera, int num
if (customdata_size)
map->customdata = MEM_callocN(customdata_size*num_tracks, "TracksMap customdata");
- map->hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "TracksMap hash");
+ map->hash = BLI_ghash_ptr_new("TracksMap hash");
return map;
}
diff --git a/source/blender/blenkernel/intern/writeavi.c b/source/blender/blenkernel/intern/writeavi.c
index 841a0f84fed..cd19f8a987c 100644
--- a/source/blender/blenkernel/intern/writeavi.c
+++ b/source/blender/blenkernel/intern/writeavi.c
@@ -73,9 +73,9 @@ bMovieHandle *BKE_movie_handle_get(const char imtype)
static bMovieHandle mh;
/* set the default handle, as builtin */
- mh.start_movie= start_avi;
- mh.append_movie= append_avi;
- mh.end_movie= end_avi;
+ mh.start_movie = start_avi;
+ mh.append_movie = append_avi;
+ mh.end_movie = end_avi;
mh.get_next_frame = NULL;
mh.get_movie_path = filepath_avi;
@@ -89,9 +89,9 @@ bMovieHandle *BKE_movie_handle_get(const char imtype)
#endif
#ifdef WITH_QUICKTIME
if (imtype == R_IMF_IMTYPE_QUICKTIME) {
- mh.start_movie= start_qt;
- mh.append_movie= append_qt;
- mh.end_movie= end_qt;
+ mh.start_movie = start_qt;
+ mh.append_movie = append_qt;
+ mh.end_movie = end_qt;
mh.get_movie_path = filepath_qt;
}
#endif
@@ -121,11 +121,11 @@ bMovieHandle *BKE_movie_handle_get(const char imtype)
/* ****************************************************************** */
-static AviMovie *avi=NULL;
+static AviMovie *avi = NULL;
-static void filepath_avi (char *string, RenderData *rd)
+static void filepath_avi(char *string, RenderData *rd)
{
- if (string==NULL) return;
+ if (string == NULL) return;
strcpy(string, rd->pic);
BLI_path_abs(string, G.main->name);
@@ -153,30 +153,30 @@ static int start_avi(Scene *scene, RenderData *rd, int rectx, int recty, ReportL
x = rectx;
y = recty;
- quality= rd->im_format.quality;
- framerate= (double) rd->frs_sec / (double) rd->frs_sec_base;
+ quality = rd->im_format.quality;
+ framerate = (double) rd->frs_sec / (double) rd->frs_sec_base;
- avi = MEM_mallocN (sizeof(AviMovie), "avimovie");
+ avi = MEM_mallocN(sizeof(AviMovie), "avimovie");
- if (rd->im_format.imtype != R_IMF_IMTYPE_AVIJPEG ) format = AVI_FORMAT_AVI_RGB;
+ if (rd->im_format.imtype != R_IMF_IMTYPE_AVIJPEG) format = AVI_FORMAT_AVI_RGB;
else format = AVI_FORMAT_MJPEG;
- if (AVI_open_compress (name, avi, 1, format) != AVI_ERROR_NONE) {
+ if (AVI_open_compress(name, avi, 1, format) != AVI_ERROR_NONE) {
BKE_report(reports, RPT_ERROR, "Cannot open or start AVI movie file.");
- MEM_freeN (avi);
+ MEM_freeN(avi);
avi = NULL;
return 0;
}
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_WIDTH, &x);
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_HEIGHT, &y);
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_QUALITY, &quality);
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_FRAMERATE, &framerate);
-
- avi->interlace= 0;
- avi->odd_fields= 0;
-/* avi->interlace= rd->mode & R_FIELDS; */
-/* avi->odd_fields= (rd->mode & R_ODDFIELD)?1:0; */
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_WIDTH, &x);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_HEIGHT, &y);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_QUALITY, &quality);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_FRAMERATE, &framerate);
+
+ avi->interlace = 0;
+ avi->odd_fields = 0;
+/* avi->interlace= rd->mode & R_FIELDS; */
+/* avi->odd_fields= (rd->mode & R_ODDFIELD)?1:0; */
printf("Created avi: %s\n", name);
return 1;
@@ -193,26 +193,26 @@ static int append_avi(RenderData *UNUSED(rd), int start_frame, int frame, int *p
return 0;
/* note that libavi free's the buffer... stupid interface - zr */
- rectot= MEM_mallocN(rectx*recty*sizeof(int), "rectot");
- rt1= rectot;
- rt2= (unsigned int*)pixels + (recty-1)*rectx;
+ rectot = MEM_mallocN(rectx * recty * sizeof(int), "rectot");
+ rt1 = rectot;
+ rt2 = (unsigned int *)pixels + (recty - 1) * rectx;
/* flip y and convert to abgr */
- for (y=0; y < recty; y++, rt1+= rectx, rt2-= rectx) {
- memcpy (rt1, rt2, rectx*sizeof(int));
+ for (y = 0; y < recty; y++, rt1 += rectx, rt2 -= rectx) {
+ memcpy(rt1, rt2, rectx * sizeof(int));
- cp= (char *)rt1;
- for (x= rectx; x>0; x--) {
- rt= cp[0];
- cp[0]= cp[3];
- cp[3]= rt;
- rt= cp[1];
- cp[1]= cp[2];
- cp[2]= rt;
- cp+= 4;
+ cp = (char *)rt1;
+ for (x = rectx; x > 0; x--) {
+ rt = cp[0];
+ cp[0] = cp[3];
+ cp[3] = rt;
+ rt = cp[1];
+ cp[1] = cp[2];
+ cp[2] = rt;
+ cp += 4;
}
}
- AVI_write_frame (avi, (frame-start_frame), AVI_FORMAT_RGB32, rectot, rectx*recty*4);
+ AVI_write_frame(avi, (frame - start_frame), AVI_FORMAT_RGB32, rectot, rectx * recty * 4);
// printf ("added frame %3d (frame %3d in avi): ", frame, frame-start_frame);
return 1;
@@ -222,17 +222,17 @@ static void end_avi(void)
{
if (avi == NULL) return;
- AVI_close_compress (avi);
- MEM_freeN (avi);
- avi= NULL;
+ AVI_close_compress(avi);
+ MEM_freeN(avi);
+ avi = NULL;
}
/* similar to BKE_makepicstring() */
void BKE_movie_filepath_get(char *string, RenderData *rd)
{
- bMovieHandle *mh= BKE_movie_handle_get(rd->im_format.imtype);
+ bMovieHandle *mh = BKE_movie_handle_get(rd->im_format.imtype);
if (mh->get_movie_path)
mh->get_movie_path(string, rd);
else
- string[0]= '\0';
+ string[0] = '\0';
}
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index a29de3b0157..a3fdb41fe37 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -80,30 +80,30 @@ static int ffmpeg_gop_size = 12;
static int ffmpeg_autosplit = 0;
static int ffmpeg_autosplit_count = 0;
-static AVFormatContext* outfile = 0;
-static AVStream* video_stream = 0;
-static AVStream* audio_stream = 0;
-static AVFrame* current_frame = 0;
+static AVFormatContext *outfile = 0;
+static AVStream *video_stream = 0;
+static AVStream *audio_stream = 0;
+static AVFrame *current_frame = 0;
static struct SwsContext *img_convert_ctx = 0;
-static uint8_t* video_buffer = 0;
+static uint8_t *video_buffer = 0;
static int video_buffersize = 0;
-static uint8_t* audio_input_buffer = 0;
+static uint8_t *audio_input_buffer = 0;
static int audio_input_samples = 0;
-static uint8_t* audio_output_buffer = 0;
+static uint8_t *audio_output_buffer = 0;
static int audio_outbuf_size = 0;
static double audio_time = 0.0f;
#ifdef WITH_AUDASPACE
-static AUD_Device* audio_mixdown_device = 0;
+static AUD_Device *audio_mixdown_device = 0;
#endif
#define FFMPEG_AUTOSPLIT_SIZE 2000000000
/* Delete a picture buffer */
-static void delete_picture(AVFrame* f)
+static void delete_picture(AVFrame *f)
{
if (f) {
if (f->data[0]) MEM_freeN(f->data[0]);
@@ -114,7 +114,7 @@ static void delete_picture(AVFrame* f)
#ifdef WITH_AUDASPACE
static int write_audio_frame(void)
{
- AVCodecContext* c = NULL;
+ AVCodecContext *c = NULL;
AVPacket pkt;
c = audio_stream->codec;
@@ -138,7 +138,7 @@ static int write_audio_frame(void)
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);
+ c->time_base, audio_stream->time_base);
fprintf(stderr, "Audio Frame PTS: %d\n", (int)pkt.pts);
}
@@ -155,10 +155,10 @@ static int write_audio_frame(void)
#endif // #ifdef WITH_AUDASPACE
/* Allocate a temporary frame */
-static AVFrame* alloc_picture(int pix_fmt, int width, int height)
+static AVFrame *alloc_picture(int pix_fmt, int width, int height)
{
- AVFrame* f;
- uint8_t* buf;
+ AVFrame *f;
+ uint8_t *buf;
int size;
/* allocate space for the struct */
@@ -171,82 +171,82 @@ static AVFrame* alloc_picture(int pix_fmt, int width, int height)
free(f);
return NULL;
}
- avpicture_fill((AVPicture*)f, buf, pix_fmt, width, height);
+ avpicture_fill((AVPicture *)f, buf, pix_fmt, width, height);
return f;
}
/* Get the correct file extensions for the requested format,
* first is always desired guess_format parameter */
-static const char** get_file_extensions(int format)
+static const char **get_file_extensions(int format)
{
switch (format) {
- case FFMPEG_DV: {
- static const char * rv[] = { ".dv", NULL };
- return rv;
- }
- case FFMPEG_MPEG1: {
- static const char * rv[] = { ".mpg", ".mpeg", NULL };
- return rv;
- }
- case FFMPEG_MPEG2: {
- static const char * rv[] = { ".dvd", ".vob", ".mpg", ".mpeg",
- NULL };
- return rv;
- }
- case FFMPEG_MPEG4: {
- static const char * rv[] = { ".mp4", ".mpg", ".mpeg", NULL };
- return rv;
- }
- case FFMPEG_AVI: {
- static const char * rv[] = { ".avi", NULL };
- return rv;
- }
- case FFMPEG_MOV: {
- static const char * rv[] = { ".mov", NULL };
- return rv;
- }
- case FFMPEG_H264: {
- /* FIXME: avi for now... */
- static const char * rv[] = { ".avi", NULL };
- return rv;
- }
+ case FFMPEG_DV: {
+ static const char *rv[] = { ".dv", NULL };
+ return rv;
+ }
+ case FFMPEG_MPEG1: {
+ static const char *rv[] = { ".mpg", ".mpeg", NULL };
+ return rv;
+ }
+ case FFMPEG_MPEG2: {
+ static const char *rv[] = { ".dvd", ".vob", ".mpg", ".mpeg",
+ NULL };
+ return rv;
+ }
+ case FFMPEG_MPEG4: {
+ static const char *rv[] = { ".mp4", ".mpg", ".mpeg", NULL };
+ return rv;
+ }
+ case FFMPEG_AVI: {
+ static const char *rv[] = { ".avi", NULL };
+ return rv;
+ }
+ case FFMPEG_MOV: {
+ static const char *rv[] = { ".mov", NULL };
+ return rv;
+ }
+ case FFMPEG_H264: {
+ /* FIXME: avi for now... */
+ static const char *rv[] = { ".avi", NULL };
+ return rv;
+ }
- case FFMPEG_XVID: {
- /* FIXME: avi for now... */
- static const char * rv[] = { ".avi", NULL };
- return rv;
- }
- case FFMPEG_FLV: {
- static const char * rv[] = { ".flv", NULL };
- return rv;
- }
- case FFMPEG_MKV: {
- static const char * rv[] = { ".mkv", NULL };
- return rv;
- }
- case FFMPEG_OGG: {
- static const char * rv[] = { ".ogg", ".ogv", NULL };
- return rv;
- }
- case FFMPEG_MP3: {
- static const char * rv[] = { ".mp3", NULL };
- return rv;
- }
- case FFMPEG_WAV: {
- static const char * rv[] = { ".wav", NULL };
- return rv;
- }
- default:
- return NULL;
+ case FFMPEG_XVID: {
+ /* FIXME: avi for now... */
+ static const char *rv[] = { ".avi", NULL };
+ return rv;
+ }
+ case FFMPEG_FLV: {
+ static const char *rv[] = { ".flv", NULL };
+ return rv;
+ }
+ case FFMPEG_MKV: {
+ static const char *rv[] = { ".mkv", NULL };
+ return rv;
+ }
+ case FFMPEG_OGG: {
+ static const char *rv[] = { ".ogg", ".ogv", NULL };
+ return rv;
+ }
+ case FFMPEG_MP3: {
+ static const char *rv[] = { ".mp3", NULL };
+ return rv;
+ }
+ case FFMPEG_WAV: {
+ static const char *rv[] = { ".wav", NULL };
+ return rv;
+ }
+ default:
+ return NULL;
}
}
/* Write a frame to the output file */
-static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportList *reports)
+static int write_video_frame(RenderData *rd, int cfra, AVFrame *frame, ReportList *reports)
{
int outsize = 0;
- int ret, success= 1;
- AVCodecContext* c = video_stream->codec;
+ int ret, success = 1;
+ AVCodecContext *c = video_stream->codec;
frame->pts = cfra;
@@ -255,7 +255,7 @@ static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportLis
}
outsize = avcodec_encode_video(c, video_buffer, video_buffersize,
- frame);
+ frame);
if (outsize > 0) {
AVPacket packet;
@@ -263,8 +263,8 @@ static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportLis
if (c->coded_frame->pts != AV_NOPTS_VALUE) {
packet.pts = av_rescale_q(c->coded_frame->pts,
- c->time_base,
- video_stream->time_base);
+ c->time_base,
+ video_stream->time_base);
fprintf(stderr, "Video Frame PTS: %d\n", (int)packet.pts);
}
else {
@@ -289,14 +289,14 @@ static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportLis
}
/* read and encode a frame of audio from the buffer */
-static AVFrame* generate_video_frame(uint8_t* pixels, ReportList *reports)
+static AVFrame *generate_video_frame(uint8_t *pixels, ReportList *reports)
{
- uint8_t* rendered_frame;
+ uint8_t *rendered_frame;
- AVCodecContext* c = video_stream->codec;
+ AVCodecContext *c = video_stream->codec;
int width = c->width;
int height = c->height;
- AVFrame* rgb_frame;
+ AVFrame *rgb_frame;
if (c->pix_fmt != PIX_FMT_BGR32) {
rgb_frame = alloc_picture(PIX_FMT_BGR32, width, height);
@@ -317,9 +317,9 @@ static AVFrame* generate_video_frame(uint8_t* pixels, ReportList *reports)
if (ENDIAN_ORDER == L_ENDIAN) {
int y;
for (y = 0; y < height; y++) {
- uint8_t* target = rgb_frame->data[0] + width * 4 * (height - y - 1);
- uint8_t* src = rendered_frame + width * 4 * y;
- uint8_t* end = src + width * 4;
+ uint8_t *target = rgb_frame->data[0] + width * 4 * (height - y - 1);
+ uint8_t *src = rendered_frame + width * 4 * y;
+ uint8_t *end = src + width * 4;
while (src != end) {
target[3] = src[3];
target[2] = src[2];
@@ -334,9 +334,9 @@ static AVFrame* generate_video_frame(uint8_t* pixels, ReportList *reports)
else {
int y;
for (y = 0; y < height; y++) {
- uint8_t* target = rgb_frame->data[0] + width * 4 * (height - y - 1);
- uint8_t* src = rendered_frame + width * 4 * y;
- uint8_t* end = src + width * 4;
+ uint8_t *target = rgb_frame->data[0] + width * 4 * (height - y - 1);
+ uint8_t *src = rendered_frame + width * 4 * y;
+ uint8_t *end = src + width * 4;
while (src != end) {
target[3] = src[0];
target[2] = src[1];
@@ -350,7 +350,7 @@ static AVFrame* generate_video_frame(uint8_t* pixels, ReportList *reports)
}
if (c->pix_fmt != PIX_FMT_BGR32) {
- sws_scale(img_convert_ctx, (const uint8_t * const*) rgb_frame->data,
+ sws_scale(img_convert_ctx, (const uint8_t *const *) rgb_frame->data,
rgb_frame->linesize, 0, c->height,
current_frame->data, current_frame->linesize);
delete_picture(rgb_frame);
@@ -358,11 +358,11 @@ static AVFrame* generate_video_frame(uint8_t* pixels, ReportList *reports)
return current_frame;
}
-static void set_ffmpeg_property_option(AVCodecContext* c, IDProperty * prop)
+static void set_ffmpeg_property_option(AVCodecContext *c, IDProperty *prop)
{
char name[128];
- char * param;
- const AVOption * rv = NULL;
+ char *param;
+ const AVOption *rv = NULL;
fprintf(stderr, "FFMPEG expert option: %s: ", prop->name);
@@ -375,56 +375,56 @@ static void set_ffmpeg_property_option(AVCodecContext* c, IDProperty * prop)
}
switch (prop->type) {
- case IDP_STRING:
- fprintf(stderr, "%s.\n", IDP_String(prop));
- av_set_string3(c, prop->name, IDP_String(prop), 1, &rv);
- break;
- case IDP_FLOAT:
- fprintf(stderr, "%g.\n", IDP_Float(prop));
- rv = av_set_double(c, prop->name, IDP_Float(prop));
- break;
- case IDP_INT:
- fprintf(stderr, "%d.\n", IDP_Int(prop));
-
- if (param) {
- if (IDP_Int(prop)) {
- av_set_string3(c, name, param, 1, &rv);
+ case IDP_STRING:
+ fprintf(stderr, "%s.\n", IDP_String(prop));
+ av_set_string3(c, prop->name, IDP_String(prop), 1, &rv);
+ break;
+ case IDP_FLOAT:
+ fprintf(stderr, "%g.\n", IDP_Float(prop));
+ rv = av_set_double(c, prop->name, IDP_Float(prop));
+ break;
+ case IDP_INT:
+ fprintf(stderr, "%d.\n", IDP_Int(prop));
+
+ if (param) {
+ if (IDP_Int(prop)) {
+ av_set_string3(c, name, param, 1, &rv);
+ }
+ else {
+ return;
+ }
}
else {
- return;
+ rv = av_set_int(c, prop->name, IDP_Int(prop));
}
- }
- else {
- rv = av_set_int(c, prop->name, IDP_Int(prop));
- }
- break;
+ break;
}
if (!rv) {
fprintf(stderr, "ffmpeg-option not supported: %s! Skipping.\n",
- prop->name);
+ prop->name);
}
}
static int ffmpeg_proprty_valid(AVCodecContext *c, const char *prop_name, IDProperty *curr)
{
- int valid= 1;
+ int valid = 1;
- if (strcmp(prop_name, "video")==0) {
- if (strcmp(curr->name, "bf")==0) {
+ if (strcmp(prop_name, "video") == 0) {
+ if (strcmp(curr->name, "bf") == 0) {
/* flash codec doesn't support b frames */
- valid&= c->codec_id!=CODEC_ID_FLV1;
+ valid &= c->codec_id != CODEC_ID_FLV1;
}
}
return valid;
}
-static void set_ffmpeg_properties(RenderData *rd, AVCodecContext *c, const char * prop_name)
+static void set_ffmpeg_properties(RenderData *rd, AVCodecContext *c, const char *prop_name)
{
- IDProperty * prop;
- void * iter;
- IDProperty * curr;
+ IDProperty *prop;
+ void *iter;
+ IDProperty *curr;
if (!rd->ffcodecdata.properties) {
return;
@@ -445,12 +445,12 @@ static void set_ffmpeg_properties(RenderData *rd, AVCodecContext *c, const char
/* prepare a video stream for the output file */
-static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContext* of,
- int rectx, int recty)
+static AVStream *alloc_video_stream(RenderData *rd, int codec_id, AVFormatContext *of,
+ int rectx, int recty)
{
- AVStream* st;
- AVCodecContext* c;
- AVCodec* codec;
+ AVStream *st;
+ AVCodecContext *c;
+ AVCodec *codec;
st = av_new_stream(of, 0);
if (!st) return NULL;
@@ -472,7 +472,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
c->time_base.num = 100;
}
else if ((double) ((int) rd->frs_sec_base) ==
- rd->frs_sec_base) {
+ rd->frs_sec_base) {
c->time_base.den = rd->frs_sec;
c->time_base.num = (int) rd->frs_sec_base;
}
@@ -482,9 +482,9 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
}
c->gop_size = ffmpeg_gop_size;
- c->bit_rate = ffmpeg_video_bitrate*1000;
- c->rc_max_rate = rd->ffcodecdata.rc_max_rate*1000;
- c->rc_min_rate = rd->ffcodecdata.rc_min_rate*1000;
+ c->bit_rate = ffmpeg_video_bitrate * 1000;
+ c->rc_max_rate = rd->ffcodecdata.rc_max_rate * 1000;
+ c->rc_min_rate = rd->ffcodecdata.rc_min_rate * 1000;
c->rc_buffer_size = rd->ffcodecdata.rc_buffer_size * 1024;
c->rc_initial_buffer_occupancy = rd->ffcodecdata.rc_buffer_size * 3 / 4;
c->rc_buffer_aggressivity = 1.0;
@@ -506,13 +506,13 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
if (ffmpeg_type == FFMPEG_XVID) {
/* arghhhh ... */
c->pix_fmt = PIX_FMT_YUV420P;
- c->codec_tag = (('D'<<24) + ('I'<<16) + ('V'<<8) + 'X');
+ c->codec_tag = (('D' << 24) + ('I' << 16) + ('V' << 8) + 'X');
}
if (codec_id == CODEC_ID_H264) {
/* correct wrong default ffmpeg param which crash x264 */
- c->qmin=10;
- c->qmax=51;
+ c->qmin = 10;
+ c->qmax = 51;
}
// Keep lossless encodes in the RGB domain.
@@ -534,7 +534,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
#endif
}
- if (codec_id == CODEC_ID_QTRLE ) {
+ if (codec_id == CODEC_ID_QTRLE) {
if (rd->im_format.planes == R_IMF_PLANES_RGBA) {
c->pix_fmt = PIX_FMT_ARGB;
}
@@ -544,7 +544,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
// || !strcmp(of->oformat->name, "mp4")
// || !strcmp(of->oformat->name, "mov")
// || !strcmp(of->oformat->name, "3gp")
- ) {
+ ) {
fprintf(stderr, "Using global header\n");
c->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
@@ -559,7 +559,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
/* xasp & yasp got float lately... */
st->sample_aspect_ratio = c->sample_aspect_ratio = av_d2q(
- ((double) rd->xasp / (double) rd->yasp), 255);
+ ((double) rd->xasp / (double) rd->yasp), 255);
set_ffmpeg_properties(rd, c, "video");
@@ -569,7 +569,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
return NULL;
}
- if ( codec_id == CODEC_ID_QTRLE ) {
+ if (codec_id == CODEC_ID_QTRLE) {
// normally it should be enough to have buffer with actual image size,
// but some codecs like QTRLE might store extra information in this buffer,
// so it should be a way larger
@@ -577,32 +577,32 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
// maximum video buffer size is 6-bytes per pixel, plus DPX header size (1664)
// (from FFmpeg sources)
int size = c->width * c->height;
- video_buffersize = 7*size + 10000;
+ video_buffersize = 7 * size + 10000;
}
else
video_buffersize = avpicture_get_size(c->pix_fmt, c->width, c->height);
- video_buffer = (uint8_t*)MEM_mallocN(video_buffersize*sizeof(uint8_t),
- "FFMPEG video buffer");
+ video_buffer = (uint8_t *)MEM_mallocN(video_buffersize * sizeof(uint8_t),
+ "FFMPEG video buffer");
current_frame = alloc_picture(c->pix_fmt, c->width, c->height);
img_convert_ctx = sws_getContext(c->width, c->height,
- PIX_FMT_BGR32,
- c->width, c->height,
- c->pix_fmt,
- SWS_BICUBIC,
- NULL, NULL, NULL);
+ PIX_FMT_BGR32,
+ c->width, c->height,
+ c->pix_fmt,
+ SWS_BICUBIC,
+ NULL, NULL, NULL);
return st;
}
/* Prepare an audio stream for the output file */
-static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContext* of)
+static AVStream *alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContext *of)
{
- AVStream* st;
- AVCodecContext* c;
- AVCodec* codec;
+ AVStream *st;
+ AVCodecContext *c;
+ AVCodec *codec;
st = av_new_stream(of, 1);
if (!st) return NULL;
@@ -612,7 +612,7 @@ static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContex
c->codec_type = AVMEDIA_TYPE_AUDIO;
c->sample_rate = rd->ffcodecdata.audio_mixrate;
- c->bit_rate = ffmpeg_audio_bitrate*1000;
+ c->bit_rate = ffmpeg_audio_bitrate * 1000;
c->sample_fmt = SAMPLE_FMT_S16;
c->channels = rd->ffcodecdata.audio_channels;
codec = avcodec_find_encoder(c->codec_id);
@@ -630,8 +630,8 @@ static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContex
/* need to prevent floating point exception when using vorbis audio codec,
* initialize this value in the same way as it's done in FFmpeg iteslf (sergey) */
- st->codec->time_base.num= 1;
- st->codec->time_base.den= st->codec->sample_rate;
+ st->codec->time_base.num = 1;
+ st->codec->time_base.den = st->codec->sample_rate;
audio_outbuf_size = FF_MIN_BUFFER_SIZE;
@@ -643,11 +643,11 @@ static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContex
audio_outbuf_size = c->frame_size * c->channels * sizeof(int16_t) * 4;
}
- audio_output_buffer = (uint8_t*)av_malloc(
- audio_outbuf_size);
+ audio_output_buffer = (uint8_t *)av_malloc(
+ audio_outbuf_size);
- audio_input_buffer = (uint8_t*)av_malloc(
- audio_input_samples * c->channels * sizeof(int16_t));
+ audio_input_buffer = (uint8_t *)av_malloc(
+ audio_input_samples * c->channels * sizeof(int16_t));
audio_time = 0.0f;
@@ -658,10 +658,10 @@ static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContex
static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, ReportList *reports)
{
/* Handle to the output file */
- AVFormatContext* of;
- AVOutputFormat* fmt;
+ AVFormatContext *of;
+ AVOutputFormat *fmt;
char name[256];
- const char ** exts;
+ const char **exts;
ffmpeg_type = rd->ffcodecdata.type;
ffmpeg_codec = rd->ffcodecdata.codec;
@@ -670,20 +670,20 @@ static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, Report
ffmpeg_audio_bitrate = rd->ffcodecdata.audio_bitrate;
ffmpeg_gop_size = rd->ffcodecdata.gop_size;
ffmpeg_autosplit = rd->ffcodecdata.flags
- & FFMPEG_AUTOSPLIT_OUTPUT;
+ & FFMPEG_AUTOSPLIT_OUTPUT;
do_init_ffmpeg();
/* Determine the correct filename */
BKE_ffmpeg_filepath_get(name, rd);
fprintf(stderr, "Starting output to %s(ffmpeg)...\n"
- " Using type=%d, codec=%d, audio_codec=%d,\n"
- " video_bitrate=%d, audio_bitrate=%d,\n"
- " gop_size=%d, autosplit=%d\n"
- " render width=%d, render height=%d\n",
- name, ffmpeg_type, ffmpeg_codec, ffmpeg_audio_codec,
- ffmpeg_video_bitrate, ffmpeg_audio_bitrate,
- ffmpeg_gop_size, ffmpeg_autosplit, rectx, recty);
+ " Using type=%d, codec=%d, audio_codec=%d,\n"
+ " video_bitrate=%d, audio_bitrate=%d,\n"
+ " gop_size=%d, autosplit=%d\n"
+ " render width=%d, render height=%d\n",
+ name, ffmpeg_type, ffmpeg_codec, ffmpeg_audio_codec,
+ ffmpeg_video_bitrate, ffmpeg_audio_bitrate,
+ ffmpeg_gop_size, ffmpeg_autosplit, rectx, recty);
exts = get_file_extensions(ffmpeg_type);
if (!exts) {
@@ -703,7 +703,7 @@ static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, Report
}
of->oformat = fmt;
- of->packet_size= rd->ffcodecdata.mux_packet_size;
+ of->packet_size = rd->ffcodecdata.mux_packet_size;
if (ffmpeg_audio_codec != CODEC_ID_NONE) {
of->mux_rate = rd->ffcodecdata.mux_rate;
}
@@ -711,49 +711,49 @@ static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, Report
of->mux_rate = 0;
}
- of->preload = (int)(0.5*AV_TIME_BASE);
- of->max_delay = (int)(0.7*AV_TIME_BASE);
+ of->preload = (int)(0.5 * AV_TIME_BASE);
+ of->max_delay = (int)(0.7 * AV_TIME_BASE);
fmt->audio_codec = ffmpeg_audio_codec;
BLI_snprintf(of->filename, sizeof(of->filename), "%s", name);
/* set the codec to the user's selection */
switch (ffmpeg_type) {
- case FFMPEG_AVI:
- case FFMPEG_MOV:
- case FFMPEG_MKV:
- fmt->video_codec = ffmpeg_codec;
- break;
- case FFMPEG_OGG:
- fmt->video_codec = CODEC_ID_THEORA;
- break;
- case FFMPEG_DV:
- fmt->video_codec = CODEC_ID_DVVIDEO;
- break;
- case FFMPEG_MPEG1:
- fmt->video_codec = CODEC_ID_MPEG1VIDEO;
- break;
- case FFMPEG_MPEG2:
- fmt->video_codec = CODEC_ID_MPEG2VIDEO;
- break;
- case FFMPEG_H264:
- fmt->video_codec = CODEC_ID_H264;
- break;
- case FFMPEG_XVID:
- fmt->video_codec = CODEC_ID_MPEG4;
- break;
- case FFMPEG_FLV:
- fmt->video_codec = CODEC_ID_FLV1;
- break;
- case FFMPEG_MP3:
- fmt->audio_codec = CODEC_ID_MP3;
- case FFMPEG_WAV:
- fmt->video_codec = CODEC_ID_NONE;
- break;
- case FFMPEG_MPEG4:
- default:
- fmt->video_codec = CODEC_ID_MPEG4;
- break;
+ case FFMPEG_AVI:
+ case FFMPEG_MOV:
+ case FFMPEG_MKV:
+ fmt->video_codec = ffmpeg_codec;
+ break;
+ case FFMPEG_OGG:
+ fmt->video_codec = CODEC_ID_THEORA;
+ break;
+ case FFMPEG_DV:
+ fmt->video_codec = CODEC_ID_DVVIDEO;
+ break;
+ case FFMPEG_MPEG1:
+ fmt->video_codec = CODEC_ID_MPEG1VIDEO;
+ break;
+ case FFMPEG_MPEG2:
+ fmt->video_codec = CODEC_ID_MPEG2VIDEO;
+ break;
+ case FFMPEG_H264:
+ fmt->video_codec = CODEC_ID_H264;
+ break;
+ case FFMPEG_XVID:
+ fmt->video_codec = CODEC_ID_MPEG4;
+ break;
+ case FFMPEG_FLV:
+ fmt->video_codec = CODEC_ID_FLV1;
+ break;
+ case FFMPEG_MP3:
+ fmt->audio_codec = CODEC_ID_MP3;
+ case FFMPEG_WAV:
+ fmt->video_codec = CODEC_ID_NONE;
+ break;
+ case FFMPEG_MPEG4:
+ default:
+ fmt->video_codec = CODEC_ID_MPEG4;
+ break;
}
if (fmt->video_codec == CODEC_ID_DVVIDEO) {
if (rectx != 720) {
@@ -838,7 +838,7 @@ void flush_ffmpeg(void)
int outsize = 0;
int ret = 0;
- AVCodecContext* c = video_stream->codec;
+ AVCodecContext *c = video_stream->codec;
/* get the delayed frames */
while (1) {
AVPacket packet;
@@ -854,8 +854,8 @@ void flush_ffmpeg(void)
}
if (c->coded_frame->pts != AV_NOPTS_VALUE) {
packet.pts = av_rescale_q(c->coded_frame->pts,
- c->time_base,
- video_stream->time_base);
+ c->time_base,
+ video_stream->time_base);
fprintf(stderr, "Video Frame PTS: %d\n", (int)packet.pts);
}
else {
@@ -881,12 +881,12 @@ void flush_ffmpeg(void)
* ********************************************************************** */
/* Get the output filename-- similar to the other output formats */
-void BKE_ffmpeg_filepath_get(char* string, RenderData* rd)
+void BKE_ffmpeg_filepath_get(char *string, RenderData *rd)
{
char autosplit[20];
- const char ** exts = get_file_extensions(rd->ffcodecdata.type);
- const char ** fe = exts;
+ const char **exts = get_file_extensions(rd->ffcodecdata.type);
+ const char **fe = exts;
if (!string || !exts) return;
@@ -903,7 +903,7 @@ void BKE_ffmpeg_filepath_get(char* string, RenderData* rd)
while (*fe) {
if (BLI_strcasecmp(string + strlen(string) - strlen(*fe),
- *fe) == 0) {
+ *fe) == 0) {
break;
}
fe++;
@@ -931,7 +931,7 @@ int BKE_ffmpeg_start(struct Scene *scene, RenderData *rd, int rectx, int recty,
success = start_ffmpeg_impl(rd, rectx, recty, reports);
#ifdef WITH_AUDASPACE
if (audio_stream) {
- AVCodecContext* c = audio_stream->codec;
+ AVCodecContext *c = audio_stream->codec;
AUD_DeviceSpecs specs;
specs.channels = c->channels;
specs.format = AUD_FORMAT_S16;
@@ -955,7 +955,7 @@ static void write_audio_frames(double to_pts)
while (audio_stream && !finished) {
if ((audio_time >= to_pts) ||
- (write_audio_frame())) {
+ (write_audio_frame())) {
finished = 1;
}
}
@@ -964,19 +964,19 @@ static void write_audio_frames(double to_pts)
int BKE_ffmpeg_append(RenderData *rd, int start_frame, int frame, int *pixels, int rectx, int recty, ReportList *reports)
{
- AVFrame* avframe;
+ AVFrame *avframe;
int success = 1;
fprintf(stderr, "Writing frame %i, "
- "render width=%d, render height=%d\n", frame,
- rectx, recty);
+ "render width=%d, render height=%d\n", frame,
+ rectx, recty);
// 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) {
- avframe= generate_video_frame((unsigned char*) pixels, reports);
- success= (avframe && write_video_frame(rd, frame - start_frame, avframe, reports));
+ avframe = generate_video_frame((unsigned char *) pixels, reports);
+ success = (avframe && write_video_frame(rd, frame - start_frame, avframe, reports));
if (ffmpeg_autosplit) {
if (avio_tell(outfile->pb) > FFMPEG_AUTOSPLIT_SIZE) {
@@ -1000,8 +1000,8 @@ void BKE_ffmpeg_end(void)
fprintf(stderr, "Closing ffmpeg...\n");
/* if (audio_stream) { SEE UPPER
- write_audio_frames();
- }*/
+ write_audio_frames();
+ }*/
#ifdef WITH_AUDASPACE
if (audio_mixdown_device) {
@@ -1012,7 +1012,7 @@ void BKE_ffmpeg_end(void)
if (video_stream && video_stream->codec) {
fprintf(stderr, "Flushing delayed frames...\n");
- flush_ffmpeg ();
+ flush_ffmpeg();
}
if (outfile) {
@@ -1074,7 +1074,7 @@ void BKE_ffmpeg_end(void)
void BKE_ffmpeg_property_del(RenderData *rd, void *type, void *prop_)
{
struct IDProperty *prop = (struct IDProperty *) prop_;
- IDProperty * group;
+ IDProperty *group;
if (!rd->ffcodecdata.properties) {
return;
@@ -1091,10 +1091,10 @@ void BKE_ffmpeg_property_del(RenderData *rd, void *type, void *prop_)
IDProperty *BKE_ffmpeg_property_add(RenderData *rd, const char *type, int opt_index, int parent_index)
{
AVCodecContext c;
- const AVOption * o;
- const AVOption * parent;
- IDProperty * group;
- IDProperty * prop;
+ const AVOption *o;
+ const AVOption *parent;
+ IDProperty *group;
+ IDProperty *prop;
IDPropertyTemplate val;
int idp_type;
char name[256];
@@ -1125,7 +1125,7 @@ IDProperty *BKE_ffmpeg_property_add(RenderData *rd, const char *type, int opt_in
}
fprintf(stderr, "ffmpeg_property_add: %s %d %d %s\n",
- type, parent_index, opt_index, name);
+ type, parent_index, opt_index, name);
prop = IDP_GetPropertyFromGroup(group, name);
if (prop) {
@@ -1133,28 +1133,28 @@ IDProperty *BKE_ffmpeg_property_add(RenderData *rd, const char *type, int opt_in
}
switch (o->type) {
- case FF_OPT_TYPE_INT:
- case FF_OPT_TYPE_INT64:
- val.i = FFMPEG_DEF_OPT_VAL_INT(o);
- idp_type = IDP_INT;
- break;
- case FF_OPT_TYPE_DOUBLE:
- case FF_OPT_TYPE_FLOAT:
- val.f = FFMPEG_DEF_OPT_VAL_DOUBLE(o);
- idp_type = IDP_FLOAT;
- break;
- case FF_OPT_TYPE_STRING:
- val.string.str = (char *)" ";
- val.string.len = 80;
+ case FF_OPT_TYPE_INT:
+ case FF_OPT_TYPE_INT64:
+ val.i = FFMPEG_DEF_OPT_VAL_INT(o);
+ idp_type = IDP_INT;
+ break;
+ case FF_OPT_TYPE_DOUBLE:
+ case FF_OPT_TYPE_FLOAT:
+ val.f = FFMPEG_DEF_OPT_VAL_DOUBLE(o);
+ idp_type = IDP_FLOAT;
+ break;
+ case FF_OPT_TYPE_STRING:
+ val.string.str = (char *)" ";
+ val.string.len = 80;
/* val.str = (char *)" ";*/
- idp_type = IDP_STRING;
- break;
- case FF_OPT_TYPE_CONST:
- val.i = 1;
- idp_type = IDP_INT;
- break;
- default:
- return NULL;
+ idp_type = IDP_STRING;
+ break;
+ case FF_OPT_TYPE_CONST:
+ val.i = 1;
+ idp_type = IDP_INT;
+ break;
+ default:
+ return NULL;
}
prop = IDP_New(idp_type, &val, name);
IDP_AddToGroup(group, prop);
@@ -1166,10 +1166,10 @@ IDProperty *BKE_ffmpeg_property_add(RenderData *rd, const char *type, int opt_in
static const AVOption *my_av_find_opt(void *v, const char *name,
const char *unit, int mask, int flags)
{
- AVClass *c= *(AVClass**)v;
- const AVOption *o= c->option;
+ AVClass *c = *(AVClass **)v;
+ const AVOption *o = c->option;
- for (;o && o->name; o++) {
+ for (; o && o->name; o++) {
if (!strcmp(o->name, name) &&
(!unit || (o->unit && !strcmp(o->unit, unit))) &&
(o->flags & mask) == flags)
@@ -1180,15 +1180,15 @@ static const AVOption *my_av_find_opt(void *v, const char *name,
return NULL;
}
-int BKE_ffmpeg_property_add_string(RenderData *rd, const char * type, const char * str)
+int BKE_ffmpeg_property_add_string(RenderData *rd, const char *type, const char *str)
{
AVCodecContext c;
- const AVOption * o = 0;
- const AVOption * p = 0;
+ const AVOption *o = 0;
+ const AVOption *p = 0;
char name_[128];
- char * name;
- char * param;
- IDProperty * prop;
+ char *name;
+ char *param;
+ IDProperty *prop;
avcodec_get_context_defaults(&c);
@@ -1217,12 +1217,12 @@ int BKE_ffmpeg_property_add_string(RenderData *rd, const char * type, const char
if (param && o->type != FF_OPT_TYPE_CONST && o->unit) {
p = my_av_find_opt(&c, param, o->unit, 0, 0);
prop = BKE_ffmpeg_property_add(rd,
- (char*) type, p - c.av_class->option,
- o - c.av_class->option);
+ (char *) type, p - c.av_class->option,
+ o - c.av_class->option);
}
else {
prop = BKE_ffmpeg_property_add(rd,
- (char*) type, o - c.av_class->option, 0);
+ (char *) type, o - c.av_class->option, 0);
}
@@ -1232,15 +1232,15 @@ int BKE_ffmpeg_property_add_string(RenderData *rd, const char * type, const char
if (param && !p) {
switch (prop->type) {
- case IDP_INT:
- IDP_Int(prop) = atoi(param);
- break;
- case IDP_FLOAT:
- IDP_Float(prop) = atof(param);
- break;
- case IDP_STRING:
- strncpy(IDP_String(prop), param, prop->len);
- break;
+ case IDP_INT:
+ IDP_Int(prop) = atoi(param);
+ break;
+ case IDP_FLOAT:
+ IDP_Float(prop) = atof(param);
+ break;
+ case IDP_STRING:
+ strncpy(IDP_String(prop), param, prop->len);
+ break;
}
}
return 1;
@@ -1296,7 +1296,7 @@ static void ffmpeg_set_expert_options(RenderData *rd)
if (rd->ffcodecdata.flags & FFMPEG_LOSSLESS_OUTPUT)
BKE_ffmpeg_property_add_string(rd, "video", "cqp:0");
}
-#if 0 /* disabled for after release */
+#if 0 /* disabled for after release */
else if (codec_id == CODEC_ID_DNXHD) {
if (rd->ffcodecdata.flags & FFMPEG_LOSSLESS_OUTPUT)
ffmpeg_property_add_string(rd, "video", "mbd:rd");
@@ -1312,86 +1312,86 @@ void BKE_ffmpeg_preset_set(RenderData *rd, int preset)
IDP_FreeProperty(rd->ffcodecdata.properties);
switch (preset) {
- case FFMPEG_PRESET_VCD:
- rd->ffcodecdata.type = FFMPEG_MPEG1;
- rd->ffcodecdata.video_bitrate = 1150;
- rd->xsch = 352;
- rd->ysch = isntsc ? 240 : 288;
- rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
- rd->ffcodecdata.rc_max_rate = 1150;
- rd->ffcodecdata.rc_min_rate = 1150;
- rd->ffcodecdata.rc_buffer_size = 40*8;
- rd->ffcodecdata.mux_packet_size = 2324;
- rd->ffcodecdata.mux_rate = 2352 * 75 * 8;
- break;
-
- case FFMPEG_PRESET_SVCD:
- rd->ffcodecdata.type = FFMPEG_MPEG2;
- rd->ffcodecdata.video_bitrate = 2040;
- rd->xsch = 480;
- rd->ysch = isntsc ? 480 : 576;
- rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
- rd->ffcodecdata.rc_max_rate = 2516;
- rd->ffcodecdata.rc_min_rate = 0;
- rd->ffcodecdata.rc_buffer_size = 224*8;
- rd->ffcodecdata.mux_packet_size = 2324;
- rd->ffcodecdata.mux_rate = 0;
- break;
-
- case FFMPEG_PRESET_DVD:
- rd->ffcodecdata.type = FFMPEG_MPEG2;
- rd->ffcodecdata.video_bitrate = 6000;
-
- /* Don't set resolution, see [#21351]
- * rd->xsch = 720;
- * rd->ysch = isntsc ? 480 : 576; */
-
- rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
- rd->ffcodecdata.rc_max_rate = 9000;
- rd->ffcodecdata.rc_min_rate = 0;
- rd->ffcodecdata.rc_buffer_size = 224*8;
- rd->ffcodecdata.mux_packet_size = 2048;
- rd->ffcodecdata.mux_rate = 10080000;
- break;
-
- case FFMPEG_PRESET_DV:
- rd->ffcodecdata.type = FFMPEG_DV;
- rd->xsch = 720;
- rd->ysch = isntsc ? 480 : 576;
- break;
-
- case FFMPEG_PRESET_H264:
- rd->ffcodecdata.type = FFMPEG_AVI;
- rd->ffcodecdata.codec = CODEC_ID_H264;
- rd->ffcodecdata.video_bitrate = 6000;
- rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
- rd->ffcodecdata.rc_max_rate = 9000;
- rd->ffcodecdata.rc_min_rate = 0;
- rd->ffcodecdata.rc_buffer_size = 224*8;
- rd->ffcodecdata.mux_packet_size = 2048;
- rd->ffcodecdata.mux_rate = 10080000;
-
- break;
-
- case FFMPEG_PRESET_THEORA:
- case FFMPEG_PRESET_XVID:
- if (preset == FFMPEG_PRESET_XVID) {
+ case FFMPEG_PRESET_VCD:
+ rd->ffcodecdata.type = FFMPEG_MPEG1;
+ rd->ffcodecdata.video_bitrate = 1150;
+ rd->xsch = 352;
+ rd->ysch = isntsc ? 240 : 288;
+ rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
+ rd->ffcodecdata.rc_max_rate = 1150;
+ rd->ffcodecdata.rc_min_rate = 1150;
+ rd->ffcodecdata.rc_buffer_size = 40 * 8;
+ rd->ffcodecdata.mux_packet_size = 2324;
+ rd->ffcodecdata.mux_rate = 2352 * 75 * 8;
+ break;
+
+ case FFMPEG_PRESET_SVCD:
+ rd->ffcodecdata.type = FFMPEG_MPEG2;
+ rd->ffcodecdata.video_bitrate = 2040;
+ rd->xsch = 480;
+ rd->ysch = isntsc ? 480 : 576;
+ rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
+ rd->ffcodecdata.rc_max_rate = 2516;
+ rd->ffcodecdata.rc_min_rate = 0;
+ rd->ffcodecdata.rc_buffer_size = 224 * 8;
+ rd->ffcodecdata.mux_packet_size = 2324;
+ rd->ffcodecdata.mux_rate = 0;
+ break;
+
+ case FFMPEG_PRESET_DVD:
+ rd->ffcodecdata.type = FFMPEG_MPEG2;
+ rd->ffcodecdata.video_bitrate = 6000;
+
+ /* Don't set resolution, see [#21351]
+ * rd->xsch = 720;
+ * rd->ysch = isntsc ? 480 : 576; */
+
+ rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
+ rd->ffcodecdata.rc_max_rate = 9000;
+ rd->ffcodecdata.rc_min_rate = 0;
+ rd->ffcodecdata.rc_buffer_size = 224 * 8;
+ rd->ffcodecdata.mux_packet_size = 2048;
+ rd->ffcodecdata.mux_rate = 10080000;
+ break;
+
+ case FFMPEG_PRESET_DV:
+ rd->ffcodecdata.type = FFMPEG_DV;
+ rd->xsch = 720;
+ rd->ysch = isntsc ? 480 : 576;
+ break;
+
+ case FFMPEG_PRESET_H264:
rd->ffcodecdata.type = FFMPEG_AVI;
- rd->ffcodecdata.codec = CODEC_ID_MPEG4;
- }
- else if (preset == FFMPEG_PRESET_THEORA) {
- rd->ffcodecdata.type = FFMPEG_OGG; // XXX broken
- rd->ffcodecdata.codec = CODEC_ID_THEORA;
- }
+ rd->ffcodecdata.codec = CODEC_ID_H264;
+ rd->ffcodecdata.video_bitrate = 6000;
+ rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
+ rd->ffcodecdata.rc_max_rate = 9000;
+ rd->ffcodecdata.rc_min_rate = 0;
+ rd->ffcodecdata.rc_buffer_size = 224 * 8;
+ rd->ffcodecdata.mux_packet_size = 2048;
+ rd->ffcodecdata.mux_rate = 10080000;
+
+ break;
- rd->ffcodecdata.video_bitrate = 6000;
- rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
- rd->ffcodecdata.rc_max_rate = 9000;
- rd->ffcodecdata.rc_min_rate = 0;
- rd->ffcodecdata.rc_buffer_size = 224*8;
- rd->ffcodecdata.mux_packet_size = 2048;
- rd->ffcodecdata.mux_rate = 10080000;
- break;
+ case FFMPEG_PRESET_THEORA:
+ case FFMPEG_PRESET_XVID:
+ if (preset == FFMPEG_PRESET_XVID) {
+ rd->ffcodecdata.type = FFMPEG_AVI;
+ rd->ffcodecdata.codec = CODEC_ID_MPEG4;
+ }
+ else if (preset == FFMPEG_PRESET_THEORA) {
+ rd->ffcodecdata.type = FFMPEG_OGG; // XXX broken
+ rd->ffcodecdata.codec = CODEC_ID_THEORA;
+ }
+
+ rd->ffcodecdata.video_bitrate = 6000;
+ rd->ffcodecdata.gop_size = isntsc ? 18 : 15;
+ rd->ffcodecdata.rc_max_rate = 9000;
+ rd->ffcodecdata.rc_min_rate = 0;
+ rd->ffcodecdata.rc_buffer_size = 224 * 8;
+ rd->ffcodecdata.mux_packet_size = 2048;
+ rd->ffcodecdata.mux_rate = 10080000;
+ break;
}
@@ -1400,13 +1400,13 @@ void BKE_ffmpeg_preset_set(RenderData *rd, int preset)
void BKE_ffmpeg_image_type_verify(RenderData *rd, ImageFormatData *imf)
{
- int audio= 0;
+ int audio = 0;
if (imf->imtype == R_IMF_IMTYPE_FFMPEG) {
if (rd->ffcodecdata.type <= 0 ||
- rd->ffcodecdata.codec <= 0 ||
- rd->ffcodecdata.audio_codec <= 0 ||
- rd->ffcodecdata.video_bitrate <= 1) {
+ rd->ffcodecdata.codec <= 0 ||
+ rd->ffcodecdata.audio_codec <= 0 ||
+ rd->ffcodecdata.video_bitrate <= 1) {
rd->ffcodecdata.codec = CODEC_ID_MPEG2VIDEO;
@@ -1416,24 +1416,24 @@ void BKE_ffmpeg_image_type_verify(RenderData *rd, ImageFormatData *imf)
rd->ffcodecdata.type = FFMPEG_MPEG2;
}
- audio= 1;
+ audio = 1;
}
else if (imf->imtype == R_IMF_IMTYPE_H264) {
if (rd->ffcodecdata.codec != CODEC_ID_H264) {
BKE_ffmpeg_preset_set(rd, FFMPEG_PRESET_H264);
- audio= 1;
+ audio = 1;
}
}
else if (imf->imtype == R_IMF_IMTYPE_XVID) {
if (rd->ffcodecdata.codec != CODEC_ID_MPEG4) {
BKE_ffmpeg_preset_set(rd, FFMPEG_PRESET_XVID);
- audio= 1;
+ audio = 1;
}
}
else if (imf->imtype == R_IMF_IMTYPE_THEORA) {
if (rd->ffcodecdata.codec != CODEC_ID_THEORA) {
BKE_ffmpeg_preset_set(rd, FFMPEG_PRESET_THEORA);
- audio= 1;
+ audio = 1;
}
}
diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h
index 51a7ac7ee62..941a74ec2ab 100644
--- a/source/blender/blenkernel/nla_private.h
+++ b/source/blender/blenkernel/nla_private.h
@@ -39,23 +39,23 @@
typedef struct NlaEvalStrip {
struct NlaEvalStrip *next, *prev;
- NlaTrack *track; /* track that this strip belongs to */
- NlaStrip *strip; /* strip that's being used */
+ NlaTrack *track; /* track that this strip belongs to */
+ NlaStrip *strip; /* strip that's being used */
- short track_index; /* the index of the track within the list */
- short strip_mode; /* which end of the strip are we looking at */
+ short track_index; /* the index of the track within the list */
+ short strip_mode; /* which end of the strip are we looking at */
- float strip_time; /* time at which which strip is being evaluated */
+ float strip_time; /* time at which which strip is being evaluated */
} NlaEvalStrip;
/* NlaEvalStrip->strip_mode */
enum {
- /* standard evaluation */
+ /* standard evaluation */
NES_TIME_BEFORE = -1,
NES_TIME_WITHIN,
NES_TIME_AFTER,
- /* transition-strip evaluations */
+ /* transition-strip evaluations */
NES_TIME_TRANSITION_START,
NES_TIME_TRANSITION_END,
} eNlaEvalStrip_StripMode;
@@ -66,11 +66,11 @@ enum {
typedef struct NlaEvalChannel {
struct NlaEvalChannel *next, *prev;
- PointerRNA ptr; /* pointer to struct containing property to use */
- PropertyRNA *prop; /* RNA-property type to use (should be in the struct given) */
- int index; /* array index (where applicable) */
+ PointerRNA ptr; /* pointer to struct containing property to use */
+ PropertyRNA *prop; /* RNA-property type to use (should be in the struct given) */
+ int index; /* array index (where applicable) */
- float value; /* value of this channel */
+ float value; /* value of this channel */
} NlaEvalChannel;
/* --------------- NLA Functions (not to be used as a proper API) ----------------------- */
diff --git a/source/blender/blenlib/BLI_args.h b/source/blender/blenlib/BLI_args.h
index 7a7529fa3c3..7a240e0e08a 100644
--- a/source/blender/blenlib/BLI_args.h
+++ b/source/blender/blenlib/BLI_args.h
@@ -37,7 +37,7 @@ struct bArgs;
typedef struct bArgs bArgs;
/* returns the number of extra arguments consumed by the function. 0 is normal value, -1 stops parsing arguments, other negative indicates skip */
-typedef int (*BA_ArgCallback)(int argc, const char **argv, void *data);
+typedef int (*BA_ArgCallback)(int argc, const char **argv, void *data);
struct bArgs *BLI_argsInit(int argc, const char **argv);
void BLI_argsFree(struct bArgs *ba);
diff --git a/source/blender/blenlib/BLI_array.h b/source/blender/blenlib/BLI_array.h
index 7069732eeb6..4fbed23d5e6 100644
--- a/source/blender/blenlib/BLI_array.h
+++ b/source/blender/blenlib/BLI_array.h
@@ -45,7 +45,7 @@
*
* for (i=0; i<10; i++) {
* BLI_array_grow_one(arr);
- * arr[i] = something;
+ * arr[i] = something;
* }
* BLI_array_free(arr);
*
@@ -105,7 +105,7 @@
arr, \
sizeof(*arr) * _##arr##_count) \
), \
- (void) (arr && ((void *)(arr) != (void*)_##arr##_static ? \
+ (void) (arr && ((void *)(arr) != (void *)_##arr##_static ? \
(MEM_freeN(arr), arr) : \
arr) \
), \
@@ -118,7 +118,7 @@
/* grow an array by a specified number of items */
#define BLI_array_grow_items(arr, num) ( \
((void *)(arr) == NULL && (void *)(_##arr##_static) != NULL) ? \
- ((arr = (void*)_##arr##_static), (_##arr##_count += num)) : \
+ ((arr = (void *)_##arr##_static), (_##arr##_count += num)) : \
_bli_array_grow_items(arr, num) \
)
diff --git a/source/blender/blenlib/BLI_bitmap.h b/source/blender/blenlib/BLI_bitmap.h
index f19d6d6f465..02e5d6bd797 100644
--- a/source/blender/blenlib/BLI_bitmap.h
+++ b/source/blender/blenlib/BLI_bitmap.h
@@ -26,7 +26,7 @@
#ifndef __BLI_BITMAP_H__
#define __BLI_BITMAP_H__
-typedef unsigned int* BLI_bitmap;
+typedef unsigned int *BLI_bitmap;
/* warning: the bitmap does not keep track of its own size or check
* for out-of-bounds access */
@@ -49,7 +49,7 @@ typedef unsigned int* BLI_bitmap;
* with MEM_freeN() */
#define BLI_BITMAP_NEW(_tot, _alloc_string) \
((BLI_bitmap)MEM_callocN(BLI_BITMAP_SIZE(_tot), \
- _alloc_string))
+ _alloc_string))
/* get the value of a single bit at '_index' */
#define BLI_BITMAP_GET(_bitmap, _index) \
@@ -73,7 +73,7 @@ typedef unsigned int* BLI_bitmap;
BLI_BITMAP_SET(_bitmap, _index); \
else \
BLI_BITMAP_CLEAR(_bitmap, _index); \
- } while(0)
+ } while (0)
/* resize bitmap to have space for '_tot' bits */
#define BLI_BITMAP_RESIZE(_bitmap, _tot) \
diff --git a/source/blender/blenlib/BLI_bpath.h b/source/blender/blenlib/BLI_bpath.h
index 27b373e6eb8..52b839d11a9 100644
--- a/source/blender/blenlib/BLI_bpath.h
+++ b/source/blender/blenlib/BLI_bpath.h
@@ -48,13 +48,13 @@ void BLI_bpath_traverse_id_list(struct Main *bmain, struct ListBase *lb, BPathVi
void BLI_bpath_traverse_main(struct Main *bmain, BPathVisitor visit_cb, const int flag, void *userdata);
int BLI_bpath_relocate_visitor(void *oldbasepath, char *path_dst, const char *path_src);
-#define BLI_BPATH_TRAVERSE_ABS (1<<0) /* convert paths to absolute */
-#define BLI_BPATH_TRAVERSE_SKIP_LIBRARY (1<<2) /* skip library paths */
-#define BLI_BPATH_TRAVERSE_SKIP_PACKED (1<<3) /* skip packed data */
-#define BLI_BPATH_TRAVERSE_SKIP_MULTIFILE (1<<4) /* skip paths where a single dir is used with an array of files, eg.
- * sequence strip images and pointcache. in this case only use the first
- * file, this is needed for directory manipulation functions which might
- * otherwise modify the same directory multiple times */
+#define BLI_BPATH_TRAVERSE_ABS (1 << 0) /* convert paths to absolute */
+#define BLI_BPATH_TRAVERSE_SKIP_LIBRARY (1 << 2) /* skip library paths */
+#define BLI_BPATH_TRAVERSE_SKIP_PACKED (1 << 3) /* skip packed data */
+#define BLI_BPATH_TRAVERSE_SKIP_MULTIFILE (1 << 4) /* skip paths where a single dir is used with an array of files, eg.
+ * sequence strip images and pointcache. in this case only use the first
+ * file, this is needed for directory manipulation functions which might
+ * otherwise modify the same directory multiple times */
/* high level funcs */
diff --git a/source/blender/blenlib/BLI_callbacks.h b/source/blender/blenlib/BLI_callbacks.h
index bfc336781aa..1e95510f6ec 100644
--- a/source/blender/blenlib/BLI_callbacks.h
+++ b/source/blender/blenlib/BLI_callbacks.h
@@ -56,7 +56,7 @@ typedef enum {
typedef struct {
struct bCallbackFuncStore *next, *prev;
- void (* func)(struct Main *, struct ID *, void *arg);
+ void (*func)(struct Main *, struct ID *, void *arg);
void *arg;
short alloc;
} bCallbackFuncStore;
@@ -70,6 +70,6 @@ void BLI_callback_global_finalize(void);
/* This is blenlib internal only, unrelated to above */
-void callLocalErrorCallBack(const char* msg);
+void callLocalErrorCallBack(const char *msg);
#endif /* __BLI_CALLBACKS_H__ */
diff --git a/source/blender/blenlib/BLI_dlrbTree.h b/source/blender/blenlib/BLI_dlrbTree.h
index 7443d7a07fe..92356b24403 100644
--- a/source/blender/blenlib/BLI_dlrbTree.h
+++ b/source/blender/blenlib/BLI_dlrbTree.h
@@ -58,7 +58,7 @@ typedef struct DLRBT_Node {
/* Red/Black defines for tree_col */
typedef enum eDLRBT_Colors {
- DLRBT_BLACK= 0,
+ DLRBT_BLACK = 0,
DLRBT_RED,
} eDLRBT_Colors;
@@ -67,10 +67,10 @@ typedef enum eDLRBT_Colors {
/* The Tree Data */
typedef struct DLRBT_Tree {
/* ListBase capabilities */
- void *first, *last; /* these should be based on DLRBT_Node-s */
+ void *first, *last; /* these should be based on DLRBT_Node-s */
/* Root Node */
- void *root; /* this should be based on DLRBT_Node-s */
+ void *root; /* this should be based on DLRBT_Node-s */
} DLRBT_Tree;
/* Callback Types --------------------------------- */
@@ -87,7 +87,7 @@ typedef short (*DLRBT_Comparator_FP)(void *node, void *data);
typedef DLRBT_Node *(*DLRBT_NAlloc_FP)(void *data);
/* update an existing node instance accordingly to be in sync with the given data *
- * - node: <DLRBT_Node> the node to update
+ * - node: <DLRBT_Node> the node to update
* - data: pointer to the relevant data or values stored in the bitpattern dependent on the function
*/
typedef void (*DLRBT_NUpdate_FP)(void *node, void *data);
@@ -137,7 +137,7 @@ short BLI_dlrbTree_contains(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *
/* Add the given data to the tree, and return the node added */
// NOTE: for duplicates, the update_cb is called (if available), and the existing node is returned
DLRBT_Node *BLI_dlrbTree_add(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb,
- DLRBT_NAlloc_FP new_cb, DLRBT_NUpdate_FP update_cb, void *data);
+ DLRBT_NAlloc_FP new_cb, DLRBT_NUpdate_FP update_cb, void *data);
/* Remove the given element from the tree and balance again */
diff --git a/source/blender/blenlib/BLI_dynlib.h b/source/blender/blenlib/BLI_dynlib.h
index d7c8706a7b8..7d5eb888021 100644
--- a/source/blender/blenlib/BLI_dynlib.h
+++ b/source/blender/blenlib/BLI_dynlib.h
@@ -35,9 +35,9 @@
typedef struct DynamicLibrary DynamicLibrary;
DynamicLibrary *BLI_dynlib_open(char *name);
-void *BLI_dynlib_find_symbol(DynamicLibrary* lib, const char *symname);
-char *BLI_dynlib_get_error_as_string(DynamicLibrary* lib);
-void BLI_dynlib_close(DynamicLibrary* lib);
+void *BLI_dynlib_find_symbol(DynamicLibrary *lib, const char *symname);
+char *BLI_dynlib_get_error_as_string(DynamicLibrary *lib);
+void BLI_dynlib_close(DynamicLibrary *lib);
#endif /* __BLI_DYNLIB_H__ */
diff --git a/source/blender/blenlib/BLI_dynstr.h b/source/blender/blenlib/BLI_dynstr.h
index f2e62d6e6bd..3b7f2d6bbaf 100644
--- a/source/blender/blenlib/BLI_dynstr.h
+++ b/source/blender/blenlib/BLI_dynstr.h
@@ -42,23 +42,23 @@
struct DynStr;
- /** The abstract DynStr type */
+/** The abstract DynStr type */
typedef struct DynStr DynStr;
- /**
- * Create a new DynStr.
- *
- * \return Pointer to a new DynStr.
- */
-DynStr* BLI_dynstr_new (void);
+/**
+ * Create a new DynStr.
+ *
+ * \return Pointer to a new DynStr.
+ */
+DynStr *BLI_dynstr_new(void);
- /**
- * Append a c-string to a DynStr.
- *
- * \param ds The DynStr to append to.
- * \param cstr The c-string to append.
- */
-void BLI_dynstr_append (DynStr *ds, const char *cstr);
+/**
+ * Append a c-string to a DynStr.
+ *
+ * \param ds The DynStr to append to.
+ * \param cstr The c-string to append.
+ */
+void BLI_dynstr_append(DynStr *ds, const char *cstr);
/**
* Append a length clamped c-string to a DynStr.
@@ -67,38 +67,38 @@ void BLI_dynstr_append (DynStr *ds, const char *cstr);
* \param cstr The c-string to append.
* \param len The maximum length of the c-string to copy.
*/
-void BLI_dynstr_nappend (DynStr *ds, const char *cstr, int len);
+void BLI_dynstr_nappend(DynStr *ds, const char *cstr, int len);
- /**
- * Append a c-string to a DynStr, but with formatting like printf.
- *
- * \param ds The DynStr to append to.
- * \param format The printf format string to use.
- */
-void BLI_dynstr_appendf (DynStr *ds, const char *format, ...)
+/**
+ * Append a c-string to a DynStr, but with formatting like printf.
+ *
+ * \param ds The DynStr to append to.
+ * \param format The printf format string to use.
+ */
+void BLI_dynstr_appendf(DynStr *ds, const char *format, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 2, 3)))
+__attribute__ ((format(printf, 2, 3)))
#endif
;
-void BLI_dynstr_vappendf (DynStr *ds, const char *format, va_list args);
+void BLI_dynstr_vappendf(DynStr *ds, const char *format, va_list args);
- /**
- * Find the length of a DynStr.
- *
- * \param ds The DynStr of interest.
- * \return The length of \a ds.
- */
-int BLI_dynstr_get_len (DynStr *ds);
+/**
+ * Find the length of a DynStr.
+ *
+ * \param ds The DynStr of interest.
+ * \return The length of \a ds.
+ */
+int BLI_dynstr_get_len(DynStr *ds);
- /**
- * Get a DynStr's contents as a c-string.
- * <i> The returned c-string should be freed
- * using MEM_freeN. </i>
- *
- * \param ds The DynStr of interest.
- * \return The contents of \a ds as a c-string.
- */
-char* BLI_dynstr_get_cstring (DynStr *ds);
+/**
+ * Get a DynStr's contents as a c-string.
+ * <i> The returned c-string should be freed
+ * using MEM_freeN. </i>
+ *
+ * \param ds The DynStr of interest.
+ * \return The contents of \a ds as a c-string.
+ */
+char *BLI_dynstr_get_cstring(DynStr *ds);
/**
* Get a DynStr's contents as a c-string.
@@ -109,14 +109,14 @@ char* BLI_dynstr_get_cstring (DynStr *ds);
* \param str The string to fill.
* \return The contents of \a ds as a c-string.
*/
-void BLI_dynstr_get_cstring_ex (DynStr *ds, char *str);
+void BLI_dynstr_get_cstring_ex(DynStr *ds, char *str);
- /**
- * Free the DynStr
- *
- * \param ds The DynStr to free.
- */
-void BLI_dynstr_free (DynStr *ds);
+/**
+ * Free the DynStr
+ *
+ * \param ds The DynStr to free.
+ */
+void BLI_dynstr_free(DynStr *ds);
#endif
diff --git a/source/blender/blenlib/BLI_edgehash.h b/source/blender/blenlib/BLI_edgehash.h
index b00ac683eb1..8d7d3b05653 100644
--- a/source/blender/blenlib/BLI_edgehash.h
+++ b/source/blender/blenlib/BLI_edgehash.h
@@ -39,62 +39,62 @@ struct EdgeHashIterator;
typedef struct EdgeHash EdgeHash;
typedef struct EdgeHashIterator EdgeHashIterator;
-typedef void (*EdgeHashFreeFP)(void *key);
+typedef void (*EdgeHashFreeFP)(void *key);
-EdgeHash* BLI_edgehash_new (void);
-void BLI_edgehash_free (EdgeHash *eh, EdgeHashFreeFP valfreefp);
+EdgeHash *BLI_edgehash_new(void);
+void BLI_edgehash_free(EdgeHash *eh, EdgeHashFreeFP valfreefp);
- /* Insert edge (v0,v1) into hash with given value, does
- * not check for duplicates.
- */
-void BLI_edgehash_insert (EdgeHash *eh, unsigned int v0, unsigned int v1, void *val);
+/* Insert edge (v0,v1) into hash with given value, does
+ * not check for duplicates.
+ */
+void BLI_edgehash_insert(EdgeHash *eh, unsigned int v0, unsigned int v1, void *val);
- /* Return value for given edge (v0,v1), or NULL if
- * if key does not exist in hash. (If need exists
- * to differentiate between key-value being NULL and
- * lack of key then see BLI_edgehash_lookup_p().
- */
-void* BLI_edgehash_lookup (EdgeHash *eh, unsigned int v0, unsigned int v1);
+/* Return value for given edge (v0,v1), or NULL if
+ * if key does not exist in hash. (If need exists
+ * to differentiate between key-value being NULL and
+ * lack of key then see BLI_edgehash_lookup_p().
+ */
+void *BLI_edgehash_lookup(EdgeHash *eh, unsigned int v0, unsigned int v1);
- /* Return pointer to value for given edge (v0,v1),
- * or NULL if key does not exist in hash.
- */
-void** BLI_edgehash_lookup_p (EdgeHash *eh, unsigned int v0, unsigned int v1);
+/* Return pointer to value for given edge (v0,v1),
+ * or NULL if key does not exist in hash.
+ */
+void **BLI_edgehash_lookup_p(EdgeHash *eh, unsigned int v0, unsigned int v1);
- /* Return boolean true/false if edge (v0,v1) in hash. */
-int BLI_edgehash_haskey (EdgeHash *eh, unsigned int v0, unsigned int v1);
+/* Return boolean true/false if edge (v0,v1) in hash. */
+int BLI_edgehash_haskey(EdgeHash *eh, unsigned int v0, unsigned int v1);
- /* Return number of keys in hash. */
-int BLI_edgehash_size (EdgeHash *eh);
+/* Return number of keys in hash. */
+int BLI_edgehash_size(EdgeHash *eh);
- /* Remove all edges from hash. */
-void BLI_edgehash_clear (EdgeHash *eh, EdgeHashFreeFP valfreefp);
+/* Remove all edges from hash. */
+void BLI_edgehash_clear(EdgeHash *eh, EdgeHashFreeFP valfreefp);
/***/
- /**
- * Create a new EdgeHashIterator. The hash table must not be mutated
- * while the iterator is in use, and the iterator will step exactly
- * BLI_edgehash_size(gh) times before becoming done.
- */
-EdgeHashIterator* BLI_edgehashIterator_new (EdgeHash *eh);
+/**
+ * Create a new EdgeHashIterator. The hash table must not be mutated
+ * while the iterator is in use, and the iterator will step exactly
+ * BLI_edgehash_size(gh) times before becoming done.
+ */
+EdgeHashIterator *BLI_edgehashIterator_new(EdgeHash *eh);
+
+/* Free an EdgeHashIterator. */
+void BLI_edgehashIterator_free(EdgeHashIterator *ehi);
- /* Free an EdgeHashIterator. */
-void BLI_edgehashIterator_free (EdgeHashIterator *ehi);
+/* Retrieve the key from an iterator. */
+void BLI_edgehashIterator_getKey(EdgeHashIterator *ehi, unsigned int *v0_r, unsigned int *v1_r);
- /* Retrieve the key from an iterator. */
-void BLI_edgehashIterator_getKey (EdgeHashIterator *ehi, unsigned int *v0_r, unsigned int *v1_r);
-
- /* Retrieve the value from an iterator. */
-void* BLI_edgehashIterator_getValue (EdgeHashIterator *ehi);
+/* Retrieve the value from an iterator. */
+void *BLI_edgehashIterator_getValue(EdgeHashIterator *ehi);
- /* Set the value for an iterator. */
-void BLI_edgehashIterator_setValue (EdgeHashIterator *ehi, void *val);
+/* Set the value for an iterator. */
+void BLI_edgehashIterator_setValue(EdgeHashIterator *ehi, void *val);
- /* Steps the iterator to the next index. */
-void BLI_edgehashIterator_step (EdgeHashIterator *ehi);
+/* Steps the iterator to the next index. */
+void BLI_edgehashIterator_step(EdgeHashIterator *ehi);
- /* Determine if an iterator is done. */
-int BLI_edgehashIterator_isDone (EdgeHashIterator *ehi);
+/* Determine if an iterator is done. */
+int BLI_edgehashIterator_isDone(EdgeHashIterator *ehi);
#endif
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index 1bf4efca8a0..ca810ee5b93 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -84,10 +84,10 @@ char *BLI_file_ungzip_to_mem(const char *from_file, int *size_r);
size_t BLI_file_descriptor_size(int file);
size_t BLI_file_size(const char *file);
- /* compare if one was last modified before the other */
+/* compare if one was last modified before the other */
int BLI_file_older(const char *file1, const char *file2);
- /* read ascii file as lines, empty list if reading fails */
+/* read ascii file as lines, empty list if reading fails */
struct LinkNode *BLI_file_read_as_lines(const char *file);
void BLI_file_free_lines(struct LinkNode *lines);
diff --git a/source/blender/blenlib/BLI_fileops_types.h b/source/blender/blenlib/BLI_fileops_types.h
index d9f8549e8f5..a19909a8f26 100644
--- a/source/blender/blenlib/BLI_fileops_types.h
+++ b/source/blender/blenlib/BLI_fileops_types.h
@@ -41,35 +41,34 @@ typedef unsigned int mode_t;
struct ImBuf;
-struct direntry{
- char *string;
- mode_t type;
- char *relname;
- char *path;
-#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500)
+struct direntry {
+ char *string;
+ mode_t type;
+ char *relname;
+ char *path;
+#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER >= 1500)
struct _stat64 s;
#elif defined(__MINGW32__)
struct _stati64 s;
#else
- struct stat s;
+ struct stat s;
#endif
unsigned int flags;
- char size[16];
- char mode1[4];
- char mode2[4];
- char mode3[4];
- char owner[16];
- char time[8];
- char date[16];
- char extra[16];
- void *poin;
- int nr;
+ char size[16];
+ char mode1[4];
+ char mode2[4];
+ char mode3[4];
+ char owner[16];
+ char time[8];
+ char date[16];
+ char extra[16];
+ void *poin;
+ int nr;
struct ImBuf *image;
unsigned int selflag; /* selection flag */
};
-struct dirlink
-{
+struct dirlink {
struct dirlink *next, *prev;
char *name;
};
diff --git a/source/blender/blenlib/BLI_fnmatch.h b/source/blender/blenlib/BLI_fnmatch.h
index 5914d150d56..6c466759010 100644
--- a/source/blender/blenlib/BLI_fnmatch.h
+++ b/source/blender/blenlib/BLI_fnmatch.h
@@ -17,23 +17,23 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-#ifndef __BLI_FNMATCH_H__
-#define __BLI_FNMATCH_H__
+#ifndef __BLI_FNMATCH_H__
+#define __BLI_FNMATCH_H__
/** \file BLI_fnmatch.h
* \ingroup bli
*/
-#ifdef __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
-#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
-#undef __P
-#define __P(protos) protos
+#if defined(__cplusplus) || (defined(__STDC__) && __STDC__)
+#undef __P
+#define __P(protos) protos
#else /* Not C++ or ANSI C. */
-#undef __P
-#define __P(protos) ()
+#undef __P
+#define __P(protos) ()
/* We can get away without defining `const' here only because in this file
* it is used only inside the prototype for `fnmatch', which is elided in
* non-ANSI C where `const' is problematical. */
@@ -42,30 +42,30 @@ extern "C" {
/* We #undef these before defining them because some losing systems
* (HP-UX A.08.07 for example) define these in <unistd.h>. */
-#undef FNM_PATHNAME
-#undef FNM_NOESCAPE
-#undef FNM_PERIOD
+#undef FNM_PATHNAME
+#undef FNM_NOESCAPE
+#undef FNM_PERIOD
/* Bits set in the FLAGS argument to `fnmatch'. */
-#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
-#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
-#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
-
-#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE) || defined( __SUNPRO_C)
-#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
-#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
-#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
+#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
+#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
+#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
+
+#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined(_GNU_SOURCE) || defined(__SUNPRO_C)
+#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
+#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
+#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
#endif
/* Value returned by `fnmatch' if STRING does not match PATTERN. */
-#define FNM_NOMATCH 1
+#define FNM_NOMATCH 1
/* Match STRING against the filename pattern PATTERN,
* returning zero if it matches, FNM_NOMATCH if not. */
-extern int fnmatch __P ((const char *__pattern, const char *__string,
- int __flags));
+extern int fnmatch __P((const char *__pattern, const char *__string,
+ int __flags));
-#ifdef __cplusplus
+#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenlib/BLI_ghash.h b/source/blender/blenlib/BLI_ghash.h
index b178538edf2..9034e8e51d9 100644
--- a/source/blender/blenlib/BLI_ghash.h
+++ b/source/blender/blenlib/BLI_ghash.h
@@ -37,10 +37,10 @@
extern "C" {
#endif
-typedef unsigned int (*GHashHashFP) (const void *key);
-typedef int (*GHashCmpFP) (const void *a, const void *b);
-typedef void (*GHashKeyFreeFP) (void *key);
-typedef void (*GHashValFreeFP) (void *val);
+typedef unsigned int (*GHashHashFP) (const void *key);
+typedef int (*GHashCmpFP) (const void *a, const void *b);
+typedef void (*GHashKeyFreeFP) (void *key);
+typedef void (*GHashValFreeFP) (void *val);
typedef struct Entry {
struct Entry *next;
@@ -49,8 +49,8 @@ typedef struct Entry {
} Entry;
typedef struct GHash {
- GHashHashFP hashfp;
- GHashCmpFP cmpfp;
+ GHashHashFP hashfp;
+ GHashCmpFP cmpfp;
Entry **buckets;
struct BLI_mempool *entrypool;
@@ -65,71 +65,71 @@ typedef struct GHashIterator {
/* *** */
-GHash* BLI_ghash_new (GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info);
-void BLI_ghash_free (GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
+GHash *BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info);
+void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
void BLI_ghash_insert(GHash *gh, void *key, void *val);
-void * BLI_ghash_lookup(GHash *gh, const void *key);
+void *BLI_ghash_lookup(GHash *gh, const void *key);
int BLI_ghash_remove(GHash *gh, void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
int BLI_ghash_haskey(GHash *gh, void *key);
-int BLI_ghash_size (GHash *gh);
+int BLI_ghash_size(GHash *gh);
/* *** */
- /**
- * Create a new GHashIterator. The hash table must not be mutated
- * while the iterator is in use, and the iterator will step exactly
- * BLI_ghash_size(gh) times before becoming done.
- *
- * \param gh The GHash to iterate over.
- * \return Pointer to a new DynStr.
- */
-GHashIterator* BLI_ghashIterator_new (GHash *gh);
- /**
- * Init an already allocated GHashIterator. The hash table must not
- * be mutated while the iterator is in use, and the iterator will
- * step exactly BLI_ghash_size(gh) times before becoming done.
- *
- * \param ghi The GHashIterator to initialize.
- * \param gh The GHash to iterate over.
- */
+/**
+ * Create a new GHashIterator. The hash table must not be mutated
+ * while the iterator is in use, and the iterator will step exactly
+ * BLI_ghash_size(gh) times before becoming done.
+ *
+ * \param gh The GHash to iterate over.
+ * \return Pointer to a new DynStr.
+ */
+GHashIterator *BLI_ghashIterator_new(GHash *gh);
+/**
+ * Init an already allocated GHashIterator. The hash table must not
+ * be mutated while the iterator is in use, and the iterator will
+ * step exactly BLI_ghash_size(gh) times before becoming done.
+ *
+ * \param ghi The GHashIterator to initialize.
+ * \param gh The GHash to iterate over.
+ */
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh);
- /**
- * Free a GHashIterator.
- *
- * \param ghi The iterator to free.
- */
-void BLI_ghashIterator_free (GHashIterator *ghi);
-
- /**
- * Retrieve the key from an iterator.
- *
- * \param ghi The iterator.
- * \return The key at the current index, or NULL if the
- * iterator is done.
- */
-void* BLI_ghashIterator_getKey (GHashIterator *ghi);
- /**
- * Retrieve the value from an iterator.
- *
- * \param ghi The iterator.
- * \return The value at the current index, or NULL if the
- * iterator is done.
- */
-void* BLI_ghashIterator_getValue (GHashIterator *ghi);
- /**
- * Steps the iterator to the next index.
- *
- * \param ghi The iterator.
- */
-void BLI_ghashIterator_step (GHashIterator *ghi);
- /**
- * Determine if an iterator is done (has reached the end of
- * the hash table).
- *
- * \param ghi The iterator.
- * \return True if done, False otherwise.
- */
-int BLI_ghashIterator_isDone (GHashIterator *ghi);
+/**
+ * Free a GHashIterator.
+ *
+ * \param ghi The iterator to free.
+ */
+void BLI_ghashIterator_free(GHashIterator *ghi);
+
+/**
+ * Retrieve the key from an iterator.
+ *
+ * \param ghi The iterator.
+ * \return The key at the current index, or NULL if the
+ * iterator is done.
+ */
+void *BLI_ghashIterator_getKey(GHashIterator *ghi);
+/**
+ * Retrieve the value from an iterator.
+ *
+ * \param ghi The iterator.
+ * \return The value at the current index, or NULL if the
+ * iterator is done.
+ */
+void *BLI_ghashIterator_getValue(GHashIterator *ghi);
+/**
+ * Steps the iterator to the next index.
+ *
+ * \param ghi The iterator.
+ */
+void BLI_ghashIterator_step(GHashIterator *ghi);
+/**
+ * Determine if an iterator is done (has reached the end of
+ * the hash table).
+ *
+ * \param ghi The iterator.
+ * \return True if done, False otherwise.
+ */
+int BLI_ghashIterator_isDone(GHashIterator *ghi);
#define GHASH_ITER(gh_iter_, ghash_) \
for (BLI_ghashIterator_init(&gh_iter_, ghash_); \
@@ -138,24 +138,29 @@ int BLI_ghashIterator_isDone (GHashIterator *ghi);
/* *** */
-unsigned int BLI_ghashutil_ptrhash (const void *key);
-int BLI_ghashutil_ptrcmp (const void *a, const void *b);
+unsigned int BLI_ghashutil_ptrhash(const void *key);
+int BLI_ghashutil_ptrcmp(const void *a, const void *b);
+
+unsigned int BLI_ghashutil_strhash(const void *key);
+int BLI_ghashutil_strcmp(const void *a, const void *b);
-unsigned int BLI_ghashutil_strhash (const void *key);
-int BLI_ghashutil_strcmp (const void *a, const void *b);
+unsigned int BLI_ghashutil_inthash(const void *ptr);
+int BLI_ghashutil_intcmp(const void *a, const void *b);
-unsigned int BLI_ghashutil_inthash (const void *ptr);
-int BLI_ghashutil_intcmp (const void *a, const void *b);
+GHash *BLI_ghash_ptr_new(const char *info);
+GHash *BLI_ghash_str_new(const char *info);
+GHash *BLI_ghash_int_new(const char *info);
+GHash *BLI_ghash_pair_new(const char *info);
typedef struct GHashPair {
const void *first;
const void *second;
} GHashPair;
-GHashPair* BLI_ghashutil_pairalloc (const void *first, const void *second);
-unsigned int BLI_ghashutil_pairhash (const void *ptr);
-int BLI_ghashutil_paircmp (const void *a, const void *b);
-void BLI_ghashutil_pairfree (void *ptr);
+GHashPair *BLI_ghashutil_pairalloc(const void *first, const void *second);
+unsigned int BLI_ghashutil_pairhash(const void *ptr);
+int BLI_ghashutil_paircmp(const void *a, const void *b);
+void BLI_ghashutil_pairfree(void *ptr);
#ifdef __cplusplus
}
diff --git a/source/blender/blenlib/BLI_graph.h b/source/blender/blenlib/BLI_graph.h
index 52613f9869f..864e92d8cac 100644
--- a/source/blender/blenlib/BLI_graph.h
+++ b/source/blender/blenlib/BLI_graph.h
@@ -37,10 +37,10 @@ struct BArc;
struct RadialArc;
-typedef void (*FreeArc)(struct BArc*);
-typedef void (*FreeNode)(struct BNode*);
-typedef void (*RadialSymmetry)(struct BNode* root_node, struct RadialArc* ring, int total);
-typedef void (*AxialSymmetry)(struct BNode* root_node, struct BNode* node1, struct BNode* node2, struct BArc* arc1, struct BArc* arc2);
+typedef void (*FreeArc)(struct BArc *);
+typedef void (*FreeNode)(struct BNode *);
+typedef void (*RadialSymmetry)(struct BNode *root_node, struct RadialArc *ring, int total);
+typedef void (*AxialSymmetry)(struct BNode *root_node, struct BNode *node1, struct BNode *node2, struct BArc *arc1, struct BArc *arc2);
/* IF YOU MODIFY THOSE TYPES, YOU NEED TO UPDATE ALL THOSE THAT "INHERIT" FROM THEM
*
@@ -49,16 +49,16 @@ typedef void (*AxialSymmetry)(struct BNode* root_node, struct BNode* node1, stru
* */
typedef struct BGraph {
- ListBase arcs;
- ListBase nodes;
+ ListBase arcs;
+ ListBase nodes;
float length;
/* function pointer to deal with custom fonctionnality */
- FreeArc free_arc;
- FreeNode free_node;
- RadialSymmetry radial_symmetry;
- AxialSymmetry axial_symmetry;
+ FreeArc free_arc;
+ FreeNode free_node;
+ RadialSymmetry radial_symmetry;
+ AxialSymmetry axial_symmetry;
} BGraph;
typedef struct BNode {
@@ -90,30 +90,30 @@ typedef struct BArc {
struct BArcIterator;
-void* IT_head(void* iter);
-void* IT_tail(void* iter);
-void* IT_peek(void* iter, int n);
-void* IT_next(void* iter);
-void* IT_nextN(void* iter, int n);
-void* IT_previous(void* iter);
-int IT_stopped(void* iter);
-
-typedef void* (*HeadFct)(void* iter);
-typedef void* (*TailFct)(void* iter);
-typedef void* (*PeekFct)(void* iter, int n);
-typedef void* (*NextFct)(void* iter);
-typedef void* (*NextNFct)(void* iter, int n);
-typedef void* (*PreviousFct)(void* iter);
-typedef int (*StoppedFct)(void* iter);
+void *IT_head(void *iter);
+void *IT_tail(void *iter);
+void *IT_peek(void *iter, int n);
+void *IT_next(void *iter);
+void *IT_nextN(void *iter, int n);
+void *IT_previous(void *iter);
+int IT_stopped(void *iter);
+
+typedef void * (*HeadFct)(void *iter);
+typedef void * (*TailFct)(void *iter);
+typedef void * (*PeekFct)(void *iter, int n);
+typedef void * (*NextFct)(void *iter);
+typedef void * (*NextNFct)(void *iter, int n);
+typedef void * (*PreviousFct)(void *iter);
+typedef int (*StoppedFct)(void *iter);
typedef struct BArcIterator {
- HeadFct head;
- TailFct tail;
- PeekFct peek;
- NextFct next;
- NextNFct nextN;
- PreviousFct previous;
- StoppedFct stopped;
+ HeadFct head;
+ TailFct tail;
+ PeekFct peek;
+ NextFct next;
+ NextNFct nextN;
+ PreviousFct previous;
+ StoppedFct stopped;
float *p, *no;
float size;
@@ -123,8 +123,7 @@ typedef struct BArcIterator {
} BArcIterator;
/* Helper structure for radial symmetry */
-typedef struct RadialArc
-{
+typedef struct RadialArc {
struct BArc *arc;
float n[3]; /* normalized vector joining the nodes of the arc */
} RadialArc;
@@ -141,7 +140,7 @@ void BLI_flagArcs(BGraph *graph, int flag);
int BLI_hasAdjacencyList(BGraph *rg);
void BLI_buildAdjacencyList(BGraph *rg);
-void BLI_rebuildAdjacencyListForNode(BGraph* rg, BNode *node);
+void BLI_rebuildAdjacencyListForNode(BGraph *rg, BNode *node);
void BLI_freeAdjacencyList(BGraph *rg);
int BLI_FlagSubgraphs(BGraph *graph);
@@ -156,11 +155,11 @@ void BLI_calcGraphLength(BGraph *graph);
void BLI_replaceNode(BGraph *graph, BNode *node_src, BNode *node_replaced);
void BLI_replaceNodeInArc(BGraph *graph, BArc *arc, BNode *node_src, BNode *node_replaced);
void BLI_removeDoubleNodes(BGraph *graph, float limit);
-BNode * BLI_FindNodeByPosition(BGraph *graph, float *p, float limit);
+BNode *BLI_FindNodeByPosition(BGraph *graph, const float p[3], const float limit);
-BArc * BLI_findConnectedArc(BGraph *graph, BArc *arc, BNode *v);
+BArc *BLI_findConnectedArc(BGraph *graph, BArc *arc, BNode *v);
-int BLI_isGraphCyclic(BGraph *graph);
+int BLI_isGraphCyclic(BGraph *graph);
/*------------ Symmetry handling ------------*/
void BLI_markdownSymmetry(BGraph *graph, BNode *root_node, float limit);
@@ -168,19 +167,19 @@ void BLI_markdownSymmetry(BGraph *graph, BNode *root_node, float limit);
void BLI_mirrorAlongAxis(float v[3], float center[3], float axis[3]);
/* BNode symmetry flags */
-#define SYM_TOPOLOGICAL 1
-#define SYM_PHYSICAL 2
+#define SYM_TOPOLOGICAL 1
+#define SYM_PHYSICAL 2
/* the following two are exclusive */
-#define SYM_AXIAL 4
-#define SYM_RADIAL 8
+#define SYM_AXIAL 4
+#define SYM_RADIAL 8
/* BArc symmetry flags
*
* axial symmetry sides */
-#define SYM_SIDE_POSITIVE 1
-#define SYM_SIDE_NEGATIVE 2
+#define SYM_SIDE_POSITIVE 1
+#define SYM_SIDE_NEGATIVE 2
/* Anything higher is the order in radial symmetry */
-#define SYM_SIDE_RADIAL 3
+#define SYM_SIDE_RADIAL 3
#endif /*__BLI_GRAPH_H__*/
diff --git a/source/blender/blenlib/BLI_gsqueue.h b/source/blender/blenlib/BLI_gsqueue.h
index 29c31c19047..b4cb1edd45a 100644
--- a/source/blender/blenlib/BLI_gsqueue.h
+++ b/source/blender/blenlib/BLI_gsqueue.h
@@ -36,64 +36,64 @@
typedef struct _GSQueue GSQueue;
- /**
- * Create a new GSQueue.
- *
- * \param elem_size The size of the structures in the queue.
- * \retval The new queue
- */
-GSQueue* BLI_gsqueue_new (int elem_size);
+/**
+ * Create a new GSQueue.
+ *
+ * \param elem_size The size of the structures in the queue.
+ * \retval The new queue
+ */
+GSQueue *BLI_gsqueue_new(int elem_size);
- /**
- * Query if the queue is empty
- */
-int BLI_gsqueue_is_empty(GSQueue *gq);
+/**
+ * Query if the queue is empty
+ */
+int BLI_gsqueue_is_empty(GSQueue *gq);
- /**
- * Query number elements in the queue
- */
-int BLI_gsqueue_size(GSQueue *gq);
+/**
+ * Query number elements in the queue
+ */
+int BLI_gsqueue_size(GSQueue *gq);
- /**
- * Access the item at the head of the queue
- * without removing it.
- *
- * \param item_r A pointer to an appropriately
- * sized structure (the size passed to BLI_gsqueue_new)
- */
-void BLI_gsqueue_peek (GSQueue *gq, void *item_r);
+/**
+ * Access the item at the head of the queue
+ * without removing it.
+ *
+ * \param item_r A pointer to an appropriately
+ * sized structure (the size passed to BLI_gsqueue_new)
+ */
+void BLI_gsqueue_peek(GSQueue *gq, void *item_r);
- /**
- * Access the item at the head of the queue
- * and remove it.
- *
- * \param item_r A pointer to an appropriately
- * sized structure (the size passed to BLI_gsqueue_new).
- * Can be NULL if desired.
- */
-void BLI_gsqueue_pop (GSQueue *gq, void *item_r);
+/**
+ * Access the item at the head of the queue
+ * and remove it.
+ *
+ * \param item_r A pointer to an appropriately
+ * sized structure (the size passed to BLI_gsqueue_new).
+ * Can be NULL if desired.
+ */
+void BLI_gsqueue_pop(GSQueue *gq, void *item_r);
- /**
- * Push an element onto the tail of the queue.
- *
- * \param item A pointer to an appropriately
- * sized structure (the size passed to BLI_gsqueue_new).
- */
-void BLI_gsqueue_push (GSQueue *gq, void *item);
+/**
+ * Push an element onto the tail of the queue.
+ *
+ * \param item A pointer to an appropriately
+ * sized structure (the size passed to BLI_gsqueue_new).
+ */
+void BLI_gsqueue_push(GSQueue *gq, void *item);
- /**
- * Push an element back onto the head of the queue (so
- * it would be returned from the next call to BLI_gsqueue_pop).
- *
- * \param item A pointer to an appropriately
- * sized structure (the size passed to BLI_gsqueue_new).
- */
-void BLI_gsqueue_pushback (GSQueue *gq, void *item);
+/**
+ * Push an element back onto the head of the queue (so
+ * it would be returned from the next call to BLI_gsqueue_pop).
+ *
+ * \param item A pointer to an appropriately
+ * sized structure (the size passed to BLI_gsqueue_new).
+ */
+void BLI_gsqueue_pushback(GSQueue *gq, void *item);
- /**
- * Free the queue
- */
-void BLI_gsqueue_free (GSQueue *gq);
+/**
+ * Free the queue
+ */
+void BLI_gsqueue_free(GSQueue *gq);
#endif /* __BLI_GSQUEUE_H__ */
diff --git a/source/blender/blenlib/BLI_heap.h b/source/blender/blenlib/BLI_heap.h
index 5ceccda96e4..b378f2bb365 100644
--- a/source/blender/blenlib/BLI_heap.h
+++ b/source/blender/blenlib/BLI_heap.h
@@ -38,35 +38,35 @@ struct HeapNode;
typedef struct Heap Heap;
typedef struct HeapNode HeapNode;
-typedef void (*HeapFreeFP)(void *ptr);
+typedef void (*HeapFreeFP)(void *ptr);
/* Creates a new heap. BLI_memarena is used for allocating nodes. Removed nodes
* are recycled, so memory usage will not shrink. */
-Heap* BLI_heap_new (void);
-void BLI_heap_free (Heap *heap, HeapFreeFP ptrfreefp);
+Heap *BLI_heap_new(void);
+void BLI_heap_free(Heap *heap, HeapFreeFP ptrfreefp);
/* Insert heap node with a value (often a 'cost') and pointer into the heap,
* duplicate values are allowed. */
-HeapNode* BLI_heap_insert (Heap *heap, float value, void *ptr);
+HeapNode *BLI_heap_insert(Heap *heap, float value, void *ptr);
/* Remove a heap node. */
-void BLI_heap_remove (Heap *heap, HeapNode *node);
+void BLI_heap_remove(Heap *heap, HeapNode *node);
/* Return 0 if the heap is empty, 1 otherwise. */
-int BLI_heap_empty (Heap *heap);
+int BLI_heap_empty(Heap *heap);
/* Return the size of the heap. */
-int BLI_heap_size (Heap *heap);
+int BLI_heap_size(Heap *heap);
/* Return the top node of the heap. This is the node with the lowest value. */
-HeapNode* BLI_heap_top (Heap *heap);
+HeapNode *BLI_heap_top(Heap *heap);
/* Pop the top node off the heap and return it's pointer. */
-void* BLI_heap_popmin (Heap *heap);
+void *BLI_heap_popmin(Heap *heap);
/* Return the value or pointer of a heap node. */
-float BLI_heap_node_value (HeapNode *heap);
-void* BLI_heap_node_ptr (HeapNode *heap);
+float BLI_heap_node_value(HeapNode *heap);
+void *BLI_heap_node_ptr(HeapNode *heap);
#endif
diff --git a/source/blender/blenlib/BLI_jitter.h b/source/blender/blenlib/BLI_jitter.h
index c2a6250c154..432bf73ad90 100644
--- a/source/blender/blenlib/BLI_jitter.h
+++ b/source/blender/blenlib/BLI_jitter.h
@@ -32,7 +32,7 @@
* \ingroup bli
*/
-void BLI_jitter_init(float *jitarr, int num);
+void BLI_jitter_init(float *jitarr, int num);
void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1);
void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2);
diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h
index ff3017fef03..7041c122ff9 100644
--- a/source/blender/blenlib/BLI_kdopbvh.h
+++ b/source/blender/blenlib/BLI_kdopbvh.h
@@ -49,37 +49,34 @@ typedef struct BVHTreeOverlap {
int indexB;
} BVHTreeOverlap;
-typedef struct BVHTreeNearest
-{
- int index; /* the index of the nearest found (untouched if none is found within a dist radius from the given coordinates) */
- float co[3]; /* nearest coordinates (untouched it none is found within a dist radius from the given coordinates) */
- float no[3]; /* normal at nearest coordinates (untouched it none is found within a dist radius from the given coordinates) */
- float dist; /* squared distance to search arround */
+typedef struct BVHTreeNearest {
+ int index; /* the index of the nearest found (untouched if none is found within a dist radius from the given coordinates) */
+ float co[3]; /* nearest coordinates (untouched it none is found within a dist radius from the given coordinates) */
+ float no[3]; /* normal at nearest coordinates (untouched it none is found within a dist radius from the given coordinates) */
+ float dist; /* squared distance to search arround */
} BVHTreeNearest;
-typedef struct BVHTreeRay
-{
- float origin[3]; /* ray origin */
- float direction[3]; /* ray direction */
- float radius; /* radius around ray */
+typedef struct BVHTreeRay {
+ float origin[3]; /* ray origin */
+ float direction[3]; /* ray direction */
+ float radius; /* radius around ray */
} BVHTreeRay;
-typedef struct BVHTreeRayHit
-{
- int index; /* index of the tree node (untouched if no hit is found) */
- float co[3]; /* coordinates of the hit point */
- float no[3]; /* normal on hit point */
- float dist; /* distance to the hit point */
+typedef struct BVHTreeRayHit {
+ int index; /* index of the tree node (untouched if no hit is found) */
+ float co[3]; /* coordinates of the hit point */
+ float no[3]; /* normal on hit point */
+ float dist; /* distance to the hit point */
} BVHTreeRayHit;
/* callback must update nearest in case it finds a nearest result */
-typedef void (*BVHTree_NearestPointCallback) (void *userdata, int index, const float *co, BVHTreeNearest *nearest);
+typedef void (*BVHTree_NearestPointCallback)(void *userdata, int index, const float *co, BVHTreeNearest *nearest);
/* callback must update hit in case it finds a nearest successful hit */
-typedef void (*BVHTree_RayCastCallback) (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit);
+typedef void (*BVHTree_RayCastCallback)(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit);
/* callback to range search query */
-typedef void (*BVHTree_RangeQuery) (void *userdata, int index, float squared_dist);
+typedef void (*BVHTree_RangeQuery)(void *userdata, int index, float squared_dist);
BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis);
void BLI_bvhtree_free(BVHTree *tree);
diff --git a/source/blender/blenlib/BLI_kdtree.h b/source/blender/blenlib/BLI_kdtree.h
index a58f58020d7..ae5e32d73eb 100644
--- a/source/blender/blenlib/BLI_kdtree.h
+++ b/source/blender/blenlib/BLI_kdtree.h
@@ -46,7 +46,7 @@ typedef struct KDTreeNearest {
} KDTreeNearest;
/* Creates or free a kdtree */
-KDTree* BLI_kdtree_new(int maxsize);
+KDTree *BLI_kdtree_new(int maxsize);
void BLI_kdtree_free(KDTree *tree);
/* Construction: first insert points, then call balance. Normal is optional. */
@@ -56,12 +56,11 @@ void BLI_kdtree_balance(KDTree *tree);
/* Find nearest returns index, and -1 if no node is found.
* Find n nearest returns number of points found, with results in nearest.
* Normal is optional, but if given will limit results to points in normal direction from co. */
-int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest);
-int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTreeNearest *nearest);
+int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest);
+int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTreeNearest *nearest);
/* Range search returns number of points found, with results in nearest */
/* Normal is optional, but if given will limit results to points in normal direction from co. */
/* Remember to free nearest after use! */
int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KDTreeNearest **nearest);
#endif
-
diff --git a/source/blender/blenlib/BLI_linklist.h b/source/blender/blenlib/BLI_linklist.h
index 664beb4eb98..da56a300b9b 100644
--- a/source/blender/blenlib/BLI_linklist.h
+++ b/source/blender/blenlib/BLI_linklist.h
@@ -46,20 +46,19 @@ typedef struct LinkNode {
void *link;
} LinkNode;
-int BLI_linklist_length (struct LinkNode *list);
-int BLI_linklist_index (struct LinkNode *list, void *ptr);
+int BLI_linklist_length(struct LinkNode *list);
+int BLI_linklist_index(struct LinkNode *list, void *ptr);
-struct LinkNode *BLI_linklist_find (struct LinkNode *list, int index);
+struct LinkNode *BLI_linklist_find(struct LinkNode *list, int index);
-void BLI_linklist_reverse (struct LinkNode **listp);
+void BLI_linklist_reverse(struct LinkNode **listp);
-void BLI_linklist_prepend (struct LinkNode **listp, void *ptr);
-void BLI_linklist_append (struct LinkNode **listp, void *ptr);
-void BLI_linklist_prepend_arena (struct LinkNode **listp, void *ptr, struct MemArena *ma);
-void BLI_linklist_insert_after (struct LinkNode **listp, void *ptr);
+void BLI_linklist_prepend(struct LinkNode **listp, void *ptr);
+void BLI_linklist_append(struct LinkNode **listp, void *ptr);
+void BLI_linklist_prepend_arena(struct LinkNode **listp, void *ptr, struct MemArena *ma);
+void BLI_linklist_insert_after(struct LinkNode **listp, void *ptr);
-void BLI_linklist_free (struct LinkNode *list, LinkNodeFreeFP freefunc);
-void BLI_linklist_apply (struct LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata);
+void BLI_linklist_free(struct LinkNode *list, LinkNodeFreeFP freefunc);
+void BLI_linklist_apply(struct LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata);
#endif
-
diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h
index 7e5f1f2a72a..02065c4b86f 100644
--- a/source/blender/blenlib/BLI_math_base.h
+++ b/source/blender/blenlib/BLI_math_base.h
@@ -127,19 +127,19 @@
#endif
#ifdef WIN32
-#ifndef FREE_WINDOWS
-#define isnan(n) _isnan(n)
-#define finite _finite
-#define hypot _hypot
-#endif
+# ifndef FREE_WINDOWS
+# define isnan(n) _isnan(n)
+# define finite _finite
+# define hypot _hypot
+# endif
#endif
#ifndef SWAP
-#define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; }
+# define SWAP(type, a, b) { type sw_ap; sw_ap = (a); (a) = (b); (b) = sw_ap; }
#endif
#ifndef CLAMP
-#define CLAMP(a, b, c) if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c)
+# define CLAMP(a, b, c) if ((a) < (b)) (a) = (b); else if ((a) > (c)) (a) = (c)
#endif
#ifdef __BLI_MATH_INLINE_H__
diff --git a/source/blender/blenlib/BLI_math_color.h b/source/blender/blenlib/BLI_math_color.h
index 4771fdbcb69..afdb5d40bd5 100644
--- a/source/blender/blenlib/BLI_math_color.h
+++ b/source/blender/blenlib/BLI_math_color.h
@@ -37,19 +37,19 @@ extern "C" {
#include "BLI_math_inline.h"
/* primaries */
-#define BLI_XYZ_SMPTE 0
-#define BLI_XYZ_REC709_SRGB 1
-#define BLI_XYZ_CIE 2
+#define BLI_XYZ_SMPTE 0
+#define BLI_XYZ_REC709_SRGB 1
+#define BLI_XYZ_CIE 2
/* built-in profiles */
-#define BLI_PR_NONE 0
-#define BLI_PR_SRGB 1
-#define BLI_PR_REC709 2
+#define BLI_PR_NONE 0
+#define BLI_PR_SRGB 1
+#define BLI_PR_REC709 2
/* YCbCr */
-#define BLI_YCC_ITU_BT601 0
-#define BLI_YCC_ITU_BT709 1
-#define BLI_YCC_JFIF_0_255 2
+#define BLI_YCC_ITU_BT601 0
+#define BLI_YCC_ITU_BT709 1
+#define BLI_YCC_JFIF_0_255 2
/******************* Conversion to RGB ********************/
@@ -101,8 +101,8 @@ void BLI_init_srgb_conversion(void);
int constrain_rgb(float *r, float *g, float *b);
void minmax_rgb(short c[3]);
-void rgb_float_set_hue_float_offset(float * rgb, float hue_offset);
-void rgb_byte_set_hue_float_offset(unsigned char * rgb, float hue_offset);
+void rgb_float_set_hue_float_offset(float *rgb, float hue_offset);
+void rgb_byte_set_hue_float_offset(unsigned char *rgb, float hue_offset);
void rgb_uchar_to_float(float col_r[3], const unsigned char col_ub[3]);
void rgba_uchar_to_float(float col_r[4], const unsigned char col_ub[4]);
diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h
index 85129d5b68d..0560a3f6e64 100644
--- a/source/blender/blenlib/BLI_math_geom.h
+++ b/source/blender/blenlib/BLI_math_geom.h
@@ -67,23 +67,23 @@ float dist_to_plane_v3(const float p[3], const float plane_co[3], const float pl
float dist_to_line_segment_v3(const float p[3], const float l1[3], const float l2[3]);
float closest_to_line_v3(float r[3], const float p[3], const float l1[3], const float l2[3]);
float closest_to_line_v2(float r[2], const float p[2], const float l1[2], const float l2[2]);
-void closest_to_line_segment_v3(float r[3], const float p[3], const float l1[3], const float l2[3]);
-void closest_to_plane_v3(float r[3], const float plane_co[3], const float plane_no_unit[3], const float pt[3]);
+void closest_to_line_segment_v3(float r[3], const float p[3], const float l1[3], const float l2[3]);
+void closest_to_plane_v3(float r[3], const float plane_co[3], const float plane_no_unit[3], const float pt[3]);
float line_point_factor_v3(const float p[3], const float l1[3], const float l2[3]);
float line_point_factor_v2(const float p[2], const float l1[2], const float l2[2]);
-void limit_dist_v3(float v1[3], float v2[3], const float dist);
+void limit_dist_v3(float v1[3], float v2[3], const float dist);
/******************************* Intersection ********************************/
/* TODO int return value consistency */
/* line-line */
-#define ISECT_LINE_LINE_COLINEAR -1
-#define ISECT_LINE_LINE_NONE 0
-#define ISECT_LINE_LINE_EXACT 1
-#define ISECT_LINE_LINE_CROSS 2
+#define ISECT_LINE_LINE_COLINEAR -1
+#define ISECT_LINE_LINE_NONE 0
+#define ISECT_LINE_LINE_EXACT 1
+#define ISECT_LINE_LINE_CROSS 2
int isect_line_line_v2(const float a1[2], const float a2[2], const float b1[2], const float b2[2]);
int isect_line_line_v2_int(const int a1[2], const int a2[2], const int b1[2], const int b2[2]);
@@ -139,13 +139,13 @@ void isect_plane_plane_v3(float r_isect_co[3], float r_isect_no[3],
/* line/ray triangle */
int isect_line_tri_v3(const float p1[3], const float p2[3],
- const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2]);
+ const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2]);
int isect_ray_tri_v3(const float p1[3], const float d[3],
- const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2]);
+ const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2]);
int isect_ray_tri_threshold_v3(const float p1[3], const float d[3],
- const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2], const float threshold);
+ const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2], const float threshold);
int isect_ray_tri_epsilon_v3(const float p1[3], const float d[3],
- const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2], const float epsilon);
+ const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2], const float epsilon);
/* point in polygon */
int isect_point_quad_v2(const float p[2], const float a[2], const float b[2], const float c[2], const float d[2]);
@@ -161,10 +161,10 @@ void isect_point_face_uv_v2(const int isquad, const float v0[2], const float v1[
/* other */
int isect_sweeping_sphere_tri_v3(const float p1[3], const float p2[3], const float radius,
- const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float ipoint[3]);
+ const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float ipoint[3]);
int isect_axial_line_tri_v3(const int axis, const float co1[3], const float co2[3],
- const float v0[3], const float v1[3], const float v2[3], float *r_lambda);
+ const float v0[3], const float v1[3], const float v2[3], float *r_lambda);
int isect_aabb_aabb_v3(const float min1[3], const float max1[3], const float min2[3], const float max2[3]);
@@ -176,20 +176,20 @@ void plot_line_v2v2i(const int p1[2], const int p2[2], int (*callback)(int, int,
/* tri or quad, d can be NULL */
void interp_weights_face_v3(float w[4],
- const float a[3], const float b[3], const float c[3], const float d[3], const float p[3]);
+ const float a[3], const float b[3], const float c[3], const float d[3], const float p[3]);
void interp_weights_poly_v3(float w[], float v[][3], const int n, const float p[3]);
void interp_cubic_v3(float x[3], float v[3],
- const float x1[3], const float v1[3], const float x2[3], const float v2[3], const float t);
+ const float x1[3], const float v1[3], const float x2[3], const float v2[3], const float t);
int interp_sparse_array(float *array, const int list_size, const float invalid);
void barycentric_transform(float pt_tar[3], float const pt_src[3],
- const float tri_tar_p1[3], const float tri_tar_p2[3], const float tri_tar_p3[3],
- const float tri_src_p1[3], const float tri_src_p2[3], const float tri_src_p3[3]);
+ const float tri_tar_p1[3], const float tri_tar_p2[3], const float tri_tar_p3[3],
+ const float tri_src_p1[3], const float tri_src_p2[3], const float tri_src_p3[3]);
void barycentric_weights_v2(const float v1[2], const float v2[2], const float v3[2],
- const float co[2], float w[3]);
+ const float co[2], float w[3]);
void resolve_tri_uv(float r_uv[2], const float st[2], const float st0[2], const float st1[2], const float st2[2]);
void resolve_quad_uv(float uv[2], const float st[2], const float st0[2], const float st1[2], const float st2[2], const float st3[2]);
@@ -197,21 +197,21 @@ void resolve_quad_uv(float uv[2], const float st[2], const float st0[2], const f
/***************************** View & Projection *****************************/
void lookat_m4(float mat[4][4], float vx, float vy,
- float vz, float px, float py, float pz, float twist);
+ float vz, float px, float py, float pz, float twist);
void polarview_m4(float mat[4][4], float dist, float azimuth,
- float incidence, float twist);
+ float incidence, float twist);
void perspective_m4(float mat[4][4], const float left, const float right,
- const float bottom, const float top, const float nearClip, const float farClip);
+ const float bottom, const float top, const float nearClip, const float farClip);
void orthographic_m4(float mat[4][4], const float left, const float right,
- const float bottom, const float top, const float nearClip, const float farClip);
+ const float bottom, const float top, const float nearClip, const float farClip);
void window_translate_m4(float winmat[][4], float perspmat[][4],
- const float x, const float y);
+ const float x, const float y);
int box_clip_bounds_m4(float boundbox[2][3],
- const float bounds[4], float winmat[4][4]);
+ const float bounds[4], float winmat[4][4]);
void box_minmax_bounds_m4(float min[3], float max[3],
- float boundbox[2][3], float mat[4][4]);
+ float boundbox[2][3], float mat[4][4]);
/********************************** Mapping **********************************/
@@ -221,11 +221,11 @@ void map_to_sphere(float *r_u, float *r_v, const float x, const float y, const f
/********************************** Normals **********************************/
void accumulate_vertex_normals(float n1[3], float n2[3], float n3[3],
- float n4[3], const float f_no[3], const float co1[3], const float co2[3],
- const float co3[3], const float co4[3]);
+ float n4[3], const float f_no[3], const float co1[3], const float co2[3],
+ const float co3[3], const float co4[3]);
void accumulate_vertex_normals_poly(float **vertnos, float polyno[3],
- float **vertcos, float vdiffs[][3], int nverts);
+ float **vertcos, float vdiffs[][3], int nverts);
/********************************* Tangents **********************************/
@@ -236,15 +236,15 @@ typedef struct VertexTangent {
float *find_vertex_tangent(VertexTangent *vtang, const float uv[2]);
void sum_or_add_vertex_tangent(void *arena, VertexTangent **vtang,
- const float tang[3], const float uv[2]);
+ const float tang[3], const float uv[2]);
void tangent_from_uv(float uv1[2], float uv2[2], float uv3[2],
- float co1[3], float co2[3], float co3[3], float n[3], float tang[3]);
+ float co1[3], float co2[3], float co3[3], float n[3], float tang[3]);
/******************************** Vector Clouds ******************************/
void vcloud_estimate_transform(int list_size, float (*pos)[3], float *weight,
- float (*rpos)[3], float *rweight,
- float lloc[3], float rloc[3], float lrot[3][3], float lscale[3][3]);
+ float (*rpos)[3], float *rweight,
+ float lloc[3], float rloc[3], float lrot[3][3], float lscale[3][3]);
/****************************** Spherical Harmonics *************************/
@@ -266,7 +266,7 @@ MINLINE void madd_sh_shfl(float r[9], const float sh[3], const float f);
/********************************* Form Factor *******************************/
float form_factor_hemi_poly(float p[3], float n[3],
- float v1[3], float v2[3], float v3[3], float v4[3]);
+ float v1[3], float v2[3], float v3[3], float v4[3]);
void axis_dominant_v3(int *axis_a, int *axis_b, const float axis[3]);
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 1d99fd4fa27..8e9955beb61 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -36,13 +36,13 @@ extern "C" {
/********************************* Init **************************************/
-#define MAT4_UNITY {{ 1.0, 0.0, 0.0, 0.0},\
- { 0.0, 1.0, 0.0, 0.0},\
- { 0.0, 0.0, 1.0, 0.0},\
+#define MAT4_UNITY {{ 1.0, 0.0, 0.0, 0.0}, \
+ { 0.0, 1.0, 0.0, 0.0}, \
+ { 0.0, 0.0, 1.0, 0.0}, \
{ 0.0, 0.0, 0.0, 1.0}}
-#define MAT3_UNITY {{ 1.0, 0.0, 0.0},\
- { 0.0, 1.0, 0.0},\
+#define MAT3_UNITY {{ 1.0, 0.0, 0.0}, \
+ { 0.0, 1.0, 0.0}, \
{ 0.0, 0.0, 1.0}}
void zero_m3(float R[3][3]);
@@ -76,11 +76,11 @@ void mult_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
void mult_m3_m3m4(float R[3][3], float A[4][4], float B[3][3]);
void mul_serie_m3(float R[3][3],
- float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
- float M5[3][3], float M6[3][3], float M7[3][3], float M8[3][3]);
+ float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
+ float M5[3][3], float M6[3][3], float M7[3][3], float M8[3][3]);
void mul_serie_m4(float R[4][4],
- float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
- float M5[4][4], float M6[4][4], float M7[4][4], float M8[4][4]);
+ float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
+ float M5[4][4], float M6[4][4], float M7[4][4], float M8[4][4]);
void mul_m4_v3(float M[4][4], float r[3]);
void mul_v3_m4v3(float r[3], float M[4][4], const float v[3]);
@@ -131,13 +131,11 @@ int is_uniform_scaled_m3(float mat[3][3]);
void adjoint_m3_m3(float R[3][3], float A[3][3]);
void adjoint_m4_m4(float R[4][4], float A[4][4]);
-float determinant_m2(
- float a, float b,
- float c, float d);
-float determinant_m3(
- float a, float b, float c,
- float d, float e, float f,
- float g, float h, float i);
+float determinant_m2(float a, float b,
+ float c, float d);
+float determinant_m3(float a, float b, float c,
+ float d, float e, float f,
+ float g, float h, float i);
float determinant_m4(float A[4][4]);
void svd_m4(float U[4][4], float s[4], float V[4][4], float A[4][4]);
@@ -165,13 +163,13 @@ void mat3_to_rot_size(float rot[3][3], float size[3], float mat3[][3]);
void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4]);
void loc_eul_size_to_mat4(float R[4][4],
- const float loc[3], const float eul[3], const float size[3]);
+ const float loc[3], const float eul[3], const float size[3]);
void loc_eulO_size_to_mat4(float R[4][4],
- const float loc[3], const float eul[3], const float size[3], const short order);
+ const float loc[3], const float eul[3], const float size[3], const short order);
void loc_quat_size_to_mat4(float R[4][4],
- const float loc[3], const float quat[4], const float size[3]);
+ const float loc[3], const float quat[4], const float size[3]);
void loc_axisangle_size_to_mat4(float R[4][4],
- const float loc[3], const float axis[4], const float angle, const float size[3]);
+ const float loc[3], const float axis[4], const float angle, const float size[3]);
void blend_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], const float t);
void blend_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], const float t);
diff --git a/source/blender/blenlib/BLI_math_rotation.h b/source/blender/blenlib/BLI_math_rotation.h
index 62b81530c65..912534e0aca 100644
--- a/source/blender/blenlib/BLI_math_rotation.h
+++ b/source/blender/blenlib/BLI_math_rotation.h
@@ -34,12 +34,12 @@
extern "C" {
#endif
-#define RAD2DEG(_rad) ((_rad)*(180.0/M_PI))
-#define DEG2RAD(_deg) ((_deg)*(M_PI/180.0))
+#define RAD2DEG(_rad) ((_rad) * (180.0 / M_PI))
+#define DEG2RAD(_deg) ((_deg) * (M_PI / 180.0))
-#define RAD2DEGF(_rad) ((_rad)*(float)(180.0/M_PI))
-#define DEG2RADF(_deg) ((_deg)*(float)(M_PI/180.0))
+#define RAD2DEGF(_rad) ((_rad) * (float)(180.0 / M_PI))
+#define DEG2RADF(_deg) ((_deg) * (float)(M_PI / 180.0))
/******************************** Quaternions ********************************/
/* stored in (w, x, y, z) order */
@@ -171,10 +171,10 @@ typedef struct DualQuat {
void copy_dq_dq(DualQuat *r, DualQuat *dq);
void normalize_dq(DualQuat *dq, float totw);
void add_weighted_dq_dq(DualQuat *r, DualQuat *dq, float weight);
-void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq);
+void mul_v3m3_dq(float r[3], float R[3][3], DualQuat * dq);
-void mat4_to_dquat(DualQuat *r, float base[4][4], float M[4][4]);
-void dquat_to_mat4(float R[4][4], DualQuat *dq);
+void mat4_to_dquat(DualQuat * r, float base[4][4], float M[4][4]);
+void dquat_to_mat4(float R[4][4], DualQuat * dq);
void quat_apply_track(float quat[4], short axis, short upflag);
void vec_apply_track(float vec[3], short axis);
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 249f2265440..374da46a686 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -118,6 +118,8 @@ MINLINE void negate_v3_v3(float r[3], const float a[3]);
MINLINE void negate_v4(float r[4]);
MINLINE void negate_v4_v4(float r[4], const float a[3]);
+MINLINE void negate_v3_short(short r[3]);
+
MINLINE float dot_v2v2(const float a[2], const float b[2]);
MINLINE float dot_v3v3(const float a[3], const float b[3]);
@@ -189,7 +191,7 @@ float angle_normalized_v3v3(const float v1[3], const float v2[3]);
float angle_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3]);
void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3]);
void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
-void angle_poly_v3(float* angles, const float* verts[3], int len);
+void angle_poly_v3(float *angles, const float *verts[3], int len);
/********************************* Geometry **********************************/
@@ -237,4 +239,3 @@ void fill_vn_fl(float *array_tar, const int size, const float val);
#endif
#endif /* __BLI_MATH_VECTOR_H__ */
-
diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h
index 508cc03d848..abba03ece9d 100644
--- a/source/blender/blenlib/BLI_memarena.h
+++ b/source/blender/blenlib/BLI_memarena.h
@@ -41,25 +41,25 @@
extern "C" {
#endif
- /* A reasonable standard buffer size, big
- * enough to not cause much internal fragmentation,
- * small enough not to waste resources
- */
-#define BLI_MEMARENA_STD_BUFSIZE (1<<14)
+/* A reasonable standard buffer size, big
+ * enough to not cause much internal fragmentation,
+ * small enough not to waste resources
+ */
+#define BLI_MEMARENA_STD_BUFSIZE (1 << 14)
struct MemArena;
typedef struct MemArena MemArena;
-struct MemArena* BLI_memarena_new (int bufsize, const char *name);
-void BLI_memarena_free (struct MemArena *ma);
+struct MemArena *BLI_memarena_new(int bufsize, const char *name);
+void BLI_memarena_free(struct MemArena *ma);
-void BLI_memarena_use_malloc (struct MemArena *ma);
-void BLI_memarena_use_calloc (struct MemArena *ma);
+void BLI_memarena_use_malloc(struct MemArena *ma);
+void BLI_memarena_use_calloc(struct MemArena *ma);
-void BLI_memarena_use_align(struct MemArena *ma, int align);
+void BLI_memarena_use_align(struct MemArena *ma, int align);
-void* BLI_memarena_alloc (struct MemArena *ma, int size);
+void *BLI_memarena_alloc(struct MemArena *ma, int size);
#ifdef __cplusplus
}
diff --git a/source/blender/blenlib/BLI_noise.h b/source/blender/blenlib/BLI_noise.h
index 9f5475ced25..d9457fbaae7 100644
--- a/source/blender/blenlib/BLI_noise.h
+++ b/source/blender/blenlib/BLI_noise.h
@@ -54,7 +54,7 @@ float mg_HeteroTerrain(float x, float y, float z, float H, float lacunarity, flo
float mg_HybridMultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis);
float mg_RidgedMultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis);
/* newnoise: voronoi */
-void voronoi(float x, float y, float z, float* da, float* pa, float me, int dtype);
+void voronoi(float x, float y, float z, float *da, float *pa, float me, int dtype);
/* newnoise: cellNoise & cellNoiseV (for vector/point/color) */
float cellNoise(float x, float y, float z);
void cellNoiseV(float x, float y, float z, float *ca);
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index 1d085a46a19..3664d7bcd77 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -48,29 +48,29 @@ char *BLI_get_folder_version(const int id, const int ver, const int do_check);
/* folder_id */
/* general, will find based on user/local/system priority */
-#define BLENDER_DATAFILES 2
+#define BLENDER_DATAFILES 2
/* user-specific */
-#define BLENDER_USER_CONFIG 31
-#define BLENDER_USER_DATAFILES 32
-#define BLENDER_USER_SCRIPTS 33
-#define BLENDER_USER_PLUGINS 34
-#define BLENDER_USER_AUTOSAVE 35
+#define BLENDER_USER_CONFIG 31
+#define BLENDER_USER_DATAFILES 32
+#define BLENDER_USER_SCRIPTS 33
+#define BLENDER_USER_PLUGINS 34
+#define BLENDER_USER_AUTOSAVE 35
/* system */
-#define BLENDER_SYSTEM_DATAFILES 52
-#define BLENDER_SYSTEM_SCRIPTS 53
-#define BLENDER_SYSTEM_PLUGINS 54
-#define BLENDER_SYSTEM_PYTHON 54
+#define BLENDER_SYSTEM_DATAFILES 52
+#define BLENDER_SYSTEM_SCRIPTS 53
+#define BLENDER_SYSTEM_PLUGINS 54
+#define BLENDER_SYSTEM_PYTHON 54
/* for BLI_get_folder_version only */
-#define BLENDER_RESOURCE_PATH_USER 0
-#define BLENDER_RESOURCE_PATH_LOCAL 1
-#define BLENDER_RESOURCE_PATH_SYSTEM 2
+#define BLENDER_RESOURCE_PATH_USER 0
+#define BLENDER_RESOURCE_PATH_LOCAL 1
+#define BLENDER_RESOURCE_PATH_SYSTEM 2
-#define BLENDER_STARTUP_FILE "startup.blend"
-#define BLENDER_BOOKMARK_FILE "bookmarks.txt"
-#define BLENDER_HISTORY_FILE "recent-files.txt"
+#define BLENDER_STARTUP_FILE "startup.blend"
+#define BLENDER_BOOKMARK_FILE "bookmarks.txt"
+#define BLENDER_HISTORY_FILE "recent-files.txt"
#ifdef WIN32
#define SEP '\\'
@@ -81,7 +81,7 @@ char *BLI_get_folder_version(const int id, const int ver, const int do_check);
#endif
void BLI_setenv(const char *env, const char *val);
-void BLI_setenv_if_new(const char *env, const char* val);
+void BLI_setenv_if_new(const char *env, const char *val);
void BLI_make_file_string(const char *relabase, char *string, const char *dir, const char *file);
void BLI_make_exist(char *dir);
@@ -93,11 +93,11 @@ void BLI_join_dirfile(char *string, const size_t maxlen, const char *dir, const
char *BLI_path_basename(char *path);
int BKE_rebase_path(char *abs, size_t abs_len, char *rel, size_t rel_len, const char *base_dir, const char *src_dir, const char *dest_dir);
char *BLI_last_slash(const char *string);
-int BLI_add_slash(char *string);
+int BLI_add_slash(char *string);
void BLI_del_slash(char *string);
char *BLI_first_slash(char *string);
-void BLI_getlastdir(const char* dir, char *last, const size_t maxlen);
+void BLI_getlastdir(const char *dir, char *last, const size_t maxlen);
int BLI_testextensie(const char *str, const char *ext);
int BLI_testextensie_array(const char *str, const char **ext_array);
int BLI_testextensie_glob(const char *str, const char *ext_fnmatch);
@@ -105,7 +105,7 @@ int BLI_replace_extension(char *path, size_t maxlen, const char *ext);
int BLI_ensure_extension(char *path, size_t maxlen, const char *ext);
void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len);
int BLI_uniquename_cb(int (*unique_check)(void *, const char *), void *arg, const char defname[], char delim, char *name, short name_len);
-void BLI_newname(char * name, int add);
+void BLI_newname(char *name, int add);
int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen);
void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic);
int BLI_split_name_num(char *left, int *nr, const char *name, const char delim);
@@ -165,19 +165,19 @@ void BLI_path_rel(char *file, const char *relfile);
*/
void BLI_char_switch(char *string, char from, char to);
- /* Initialize path to program executable */
+/* Initialize path to program executable */
void BLI_init_program_path(const char *argv0);
- /* Initialize path to temporary directory.
- * NOTE: On Window userdir will be set to the temporary directory! */
+/* Initialize path to temporary directory.
+ * NOTE: On Window userdir will be set to the temporary directory! */
void BLI_init_temporary_dir(char *userdir);
- /* Path to executable */
+/* Path to executable */
const char *BLI_program_path(void);
- /* Path to directory of executable */
+/* Path to directory of executable */
const char *BLI_program_dir(void);
- /* Path to temporary directory (with trailing slash) */
+/* Path to temporary directory (with trailing slash) */
const char *BLI_temporary_dir(void);
- /* Path to the system temporary directory (with trailing slash) */
+/* Path to the system temporary directory (with trailing slash) */
void BLI_system_temporary_dir(char *dir);
#ifdef WITH_ICONV
diff --git a/source/blender/blenlib/BLI_rand.h b/source/blender/blenlib/BLI_rand.h
index d4d6563ac99..7dd6c8575c9 100644
--- a/source/blender/blenlib/BLI_rand.h
+++ b/source/blender/blenlib/BLI_rand.h
@@ -40,59 +40,59 @@
struct RNG;
typedef struct RNG RNG;
-struct RNG* rng_new (unsigned int seed);
-void rng_free (struct RNG* rng);
+struct RNG *rng_new(unsigned int seed);
+void rng_free(struct RNG *rng);
-void rng_seed (struct RNG* rng, unsigned int seed);
+void rng_seed(struct RNG *rng, unsigned int seed);
void rng_srandom(struct RNG *rng, unsigned int seed);
-int rng_getInt (struct RNG* rng);
-double rng_getDouble (struct RNG* rng);
-float rng_getFloat (struct RNG* rng);
-void rng_shuffleArray(struct RNG *rng, void *data, int elemSize, int numElems);
+int rng_getInt(struct RNG *rng);
+double rng_getDouble(struct RNG *rng);
+float rng_getFloat(struct RNG *rng);
+void rng_shuffleArray(struct RNG *rng, void *data, int elemSize, int numElems);
- /** Note that skipping is as slow as generating n numbers! */
-void rng_skip (struct RNG *rng, int n);
+/** Note that skipping is as slow as generating n numbers! */
+void rng_skip(struct RNG *rng, int n);
- /** Seed the random number generator */
-void BLI_srand (unsigned int seed);
+/** Seed the random number generator */
+void BLI_srand(unsigned int seed);
- /** Better seed for the random number generator, using noise.c hash[] */
-void BLI_srandom (unsigned int seed);
+/** Better seed for the random number generator, using noise.c hash[] */
+void BLI_srandom(unsigned int seed);
- /** Return a pseudo-random number N where 0<=N<(2^31) */
-int BLI_rand (void);
+/** Return a pseudo-random number N where 0<=N<(2^31) */
+int BLI_rand(void);
- /** Return a pseudo-random number N where 0.0<=N<1.0 */
-double BLI_drand (void);
+/** Return a pseudo-random number N where 0.0<=N<1.0 */
+double BLI_drand(void);
- /** Return a pseudo-random number N where 0.0f<=N<1.0f */
-float BLI_frand (void);
+/** Return a pseudo-random number N where 0.0f<=N<1.0f */
+float BLI_frand(void);
- /** Fills a block of memory starting at \a addr
- * and extending \a len bytes with pseudo-random
- * contents. This routine does not use nor modify
- * the state of the BLI random number generator.
- */
-void BLI_fillrand (void *addr, int len);
+/** Fills a block of memory starting at \a addr
+ * and extending \a len bytes with pseudo-random
+ * contents. This routine does not use nor modify
+ * the state of the BLI random number generator.
+ */
+void BLI_fillrand(void *addr, int len);
- /** Shuffle an array randomly using the given seed.
- * contents. This routine does not use nor modify
- * the state of the BLI random number generator.
- */
-void BLI_array_randomize (void *data, int elemSize, int numElems, unsigned int seed);
+/** Shuffle an array randomly using the given seed.
+ * contents. This routine does not use nor modify
+ * the state of the BLI random number generator.
+ */
+void BLI_array_randomize(void *data, int elemSize, int numElems, unsigned int seed);
- /** Better seed for the random number generator, using noise.c hash[] */
- /** Allows up to BLENDER_MAX_THREADS threads to address */
-void BLI_thread_srandom (int thread, unsigned int seed);
+/** Better seed for the random number generator, using noise.c hash[] */
+/** Allows up to BLENDER_MAX_THREADS threads to address */
+void BLI_thread_srandom(int thread, unsigned int seed);
- /** Return a pseudo-random number N where 0<=N<(2^31) */
- /** Allows up to BLENDER_MAX_THREADS threads to address */
-int BLI_thread_rand (int thread);
+/** Return a pseudo-random number N where 0<=N<(2^31) */
+/** Allows up to BLENDER_MAX_THREADS threads to address */
+int BLI_thread_rand(int thread);
- /** Return a pseudo-random number N where 0.0f<=N<1.0f */
- /** Allows up to BLENDER_MAX_THREADS threads to address */
-float BLI_thread_frand (int thread);
+/** Return a pseudo-random number N where 0.0f<=N<1.0f */
+/** Allows up to BLENDER_MAX_THREADS threads to address */
+float BLI_thread_frand(int thread);
diff --git a/source/blender/blenlib/BLI_rect.h b/source/blender/blenlib/BLI_rect.h
index 7ce19ce8583..0cf32eeb276 100644
--- a/source/blender/blenlib/BLI_rect.h
+++ b/source/blender/blenlib/BLI_rect.h
@@ -58,7 +58,7 @@ void BLI_resize_rcti(struct rcti *rect, int x, int y);
void BLI_resize_rctf(struct rctf *rect, float x, float y);
int BLI_in_rcti(struct rcti *rect, int x, int y);
int BLI_in_rctf(struct rctf *rect, float x, float y);
-int BLI_segment_in_rcti(struct rcti *rect, int s1[2], int s2[2]);
+int BLI_segment_in_rcti(struct rcti *rect, int s1[2], int s2[2]);
// int BLI_segment_in_rctf(struct rcti *rect, int s1[2], int s2[2]); // NOT NEEDED YET
int BLI_isect_rctf(struct rctf *src1, struct rctf *src2, struct rctf *dest);
int BLI_isect_rcti(struct rcti *src1, struct rcti *src2, struct rcti *dest);
diff --git a/source/blender/blenlib/BLI_scanfill.h b/source/blender/blenlib/BLI_scanfill.h
index 081d5ccfb66..ceef378358b 100644
--- a/source/blender/blenlib/BLI_scanfill.h
+++ b/source/blender/blenlib/BLI_scanfill.h
@@ -41,8 +41,7 @@ struct ScanFillVert;
extern "C" {
#endif
-typedef struct ScanFillContext
-{
+typedef struct ScanFillContext {
ListBase fillvertbase;
ListBase filledgebase;
ListBase fillfacebase;
@@ -61,13 +60,12 @@ typedef struct ScanFillContext
} ScanFillContext;
/* note; changing this also might affect the undo copy in editmesh.c */
-typedef struct ScanFillVert
-{
+typedef struct ScanFillVert {
struct ScanFillVert *next, *prev;
union {
struct ScanFillVert *v;
void *p;
- intptr_t l;
+ intptr_t l;
} tmp;
float co[3]; /* vertex location */
float xy[2]; /* 2D copy of vertex location (using dominant axis) */
@@ -76,16 +74,14 @@ typedef struct ScanFillVert
unsigned char f, h;
} ScanFillVert;
-typedef struct ScanFillEdge
-{
+typedef struct ScanFillEdge {
struct ScanFillEdge *next, *prev;
struct ScanFillVert *v1, *v2;
short poly_nr;
unsigned char f;
} ScanFillEdge;
-typedef struct ScanFillFace
-{
+typedef struct ScanFillFace {
struct ScanFillFace *next, *prev;
struct ScanFillVert *v1, *v2, *v3;
} ScanFillFace;
@@ -97,7 +93,7 @@ struct ScanFillEdge *BLI_scanfill_edge_add(ScanFillContext *sf_ctx, struct ScanF
int BLI_scanfill_begin(ScanFillContext *sf_ctx);
int BLI_scanfill_calc(ScanFillContext *sf_ctx, const short do_quad_tri_speedup);
int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup,
- const float nor_proj[3]);
+ const float nor_proj[3]);
void BLI_scanfill_end(ScanFillContext *sf_ctx);
/* These callbacks are needed to make the lib finction properly */
@@ -108,7 +104,7 @@ void BLI_scanfill_end(ScanFillContext *sf_ctx);
* \param f The function to use as callback
* \attention used in creator.c
*/
-void BLI_setErrorCallBack(void (*f)(const char*));
+void BLI_setErrorCallBack(void (*f)(const char *));
/**
* Set a function to be able to interrupt the execution of processing
diff --git a/source/blender/blenlib/BLI_smallhash.h b/source/blender/blenlib/BLI_smallhash.h
index 50631769ba9..09dd254c3fa 100644
--- a/source/blender/blenlib/BLI_smallhash.h
+++ b/source/blender/blenlib/BLI_smallhash.h
@@ -43,7 +43,7 @@ typedef struct {
} SmallHashEntry;
/*how much stack space to use before dynamically allocating memory*/
-#define SMSTACKSIZE 521
+#define SMSTACKSIZE 521
typedef struct SmallHash {
SmallHashEntry *table;
SmallHashEntry _stacktable[SMSTACKSIZE];
@@ -59,15 +59,15 @@ typedef struct {
int i;
} SmallHashIter;
-void BLI_smallhash_init(SmallHash *hash);
-void BLI_smallhash_release(SmallHash *hash);
-void BLI_smallhash_insert(SmallHash *hash, uintptr_t key, void *item);
-void BLI_smallhash_remove(SmallHash *hash, uintptr_t key);
-void * BLI_smallhash_lookup(SmallHash *hash, uintptr_t key);
-int BLI_smallhash_haskey(SmallHash *hash, uintptr_t key);
-int BLI_smallhash_count(SmallHash *hash);
-void * BLI_smallhash_iternext(SmallHashIter *iter, uintptr_t *key);
-void * BLI_smallhash_iternew(SmallHash *hash, SmallHashIter *iter, uintptr_t *key);
+void BLI_smallhash_init(SmallHash *hash);
+void BLI_smallhash_release(SmallHash *hash);
+void BLI_smallhash_insert(SmallHash *hash, uintptr_t key, void *item);
+void BLI_smallhash_remove(SmallHash *hash, uintptr_t key);
+void *BLI_smallhash_lookup(SmallHash *hash, uintptr_t key);
+int BLI_smallhash_haskey(SmallHash *hash, uintptr_t key);
+int BLI_smallhash_count(SmallHash *hash);
+void *BLI_smallhash_iternext(SmallHashIter *iter, uintptr_t *key);
+void *BLI_smallhash_iternew(SmallHash *hash, SmallHashIter *iter, uintptr_t *key);
/* void BLI_smallhash_print(SmallHash *hash); */ /* UNUSED */
#endif /* __BLI_SMALLHASH_H__ */
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index ec36d587d92..c8f439c677f 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -36,95 +36,95 @@
extern "C" {
#endif
- /**
- * Duplicates the cstring \a str into a newly mallocN'd
- * string and returns it.
- *
- * \param str The string to be duplicated
- * \retval Returns the duplicated string
- */
+/**
+ * Duplicates the cstring \a str into a newly mallocN'd
+ * string and returns it.
+ *
+ * \param str The string to be duplicated
+ * \retval Returns the duplicated string
+ */
char *BLI_strdup(const char *str);
- /**
- * Duplicates the first \a len bytes of cstring \a str
- * into a newly mallocN'd string and returns it. \a str
- * is assumed to be at least len bytes long.
- *
- * \param str The string to be duplicated
- * \param len The number of bytes to duplicate
- * \retval Returns the duplicated string
- */
+/**
+ * Duplicates the first \a len bytes of cstring \a str
+ * into a newly mallocN'd string and returns it. \a str
+ * is assumed to be at least len bytes long.
+ *
+ * \param str The string to be duplicated
+ * \param len The number of bytes to duplicate
+ * \retval Returns the duplicated string
+ */
char *BLI_strdupn(const char *str, const size_t len);
- /**
- * Appends the two strings, and returns new mallocN'ed string
- * \param str1 first string for copy
- * \param str2 second string for append
- * \retval Returns dst
- */
+/**
+ * Appends the two strings, and returns new mallocN'ed string
+ * \param str1 first string for copy
+ * \param str2 second string for append
+ * \retval Returns dst
+ */
char *BLI_strdupcat(const char *str1, const char *str2);
- /**
- * Like strncpy but ensures dst is always
- * '\0' terminated.
- *
- * \param dst Destination for copy
- * \param src Source string to copy
- * \param maxncpy Maximum number of characters to copy (generally
- * the size of dst)
- * \retval Returns dst
- */
+/**
+ * Like strncpy but ensures dst is always
+ * '\0' terminated.
+ *
+ * \param dst Destination for copy
+ * \param src Source string to copy
+ * \param maxncpy Maximum number of characters to copy (generally
+ * the size of dst)
+ * \retval Returns dst
+ */
char *BLI_strncpy(char *dst, const char *src, const size_t maxncpy);
- /* Makes a copy of the text within the "" that appear after some text 'blahblah'
- * i.e. for string 'pose["apples"]' with prefix 'pose[', it should grab "apples"
- *
- * - str: is the entire string to chop
- * - prefix: is the part of the string to leave out
- *
- * Assume that the strings returned must be freed afterwards, and that the inputs will contain
- * data we want...
- */
+/* Makes a copy of the text within the "" that appear after some text 'blahblah'
+ * i.e. for string 'pose["apples"]' with prefix 'pose[', it should grab "apples"
+ *
+ * - str: is the entire string to chop
+ * - prefix: is the part of the string to leave out
+ *
+ * Assume that the strings returned must be freed afterwards, and that the inputs will contain
+ * data we want...
+ */
char *BLI_getQuotedStr(const char *str, const char *prefix);
- /**
- * Returns a copy of the cstring \a str into a newly mallocN'd
- * string with all instances of oldText replaced with newText,
- * and returns it.
- *
- * \param str The string to replace occurrences of oldText in
- * \param oldText The text in the string to find and replace
- * \param newText The text in the string to find and replace
- * \retval Returns the duplicated string
- */
+/**
+ * Returns a copy of the cstring \a str into a newly mallocN'd
+ * string with all instances of oldText replaced with newText,
+ * and returns it.
+ *
+ * \param str The string to replace occurrences of oldText in
+ * \param oldText The text in the string to find and replace
+ * \param newText The text in the string to find and replace
+ * \retval Returns the duplicated string
+ */
char *BLI_replacestr(char *str, const char *oldText, const char *newText);
- /*
- * Replacement for snprintf
- */
+/*
+ * Replacement for snprintf
+ */
size_t BLI_snprintf(char *buffer, size_t len, const char *format, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 3, 4)))
+__attribute__ ((format(printf, 3, 4)))
#endif
;
- /*
- * Print formatted string into a newly mallocN'd string
- * and return it.
- */
+/*
+ * Print formatted string into a newly mallocN'd string
+ * and return it.
+ */
char *BLI_sprintfN(const char *format, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 1, 2)))
+__attribute__ ((format(printf, 1, 2)))
#endif
;
size_t BLI_strescape(char *dst, const char *src, const size_t maxlen);
- /**
- * Compare two strings without regard to case.
- *
- * \retval True if the strings are equal, false otherwise.
- */
+/**
+ * Compare two strings without regard to case.
+ *
+ * \retval True if the strings are equal, false otherwise.
+ */
int BLI_strcaseeq(const char *a, const char *b);
char *BLI_strcasestr(const char *s, const char *find);
diff --git a/source/blender/blenlib/BLI_string_utf8.h b/source/blender/blenlib/BLI_string_utf8.h
index 7799c32c4b7..56ed4beba53 100644
--- a/source/blender/blenlib/BLI_string_utf8.h
+++ b/source/blender/blenlib/BLI_string_utf8.h
@@ -37,17 +37,17 @@ int BLI_utf8_invalid_byte(const char *str, int length);
int BLI_utf8_invalid_strip(char *str, int length);
int BLI_str_utf8_size(const char *p); /* warning, can return -1 on bad chars */
- /* copied from glib */
+/* copied from glib */
unsigned int BLI_str_utf8_as_unicode(const char *p);
unsigned int BLI_str_utf8_as_unicode_and_size(const char *p, size_t *index);
unsigned int BLI_str_utf8_as_unicode_step(const char *p, size_t *index);
-size_t BLI_str_utf8_from_unicode(unsigned int c, char *outbuf);
+size_t BLI_str_utf8_from_unicode(unsigned int c, char *outbuf);
char *BLI_str_find_prev_char_utf8(const char *str, const char *p);
char *BLI_str_find_next_char_utf8(const char *p, const char *end);
char *BLI_str_prev_char_utf8(const char *p);
- /* wchar_t functions, copied from blenders own font.c originally */
+/* wchar_t functions, copied from blenders own font.c originally */
size_t BLI_wstrlen_utf8(const wchar_t *src);
size_t BLI_strlen_utf8(const char *strc);
size_t BLI_strncpy_wchar_as_utf8(char *dst, const wchar_t *src, const size_t maxcpy);
diff --git a/source/blender/blenlib/BLI_threads.h b/source/blender/blenlib/BLI_threads.h
index a4698ab4dd0..b13da9f0dd4 100644
--- a/source/blender/blenlib/BLI_threads.h
+++ b/source/blender/blenlib/BLI_threads.h
@@ -35,7 +35,7 @@
#include <pthread.h>
/* for tables, button in UI, etc */
-#define BLENDER_MAX_THREADS 64
+#define BLENDER_MAX_THREADS 64
struct ListBase;
@@ -44,15 +44,15 @@ struct ListBase;
/*this is run once at startup*/
void BLI_threadapi_init(void);
-void BLI_init_threads (struct ListBase *threadbase, void *(*do_thread)(void *), int tot);
-int BLI_available_threads(struct ListBase *threadbase);
-int BLI_available_thread_index(struct ListBase *threadbase);
-void BLI_insert_thread (struct ListBase *threadbase, void *callerdata);
-void BLI_remove_thread (struct ListBase *threadbase, void *callerdata);
-void BLI_remove_thread_index(struct ListBase *threadbase, int index);
-void BLI_remove_threads(struct ListBase *threadbase);
-void BLI_end_threads (struct ListBase *threadbase);
-int BLI_thread_is_main(void);
+void BLI_init_threads(struct ListBase *threadbase, void *(*do_thread)(void *), int tot);
+int BLI_available_threads(struct ListBase *threadbase);
+int BLI_available_thread_index(struct ListBase *threadbase);
+void BLI_insert_thread(struct ListBase *threadbase, void *callerdata);
+void BLI_remove_thread(struct ListBase *threadbase, void *callerdata);
+void BLI_remove_thread_index(struct ListBase *threadbase, int index);
+void BLI_remove_threads(struct ListBase *threadbase);
+void BLI_end_threads(struct ListBase *threadbase);
+int BLI_thread_is_main(void);
void BLI_begin_threaded_malloc(void);
@@ -60,28 +60,28 @@ void BLI_end_threaded_malloc(void);
/* System Information */
-int BLI_system_thread_count(void); /* gets the number of threads the system can make use of */
+int BLI_system_thread_count(void); /* gets the number of threads the system can make use of */
/* Global Mutex Locks
*
* One custom lock available now. can be extended. */
-#define LOCK_IMAGE 0
-#define LOCK_PREVIEW 1
-#define LOCK_VIEWER 2
-#define LOCK_CUSTOM1 3
-#define LOCK_RCACHE 4
-#define LOCK_OPENGL 5
-#define LOCK_NODES 6
-#define LOCK_MOVIECLIP 7
+#define LOCK_IMAGE 0
+#define LOCK_PREVIEW 1
+#define LOCK_VIEWER 2
+#define LOCK_CUSTOM1 3
+#define LOCK_RCACHE 4
+#define LOCK_OPENGL 5
+#define LOCK_NODES 6
+#define LOCK_MOVIECLIP 7
-void BLI_lock_thread(int type);
-void BLI_unlock_thread(int type);
+void BLI_lock_thread(int type);
+void BLI_unlock_thread(int type);
/* Mutex Lock */
typedef pthread_mutex_t ThreadMutex;
-#define BLI_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
+#define BLI_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
void BLI_mutex_init(ThreadMutex *mutex);
void BLI_mutex_lock(ThreadMutex *mutex);
@@ -90,8 +90,8 @@ void BLI_mutex_end(ThreadMutex *mutex);
/* Read/Write Mutex Lock */
-#define THREAD_LOCK_READ 1
-#define THREAD_LOCK_WRITE 2
+#define THREAD_LOCK_READ 1
+#define THREAD_LOCK_WRITE 2
typedef pthread_rwlock_t ThreadRWMutex;
diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h
index 18c2aa3313c..d027a3da2ef 100644
--- a/source/blender/blenlib/BLI_utildefines.h
+++ b/source/blender/blenlib/BLI_utildefines.h
@@ -41,16 +41,16 @@
#endif
-#define ELEM(a, b, c) ( (a)==(b) || (a)==(c) )
-#define ELEM3(a, b, c, d) ( ELEM(a, b, c) || (a)==(d) )
-#define ELEM4(a, b, c, d, e) ( ELEM(a, b, c) || ELEM(a, d, e) )
-#define ELEM5(a, b, c, d, e, f) ( ELEM(a, b, c) || ELEM3(a, d, e, f) )
-#define ELEM6(a, b, c, d, e, f, g) ( ELEM(a, b, c) || ELEM4(a, d, e, f, g) )
-#define ELEM7(a, b, c, d, e, f, g, h) ( ELEM3(a, b, c, d) || ELEM4(a, e, f, g, h) )
-#define ELEM8(a, b, c, d, e, f, g, h, i) ( ELEM4(a, b, c, d, e) || ELEM4(a, f, g, h, i) )
-#define ELEM9(a, b, c, d, e, f, g, h, i, j) ( ELEM4(a, b, c, d, e) || ELEM5(a, f, g, h, i, j) )
-#define ELEM10(a, b, c, d, e, f, g, h, i, j, k) ( ELEM4(a, b, c, d, e) || ELEM6(a, f, g, h, i, j, k) )
-#define ELEM11(a, b, c, d, e, f, g, h, i, j, k, l) ( ELEM4(a, b, c, d, e) || ELEM7(a, f, g, h, i, j, k, l) )
+#define ELEM(a, b, c) ((a) == (b) || (a) == (c))
+#define ELEM3(a, b, c, d) (ELEM(a, b, c) || (a) == (d) )
+#define ELEM4(a, b, c, d, e) (ELEM(a, b, c) || ELEM(a, d, e) )
+#define ELEM5(a, b, c, d, e, f) (ELEM(a, b, c) || ELEM3(a, d, e, f) )
+#define ELEM6(a, b, c, d, e, f, g) (ELEM(a, b, c) || ELEM4(a, d, e, f, g) )
+#define ELEM7(a, b, c, d, e, f, g, h) (ELEM3(a, b, c, d) || ELEM4(a, e, f, g, h) )
+#define ELEM8(a, b, c, d, e, f, g, h, i) (ELEM4(a, b, c, d, e) || ELEM4(a, f, g, h, i) )
+#define ELEM9(a, b, c, d, e, f, g, h, i, j) (ELEM4(a, b, c, d, e) || ELEM5(a, f, g, h, i, j) )
+#define ELEM10(a, b, c, d, e, f, g, h, i, j, k) (ELEM4(a, b, c, d, e) || ELEM6(a, f, g, h, i, j, k) )
+#define ELEM11(a, b, c, d, e, f, g, h, i, j, k, l) (ELEM4(a, b, c, d, e) || ELEM7(a, f, g, h, i, j, k, l) )
/* shift around elements */
#define SHIFT3(type, a, b, c) { \
@@ -59,7 +59,7 @@
a = c; \
c = b; \
b = tmp; \
- } (void)0
+} (void)0
#define SHIFT4(type, a, b, c, d) { \
type tmp; \
tmp = a; \
@@ -67,16 +67,16 @@
d = c; \
c = b; \
b = tmp; \
- } (void)0
+} (void)0
/* min/max */
-#define MIN2(x,y) ( (x)<(y) ? (x) : (y) )
-#define MIN3(x,y,z) MIN2( MIN2((x),(y)) , (z) )
-#define MIN4(x,y,z,a) MIN2( MIN2((x),(y)) , MIN2((z),(a)) )
+#define MIN2(x, y) ( (x) < (y) ? (x) : (y) )
+#define MIN3(x, y, z) MIN2(MIN2((x), (y)), (z) )
+#define MIN4(x, y, z, a) MIN2(MIN2((x), (y)), MIN2((z), (a)) )
-#define MAX2(x,y) ( (x)>(y) ? (x) : (y) )
-#define MAX3(x,y,z) MAX2( MAX2((x),(y)) , (z) )
-#define MAX4(x,y,z,a) MAX2( MAX2((x),(y)) , MAX2((z),(a)) )
+#define MAX2(x, y) ( (x) > (y) ? (x) : (y) )
+#define MAX3(x, y, z) MAX2(MAX2((x), (y)), (z) )
+#define MAX4(x, y, z, a) MAX2(MAX2((x), (y)), MAX2((z), (a)) )
#define INIT_MINMAX(min, max) { \
(min)[0] = (min)[1] = (min)[2] = 1.0e30f; \
@@ -114,70 +114,71 @@
/* some math and copy defines */
#ifndef SWAP
-# define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; }
+# define SWAP(type, a, b) { type sw_ap; sw_ap = (a); (a) = (b); (b) = sw_ap; }
#endif
-#define ABS(a) ( (a)<0 ? (-(a)) : (a) )
+#define ABS(a) ( (a) < 0 ? (-(a)) : (a) )
-#define FTOCHAR(val) ((val)<=0.0f)? 0 : (((val)>(1.0f-0.5f/255.0f))? 255 : (char)((255.0f*(val))+0.5f))
-#define FTOUSHORT(val) ((val >= 1.0f-0.5f/65535)? 65535: (val <= 0.0f)? 0: (unsigned short)(val*65535.0f + 0.5f))
-#define USHORTTOUCHAR(val) ((unsigned char)(((val) >= 65535-128)? 255: ((val)+128)>>8))
+#define FTOCHAR(val) ((val) <= 0.0f) ? 0 : (((val) > (1.0f - 0.5f / 255.0f)) ? 255 : (char)((255.0f * (val)) + 0.5f))
+#define FTOUSHORT(val) ((val >= 1.0f - 0.5f / 65535) ? 65535 : (val <= 0.0f) ? 0 : (unsigned short)(val * 65535.0f + 0.5f))
+#define USHORTTOUCHAR(val) ((unsigned char)(((val) >= 65535 - 128) ? 255 : ((val) + 128) >> 8))
#define F3TOCHAR3(v2, v1) { \
- (v1)[0]= FTOCHAR((v2[0])); \
- (v1)[1]= FTOCHAR((v2[1])); \
- (v1)[2]= FTOCHAR((v2[2])); \
- } (void)0
+ (v1)[0] = FTOCHAR((v2[0])); \
+ (v1)[1] = FTOCHAR((v2[1])); \
+ (v1)[2] = FTOCHAR((v2[2])); \
+} (void)0
#define F3TOCHAR4(v2, v1) { \
- (v1)[0]= FTOCHAR((v2[0])); \
- (v1)[1]= FTOCHAR((v2[1])); \
- (v1)[2]= FTOCHAR((v2[2])); \
- (v1)[3]= 255; \
- } (void)0
+ (v1)[0] = FTOCHAR((v2[0])); \
+ (v1)[1] = FTOCHAR((v2[1])); \
+ (v1)[2] = FTOCHAR((v2[2])); \
+ (v1)[3] = 255; \
+} (void)0
#define F4TOCHAR4(v2, v1) { \
- (v1)[0]= FTOCHAR((v2[0])); \
- (v1)[1]= FTOCHAR((v2[1])); \
- (v1)[2]= FTOCHAR((v2[2])); \
- (v1)[3]= FTOCHAR((v2[3])); \
- } (void)0
+ (v1)[0] = FTOCHAR((v2[0])); \
+ (v1)[1] = FTOCHAR((v2[1])); \
+ (v1)[2] = FTOCHAR((v2[2])); \
+ (v1)[3] = FTOCHAR((v2[3])); \
+} (void)0
#define VECCOPY(v1, v2) { \
- *(v1)= *(v2); \
- *(v1+1)= *(v2+1); \
- *(v1+2)= *(v2+2); \
- } (void)0
+ *(v1) = *(v2); \
+ *(v1 + 1) = *(v2 + 1); \
+ *(v1 + 2) = *(v2 + 2); \
+} (void)0
#define VECCOPY2D(v1, v2) { \
- *(v1)= *(v2); \
- *(v1+1)= *(v2+1); \
- } (void)0
-#define VECADD(v1,v2,v3) { \
- *(v1)= *(v2) + *(v3); \
- *(v1+1)= *(v2+1) + *(v3+1); \
- *(v1+2)= *(v2+2) + *(v3+2); \
- } (void)0
-#define VECSUB(v1,v2,v3) { \
- *(v1)= *(v2) - *(v3); \
- *(v1+1)= *(v2+1) - *(v3+1); \
- *(v1+2)= *(v2+2) - *(v3+2); \
- } (void)0
-#define VECSUB2D(v1,v2,v3) { \
- *(v1)= *(v2) - *(v3); \
- *(v1+1)= *(v2+1) - *(v3+1); \
- } (void)0
-#define VECADDFAC(v1,v2,v3,fac) { \
- *(v1)= *(v2) + *(v3)*(fac); \
- *(v1+1)= *(v2+1) + *(v3+1)*(fac); \
- *(v1+2)= *(v2+2) + *(v3+2)*(fac); \
- } (void)0
-#define VECSUBFAC(v1,v2,v3,fac) { \
- *(v1)= *(v2) - *(v3)*(fac); \
- *(v1+1)= *(v2+1) - *(v3+1)*(fac); \
- *(v1+2)= *(v2+2) - *(v3+2)*(fac); \
- } (void)0
-
-#define INPR(v1, v2) ( (v1)[0]*(v2)[0] + (v1)[1]*(v2)[1] + (v1)[2]*(v2)[2] )
+ *(v1) = *(v2); \
+ *(v1 + 1) = *(v2 + 1); \
+} (void)0
+#define VECADD(v1, v2, v3) { \
+ *(v1) = *(v2) + *(v3); \
+ *(v1 + 1) = *(v2 + 1) + *(v3 + 1); \
+ *(v1 + 2) = *(v2 + 2) + *(v3 + 2); \
+} (void)0
+#define VECSUB(v1, v2, v3) { \
+ *(v1) = *(v2) - *(v3); \
+ *(v1 + 1) = *(v2 + 1) - *(v3 + 1); \
+ *(v1 + 2) = *(v2 + 2) - *(v3 + 2); \
+} (void)0
+#define VECSUB2D(v1, v2, v3) { \
+ *(v1) = *(v2) - *(v3); \
+ *(v1 + 1) = *(v2 + 1) - *(v3 + 1); \
+} (void)0
+#define VECADDFAC(v1, v2, v3, fac) { \
+ *(v1) = *(v2) + *(v3) * (fac); \
+ *(v1 + 1) = *(v2 + 1) + *(v3 + 1) * (fac); \
+ *(v1 + 2) = *(v2 + 2) + *(v3 + 2) * (fac); \
+} (void)0
+#define VECSUBFAC(v1, v2, v3, fac) { \
+ *(v1) = *(v2) - *(v3) * (fac); \
+ *(v1 + 1) = *(v2 + 1) - *(v3 + 1) * (fac); \
+ *(v1 + 2) = *(v2 + 2) - *(v3 + 2) * (fac); \
+} (void)0
+
+#define INPR(v1, v2) ( (v1)[0] * (v2)[0] + (v1)[1] * (v2)[1] + (v1)[2] * (v2)[2])
/* some misc stuff.... */
-#define CLAMP(a, b, c) if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c)
-#define CLAMPIS(a, b, c) ((a)<(b) ? (b) : (a)>(c) ? (c) : (a))
+#define CLAMP(a, b, c) if ((a) < (b)) (a) = (b); else if ((a) > (c)) (a) = (c)
+
+#define CLAMPIS(a, b, c) ((a) < (b) ? (b) : (a) > (c) ? (c) : (a))
#define CLAMPTEST(a, b, c) \
if ((b) < (c)) { \
CLAMP(a, b, c); \
@@ -186,16 +187,16 @@
CLAMP(a, c, b); \
} (void)
-#define IS_EQ(a,b) ((fabs((double)(a)-(b)) >= (double) FLT_EPSILON) ? 0 : 1)
-#define IS_EQF(a,b) ((fabsf((float)(a)-(b)) >= (float) FLT_EPSILON) ? 0 : 1)
+#define IS_EQ(a, b) ((fabs((double)(a) - (b)) >= (double) FLT_EPSILON) ? 0 : 1)
+#define IS_EQF(a, b) ((fabsf((float)(a) - (b)) >= (float) FLT_EPSILON) ? 0 : 1)
-#define IS_EQT(a, b, c) ((a > b)? (((a-b) <= c)? 1:0) : ((((b-a) <= c)? 1:0)))
-#define IN_RANGE(a, b, c) ((b < c)? ((b<a && a<c)? 1:0) : ((c<a && a<b)? 1:0))
-#define IN_RANGE_INCL(a, b, c) ((b < c)? ((b<=a && a<=c)? 1:0) : ((c<=a && a<=b)? 1:0))
+#define IS_EQT(a, b, c) ((a > b) ? (((a - b) <= c) ? 1 : 0) : ((((b - a) <= c) ? 1 : 0)))
+#define IN_RANGE(a, b, c) ((b < c) ? ((b < a && a < c) ? 1 : 0) : ((c < a && a < b) ? 1 : 0))
+#define IN_RANGE_INCL(a, b, c) ((b < c) ? ((b <= a && a <= c) ? 1 : 0) : ((c <= a && a <= b) ? 1 : 0))
/* array helpers */
#define ARRAY_LAST_ITEM(arr_start, arr_dtype, elem_size, tot) \
- (arr_dtype *)((char*)arr_start + (elem_size*(tot - 1)))
+ (arr_dtype *)((char *)arr_start + (elem_size * (tot - 1)))
#define ARRAY_HAS_ITEM(item, arr_start, arr_dtype, elem_size, tot) ( \
(item >= arr_start) && \
@@ -205,24 +206,24 @@
/* This one rotates the bytes in an int64, int (32) and short (16) */
#define SWITCH_INT64(a) { \
char s_i, *p_i; \
- p_i= (char *)&(a); \
- s_i= p_i[0]; p_i[0]= p_i[7]; p_i[7]= s_i; \
- s_i= p_i[1]; p_i[1]= p_i[6]; p_i[6]= s_i; \
- s_i= p_i[2]; p_i[2]= p_i[5]; p_i[5]= s_i; \
- s_i= p_i[3]; p_i[3]= p_i[4]; p_i[4]= s_i; \
+ p_i = (char *)&(a); \
+ s_i = p_i[0]; p_i[0] = p_i[7]; p_i[7] = s_i; \
+ s_i = p_i[1]; p_i[1] = p_i[6]; p_i[6] = s_i; \
+ s_i = p_i[2]; p_i[2] = p_i[5]; p_i[5] = s_i; \
+ s_i = p_i[3]; p_i[3] = p_i[4]; p_i[4] = s_i; \
} (void)0
#define SWITCH_INT(a) { \
char s_i, *p_i; \
- p_i= (char *)&(a); \
- s_i= p_i[0]; p_i[0]= p_i[3]; p_i[3]= s_i; \
- s_i= p_i[1]; p_i[1]= p_i[2]; p_i[2]= s_i; \
+ p_i = (char *)&(a); \
+ s_i = p_i[0]; p_i[0] = p_i[3]; p_i[3] = s_i; \
+ s_i = p_i[1]; p_i[1] = p_i[2]; p_i[2] = s_i; \
} (void)0
#define SWITCH_SHORT(a) { \
char s_i, *p_i; \
- p_i= (char *)&(a); \
- s_i=p_i[0]; p_i[0]=p_i[1]; p_i[1]=s_i; \
+ p_i = (char *)&(a); \
+ s_i = p_i[0]; p_i[0] = p_i[1]; p_i[1] = s_i; \
} (void)0
diff --git a/source/blender/blenlib/BLI_vfontdata.h b/source/blender/blenlib/BLI_vfontdata.h
index 0020ba308af..a63ec8e9f61 100644
--- a/source/blender/blenlib/BLI_vfontdata.h
+++ b/source/blender/blenlib/BLI_vfontdata.h
@@ -47,20 +47,19 @@ typedef struct VFontData {
// float resol[MAX_VF_CHARS];
// float width[MAX_VF_CHARS];
// float *points[MAX_VF_CHARS];
- char name[128];
+ char name[128];
} VFontData;
typedef struct VChar {
struct VChar *next, *prev;
- ListBase nurbsbase;
- intptr_t index;
- float resol;
- float width;
+ ListBase nurbsbase;
+ intptr_t index;
+ float resol;
+ float width;
float *points;
} VChar;
-struct TmpFont
-{
+struct TmpFont {
struct TmpFont *next, *prev;
struct PackedFile *pf;
struct VFont *vfont;
@@ -74,13 +73,9 @@ struct TmpFont
* \retval A new VFontData structure, or NULL
* if unable to load.
*/
- VFontData*
-BLI_vfontdata_from_freetypefont(
- struct PackedFile *pf);
+VFontData *BLI_vfontdata_from_freetypefont(struct PackedFile *pf);
- int
-BLI_vfontchar_from_freetypefont(
- struct VFont *vfont, unsigned long character);
+int BLI_vfontchar_from_freetypefont(struct VFont *vfont, unsigned long character);
#endif
diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h
index a0ab88e8baf..70c7f1d9cae 100644
--- a/source/blender/blenlib/BLI_winstuff.h
+++ b/source/blender/blenlib/BLI_winstuff.h
@@ -52,7 +52,7 @@
#ifndef WIN32_SKIP_HKEY_PROTECTION
# undef HKEY
-# define HKEY WIN32_HKEY // prevent competing definitions
+# define HKEY WIN32_HKEY /* prevent competing definitions */
# include <windows.h>
# undef HKEY
#else
@@ -85,10 +85,10 @@ extern "C" {
#define MAXPATHLEN MAX_PATH
#ifndef S_ISREG
-# define S_ISREG(x) (((x)&_S_IFREG) == _S_IFREG)
+# define S_ISREG(x) (((x) & _S_IFREG) == _S_IFREG)
#endif
#ifndef S_ISDIR
-# define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR)
+# define S_ISDIR(x) (((x) & _S_IFDIR) == _S_IFDIR)
#endif
/* defines for using ISO C++ conformant names */
@@ -139,9 +139,9 @@ typedef struct _DIR {
} DIR;
void RegisterBlendExtension(void);
-DIR *opendir (const char *path);
+DIR *opendir(const char *path);
struct dirent *readdir(DIR *dp);
-int closedir (DIR *dp);
+int closedir(DIR *dp);
void get_default_root(char *root);
int check_file_chars(char *filename);
const char *dirname(char *path);
diff --git a/source/blender/blenlib/PIL_time.h b/source/blender/blenlib/PIL_time.h
index c3c10239a8e..6153007be80 100644
--- a/source/blender/blenlib/PIL_time.h
+++ b/source/blender/blenlib/PIL_time.h
@@ -39,39 +39,39 @@ extern "C" {
#endif
extern
- /** Return an indication of time, expressed as
- * seconds since some fixed point. Successive calls
- * are guaranteed to generate values greater than or
- * equal to the last call.
- */
-double PIL_check_seconds_timer (void);
+/** Return an indication of time, expressed as
+ * seconds since some fixed point. Successive calls
+ * are guaranteed to generate values greater than or
+ * equal to the last call.
+ */
+double PIL_check_seconds_timer(void);
- /**
- * Platform-independent sleep function.
- * \param ms Number of milliseconds to sleep
- */
-void PIL_sleep_ms (int ms);
+/**
+ * Platform-independent sleep function.
+ * \param ms Number of milliseconds to sleep
+ */
+void PIL_sleep_ms(int ms);
/** Utility defines for timing.
* requires BLI_utildefines.h for 'AT'
* TIMEIT_VALUE returns the time since TIMEIT_START was called.
*/
-#define TIMEIT_START(var) \
-{ \
- double _timeit_##var= PIL_check_seconds_timer(); \
- printf("time start (" #var "): " AT "\n"); \
- fflush(stdout); \
- { \
+#define TIMEIT_START(var) \
+ { \
+ double _timeit_##var = PIL_check_seconds_timer(); \
+ printf("time start (" #var "): " AT "\n"); \
+ fflush(stdout); \
+ { (void) \
#define TIMEIT_VALUE(var) (float)(PIL_check_seconds_timer() - _timeit_##var)
-#define TIMEIT_END(var) \
- } \
- printf("time end (" #var "): %.6f" " " AT "\n", TIMEIT_VALUE(var)); \
- fflush(stdout); \
-} \
+#define TIMEIT_END(var) \
+ } \
+ printf("time end (" #var "): %.6f" " " AT "\n", TIMEIT_VALUE(var)); \
+ fflush(stdout); \
+} (void) \
#ifdef __cplusplus
}
diff --git a/source/blender/blenlib/intern/BLI_args.c b/source/blender/blenlib/intern/BLI_args.c
index ed3c6fad1a0..4e194b24c1e 100644
--- a/source/blender/blenlib/intern/BLI_args.c
+++ b/source/blender/blenlib/intern/BLI_args.c
@@ -49,7 +49,7 @@ typedef struct bArgDoc {
const char *short_arg;
const char *long_arg;
const char *documentation;
- int done;
+ int done;
} bArgDoc;
typedef struct bAKey {
@@ -68,24 +68,24 @@ typedef struct bArgument {
struct bArgs {
ListBase docs;
GHash *items;
- int argc;
+ int argc;
const char **argv;
- int *passes;
+ int *passes;
};
static unsigned int case_strhash(const void *ptr)
{
- const char *s= ptr;
- unsigned int i= 0;
+ const char *s = ptr;
+ unsigned int i = 0;
unsigned char c;
- while ( (c= tolower(*s++)) )
- i= i*37 + c;
+ while ( (c = tolower(*s++)) )
+ i = i * 37 + c;
return i;
}
-static unsigned int keyhash(const void *ptr)
+static unsigned int keyhash(const void *ptr)
{
const bAKey *k = ptr;
return case_strhash(k->arg); // ^ BLI_ghashutil_inthash((void*)k->pass);
@@ -102,7 +102,7 @@ static int keycmp(const void *a, const void *b)
return strcmp(ka->arg, kb->arg);
}
else {
- return BLI_ghashutil_intcmp((const void*)ka->pass, (const void*)kb->pass);
+ return BLI_ghashutil_intcmp((const void *)ka->pass, (const void *)kb->pass);
}
}
@@ -182,8 +182,8 @@ static void internalAdd(struct bArgs *ba, const char *arg, int pass, int case_st
if (a) {
printf("WARNING: conflicting argument\n");
- printf("\ttrying to add '%s' on pass %i, %scase sensitive\n", arg, pass, case_str == 1? "not ": "");
- printf("\tconflict with '%s' on pass %i, %scase sensitive\n\n", a->key->arg, (int)a->key->pass, a->key->case_str == 1? "not ": "");
+ printf("\ttrying to add '%s' on pass %i, %scase sensitive\n", arg, pass, case_str == 1 ? "not " : "");
+ printf("\tconflict with '%s' on pass %i, %scase sensitive\n\n", a->key->arg, (int)a->key->pass, a->key->case_str == 1 ? "not " : "");
}
a = MEM_callocN(sizeof(bArgument), "bArgument");
@@ -259,9 +259,9 @@ void BLI_argsParse(struct bArgs *ba, int pass, BA_ArgCallback default_cb, void *
{
int i = 0;
- for ( i = 1; i < ba->argc; i++) { /* skip argv[0] */
+ for (i = 1; i < ba->argc; i++) { /* skip argv[0] */
if (ba->passes[i] == 0) {
- /* -1 signal what side of the comparison it is */
+ /* -1 signal what side of the comparison it is */
bArgument *a = lookUp(ba, ba->argv[i], pass, -1);
BA_ArgCallback func = NULL;
void *data = NULL;
diff --git a/source/blender/blenlib/intern/BLI_dynstr.c b/source/blender/blenlib/intern/BLI_dynstr.c
index 54d9bc5f16d..d1c30504153 100644
--- a/source/blender/blenlib/intern/BLI_dynstr.c
+++ b/source/blender/blenlib/intern/BLI_dynstr.c
@@ -46,9 +46,9 @@
#ifndef va_copy
# ifdef __va_copy
-# define va_copy(a,b) __va_copy(a,b)
+# define va_copy(a, b) __va_copy(a, b)
# else /* !__va_copy */
-# define va_copy(a,b) ((a)=(b))
+# define va_copy(a, b) ((a) = (b))
# endif /* __va_copy */
#endif /* va_copy */
@@ -70,65 +70,65 @@ struct DynStr {
DynStr *BLI_dynstr_new(void)
{
- DynStr *ds= MEM_mallocN(sizeof(*ds), "DynStr");
- ds->elems= ds->last= NULL;
- ds->curlen= 0;
+ DynStr *ds = MEM_mallocN(sizeof(*ds), "DynStr");
+ ds->elems = ds->last = NULL;
+ ds->curlen = 0;
return ds;
}
void BLI_dynstr_append(DynStr *ds, const char *cstr)
{
- DynStrElem *dse= malloc(sizeof(*dse));
- int cstrlen= strlen(cstr);
+ DynStrElem *dse = malloc(sizeof(*dse));
+ int cstrlen = strlen(cstr);
- dse->str= malloc(cstrlen+1);
- memcpy(dse->str, cstr, cstrlen+1);
- dse->next= NULL;
+ dse->str = malloc(cstrlen + 1);
+ memcpy(dse->str, cstr, cstrlen + 1);
+ dse->next = NULL;
if (!ds->last)
- ds->last= ds->elems= dse;
+ ds->last = ds->elems = dse;
else
- ds->last= ds->last->next= dse;
+ ds->last = ds->last->next = dse;
- ds->curlen+= cstrlen;
+ ds->curlen += cstrlen;
}
void BLI_dynstr_nappend(DynStr *ds, const char *cstr, int len)
{
- DynStrElem *dse= malloc(sizeof(*dse));
- int cstrlen= BLI_strnlen(cstr, len);
+ DynStrElem *dse = malloc(sizeof(*dse));
+ int cstrlen = BLI_strnlen(cstr, len);
- dse->str= malloc(cstrlen+1);
+ dse->str = malloc(cstrlen + 1);
memcpy(dse->str, cstr, cstrlen);
dse->str[cstrlen] = '\0';
- dse->next= NULL;
+ dse->next = NULL;
if (!ds->last)
- ds->last= ds->elems= dse;
+ ds->last = ds->elems = dse;
else
- ds->last= ds->last->next= dse;
+ ds->last = ds->last->next = dse;
- ds->curlen+= cstrlen;
+ ds->curlen += cstrlen;
}
void BLI_dynstr_vappendf(DynStr *ds, const char *format, va_list args)
{
char *message, fixedmessage[256];
- int len= sizeof(fixedmessage);
- const int maxlen= 65536;
+ int len = sizeof(fixedmessage);
+ const int maxlen = 65536;
int retval;
while (1) {
va_list args_cpy;
if (len == sizeof(fixedmessage))
- message= fixedmessage;
+ message = fixedmessage;
else
- message= MEM_callocN(sizeof(char) * len, "BLI_dynstr_appendf");
+ message = MEM_callocN(sizeof(char) * len, "BLI_dynstr_appendf");
/* cant reuse the same args, so work on a copy */
va_copy(args_cpy, args);
- retval= vsnprintf(message, len, format, args_cpy);
+ retval = vsnprintf(message, len, format, args_cpy);
va_end(args_cpy);
if (retval == -1) {
@@ -136,7 +136,7 @@ void BLI_dynstr_vappendf(DynStr *ds, const char *format, va_list args)
* there is a formatting error, so we impose a maximum length */
if (message != fixedmessage)
MEM_freeN(message);
- message= NULL;
+ message = NULL;
len *= 2;
if (len > maxlen) {
@@ -148,10 +148,10 @@ void BLI_dynstr_vappendf(DynStr *ds, const char *format, va_list args)
/* in C99 the actual length required is returned */
if (message != fixedmessage)
MEM_freeN(message);
- message= NULL;
+ message = NULL;
/* retval doesn't include \0 terminator */
- len= retval + 1;
+ len = retval + 1;
}
else
break;
@@ -169,8 +169,8 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...)
{
va_list args;
char *message, fixedmessage[256];
- int len= sizeof(fixedmessage);
- const int maxlen= 65536;
+ int len = sizeof(fixedmessage);
+ const int maxlen = 65536;
int retval;
/* note that it's tempting to just call BLI_dynstr_vappendf here
@@ -179,12 +179,12 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...)
while (1) {
if (len == sizeof(fixedmessage))
- message= fixedmessage;
+ message = fixedmessage;
else
- message= MEM_callocN(sizeof(char)*(len), "BLI_dynstr_appendf");
+ message = MEM_callocN(sizeof(char) * (len), "BLI_dynstr_appendf");
va_start(args, format);
- retval= vsnprintf(message, len, format, args);
+ retval = vsnprintf(message, len, format, args);
va_end(args);
if (retval == -1) {
@@ -192,7 +192,7 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...)
* there is a formatting error, so we impose a maximum length */
if (message != fixedmessage)
MEM_freeN(message);
- message= NULL;
+ message = NULL;
len *= 2;
if (len > maxlen) {
@@ -204,10 +204,10 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...)
/* in C99 the actual length required is returned */
if (message != fixedmessage)
MEM_freeN(message);
- message= NULL;
+ message = NULL;
/* retval doesn't include \0 terminator */
- len= retval + 1;
+ len = retval + 1;
}
else
break;
@@ -231,19 +231,19 @@ void BLI_dynstr_get_cstring_ex(DynStr *ds, char *rets)
char *s;
DynStrElem *dse;
- for (s= rets, dse= ds->elems; dse; dse= dse->next) {
- int slen= strlen(dse->str);
+ for (s = rets, dse = ds->elems; dse; dse = dse->next) {
+ int slen = strlen(dse->str);
memcpy(s, dse->str, slen);
- s+= slen;
+ s += slen;
}
- rets[ds->curlen]= '\0';
+ rets[ds->curlen] = '\0';
}
char *BLI_dynstr_get_cstring(DynStr *ds)
{
- char *rets= MEM_mallocN(ds->curlen+1, "dynstr_cstring");
+ char *rets = MEM_mallocN(ds->curlen + 1, "dynstr_cstring");
BLI_dynstr_get_cstring_ex(ds, rets);
return rets;
}
@@ -252,13 +252,13 @@ void BLI_dynstr_free(DynStr *ds)
{
DynStrElem *dse;
- for (dse= ds->elems; dse; ) {
- DynStrElem *n= dse->next;
+ for (dse = ds->elems; dse; ) {
+ DynStrElem *n = dse->next;
free(dse->str);
free(dse);
- dse= n;
+ dse = n;
}
MEM_freeN(ds);
diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c
index 65461b7258a..5cfde3dfb77 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -78,7 +78,7 @@ int BLI_ghash_size(GHash *gh)
void BLI_ghash_insert(GHash *gh, void *key, void *val)
{
unsigned int hash = gh->hashfp(key) % gh->nbuckets;
- Entry *e = (Entry*)BLI_mempool_alloc(gh->entrypool);
+ Entry *e = (Entry *)BLI_mempool_alloc(gh->entrypool);
e->key = key;
e->val = val;
@@ -90,11 +90,11 @@ void BLI_ghash_insert(GHash *gh, void *key, void *val)
int i, nold = gh->nbuckets;
gh->nbuckets = hashsizes[++gh->cursize];
- gh->buckets = (Entry**)MEM_mallocN(gh->nbuckets * sizeof(*gh->buckets), "buckets");
+ gh->buckets = (Entry **)MEM_mallocN(gh->nbuckets * sizeof(*gh->buckets), "buckets");
memset(gh->buckets, 0, gh->nbuckets * sizeof(*gh->buckets));
for (i = 0; i < nold; i++) {
- for (e = old[i]; e;) {
+ for (e = old[i]; e; ) {
Entry *n = e->next;
hash = gh->hashfp(e->key) % gh->nbuckets;
@@ -174,7 +174,7 @@ void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreef
for (i = 0; i < gh->nbuckets; i++) {
Entry *e;
- for (e = gh->buckets[i]; e;) {
+ for (e = gh->buckets[i]; e; ) {
Entry *n = e->next;
if (keyfreefp) keyfreefp(e->key);
@@ -305,6 +305,23 @@ int BLI_ghashutil_strcmp(const void *a, const void *b)
return strcmp(a, b);
}
+GHash *BLI_ghash_ptr_new(const char *info)
+{
+ return BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, info);
+}
+GHash *BLI_ghash_str_new(const char *info)
+{
+ return BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, info);
+}
+GHash *BLI_ghash_int_new(const char *info)
+{
+ return BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, info);
+}
+GHash *BLI_ghash_pair_new(const char *info)
+{
+ return BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, info);
+}
+
GHashPair *BLI_ghashutil_pairalloc(const void *first, const void *second)
{
GHashPair *pair = MEM_mallocN(sizeof(GHashPair), "GHashPair");
@@ -333,6 +350,6 @@ int BLI_ghashutil_paircmp(const void *a, const void *b)
void BLI_ghashutil_pairfree(void *ptr)
{
- MEM_freeN((void*)ptr);
+ MEM_freeN((void *)ptr);
}
diff --git a/source/blender/blenlib/intern/BLI_heap.c b/source/blender/blenlib/intern/BLI_heap.c
index fa7b91b8539..0a281786100 100644
--- a/source/blender/blenlib/intern/BLI_heap.c
+++ b/source/blender/blenlib/intern/BLI_heap.c
@@ -60,10 +60,10 @@ struct Heap {
#define HEAP_COMPARE(a, b) (a->value < b->value)
#define HEAP_EQUALS(a, b) (a->value == b->value)
#define HEAP_SWAP(heap, i, j) \
-{ \
- SWAP(int, heap->tree[i]->index, heap->tree[j]->index); \
- SWAP(HeapNode *, heap->tree[i], heap->tree[j]); \
-}
+ { \
+ SWAP(int, heap->tree[i]->index, heap->tree[j]->index); \
+ SWAP(HeapNode *, heap->tree[i], heap->tree[j]); \
+ }
/***/
@@ -184,7 +184,7 @@ void *BLI_heap_popmin(Heap *heap)
if (heap->size == 1)
heap->size--;
else {
- HEAP_SWAP(heap, 0, heap->size-1);
+ HEAP_SWAP(heap, 0, heap->size - 1);
heap->size--;
BLI_heap_down(heap, 0);
diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 8662406b0e9..2b21758fdc1 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -50,59 +50,54 @@
#define MAX_TREETYPE 32
#define DEFAULT_FIND_NEAREST_HEAP_SIZE 1024
-typedef struct BVHNode
-{
+typedef struct BVHNode {
struct BVHNode **children;
struct BVHNode *parent; // some user defined traversed need that
struct BVHNode *skip[2];
- float *bv; // Bounding volume of all nodes, max 13 axis
- int index; // face, edge, vertex index
- char totnode; // how many nodes are used, used for speedup
- char main_axis; // Axis used to split this node
+ float *bv; /* Bounding volume of all nodes, max 13 axis */
+ int index; /* face, edge, vertex index */
+ char totnode; /* how many nodes are used, used for speedup */
+ char main_axis; /* Axis used to split this node */
} BVHNode;
-struct BVHTree
-{
+struct BVHTree {
BVHNode **nodes;
- BVHNode *nodearray; /* pre-alloc branch nodes */
- BVHNode **nodechild; // pre-alloc childs for nodes
- float *nodebv; // pre-alloc bounding-volumes for nodes
- float epsilon; /* epslion is used for inflation of the k-dop */
- int totleaf; // leafs
- int totbranch;
- char tree_type; // type of tree (4 => quadtree)
- char axis; // kdop type (6 => OBB, 7 => AABB, ...)
- char start_axis, stop_axis; // KDOP_AXES array indices according to axis
+ BVHNode *nodearray; /* pre-alloc branch nodes */
+ BVHNode **nodechild; /* pre-alloc childs for nodes */
+ float *nodebv; /* pre-alloc bounding-volumes for nodes */
+ float epsilon; /* epslion is used for inflation of the k-dop */
+ int totleaf; /* leafs */
+ int totbranch;
+ char tree_type; /* type of tree (4 => quadtree) */
+ char axis; /* kdop type (6 => OBB, 7 => AABB, ...) */
+ char start_axis, stop_axis; /* KDOP_AXES array indices according to axis */
};
-typedef struct BVHOverlapData
-{
+typedef struct BVHOverlapData {
BVHTree *tree1, *tree2;
BVHTreeOverlap *overlap;
int i, max_overlap; /* i is number of overlaps */
int start_axis, stop_axis;
} BVHOverlapData;
-typedef struct BVHNearestData
-{
+typedef struct BVHNearestData {
BVHTree *tree;
- const float *co;
+ const float *co;
BVHTree_NearestPointCallback callback;
- void *userdata;
- float proj[13]; //coordinates projection over axis
+ void *userdata;
+ float proj[13]; /* coordinates projection over axis */
BVHTreeNearest nearest;
} BVHNearestData;
-typedef struct BVHRayCastData
-{
+typedef struct BVHRayCastData {
BVHTree *tree;
BVHTree_RayCastCallback callback;
- void *userdata;
+ void *userdata;
- BVHTreeRay ray;
+ BVHTreeRay ray;
float ray_dot_axis[13];
float idot_axis[13];
int index[6];
@@ -120,55 +115,55 @@ typedef struct BVHRayCastData
// Notes: You can choose the tree type --> binary, quad, octree, choose below
////////////////////////////////////////////////////////////////////////
-static float KDOP_AXES[13][3] =
-{ {1.0, 0, 0}, {0, 1.0, 0}, {0, 0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0},
-{1.0, -1.0, -1.0}, {1.0, 1.0, 0}, {1.0, 0, 1.0}, {0, 1.0, 1.0}, {1.0, -1.0, 0}, {1.0, 0, -1.0},
-{0, 1.0, -1.0}
+static float KDOP_AXES[13][3] = {
+ {1.0, 0, 0}, {0, 1.0, 0}, {0, 0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0},
+ {1.0, -1.0, -1.0}, {1.0, 1.0, 0}, {1.0, 0, 1.0}, {0, 1.0, 1.0}, {1.0, -1.0, 0}, {1.0, 0, -1.0},
+ {0, 1.0, -1.0}
};
/*
* Generic push and pop heap
*/
-#define PUSH_HEAP_BODY(HEAP_TYPE, PRIORITY, heap, heap_size) \
-{ \
- HEAP_TYPE element = heap[heap_size-1]; \
- int child = heap_size-1; \
- while (child != 0) \
- { \
- int parent = (child-1) / 2; \
- if (PRIORITY(element, heap[parent])) \
- { \
- heap[child] = heap[parent]; \
- child = parent; \
- } \
- else break; \
- } \
- heap[child] = element; \
-}
+#define PUSH_HEAP_BODY(HEAP_TYPE, PRIORITY, heap, heap_size) \
+ { \
+ HEAP_TYPE element = heap[heap_size - 1]; \
+ int child = heap_size - 1; \
+ while (child != 0) \
+ { \
+ int parent = (child - 1) / 2; \
+ if (PRIORITY(element, heap[parent])) \
+ { \
+ heap[child] = heap[parent]; \
+ child = parent; \
+ } \
+ else break; \
+ } \
+ heap[child] = element; \
+ }
-#define POP_HEAP_BODY(HEAP_TYPE, PRIORITY, heap, heap_size) \
-{ \
- HEAP_TYPE element = heap[heap_size-1]; \
- int parent = 0; \
- while (parent < (heap_size-1)/2 ) \
- { \
- int child2 = (parent+1)*2; \
- if (PRIORITY(heap[child2-1], heap[child2])) \
- --child2; \
- \
- if (PRIORITY(element, heap[child2])) \
- break; \
- \
- heap[parent] = heap[child2]; \
- parent = child2; \
- } \
- heap[parent] = element; \
-}
+#define POP_HEAP_BODY(HEAP_TYPE, PRIORITY, heap, heap_size) \
+ { \
+ HEAP_TYPE element = heap[heap_size - 1]; \
+ int parent = 0; \
+ while (parent < (heap_size - 1) / 2) \
+ { \
+ int child2 = (parent + 1) * 2; \
+ if (PRIORITY(heap[child2 - 1], heap[child2])) { \
+ child2--; \
+ } \
+ if (PRIORITY(element, heap[child2])) { \
+ break; \
+ } \
+ heap[parent] = heap[child2]; \
+ parent = child2; \
+ } \
+ heap[parent] = element; \
+ }
#if 0
static int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, int *max_size, int size_per_item)
{
- int new_max_size = *max_size * 2;
+ int new_max_size = *max_size * 2;
void *new_memblock = NULL;
if (new_size <= *max_size)
@@ -176,11 +171,11 @@ static int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, in
if (*memblock == local_memblock)
{
- new_memblock = malloc( size_per_item * new_max_size );
+ new_memblock = malloc(size_per_item * new_max_size);
memcpy(new_memblock, *memblock, size_per_item * *max_size);
}
else
- new_memblock = realloc(*memblock, size_per_item * new_max_size );
+ new_memblock = realloc(*memblock, size_per_item * new_max_size);
if (new_memblock)
{
@@ -206,7 +201,7 @@ static int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, in
#if 0
static int floor_lg(int a)
{
- return (int)(floor(log(a)/log(2)));
+ return (int)(floor(log(a) / log(2)));
}
#endif
@@ -217,20 +212,20 @@ static void bvh_insertionsort(BVHNode **a, int lo, int hi, int axis)
{
int i, j;
BVHNode *t;
- for (i=lo; i < hi; i++) {
- j=i;
+ for (i = lo; i < hi; i++) {
+ j = i;
t = a[i];
- while ((j!=lo) && (t->bv[axis] < (a[j-1])->bv[axis])) {
- a[j] = a[j-1];
+ while ((j != lo) && (t->bv[axis] < (a[j - 1])->bv[axis])) {
+ a[j] = a[j - 1];
j--;
}
a[j] = t;
}
}
-static int bvh_partition(BVHNode **a, int lo, int hi, BVHNode * x, int axis)
+static int bvh_partition(BVHNode **a, int lo, int hi, BVHNode *x, int axis)
{
- int i=lo, j=hi;
+ int i = lo, j = hi;
while (1) {
while ((a[i])->bv[axis] < x->bv[axis]) i++;
j--;
@@ -248,33 +243,33 @@ static int bvh_partition(BVHNode **a, int lo, int hi, BVHNode * x, int axis)
#if 0
static void bvh_downheap(BVHNode **a, int i, int n, int lo, int axis)
{
- BVHNode * d = a[lo+i-1];
+ BVHNode *d = a[lo + i - 1];
int child;
- while (i<=n/2)
+ while (i <= n / 2)
{
- child = 2*i;
- if ((child < n) && ((a[lo+child-1])->bv[axis] < (a[lo+child])->bv[axis]))
+ child = 2 * i;
+ if ((child < n) && ((a[lo + child - 1])->bv[axis] < (a[lo + child])->bv[axis]))
{
child++;
}
- if (!(d->bv[axis] < (a[lo+child-1])->bv[axis])) break;
- a[lo+i-1] = a[lo+child-1];
+ if (!(d->bv[axis] < (a[lo + child - 1])->bv[axis])) break;
+ a[lo + i - 1] = a[lo + child - 1];
i = child;
}
- a[lo+i-1] = d;
+ a[lo + i - 1] = d;
}
static void bvh_heapsort(BVHNode **a, int lo, int hi, int axis)
{
- int n = hi-lo, i;
- for (i=n/2; i>=1; i=i-1)
+ int n = hi - lo, i;
+ for (i = n / 2; i >= 1; i = i - 1)
{
bvh_downheap(a, i, n, lo, axis);
}
- for (i=n; i>1; i=i-1)
+ for (i = n; i > 1; i = i - 1)
{
- SWAP(BVHNode*, a[lo], a[lo+i-1]);
- bvh_downheap(a, 1, i-1, lo, axis);
+ SWAP(BVHNode *, a[lo], a[lo + i - 1]);
+ bvh_downheap(a, 1, i - 1, lo, axis);
}
}
#endif
@@ -307,21 +302,21 @@ static BVHNode *bvh_medianof3(BVHNode **a, int lo, int mid, int hi, int axis) //
/*
* Quicksort algorithm modified for Introsort
*/
-static void bvh_introsort_loop (BVHNode **a, int lo, int hi, int depth_limit, int axis)
+static void bvh_introsort_loop(BVHNode **a, int lo, int hi, int depth_limit, int axis)
{
int p;
- while (hi-lo > size_threshold)
+ while (hi - lo > size_threshold)
{
if (depth_limit == 0)
{
bvh_heapsort(a, lo, hi, axis);
return;
}
- depth_limit=depth_limit-1;
- p=bvh_partition(a, lo, hi, bvh_medianof3(a, lo, lo+((hi-lo)/2)+1, hi-1, axis), axis);
+ depth_limit = depth_limit - 1;
+ p = bvh_partition(a, lo, hi, bvh_medianof3(a, lo, lo + ((hi - lo) / 2) + 1, hi - 1, axis), axis);
bvh_introsort_loop(a, p, hi, depth_limit, axis);
- hi=p;
+ hi = p;
}
}
@@ -329,8 +324,8 @@ static void sort(BVHNode **a0, int begin, int end, int axis)
{
if (begin < end)
{
- BVHNode **a=a0;
- bvh_introsort_loop(a, begin, end, 2*floor_lg(end-begin), axis);
+ BVHNode **a = a0;
+ bvh_introsort_loop(a, begin, end, 2 * floor_lg(end - begin), axis);
bvh_insertionsort(a, begin, end, axis);
}
}
@@ -347,8 +342,8 @@ 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) {
- cut = bvh_partition(a, begin, end, bvh_medianof3(a, begin, (begin+end)/2, end-1, axis), axis );
+ 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;
else
@@ -368,7 +363,7 @@ static void build_skip_links(BVHTree *tree, BVHNode *node, BVHNode *left, BVHNod
node->skip[1] = right;
for (i = 0; i < node->totnode; i++) {
- if (i+1 < node->totnode)
+ if (i + 1 < node->totnode)
build_skip_links(tree, node->children[i], left, node->children[i + 1]);
else
build_skip_links(tree, node->children[i], left, right);
@@ -415,8 +410,8 @@ static void refit_kdop_hull(BVHTree *tree, BVHNode *node, int start, int end)
for (i = tree->start_axis; i < tree->stop_axis; i++) {
- bv[2*i] = FLT_MAX;
- bv[2*i + 1] = -FLT_MAX;
+ bv[2 * i] = FLT_MAX;
+ bv[2 * i + 1] = -FLT_MAX;
}
for (j = start; j < end; j++) {
@@ -445,15 +440,15 @@ static char get_largest_axis(float *bv)
middle_point[2] = (bv[5]) - (bv[4]); // z axis
if (middle_point[0] > middle_point[1]) {
if (middle_point[0] > middle_point[2])
- return 1; // max x axis
+ return 1; // max x axis
else
- return 5; // max z axis
+ return 5; // max z axis
}
else {
if (middle_point[1] > middle_point[2])
- return 3; // max y axis
+ return 3; // max y axis
else
- return 5; // max z axis
+ return 5; // max z axis
}
}
@@ -464,8 +459,8 @@ static void node_join(BVHTree *tree, BVHNode *node)
int i, j;
for (i = tree->start_axis; i < tree->stop_axis; i++) {
- node->bv[2*i] = FLT_MAX;
- node->bv[2*i + 1] = -FLT_MAX;
+ node->bv[2 * i] = FLT_MAX;
+ node->bv[2 * i + 1] = -FLT_MAX;
}
for (i = 0; i < tree->tree_type; i++) {
@@ -492,15 +487,15 @@ static void node_join(BVHTree *tree, BVHNode *node)
static void bvhtree_print_tree(BVHTree *tree, BVHNode *node, int depth)
{
int i;
- for (i=0; i<depth; i++) printf(" ");
+ for (i = 0; i < depth; i++) printf(" ");
printf(" - %d (%ld): ", node->index, node - tree->nodearray);
- for (i=2*tree->start_axis; i<2*tree->stop_axis; i++)
+ for (i = 2 * tree->start_axis; i < 2 * tree->stop_axis; i++)
printf("%.3f ", node->bv[i]);
printf("\n");
- for (i=0; i<tree->tree_type; i++)
+ for (i = 0; i < tree->tree_type; i++)
if (node->children[i])
- bvhtree_print_tree(tree, node->children[i], depth+1);
+ bvhtree_print_tree(tree, node->children[i], depth + 1);
}
static void bvhtree_info(BVHTree *tree)
@@ -508,15 +503,14 @@ static void bvhtree_info(BVHTree *tree)
printf("BVHTree info\n");
printf("tree_type = %d, axis = %d, epsilon = %f\n", tree->tree_type, tree->axis, tree->epsilon);
printf("nodes = %d, branches = %d, leafs = %d\n", tree->totbranch + tree->totleaf, tree->totbranch, tree->totleaf);
- printf("Memory per node = %ldbytes\n", sizeof(BVHNode) + sizeof(BVHNode*)*tree->tree_type + sizeof(float)*tree->axis);
+ printf("Memory per node = %ldbytes\n", sizeof(BVHNode) + sizeof(BVHNode *) * tree->tree_type + sizeof(float) * tree->axis);
printf("BV memory = %dbytes\n", MEM_allocN_len(tree->nodebv));
- printf("Total memory = %ldbytes\n", sizeof(BVHTree)
- + MEM_allocN_len(tree->nodes)
- + MEM_allocN_len(tree->nodearray)
- + MEM_allocN_len(tree->nodechild)
- + MEM_allocN_len(tree->nodebv)
- );
+ printf("Total memory = %ldbytes\n", sizeof(BVHTree) +
+ MEM_allocN_len(tree->nodes) +
+ MEM_allocN_len(tree->nodearray) +
+ MEM_allocN_len(tree->nodechild) +
+ MEM_allocN_len(tree->nodebv));
// bvhtree_print_tree(tree, tree->nodes[tree->totleaf], 0);
}
@@ -532,10 +526,10 @@ static void verify_tree(BVHTree *tree)
// check the pointer list
for (i = 0; i < tree->totleaf; i++)
{
- if (tree->nodes[i]->parent == NULL)
+ if (tree->nodes[i]->parent == NULL) {
printf("Leaf has no parent: %d\n", i);
- else
- {
+ }
+ else {
for (j = 0; j < tree->tree_type; j++)
{
if (tree->nodes[i]->parent->children[j] == tree->nodes[i])
@@ -552,10 +546,10 @@ static void verify_tree(BVHTree *tree)
// check the leaf list
for (i = 0; i < tree->totleaf; i++)
{
- if (tree->nodearray[i].parent == NULL)
+ if (tree->nodearray[i].parent == NULL) {
printf("Leaf has no parent: %d\n", i);
- else
- {
+ }
+ else {
for (j = 0; j < tree->tree_type; j++)
{
if (tree->nodearray[i].parent->children[j] == &tree->nodearray[i])
@@ -575,15 +569,14 @@ static void verify_tree(BVHTree *tree)
//Helper data and structures to build a min-leaf generalized implicit tree
//This code can be easily reduced (basicly this is only method to calculate pow(k, n) in O(1).. and stuff like that)
-typedef struct BVHBuildHelper
-{
- int tree_type; /* */
- int totleafs; /* */
+typedef struct BVHBuildHelper {
+ int tree_type; /* */
+ int totleafs; /* */
- int leafs_per_child[32]; /* Min number of leafs that are archievable from a node at depth N */
- int branches_on_level[32]; /* Number of nodes at depth N (tree_type^N) */
+ int leafs_per_child[32]; /* Min number of leafs that are archievable from a node at depth N */
+ int branches_on_level[32]; /* Number of nodes at depth N (tree_type^N) */
- int remain_leafs; /* Number of leafs that are placed on the level that is not 100% filled */
+ int remain_leafs; /* Number of leafs that are placed on the level that is not 100% filled */
} BVHBuildHelper;
@@ -594,7 +587,7 @@ static void build_implicit_tree_helper(BVHTree *tree, BVHBuildHelper *data)
int nnodes;
data->totleafs = tree->totleaf;
- data->tree_type= tree->tree_type;
+ 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;
@@ -608,8 +601,8 @@ static void build_implicit_tree_helper(BVHTree *tree, BVHBuildHelper *data)
//We could stop the loop first (but I am lazy to find out when)
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;
+ 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;
}
remain = data->totleafs - data->leafs_per_child[1];
@@ -620,11 +613,11 @@ static void build_implicit_tree_helper(BVHTree *tree, BVHBuildHelper *data)
// return the min index of all the leafs archivable with the given branch
static int implicit_leafs_index(BVHBuildHelper *data, int depth, int child_index)
{
- int min_leaf_index = child_index * data->leafs_per_child[depth-1];
+ int min_leaf_index = child_index * data->leafs_per_child[depth - 1];
if (min_leaf_index <= data->remain_leafs)
return min_leaf_index;
else if (data->leafs_per_child[depth])
- return data->totleafs - (data->branches_on_level[depth-1] - child_index) * data->leafs_per_child[depth];
+ return data->totleafs - (data->branches_on_level[depth - 1] - child_index) * data->leafs_per_child[depth];
else
return data->remain_leafs;
}
@@ -660,7 +653,7 @@ static int implicit_leafs_index(BVHBuildHelper *data, int depth, int child_index
// This functions returns the number of branches needed to have the requested number of leafs.
static int implicit_needed_branches(int tree_type, int leafs)
{
- return MAX2(1, (leafs + tree_type - 3) / (tree_type-1) );
+ return MAX2(1, (leafs + tree_type - 3) / (tree_type - 1) );
}
/*
@@ -678,11 +671,11 @@ 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;
- partition_nth_element(leafs_array, nth[i], nth[partitions], nth[i+1], split_axis);
+ partition_nth_element(leafs_array, nth[i], nth[partitions], nth[i + 1], split_axis);
}
}
@@ -708,19 +701,19 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array,
const int tree_type = tree->tree_type;
const int tree_offset = 2 - tree->tree_type; //this value is 0 (on binary trees) and negative on the others
- const int num_branches= implicit_needed_branches(tree_type, num_leafs);
+ const int num_branches = implicit_needed_branches(tree_type, num_leafs);
BVHBuildHelper data;
int depth;
// set parent from root node to NULL
- BVHNode *tmp = branches_array+0;
+ BVHNode *tmp = branches_array + 0;
tmp->parent = NULL;
//Most of bvhtree code relies on 1-leaf trees having at least one branch
//We handle that special case here
if (num_leafs == 1) {
- BVHNode *root = branches_array+0;
+ BVHNode *root = branches_array + 0;
refit_kdop_hull(tree, root, 0, num_leafs);
root->main_axis = get_largest_axis(root->bv) / 2;
root->totnode = 1;
@@ -729,27 +722,27 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array,
return;
}
- branches_array--; //Implicit trees use 1-based indexs
+ branches_array--; //Implicit trees use 1-based indexs
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++) {
- 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
+ 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;
//Loop all branches on this level
#pragma omp parallel for private(j) schedule(static)
for (j = i; j < end_j; j++) {
int k;
- const int parent_level_index= j-i;
- BVHNode* parent = branches_array + j;
- int nth_positions[ MAX_TREETYPE + 1];
+ const int parent_level_index = j - i;
+ BVHNode *parent = branches_array + j;
+ int nth_positions[MAX_TREETYPE + 1];
char split_axis;
int parent_leafs_begin = implicit_leafs_index(&data, depth, parent_level_index);
- int parent_leafs_end = implicit_leafs_index(&data, depth, parent_level_index+1);
+ int parent_leafs_end = implicit_leafs_index(&data, depth, parent_level_index + 1);
//This calculates the bounding box of this branch
//and chooses the largest axis as the axis to divide leafs
@@ -763,12 +756,12 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array,
//Only to assure that the elements are partioned on a way that each child takes the elements
//it would take in case the whole array was sorted.
//Split_leafs takes care of that "sort" problem.
- nth_positions[ 0] = parent_leafs_begin;
+ nth_positions[0] = parent_leafs_begin;
nth_positions[tree_type] = parent_leafs_end;
for (k = 1; k < tree_type; k++) {
int child_index = j * tree_type + tree_offset + k;
int child_level_index = child_index - first_of_next_level; //child level index
- nth_positions[k] = implicit_leafs_index(&data, depth+1, child_level_index);
+ nth_positions[k] = implicit_leafs_index(&data, depth + 1, child_level_index);
}
split_leafs(leafs_array, nth_positions, tree_type, split_axis);
@@ -780,22 +773,22 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array,
int child_index = j * tree_type + tree_offset + k;
int child_level_index = child_index - first_of_next_level; //child level index
- int child_leafs_begin = implicit_leafs_index(&data, depth+1, child_level_index);
- int child_leafs_end = implicit_leafs_index(&data, depth+1, child_level_index+1);
+ int child_leafs_begin = implicit_leafs_index(&data, depth + 1, child_level_index);
+ int child_leafs_end = implicit_leafs_index(&data, depth + 1, child_level_index + 1);
if (child_leafs_end - child_leafs_begin > 1) {
parent->children[k] = branches_array + child_index;
parent->children[k]->parent = parent;
}
else if (child_leafs_end - child_leafs_begin == 1) {
- parent->children[k] = leafs_array[ child_leafs_begin ];
+ parent->children[k] = leafs_array[child_leafs_begin];
parent->children[k]->parent = parent;
}
else {
break;
}
- parent->totnode = k+1;
+ parent->totnode = k + 1;
}
}
}
@@ -858,27 +851,27 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis)
//Allocate arrays
numnodes = maxsize + implicit_needed_branches(tree_type, maxsize) + tree_type;
- tree->nodes = (BVHNode **)MEM_callocN(sizeof(BVHNode *)*numnodes, "BVHNodes");
+ tree->nodes = (BVHNode **)MEM_callocN(sizeof(BVHNode *) * numnodes, "BVHNodes");
if (!tree->nodes) {
MEM_freeN(tree);
return NULL;
}
- tree->nodebv = (float*)MEM_callocN(sizeof(float)* axis * numnodes, "BVHNodeBV");
+ tree->nodebv = (float *)MEM_callocN(sizeof(float) * axis * numnodes, "BVHNodeBV");
if (!tree->nodebv) {
MEM_freeN(tree->nodes);
MEM_freeN(tree);
}
- tree->nodechild = (BVHNode**)MEM_callocN(sizeof(BVHNode*) * tree_type * numnodes, "BVHNodeBV");
+ tree->nodechild = (BVHNode **)MEM_callocN(sizeof(BVHNode *) * tree_type * numnodes, "BVHNodeBV");
if (!tree->nodechild) {
MEM_freeN(tree->nodebv);
MEM_freeN(tree->nodes);
MEM_freeN(tree);
}
- tree->nodearray = (BVHNode *)MEM_callocN(sizeof(BVHNode)* numnodes, "BVHNodeArray");
+ tree->nodearray = (BVHNode *)MEM_callocN(sizeof(BVHNode) * numnodes, "BVHNodeArray");
if (!tree->nodearray) {
MEM_freeN(tree->nodechild);
@@ -889,7 +882,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;
}
@@ -914,8 +907,8 @@ void BLI_bvhtree_balance(BVHTree *tree)
{
int i;
- BVHNode* branches_array = tree->nodearray + tree->totleaf;
- BVHNode** leafs_array = tree->nodes;
+ BVHNode *branches_array = tree->nodearray + tree->totleaf;
+ BVHNode **leafs_array = tree->nodes;
//This function should only be called once (some big bug goes here if its being called more than once per tree)
assert(tree->totbranch == 0);
@@ -942,7 +935,7 @@ int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints)
if (tree->totbranch > 0)
return 0;
- if (tree->totleaf+1 >= MEM_allocN_len(tree->nodes)/sizeof(*(tree->nodes)))
+ if (tree->totleaf + 1 >= MEM_allocN_len(tree->nodes) / sizeof(*(tree->nodes)))
return 0;
// TODO check if have enough nodes in array
@@ -951,7 +944,7 @@ int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints)
tree->totleaf++;
create_kdop_hull(tree, node, co, numpoints, 0);
- node->index= index;
+ node->index = index;
// inflate the bv with some epsilon
for (i = tree->start_axis; i < tree->stop_axis; i++) {
@@ -967,7 +960,7 @@ int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints)
int BLI_bvhtree_update_node(BVHTree *tree, int index, const float *co, const float *co_moving, int numpoints)
{
int i;
- BVHNode *node= NULL;
+ BVHNode *node = NULL;
// check if index exists
if (index > tree->totleaf)
@@ -996,8 +989,8 @@ void BLI_bvhtree_update_tree(BVHTree *tree)
//TRICKY: the way we build the tree all the childs have an index greater than the parent
//This allows us todo a bottom up update by starting on the biger numbered branch
- BVHNode** root = tree->nodes + tree->totleaf;
- BVHNode** index = tree->nodes + tree->totleaf + tree->totbranch-1;
+ BVHNode **root = tree->nodes + tree->totleaf;
+ BVHNode **index = tree->nodes + tree->totleaf + tree->totbranch - 1;
for (; index >= root; index--)
node_join(tree, *index);
@@ -1018,13 +1011,13 @@ static int tree_overlap(BVHNode *node1, BVHNode *node2, int start_axis, int stop
float *bv1 = node1->bv;
float *bv2 = node2->bv;
- float *bv1_end = bv1 + (stop_axis<<1);
+ float *bv1_end = bv1 + (stop_axis << 1);
- bv1 += start_axis<<1;
- bv2 += start_axis<<1;
+ bv1 += start_axis << 1;
+ 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;
}
@@ -1048,7 +1041,7 @@ static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2)
if (data->i >= data->max_overlap) {
// try to make alloc'ed memory bigger
- data->overlap = realloc(data->overlap, sizeof(BVHTreeOverlap)*data->max_overlap*2);
+ data->overlap = realloc(data->overlap, sizeof(BVHTreeOverlap) * data->max_overlap * 2);
if (!data->overlap) {
printf("Out of Memory in traverse\n");
@@ -1095,19 +1088,19 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, unsigned int
if (!tree_overlap(tree1->nodes[tree1->totleaf], tree2->nodes[tree2->totleaf], MIN2(tree1->start_axis, tree2->start_axis), MIN2(tree1->stop_axis, tree2->stop_axis)))
return NULL;
- data = MEM_callocN(sizeof(BVHOverlapData *)* tree1->tree_type, "BVHOverlapData_star");
+ data = MEM_callocN(sizeof(BVHOverlapData *) * tree1->tree_type, "BVHOverlapData_star");
for (j = 0; j < tree1->tree_type; j++) {
data[j] = (BVHOverlapData *)MEM_callocN(sizeof(BVHOverlapData), "BVHOverlapData");
// init BVHOverlapData
- data[j]->overlap = (BVHTreeOverlap *)malloc(sizeof(BVHTreeOverlap)*MAX2(tree1->totleaf, tree2->totleaf));
+ data[j]->overlap = (BVHTreeOverlap *)malloc(sizeof(BVHTreeOverlap) * MAX2(tree1->totleaf, tree2->totleaf));
data[j]->tree1 = tree1;
data[j]->tree2 = tree2;
data[j]->max_overlap = MAX2(tree1->totleaf, tree2->totleaf);
data[j]->i = 0;
data[j]->start_axis = MIN2(tree1->start_axis, tree2->start_axis);
- data[j]->stop_axis = MIN2(tree1->stop_axis, tree2->stop_axis );
+ data[j]->stop_axis = MIN2(tree1->stop_axis, tree2->stop_axis);
}
#pragma omp parallel for private(j) schedule(static)
@@ -1118,11 +1111,11 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, unsigned int
for (j = 0; j < tree1->tree_type; j++)
total += data[j]->i;
- to = overlap = (BVHTreeOverlap *)MEM_callocN(sizeof(BVHTreeOverlap)*total, "BVHTreeOverlap");
+ to = overlap = (BVHTreeOverlap *)MEM_callocN(sizeof(BVHTreeOverlap) * total, "BVHTreeOverlap");
for (j = 0; j < tree1->tree_type; j++) {
- memcpy(to, data[j]->overlap, data[j]->i*sizeof(BVHTreeOverlap));
- to+=data[j]->i;
+ memcpy(to, data[j]->overlap, data[j]->i * sizeof(BVHTreeOverlap));
+ to += data[j]->i;
}
for (j = 0; j < tree1->tree_type; j++) {
@@ -1142,7 +1135,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])
@@ -1154,9 +1147,9 @@ static float calc_nearest_point(const float proj[3], BVHNode *node, float *neare
#if 0
//nearest on a general hull
copy_v3_v3(nearest, data->co);
- for (i = data->tree->start_axis; i != data->tree->stop_axis; i++, bv+=2)
+ for (i = data->tree->start_axis; i != data->tree->stop_axis; i++, bv += 2)
{
- float proj = dot_v3v3( nearest, KDOP_AXES[i]);
+ float proj = dot_v3v3(nearest, KDOP_AXES[i]);
float dl = bv[0] - proj;
float du = bv[1] - proj;
@@ -1173,14 +1166,13 @@ static float calc_nearest_point(const float proj[3], BVHNode *node, float *neare
}
-typedef struct NodeDistance
-{
+typedef struct NodeDistance {
BVHNode *node;
float dist;
} NodeDistance;
-#define NodeDistance_priority(a, b) ( (a).dist < (b).dist )
+#define NodeDistance_priority(a, b) ( (a).dist < (b).dist)
// TODO: use a priority queue to reduce the number of nodes looked on
static void dfs_find_nearest_dfs(BVHNearestData *data, BVHNode *node)
@@ -1189,8 +1181,8 @@ static void dfs_find_nearest_dfs(BVHNearestData *data, BVHNode *node)
if (data->callback)
data->callback(data->userdata, node->index, data->co, &data->nearest);
else {
- data->nearest.index = node->index;
- data->nearest.dist = calc_nearest_point(data->proj, node, data->nearest.co);
+ data->nearest.index = node->index;
+ data->nearest.dist = calc_nearest_point(data->proj, node, data->nearest.co);
}
}
else {
@@ -1198,16 +1190,16 @@ static void dfs_find_nearest_dfs(BVHNearestData *data, BVHNode *node)
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++) {
- if ( calc_nearest_point(data->proj, node->children[i], nearest) >= data->nearest.dist) continue;
+ 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--) {
- if ( calc_nearest_point(data->proj, node->children[i], nearest) >= data->nearest.dist) continue;
+ 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]);
}
}
@@ -1242,8 +1234,8 @@ static void bfs_find_nearest(BVHNearestData *data, BVHNode *node)
{
int i;
NodeDistance default_heap[DEFAULT_FIND_NEAREST_HEAP_SIZE];
- NodeDistance *heap=default_heap, current;
- int heap_size = 0, max_heap_size = sizeof(default_heap)/sizeof(default_heap[0]);
+ NodeDistance *heap = default_heap, current;
+ int heap_size = 0, max_heap_size = sizeof(default_heap) / sizeof(default_heap[0]);
float nearest[3];
int callbacks = 0, push_heaps = 0;
@@ -1260,7 +1252,7 @@ static void bfs_find_nearest(BVHNearestData *data, BVHNode *node)
while (current.dist < data->nearest.dist)
{
// printf("%f : %f\n", current.dist, data->nearest.dist);
- for (i=0; i< current.node->totnode; i++)
+ for (i = 0; i < current.node->totnode; i++)
{
BVHNode *child = current.node->children[i];
if (child->totnode == 0)
@@ -1268,11 +1260,10 @@ static void bfs_find_nearest(BVHNearestData *data, BVHNode *node)
callbacks++;
dfs_find_nearest_dfs(data, child);
}
- else
- {
+ else {
//adjust heap size
if ((heap_size >= max_heap_size) &&
- ADJUST_MEMORY(default_heap, (void**)&heap, heap_size+1, &max_heap_size, sizeof(heap[0])) == FALSE)
+ ADJUST_MEMORY(default_heap, (void **)&heap, heap_size + 1, &max_heap_size, sizeof(heap[0])) == FALSE)
{
printf("WARNING: bvh_find_nearest got out of memory\n");
@@ -1289,7 +1280,7 @@ static void bfs_find_nearest(BVHNearestData *data, BVHNode *node)
heap_size++;
NodeDistance_push_heap(heap, heap_size);
- // PUSH_HEAP_BODY(NodeDistance, NodeDistance_priority, heap, heap_size);
+ // PUSH_HEAP_BODY(NodeDistance, NodeDistance_priority, heap, heap_size);
push_heaps++;
}
}
@@ -1315,7 +1306,7 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *n
int i;
BVHNearestData data;
- BVHNode* root = tree->nodes[tree->totleaf];
+ BVHNode *root = tree->nodes[tree->totleaf];
//init data to search
data.tree = tree;
@@ -1363,7 +1354,7 @@ static float ray_nearest_hit(BVHRayCastData *data, float *bv)
float low = 0, upper = data->hit.dist;
- for (i=0; i != 3; i++, bv += 2) {
+ 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 ||
@@ -1377,11 +1368,11 @@ static float ray_nearest_hit(BVHRayCastData *data, float *bv)
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 (ll > low) low = ll;
+ if (ll > low) low = ll;
if (lu < upper) upper = lu;
}
else {
- if (lu > low) low = lu;
+ if (lu > low) low = lu;
if (ll < upper) upper = ll;
}
@@ -1433,20 +1424,20 @@ static void dfs_raycast(BVHRayCastData *data, BVHNode *node)
data->callback(data->userdata, node->index, &data->ray, &data->hit);
}
else {
- data->hit.index = node->index;
+ data->hit.index = node->index;
data->hit.dist = dist;
madd_v3_v3v3fl(data->hit.co, data->ray.origin, data->ray.direction, dist);
}
}
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--) {
+ for (i = node->totnode - 1; i >= 0; i--) {
dfs_raycast(data, node->children[i]);
}
}
@@ -1467,19 +1458,18 @@ static void iterative_raycast(BVHRayCastData *data, BVHNode *node)
if (node->totnode == 0)
{
- if (data->callback)
+ if (data->callback) {
data->callback(data->userdata, node->index, &data->ray, &data->hit);
- else
- {
- data->hit.index = node->index;
+ }
+ else {
+ data->hit.index = node->index;
data->hit.dist = dist;
madd_v3_v3v3fl(data->hit.co, data->ray.origin, data->ray.direction, dist);
}
node = node->skip[1];
}
- else
- {
+ else {
node = node->children[0];
}
}
@@ -1490,7 +1480,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f
{
int i;
BVHRayCastData data;
- BVHNode * root = tree->nodes[tree->totleaf];
+ BVHNode *root = tree->nodes[tree->totleaf];
data.tree = tree;
@@ -1503,17 +1493,17 @@ 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) {
data.ray_dot_axis[i] = 0.0;
}
- data.index[2*i] = data.idot_axis[i] < 0.0f ? 1 : 0;
- data.index[2*i+1] = 1 - data.index[2*i];
- data.index[2*i] += 2*i;
- data.index[2*i+1] += 2*i;
+ data.index[2 * i] = data.idot_axis[i] < 0.0f ? 1 : 0;
+ data.index[2 * i + 1] = 1 - data.index[2 * i];
+ data.index[2 * i] += 2 * i;
+ data.index[2 * i + 1] += 2 * i;
}
@@ -1527,7 +1517,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f
if (root) {
dfs_raycast(&data, root);
// iterative_raycast(&data, root);
- }
+ }
if (hit)
@@ -1572,11 +1562,10 @@ float BLI_bvhtree_bb_raycast(float *bv, const float light_start[3], const float
* Allocs and fills an array with the indexs of node that are on the given spherical range (center, radius)
* Returns the size of the array.
*/
-typedef struct RangeQueryData
-{
+typedef struct RangeQueryData {
BVHTree *tree;
const float *center;
- float radius; //squared radius
+ float radius; //squared radius
int hits;
@@ -1590,7 +1579,7 @@ typedef struct RangeQueryData
static void dfs_range_query(RangeQueryData *data, BVHNode *node)
{
if (node->totnode == 0) {
-#if 0 /*UNUSED*/
+#if 0 /*UNUSED*/
//Calculate the node min-coords (if the node was a point then this is the point coordinates)
float co[3];
co[0] = node->bv[0];
@@ -1600,7 +1589,7 @@ static void dfs_range_query(RangeQueryData *data, BVHNode *node)
}
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) {
@@ -1618,12 +1607,12 @@ static void dfs_range_query(RangeQueryData *data, BVHNode *node)
int BLI_bvhtree_range_query(BVHTree *tree, const float co[3], float radius, BVHTree_RangeQuery callback, void *userdata)
{
- BVHNode * root = tree->nodes[tree->totleaf];
+ BVHNode *root = tree->nodes[tree->totleaf];
RangeQueryData data;
data.tree = tree;
data.center = co;
- data.radius = radius*radius;
+ data.radius = radius * radius;
data.hits = 0;
data.callback = callback;
diff --git a/source/blender/blenlib/intern/BLI_kdtree.c b/source/blender/blenlib/intern/BLI_kdtree.c
index a518d1445e3..4878c0f05a6 100644
--- a/source/blender/blenlib/intern/BLI_kdtree.c
+++ b/source/blender/blenlib/intern/BLI_kdtree.c
@@ -38,7 +38,7 @@
#include "BLI_kdtree.h"
#ifndef SWAP
-#define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; }
+# define SWAP(type, a, b) { type sw_ap; sw_ap = (a); (a) = (b); (b) = sw_ap; }
#endif
typedef struct KDTreeNode {
@@ -58,9 +58,9 @@ KDTree *BLI_kdtree_new(int maxsize)
{
KDTree *tree;
- tree= MEM_callocN(sizeof(KDTree), "KDTree");
- tree->nodes= MEM_callocN(sizeof(KDTreeNode)*maxsize, "KDTreeNode");
- tree->totnode= 0;
+ tree = MEM_callocN(sizeof(KDTree), "KDTree");
+ tree->nodes = MEM_callocN(sizeof(KDTreeNode) * maxsize, "KDTreeNode");
+ tree->totnode = 0;
return tree;
}
@@ -75,9 +75,9 @@ void BLI_kdtree_free(KDTree *tree)
void BLI_kdtree_insert(KDTree *tree, int index, float *co, float *nor)
{
- KDTreeNode *node= &tree->nodes[tree->totnode++];
+ KDTreeNode *node = &tree->nodes[tree->totnode++];
- node->index= index;
+ node->index = index;
copy_v3_v3(node->co, co);
if (nor) copy_v3_v3(node->nor, nor);
}
@@ -94,18 +94,18 @@ static KDTreeNode *kdtree_balance(KDTreeNode *nodes, int totnode, int axis)
return nodes;
/* quicksort style sorting around median */
- left= 0;
- right= totnode-1;
- median= totnode/2;
+ left = 0;
+ right = totnode - 1;
+ median = totnode / 2;
while (right > left) {
- co= nodes[right].co[axis];
- i= left-1;
- j= right;
+ co = nodes[right].co[axis];
+ i = left - 1;
+ j = right;
while (1) {
- while (nodes[++i].co[axis] < co);
- while (nodes[--j].co[axis] > co && j>left);
+ while (nodes[++i].co[axis] < co) ;
+ while (nodes[--j].co[axis] > co && j > left) ;
if (i >= j) break;
SWAP(KDTreeNode, nodes[i], nodes[j]);
@@ -113,32 +113,32 @@ static KDTreeNode *kdtree_balance(KDTreeNode *nodes, int totnode, int axis)
SWAP(KDTreeNode, nodes[i], nodes[right]);
if (i >= median)
- right= i-1;
+ right = i - 1;
if (i <= median)
- left= i+1;
+ left = i + 1;
}
/* set node and sort subnodes */
- node= &nodes[median];
- node->d= axis;
- node->left= kdtree_balance(nodes, median, (axis+1)%3);
- node->right= kdtree_balance(nodes+median+1, (totnode-(median+1)), (axis+1)%3);
+ node = &nodes[median];
+ node->d = axis;
+ node->left = kdtree_balance(nodes, median, (axis + 1) % 3);
+ node->right = kdtree_balance(nodes + median + 1, (totnode - (median + 1)), (axis + 1) % 3);
return node;
}
void BLI_kdtree_balance(KDTree *tree)
{
- tree->root= kdtree_balance(tree->nodes, tree->totnode, 0);
+ tree->root = kdtree_balance(tree->nodes, tree->totnode, 0);
}
static float squared_distance(const float v2[3], const float v1[3], float *UNUSED(n1), float *n2)
{
float d[3], dist;
- d[0]= v2[0]-v1[0];
- d[1]= v2[1]-v1[1];
- d[2]= v2[2]-v1[2];
+ d[0] = v2[0] - v1[0];
+ d[1] = v2[1] - v1[1];
+ d[2] = v2[2] - v1[2];
dist = dot_v3v3(d, d);
@@ -152,84 +152,84 @@ static float squared_distance(const float v2[3], const float v1[3], float *UNUSE
return dist;
}
-int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest)
+int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest)
{
KDTreeNode *root, *node, *min_node;
KDTreeNode **stack, *defaultstack[100];
float min_dist, cur_dist;
- int totstack, cur=0;
+ int totstack, cur = 0;
if (!tree->root)
return -1;
- stack= defaultstack;
- totstack= 100;
+ stack = defaultstack;
+ totstack = 100;
- root= tree->root;
- min_node= root;
- min_dist= squared_distance(root->co, co, root->nor, nor);
+ root = tree->root;
+ min_node = root;
+ min_dist = squared_distance(root->co, co, root->nor, nor);
if (co[root->d] < root->co[root->d]) {
if (root->right)
- stack[cur++]=root->right;
+ stack[cur++] = root->right;
if (root->left)
- stack[cur++]=root->left;
+ stack[cur++] = root->left;
}
else {
if (root->left)
- stack[cur++]=root->left;
+ stack[cur++] = root->left;
if (root->right)
- stack[cur++]=root->right;
+ stack[cur++] = root->right;
}
while (cur--) {
- node=stack[cur];
+ node = stack[cur];
cur_dist = node->co[node->d] - co[node->d];
- if (cur_dist<0.0f) {
- cur_dist= -cur_dist*cur_dist;
+ if (cur_dist < 0.0f) {
+ cur_dist = -cur_dist * cur_dist;
- if (-cur_dist<min_dist) {
- cur_dist=squared_distance(node->co, co, node->nor, nor);
- if (cur_dist<min_dist) {
- min_dist=cur_dist;
- min_node=node;
+ if (-cur_dist < min_dist) {
+ cur_dist = squared_distance(node->co, co, node->nor, nor);
+ if (cur_dist < min_dist) {
+ min_dist = cur_dist;
+ min_node = node;
}
if (node->left)
- stack[cur++]=node->left;
+ stack[cur++] = node->left;
}
if (node->right)
- stack[cur++]=node->right;
+ stack[cur++] = node->right;
}
else {
- cur_dist= cur_dist*cur_dist;
+ cur_dist = cur_dist * cur_dist;
- if (cur_dist<min_dist) {
- cur_dist=squared_distance(node->co, co, node->nor, nor);
- if (cur_dist<min_dist) {
- min_dist=cur_dist;
- min_node=node;
+ if (cur_dist < min_dist) {
+ cur_dist = squared_distance(node->co, co, node->nor, nor);
+ if (cur_dist < min_dist) {
+ min_dist = cur_dist;
+ min_node = node;
}
if (node->right)
- stack[cur++]=node->right;
+ stack[cur++] = node->right;
}
if (node->left)
- stack[cur++]=node->left;
+ stack[cur++] = node->left;
}
- if (cur+3 > totstack) {
- KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack");
- memcpy(temp, stack, totstack*sizeof(KDTreeNode*));
+ if (cur + 3 > totstack) {
+ KDTreeNode **temp = MEM_callocN((totstack + 100) * sizeof(KDTreeNode *), "psys_treestack");
+ memcpy(temp, stack, totstack * sizeof(KDTreeNode *));
if (stack != defaultstack)
MEM_freeN(stack);
- stack=temp;
- totstack+=100;
+ stack = temp;
+ totstack += 100;
}
}
if (nearest) {
- nearest->index= min_node->index;
- nearest->dist= sqrt(min_dist);
+ nearest->index = min_node->index;
+ nearest->dist = sqrt(min_dist);
copy_v3_v3(nearest->co, min_node->co);
}
@@ -243,98 +243,98 @@ static void add_nearest(KDTreeNearest *ptn, int *found, int n, int index, float
{
int i;
- if (*found<n) (*found)++;
+ if (*found < n) (*found)++;
- for (i=*found-1; i>0; i--) {
- if (dist >= ptn[i-1].dist)
+ for (i = *found - 1; i > 0; i--) {
+ if (dist >= ptn[i - 1].dist)
break;
else
- ptn[i]= ptn[i-1];
+ ptn[i] = ptn[i - 1];
}
- ptn[i].index= index;
- ptn[i].dist= dist;
+ ptn[i].index = index;
+ ptn[i].dist = dist;
copy_v3_v3(ptn[i].co, co);
}
/* finds the nearest n entries in tree to specified coordinates */
-int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTreeNearest *nearest)
+int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTreeNearest *nearest)
{
- KDTreeNode *root, *node= NULL;
+ KDTreeNode *root, *node = NULL;
KDTreeNode **stack, *defaultstack[100];
float cur_dist;
- int i, totstack, cur=0, found=0;
+ int i, totstack, cur = 0, found = 0;
if (!tree->root)
return 0;
- stack= defaultstack;
- totstack= 100;
+ stack = defaultstack;
+ totstack = 100;
- root= tree->root;
+ root = tree->root;
- cur_dist= squared_distance(root->co, co, root->nor, nor);
+ cur_dist = squared_distance(root->co, co, root->nor, nor);
add_nearest(nearest, &found, n, root->index, cur_dist, root->co);
if (co[root->d] < root->co[root->d]) {
if (root->right)
- stack[cur++]=root->right;
+ stack[cur++] = root->right;
if (root->left)
- stack[cur++]=root->left;
+ stack[cur++] = root->left;
}
else {
if (root->left)
- stack[cur++]=root->left;
+ stack[cur++] = root->left;
if (root->right)
- stack[cur++]=root->right;
+ stack[cur++] = root->right;
}
while (cur--) {
- node=stack[cur];
+ node = stack[cur];
cur_dist = node->co[node->d] - co[node->d];
- if (cur_dist<0.0f) {
- cur_dist= -cur_dist*cur_dist;
+ if (cur_dist < 0.0f) {
+ cur_dist = -cur_dist * cur_dist;
- if (found<n || -cur_dist<nearest[found-1].dist) {
- cur_dist=squared_distance(node->co, co, node->nor, nor);
+ if (found < n || -cur_dist < nearest[found - 1].dist) {
+ cur_dist = squared_distance(node->co, co, node->nor, nor);
- if (found<n || cur_dist<nearest[found-1].dist)
+ if (found < n || cur_dist < nearest[found - 1].dist)
add_nearest(nearest, &found, n, node->index, cur_dist, node->co);
if (node->left)
- stack[cur++]=node->left;
+ stack[cur++] = node->left;
}
if (node->right)
- stack[cur++]=node->right;
+ stack[cur++] = node->right;
}
else {
- cur_dist= cur_dist*cur_dist;
+ cur_dist = cur_dist * cur_dist;
- if (found<n || cur_dist<nearest[found-1].dist) {
- cur_dist=squared_distance(node->co, co, node->nor, nor);
- if (found<n || cur_dist<nearest[found-1].dist)
+ if (found < n || cur_dist < nearest[found - 1].dist) {
+ cur_dist = squared_distance(node->co, co, node->nor, nor);
+ if (found < n || cur_dist < nearest[found - 1].dist)
add_nearest(nearest, &found, n, node->index, cur_dist, node->co);
if (node->right)
- stack[cur++]=node->right;
+ stack[cur++] = node->right;
}
if (node->left)
- stack[cur++]=node->left;
+ stack[cur++] = node->left;
}
- if (cur+3 > totstack) {
- KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack");
- memcpy(temp, stack, totstack * sizeof(KDTreeNode*));
+ if (cur + 3 > totstack) {
+ KDTreeNode **temp = MEM_callocN((totstack + 100) * sizeof(KDTreeNode *), "psys_treestack");
+ memcpy(temp, stack, totstack * sizeof(KDTreeNode *));
if (stack != defaultstack)
MEM_freeN(stack);
- stack=temp;
- totstack+=100;
+ stack = temp;
+ totstack += 100;
}
}
- for (i=0; i<found; i++)
- nearest[i].dist= sqrt(nearest[i].dist);
+ for (i = 0; i < found; i++)
+ nearest[i].dist = sqrt(nearest[i].dist);
if (stack != defaultstack)
MEM_freeN(stack);
@@ -342,7 +342,7 @@ int BLI_kdtree_find_n_nearest(KDTree *tree, int n, float *co, float *nor, KDTree
return found;
}
-static int range_compare(const void * a, const void * b)
+static int range_compare(const void *a, const void *b)
{
const KDTreeNearest *kda = a;
const KDTreeNearest *kdb = b;
@@ -358,13 +358,13 @@ static void add_in_range(KDTreeNearest **ptn, int found, int *totfoundstack, int
{
KDTreeNearest *to;
- if (found+1 > *totfoundstack) {
- KDTreeNearest *temp=MEM_callocN((*totfoundstack+50)*sizeof(KDTreeNode), "psys_treefoundstack");
+ if (found + 1 > *totfoundstack) {
+ KDTreeNearest *temp = MEM_callocN((*totfoundstack + 50) * sizeof(KDTreeNode), "psys_treefoundstack");
memcpy(temp, *ptn, *totfoundstack * sizeof(KDTreeNearest));
if (*ptn)
MEM_freeN(*ptn);
*ptn = temp;
- *totfoundstack+=50;
+ *totfoundstack += 50;
}
to = (*ptn) + found;
@@ -375,27 +375,27 @@ static void add_in_range(KDTreeNearest **ptn, int found, int *totfoundstack, int
}
int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KDTreeNearest **nearest)
{
- KDTreeNode *root, *node= NULL;
+ KDTreeNode *root, *node = NULL;
KDTreeNode **stack, *defaultstack[100];
- KDTreeNearest *foundstack=NULL;
- float range2 = range*range, dist2;
- int totstack, cur=0, found=0, totfoundstack=0;
+ KDTreeNearest *foundstack = NULL;
+ float range2 = range * range, dist2;
+ int totstack, cur = 0, found = 0, totfoundstack = 0;
if (!tree || !tree->root)
return 0;
- stack= defaultstack;
- totstack= 100;
+ stack = defaultstack;
+ totstack = 100;
- root= tree->root;
+ root = tree->root;
if (co[root->d] + range < root->co[root->d]) {
if (root->left)
- stack[cur++]=root->left;
+ stack[cur++] = root->left;
}
else if (co[root->d] - range > root->co[root->d]) {
if (root->right)
- stack[cur++]=root->right;
+ stack[cur++] = root->right;
}
else {
dist2 = squared_distance(root->co, co, root->nor, nor);
@@ -403,21 +403,21 @@ int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KD
add_in_range(&foundstack, found++, &totfoundstack, root->index, dist2, root->co);
if (root->left)
- stack[cur++]=root->left;
+ stack[cur++] = root->left;
if (root->right)
- stack[cur++]=root->right;
+ stack[cur++] = root->right;
}
while (cur--) {
- node=stack[cur];
+ node = stack[cur];
if (co[node->d] + range < node->co[node->d]) {
if (node->left)
- stack[cur++]=node->left;
+ stack[cur++] = node->left;
}
else if (co[node->d] - range > node->co[node->d]) {
if (node->right)
- stack[cur++]=node->right;
+ stack[cur++] = node->right;
}
else {
dist2 = squared_distance(node->co, co, node->nor, nor);
@@ -425,18 +425,18 @@ int BLI_kdtree_range_search(KDTree *tree, float range, float *co, float *nor, KD
add_in_range(&foundstack, found++, &totfoundstack, node->index, dist2, node->co);
if (node->left)
- stack[cur++]=node->left;
+ stack[cur++] = node->left;
if (node->right)
- stack[cur++]=node->right;
+ stack[cur++] = node->right;
}
- if (cur+3 > totstack) {
- KDTreeNode **temp=MEM_callocN((totstack+100)*sizeof(KDTreeNode*), "psys_treestack");
- memcpy(temp, stack, totstack*sizeof(KDTreeNode*));
+ if (cur + 3 > totstack) {
+ KDTreeNode **temp = MEM_callocN((totstack + 100) * sizeof(KDTreeNode *), "psys_treestack");
+ memcpy(temp, stack, totstack * sizeof(KDTreeNode *));
if (stack != defaultstack)
MEM_freeN(stack);
- stack=temp;
- totstack+=100;
+ stack = temp;
+ totstack += 100;
}
}
diff --git a/source/blender/blenlib/intern/BLI_linklist.c b/source/blender/blenlib/intern/BLI_linklist.c
index 5c7d7089825..0e630efc349 100644
--- a/source/blender/blenlib/intern/BLI_linklist.c
+++ b/source/blender/blenlib/intern/BLI_linklist.c
@@ -38,12 +38,12 @@
int BLI_linklist_length(LinkNode *list)
{
if (0) {
- return list?(1+BLI_linklist_length(list->next)):0;
+ return list ? (1 + BLI_linklist_length(list->next)) : 0;
}
else {
int len;
- for (len=0; list; list= list->next)
+ for (len = 0; list; list = list->next)
len++;
return len;
@@ -54,7 +54,7 @@ int BLI_linklist_index(LinkNode *list, void *ptr)
{
int index;
- for (index = 0; list; list= list->next, index++)
+ for (index = 0; list; list = list->next, index++)
if (list->link == ptr)
return index;
@@ -65,7 +65,7 @@ LinkNode *BLI_linklist_find(LinkNode *list, int index)
{
int i;
- for (i = 0; list; list= list->next, i++)
+ for (i = 0; list; list = list->next, i++)
if (i == index)
return list;
@@ -74,32 +74,32 @@ LinkNode *BLI_linklist_find(LinkNode *list, int index)
void BLI_linklist_reverse(LinkNode **listp)
{
- LinkNode *rhead= NULL, *cur= *listp;
+ LinkNode *rhead = NULL, *cur = *listp;
while (cur) {
- LinkNode *next= cur->next;
+ LinkNode *next = cur->next;
- cur->next= rhead;
- rhead= cur;
+ cur->next = rhead;
+ rhead = cur;
- cur= next;
+ cur = next;
}
- *listp= rhead;
+ *listp = rhead;
}
void BLI_linklist_prepend(LinkNode **listp, void *ptr)
{
- LinkNode *nlink= MEM_mallocN(sizeof(*nlink), "nlink");
- nlink->link= ptr;
+ LinkNode *nlink = MEM_mallocN(sizeof(*nlink), "nlink");
+ nlink->link = ptr;
- nlink->next= *listp;
- *listp= nlink;
+ nlink->next = *listp;
+ *listp = nlink;
}
void BLI_linklist_append(LinkNode **listp, void *ptr)
{
- LinkNode *nlink= MEM_mallocN(sizeof(*nlink), "nlink");
+ LinkNode *nlink = MEM_mallocN(sizeof(*nlink), "nlink");
LinkNode *node = *listp;
nlink->link = ptr;
@@ -118,16 +118,16 @@ void BLI_linklist_append(LinkNode **listp, void *ptr)
void BLI_linklist_prepend_arena(LinkNode **listp, void *ptr, MemArena *ma)
{
- LinkNode *nlink= BLI_memarena_alloc(ma, sizeof(*nlink));
- nlink->link= ptr;
+ LinkNode *nlink = BLI_memarena_alloc(ma, sizeof(*nlink));
+ nlink->link = ptr;
- nlink->next= *listp;
- *listp= nlink;
+ nlink->next = *listp;
+ *listp = nlink;
}
void BLI_linklist_insert_after(LinkNode **listp, void *ptr)
{
- LinkNode *nlink= MEM_mallocN(sizeof(*nlink), "nlink");
+ LinkNode *nlink = MEM_mallocN(sizeof(*nlink), "nlink");
LinkNode *node = *listp;
nlink->link = ptr;
@@ -145,18 +145,18 @@ void BLI_linklist_insert_after(LinkNode **listp, void *ptr)
void BLI_linklist_free(LinkNode *list, LinkNodeFreeFP freefunc)
{
while (list) {
- LinkNode *next= list->next;
+ LinkNode *next = list->next;
if (freefunc)
freefunc(list->link);
MEM_freeN(list);
- list= next;
+ list = next;
}
}
void BLI_linklist_apply(LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata)
{
- for (; list; list= list->next)
+ for (; list; list = list->next)
applyfunc(list->link, userdata);
}
diff --git a/source/blender/blenlib/intern/BLI_memarena.c b/source/blender/blenlib/intern/BLI_memarena.c
index 95a007db43e..8c9993afee8 100644
--- a/source/blender/blenlib/intern/BLI_memarena.c
+++ b/source/blender/blenlib/intern/BLI_memarena.c
@@ -74,12 +74,12 @@ void BLI_memarena_use_align(struct MemArena *ma, int align)
void BLI_memarena_free(MemArena *ma)
{
- BLI_linklist_free(ma->bufs, (void(*)(void *))MEM_freeN);
+ BLI_linklist_free(ma->bufs, (void (*)(void *))MEM_freeN);
MEM_freeN(ma);
}
/* amt must be power of two */
-#define PADUP(num, amt) ((num + (amt - 1)) &~ (amt-1))
+#define PADUP(num, amt) ((num + (amt - 1)) & ~(amt - 1))
void *BLI_memarena_alloc(MemArena *ma, int size)
{
@@ -93,7 +93,7 @@ void *BLI_memarena_alloc(MemArena *ma, int size)
unsigned char *tmp;
if (size > ma->bufsize - (ma->align - 1)) {
- ma->cursize = PADUP(size+1, ma->align);
+ ma->cursize = PADUP(size + 1, ma->align);
}
else
ma->cursize = ma->bufsize;
@@ -106,7 +106,7 @@ void *BLI_memarena_alloc(MemArena *ma, int size)
BLI_linklist_prepend(&ma->bufs, ma->curbuf);
/* align alloc'ed memory (needed if align > 8) */
- tmp = (unsigned char*)PADUP( (intptr_t) ma->curbuf, ma->align);
+ tmp = (unsigned char *)PADUP( (intptr_t) ma->curbuf, ma->align);
ma->cursize -= (tmp - ma->curbuf);
ma->curbuf = tmp;
}
diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c
index 3d16b3af4de..c7e610edd9e 100644
--- a/source/blender/blenlib/intern/BLI_mempool.c
+++ b/source/blender/blenlib/intern/BLI_mempool.c
@@ -48,10 +48,10 @@
/* note: copied from BKE_utildefines.h, don't use here because we're in BLI */
#ifdef __BIG_ENDIAN__
/* Big Endian */
-# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
+# define MAKE_ID(a, b, c, d) ( (int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d) )
#else
/* Little Endian */
-# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
+# define MAKE_ID(a, b, c, d) ( (int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a) )
#endif
#define FREEWORD MAKE_ID('f', 'r', 'e', 'e')
diff --git a/source/blender/blenlib/intern/DLRB_tree.c b/source/blender/blenlib/intern/DLRB_tree.c
index 6398bd863db..bed5750ad44 100644
--- a/source/blender/blenlib/intern/DLRB_tree.c
+++ b/source/blender/blenlib/intern/DLRB_tree.c
@@ -37,7 +37,7 @@
/* Tree API */
/* Create a new tree, and initialize as necessary */
-DLRBT_Tree *BLI_dlrbTree_new (void)
+DLRBT_Tree *BLI_dlrbTree_new(void)
{
/* just allocate for now */
return MEM_callocN(sizeof(DLRBT_Tree), "DLRBT_Tree");
@@ -49,11 +49,11 @@ void BLI_dlrbTree_init(DLRBT_Tree *tree)
if (tree == NULL)
return;
- tree->first= tree->last= tree->root= NULL;
+ tree->first = tree->last = tree->root = NULL;
}
/* Helper for traversing tree and freeing sub-nodes */
-static void recursive_tree_free_nodes (DLRBT_Node *node)
+static void recursive_tree_free_nodes(DLRBT_Node *node)
{
/* sanity check */
if (node == NULL)
@@ -86,13 +86,13 @@ void BLI_dlrbTree_free(DLRBT_Tree *tree)
}
/* clear pointers */
- tree->first= tree->last= tree->root= NULL;
+ tree->first = tree->last = tree->root = NULL;
}
/* ------- */
/* Helper function - used for traversing down the tree from the root to add nodes in order */
-static void linkedlist_sync_add_node (DLRBT_Tree *tree, DLRBT_Node *node)
+static void linkedlist_sync_add_node(DLRBT_Tree *tree, DLRBT_Node *node)
{
/* sanity checks */
if ((tree == NULL) || (node == NULL))
@@ -105,7 +105,7 @@ static void linkedlist_sync_add_node (DLRBT_Tree *tree, DLRBT_Node *node)
* - must remove detach from other links first
* (for now, only clear own pointers)
*/
- node->prev= node->next= NULL;
+ node->prev = node->next = NULL;
BLI_addtail((ListBase *)tree, (Link *)node);
/* finally, add right node (and its subtree) */
@@ -120,7 +120,7 @@ void BLI_dlrbTree_linkedlist_sync(DLRBT_Tree *tree)
return;
/* clear list-base pointers so that the new list can be added properly */
- tree->first= tree->last= NULL;
+ tree->first = tree->last = NULL;
/* start adding items from the root */
linkedlist_sync_add_node(tree, tree->root);
@@ -130,10 +130,10 @@ void BLI_dlrbTree_linkedlist_sync(DLRBT_Tree *tree)
/* Tree Search Utilities */
/* Find the node which matches or is the closest to the requested node */
-DLRBT_Node *BLI_dlrbTree_search (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
+DLRBT_Node *BLI_dlrbTree_search(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
{
DLRBT_Node *node = (tree) ? tree->root : NULL;
- short found= 0;
+ short found = 0;
/* check that there is a comparator to use */
// TODO: if no comparator is supplied, try using the one supplied with the tree...
@@ -146,22 +146,22 @@ DLRBT_Node *BLI_dlrbTree_search (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, v
* NOTE: it is assumed that the values will be unit values only
*/
switch (cmp_cb(node, search_data)) {
- case -1: /* data less than node */
+ case -1: /* data less than node */
if (node->left)
- node= node->left;
+ node = node->left;
else
- found= 1;
+ found = 1;
break;
- case 1: /* data greater than node */
+ case 1: /* data greater than node */
if (node->right)
- node= node->right;
+ node = node->right;
else
- found= 1;
+ found = 1;
break;
- default: /* data equals node */
- found= 1;
+ default: /* data equals node */
+ found = 1;
break;
}
}
@@ -171,10 +171,10 @@ DLRBT_Node *BLI_dlrbTree_search (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, v
}
/* Find the node which exactly matches the required data */
-DLRBT_Node *BLI_dlrbTree_search_exact (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
+DLRBT_Node *BLI_dlrbTree_search_exact(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
{
DLRBT_Node *node = (tree) ? tree->root : NULL;
- short found= 0;
+ short found = 0;
/* check that there is a comparator to use */
// TODO: if no comparator is supplied, try using the one supplied with the tree...
@@ -182,27 +182,27 @@ 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
*/
switch (cmp_cb(node, search_data)) {
- case -1: /* data less than node */
+ case -1: /* data less than node */
if (node->left)
- node= node->left;
+ node = node->left;
else
- found= -1;
+ found = -1;
break;
- case 1: /* data greater than node */
+ case 1: /* data greater than node */
if (node->right)
- node= node->right;
+ node = node->right;
else
- found= -1;
+ found = -1;
break;
- default: /* data equals node */
- found= 1;
+ default: /* data equals node */
+ found = 1;
break;
}
}
@@ -212,7 +212,7 @@ DLRBT_Node *BLI_dlrbTree_search_exact (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp
}
/* Find the node which occurs immediately before the best matching node */
-DLRBT_Node *BLI_dlrbTree_search_prev (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
+DLRBT_Node *BLI_dlrbTree_search_prev(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
{
DLRBT_Node *node;
@@ -222,7 +222,7 @@ DLRBT_Node *BLI_dlrbTree_search_prev (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_
return NULL;
/* get the node which best matches this description */
- node= BLI_dlrbTree_search(tree, cmp_cb, search_data);
+ node = BLI_dlrbTree_search(tree, cmp_cb, search_data);
if (node) {
/* if the item we're searching for is greater than the node found, we've found the match */
@@ -239,7 +239,7 @@ DLRBT_Node *BLI_dlrbTree_search_prev (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_
}
/* Find the node which occurs immediately after the best matching node */
-DLRBT_Node *BLI_dlrbTree_search_next (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
+DLRBT_Node *BLI_dlrbTree_search_next(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *search_data)
{
DLRBT_Node *node;
@@ -249,7 +249,7 @@ DLRBT_Node *BLI_dlrbTree_search_next (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_
return NULL;
/* get the node which best matches this description */
- node= BLI_dlrbTree_search(tree, cmp_cb, search_data);
+ node = BLI_dlrbTree_search(tree, cmp_cb, search_data);
if (node) {
/* if the item we're searching for is less than the node found, we've found the match */
@@ -277,7 +277,7 @@ short BLI_dlrbTree_contains(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, void *
/* Tree Relationships Utilities */
/* get the 'grandparent' - the parent of the parent - of the given node */
-static DLRBT_Node *get_grandparent (DLRBT_Node *node)
+static DLRBT_Node *get_grandparent(DLRBT_Node *node)
{
if (node && node->parent)
return node->parent->parent;
@@ -300,7 +300,7 @@ static DLRBT_Node *get_sibling(DLRBT_Node *node)
}
/* get the 'uncle' - the sibling of the parent - of the given node */
-static DLRBT_Node *get_uncle (DLRBT_Node *node)
+static DLRBT_Node *get_uncle(DLRBT_Node *node)
{
if (node)
/* return the child of the grandparent which isn't the node's parent */
@@ -314,71 +314,71 @@ static DLRBT_Node *get_uncle (DLRBT_Node *node)
/* Tree Rotation Utilities */
/* make right child of 'root' the new root */
-static void rotate_left (DLRBT_Tree *tree, DLRBT_Node *root)
+static void rotate_left(DLRBT_Tree *tree, DLRBT_Node *root)
{
DLRBT_Node **root_slot, *pivot;
/* pivot is simply the root's right child, to become the root's parent */
- pivot= root->right;
+ pivot = root->right;
if (pivot == NULL)
return;
if (root->parent) {
if (root == root->parent->left)
- root_slot= &root->parent->left;
+ root_slot = &root->parent->left;
else
- root_slot= &root->parent->right;
+ root_slot = &root->parent->right;
}
else
- root_slot= ((DLRBT_Node**)&tree->root);//&((DLRBT_Node*)tree->root);
+ root_slot = ((DLRBT_Node **)&tree->root); //&((DLRBT_Node*)tree->root);
/* - pivot's left child becomes root's right child
* - root now becomes pivot's left child
*/
- root->right= pivot->left;
- if (pivot->left) pivot->left->parent= root;
+ root->right = pivot->left;
+ if (pivot->left) pivot->left->parent = root;
- pivot->left= root;
- pivot->parent= root->parent;
- root->parent= pivot;
+ pivot->left = root;
+ pivot->parent = root->parent;
+ root->parent = pivot;
/* make the pivot the new root */
if (root_slot)
- *root_slot= pivot;
+ *root_slot = pivot;
}
/* make the left child of the 'root' the new root */
-static void rotate_right (DLRBT_Tree *tree, DLRBT_Node *root)
+static void rotate_right(DLRBT_Tree *tree, DLRBT_Node *root)
{
DLRBT_Node **root_slot, *pivot;
/* pivot is simply the root's left child, to become the root's parent */
- pivot= root->left;
+ pivot = root->left;
if (pivot == NULL)
return;
if (root->parent) {
if (root == root->parent->left)
- root_slot= &root->parent->left;
+ root_slot = &root->parent->left;
else
- root_slot= &root->parent->right;
+ root_slot = &root->parent->right;
}
else
- root_slot= ((DLRBT_Node**)&tree->root);//&((DLRBT_Node*)tree->root);
+ root_slot = ((DLRBT_Node **)&tree->root); //&((DLRBT_Node*)tree->root);
/* - pivot's right child becomes root's left child
* - root now becomes pivot's right child
*/
- root->left= pivot->right;
- if (pivot->right) pivot->right->parent= root;
+ root->left = pivot->right;
+ if (pivot->right) pivot->right->parent = root;
- pivot->right= root;
- pivot->parent= root->parent;
- root->parent= pivot;
+ pivot->right = root;
+ pivot->parent = root->parent;
+ root->parent = pivot;
/* make the pivot the new root */
if (root_slot)
- *root_slot= pivot;
+ *root_slot = pivot;
}
/* *********************************************** */
@@ -392,41 +392,41 @@ static void insert_check_3(DLRBT_Tree *tree, DLRBT_Node *node);
/* ----- */
/* W. 1) Root must be black (so that the 2nd-generation can have a black parent) */
-static void insert_check_1 (DLRBT_Tree *tree, DLRBT_Node *node)
+static void insert_check_1(DLRBT_Tree *tree, DLRBT_Node *node)
{
if (node) {
/* if this is the root, just ensure that it is black */
if (node->parent == NULL)
- node->tree_col= DLRBT_BLACK;
+ node->tree_col = DLRBT_BLACK;
else
insert_check_2(tree, node);
}
}
/* W. 2+3) Parent of node must be black, otherwise recolor and flush */
-static void insert_check_2 (DLRBT_Tree *tree, DLRBT_Node *node)
+static void insert_check_2(DLRBT_Tree *tree, DLRBT_Node *node)
{
/* if the parent is not black, we need to change that... */
if (node && node->parent && node->parent->tree_col) {
- DLRBT_Node *unc= get_uncle(node);
+ DLRBT_Node *unc = get_uncle(node);
/* if uncle and parent are both red, need to change them to black and make
* the parent black in order to satisfy the criteria of each node having the
* same number of black nodes to its leaves
*/
if (unc && unc->tree_col) {
- DLRBT_Node *gp= get_grandparent(node);
+ DLRBT_Node *gp = get_grandparent(node);
/* make the n-1 generation nodes black */
- node->parent->tree_col= unc->tree_col= DLRBT_BLACK;
+ node->parent->tree_col = unc->tree_col = DLRBT_BLACK;
/* - make the grandparent red, so that we maintain alternating red/black property
* (it must exist, so no need to check for NULL here),
* - as the grandparent may now cause inconsistencies with the rest of the tree,
* we must flush up the tree and perform checks/rebalancing/repainting, using the
- * grandparent as the node of interest
+ * grandparent as the node of interest
*/
- gp->tree_col= DLRBT_RED;
+ gp->tree_col = DLRBT_RED;
insert_check_1(tree, gp);
}
else {
@@ -439,9 +439,9 @@ static void insert_check_2 (DLRBT_Tree *tree, DLRBT_Node *node)
}
/* W. 4+5) Perform rotation on sub-tree containing the 'new' node, then do any */
-static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node)
+static void insert_check_3(DLRBT_Tree *tree, DLRBT_Node *node)
{
- DLRBT_Node *gp= get_grandparent(node);
+ DLRBT_Node *gp = get_grandparent(node);
/* check that grandparent and node->parent exist (jut in case... really shouldn't happen on a good tree) */
if (node && node->parent && gp) {
@@ -451,11 +451,11 @@ static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node)
*/
if ((node == node->parent->right) && (node->parent == gp->left)) {
rotate_left(tree, node);
- node= node->left;
+ node = node->left;
}
else if ((node == node->parent->left) && (node->parent == gp->right)) {
rotate_right(tree, node);
- node= node->right;
+ node = node->right;
}
/* fix old parent's color-tagging, and perform rotation on the old parent in the
@@ -464,11 +464,11 @@ static void insert_check_3 (DLRBT_Tree *tree, DLRBT_Node *node)
*/
if (node) {
/* get 'new' grandparent (i.e. grandparent for old-parent (node)) */
- gp= get_grandparent(node);
+ gp = get_grandparent(node);
/* modify the coloring of the grandparent and parent so that they still satisfy the constraints */
- node->parent->tree_col= DLRBT_BLACK;
- gp->tree_col= DLRBT_RED;
+ node->parent->tree_col = DLRBT_BLACK;
+ gp->tree_col = DLRBT_RED;
/* if there are several nodes that all form a left chain, do a right rotation to correct this
* (or a rotation in the opposite direction if they all form a right chain)
@@ -493,7 +493,7 @@ void BLI_dlrbTree_insert(DLRBT_Tree *tree, DLRBT_Node *node)
return;
/* firstly, the node we just added should be red by default */
- node->tree_col= DLRBT_RED;
+ node->tree_col = DLRBT_RED;
/* start from case 1, an trek through the tail-recursive insertion checks */
insert_check_1(tree, node);
@@ -504,9 +504,9 @@ void BLI_dlrbTree_insert(DLRBT_Tree *tree, DLRBT_Node *node)
/* Add the given data to the tree, and return the node added */
// NOTE: for duplicates, the update_cb is called (if available), and the existing node is returned
DLRBT_Node *BLI_dlrbTree_add(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb,
- DLRBT_NAlloc_FP new_cb, DLRBT_NUpdate_FP update_cb, void *data)
+ DLRBT_NAlloc_FP new_cb, DLRBT_NUpdate_FP update_cb, void *data)
{
- DLRBT_Node *parNode, *node=NULL;
+ DLRBT_Node *parNode, *node = NULL;
short new_node = 0;
/* sanity checks */
@@ -522,7 +522,7 @@ DLRBT_Node *BLI_dlrbTree_add(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb,
// TODO: if no updater is supplied, try using the one supplied with the tree...
/* try to find the nearest node to this one */
- parNode= BLI_dlrbTree_search(tree, cmp_cb, data);
+ parNode = BLI_dlrbTree_search(tree, cmp_cb, data);
/* add new node to the BST in the 'standard way' as appropriate
* NOTE: we do not support duplicates in our tree...
@@ -532,49 +532,49 @@ DLRBT_Node *BLI_dlrbTree_add(DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb,
* NOTE: it is assumed that the values will be unit values only
*/
switch (cmp_cb(parNode, data)) {
- case -1: /* add new node as left child */
+ case -1: /* add new node as left child */
{
- node= new_cb(data);
- new_node= 1;
+ node = new_cb(data);
+ new_node = 1;
- parNode->left= node;
- node->parent= parNode;
+ parNode->left = node;
+ node->parent = parNode;
}
- break;
+ break;
- case 1: /* add new node as right child */
+ case 1: /* add new node as right child */
{
- node= new_cb(data);
- new_node= 1;
+ node = new_cb(data);
+ new_node = 1;
- parNode->right= node;
- node->parent= parNode;
+ parNode->right = node;
+ node->parent = parNode;
}
- break;
+ break;
- default: /* update the duplicate node as appropriate */
+ default: /* update the duplicate node as appropriate */
{
if (update_cb)
update_cb(parNode, data);
}
- break;
+ break;
}
}
else {
/* no nodes in the tree yet... add a new node as the root */
- node= new_cb(data);
- new_node= 1;
+ node = new_cb(data);
+ new_node = 1;
- tree->root= node;
+ tree->root = node;
}
/* if a new node was added, it should be tagged as red, and then balanced as appropriate */
if (new_node) {
/* tag this new node as being 'red' */
- node->tree_col= DLRBT_RED;
+ node->tree_col = DLRBT_RED;
/* perform BST balancing steps:
- * start from case 1, an trek through the tail-recursive insertion checks
+ * start from case 1, an trek through the tail-recursive insertion checks
*/
insert_check_1(tree, node);
}
diff --git a/source/blender/blenlib/intern/boxpack2d.c b/source/blender/blenlib/intern/boxpack2d.c
index f1931d35819..bf63517a4c2 100644
--- a/source/blender/blenlib/intern/boxpack2d.c
+++ b/source/blender/blenlib/intern/boxpack2d.c
@@ -56,7 +56,7 @@ typedef struct boxVert {
#define TRF 2
#define TLF 4
#define BRF 8
-#define CORNERFLAGS (BLF|TRF|TLF|BRF)
+#define CORNERFLAGS (BLF | TRF | TLF | BRF)
#define BL 0
#define TR 1
@@ -93,13 +93,13 @@ typedef struct boxVert {
BOXRIGHT(b1) - EPSILON <= BOXLEFT(b2) || \
BOXTOP(b1) - EPSILON <= BOXBOTTOM(b2))
-#define MIN2(x,y) ((x) < (y) ? (x) : (y))
-#define MAX2(x,y) ((x) > (y) ? (x) : (y))
+#define MIN2(x, y) ((x) < (y) ? (x) : (y))
+#define MAX2(x, y) ((x) > (y) ? (x) : (y))
#if 0
#define BOXDEBUG(b) \
printf("\tBox Debug i %i, w:%.3f h:%.3f x:%.3f y:%.3f\n", \
- b->index, b->w, b->h, b->x, b->y)
+ b->index, b->w, b->h, b->x, b->y)
#endif
/* qsort function - sort largest to smallest */
@@ -131,11 +131,11 @@ static int vertex_sort(const void *p1, const void *p2)
v1 = vertarray + ((int *)p1)[0];
v2 = vertarray + ((int *)p2)[0];
- a1 = MAX2(v1->x+box_width, v1->y+box_height);
- a2 = MAX2(v2->x+box_width, v2->y+box_height);
+ a1 = MAX2(v1->x + box_width, v1->y + box_height);
+ a2 = MAX2(v2->x + box_width, v2->y + box_height);
/* sort largest to smallest */
- if (a1 > a2) return 1;
+ if (a1 > a2) return 1;
else if (a1 < a2) return -1;
return 0;
}
@@ -145,11 +145,11 @@ static int vertex_sort(const void *p1, const void *p2)
* tightly into the lower left hand corner (0,0)
*
* boxarray - a pre allocated array of boxes.
- * only the 'box->x' and 'box->y' are set, 'box->w' and 'box->h' are used,
- * 'box->index' is not used at all, the only reason its there
- * is that the box array is sorted by area and programs need to be able
- * to have some way of writing the boxes back to the original data.
- * len - the number of boxes in the array.
+ * only the 'box->x' and 'box->y' are set, 'box->w' and 'box->h' are used,
+ * 'box->index' is not used at all, the only reason its there
+ * is that the box array is sorted by area and programs need to be able
+ * to have some way of writing the boxes back to the original data.
+ * len - the number of boxes in the array.
* tot_width and tot_height are set so you can normalize the data.
* */
void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *tot_height)
@@ -178,15 +178,15 @@ void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *
vert->blb = vert->brb = vert->tlb =
vert->isect_cache[0] = vert->isect_cache[1] =
vert->isect_cache[2] = vert->isect_cache[3] = NULL;
- vert->free = CORNERFLAGS &~ TRF;
+ vert->free = CORNERFLAGS & ~TRF;
vert->trb = box;
vert->index = i; i++;
box->v[BL] = vert; vert++;
- vert->trb= vert->brb = vert->tlb =
+ vert->trb = vert->brb = vert->tlb =
vert->isect_cache[0] = vert->isect_cache[1] =
vert->isect_cache[2] = vert->isect_cache[3] = NULL;
- vert->free = CORNERFLAGS &~ BLF;
+ vert->free = CORNERFLAGS & ~BLF;
vert->blb = box;
vert->index = i; i++;
box->v[TR] = vert; vert++;
@@ -194,7 +194,7 @@ void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *
vert->trb = vert->blb = vert->tlb =
vert->isect_cache[0] = vert->isect_cache[1] =
vert->isect_cache[2] = vert->isect_cache[3] = NULL;
- vert->free = CORNERFLAGS &~ BRF;
+ vert->free = CORNERFLAGS & ~BRF;
vert->brb = box;
vert->index = i; i++;
box->v[TL] = vert; vert++;
@@ -202,7 +202,7 @@ void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *
vert->trb = vert->blb = vert->brb =
vert->isect_cache[0] = vert->isect_cache[1] =
vert->isect_cache[2] = vert->isect_cache[3] = NULL;
- vert->free = CORNERFLAGS &~ TLF;
+ vert->free = CORNERFLAGS & ~TLF;
vert->tlb = box;
vert->index = i; i++;
box->v[BR] = vert; vert++;
@@ -248,7 +248,7 @@ void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *
for (i = 0; i < verts_pack_len && isect; i++) {
vert = vertarray + vertex_pack_indices[i];
/* printf("\ttesting vert %i %i %i %f %f\n", i,
- * vert->free, verts_pack_len, vert->x, vert->y); */
+ * vert->free, verts_pack_len, vert->x, vert->y); */
/* This vert has a free quadrant
* Test if we can place the box here
@@ -281,11 +281,11 @@ void BLI_box_pack_2D(BoxPack *boxarray, const int len, float *tot_width, float *
* Assume no intersection... */
isect = 0;
- if (/* Constrain boxes to positive X/Y values */
- BOXLEFT(box) < 0.0f || BOXBOTTOM(box) < 0.0f ||
- /* check for last intersected */
- ( vert->isect_cache[j] &&
- BOXINTERSECT(box, vert->isect_cache[j])))
+ if ( /* Constrain boxes to positive X/Y values */
+ BOXLEFT(box) < 0.0f || BOXBOTTOM(box) < 0.0f ||
+ /* check for last intersected */
+ (vert->isect_cache[j] &&
+ BOXINTERSECT(box, vert->isect_cache[j])))
{
/* Here we check that the last intersected
* box will intersect with this one using
diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c
index 9d3f4c4fd2f..180f83510a5 100644
--- a/source/blender/blenlib/intern/bpath.c
+++ b/source/blender/blenlib/intern/bpath.c
@@ -222,7 +222,7 @@ static int findFileRecursive(char *filename_new,
return found;
if (*filesize == -1)
- *filesize = 0; /* dir opened fine */
+ *filesize = 0; /* dir opened fine */
while ((de = readdir(dir)) != NULL) {
@@ -232,7 +232,7 @@ static int findFileRecursive(char *filename_new,
BLI_join_dirfile(path, sizeof(path), dirname, de->d_name);
if (stat(path, &status) != 0)
- continue; /* cant stat, don't bother with this file, could print debug info here */
+ continue; /* cant stat, don't bother with this file, could print debug info here */
if (S_ISREG(status.st_mode)) { /* is file */
if (strncmp(filename, de->d_name, FILE_MAX) == 0) { /* name matches */
@@ -389,29 +389,29 @@ void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
}
switch (GS(id->name)) {
- case ID_IM:
- ima= (Image *)id;
- if (ima->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) {
- if (ELEM3(ima->source, IMA_SRC_FILE, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
- rewrite_path_fixed(ima->name, visit_cb, absbase, bpath_user_data);
+ case ID_IM:
+ ima = (Image *)id;
+ if (ima->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) {
+ if (ELEM3(ima->source, IMA_SRC_FILE, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
+ rewrite_path_fixed(ima->name, visit_cb, absbase, bpath_user_data);
+ }
}
- }
- break;
- case ID_BR:
+ break;
+ case ID_BR:
{
- Brush *brush= (Brush *)id;
+ Brush *brush = (Brush *)id;
if (brush->icon_filepath[0]) {
rewrite_path_fixed(brush->icon_filepath, visit_cb, absbase, bpath_user_data);
}
}
break;
- case ID_OB:
+ case ID_OB:
#define BPATH_TRAVERSE_POINTCACHE(ptcaches) \
{ \
PointCache *cache; \
- for (cache= (ptcaches).first; cache; cache= cache->next) { \
- if (cache->flag & PTCACHE_DISK_CACHE) { \
+ for (cache = (ptcaches).first; cache; cache = cache->next) { \
+ if (cache->flag & PTCACHE_DISK_CACHE) { \
rewrite_path_fixed(cache->path, \
visit_cb, \
absbase, \
@@ -421,69 +421,69 @@ void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
} \
- {
- Object *ob= (Object *)id;
- ModifierData *md;
- ParticleSystem *psys;
+ {
+ Object *ob = (Object *)id;
+ ModifierData *md;
+ ParticleSystem *psys;
- /* do via modifiers instead */
+ /* do via modifiers instead */
#if 0
- if (ob->fluidsimSettings) {
- rewrite_path_fixed(ob->fluidsimSettings->surfdataPath, visit_cb, absbase, bpath_user_data);
- }
+ if (ob->fluidsimSettings) {
+ rewrite_path_fixed(ob->fluidsimSettings->surfdataPath, visit_cb, absbase, bpath_user_data);
+ }
#endif
- for (md= ob->modifiers.first; md; md= md->next) {
- if (md->type == eModifierType_Fluidsim) {
- FluidsimModifierData *fluidmd= (FluidsimModifierData *)md;
- if (fluidmd->fss) {
- rewrite_path_fixed(fluidmd->fss->surfdataPath, visit_cb, absbase, bpath_user_data);
+ for (md = ob->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_Fluidsim) {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)md;
+ if (fluidmd->fss) {
+ rewrite_path_fixed(fluidmd->fss->surfdataPath, visit_cb, absbase, bpath_user_data);
+ }
}
- }
- else if (md->type == eModifierType_Smoke) {
- SmokeModifierData *smd= (SmokeModifierData *)md;
- if (smd->type & MOD_SMOKE_TYPE_DOMAIN) {
- BPATH_TRAVERSE_POINTCACHE(smd->domain->ptcaches[0]);
+ else if (md->type == eModifierType_Smoke) {
+ SmokeModifierData *smd = (SmokeModifierData *)md;
+ if (smd->type & MOD_SMOKE_TYPE_DOMAIN) {
+ BPATH_TRAVERSE_POINTCACHE(smd->domain->ptcaches[0]);
+ }
+ }
+ else if (md->type == eModifierType_Cloth) {
+ ClothModifierData *clmd = (ClothModifierData *) md;
+ BPATH_TRAVERSE_POINTCACHE(clmd->ptcaches);
+ }
+ else if (md->type == eModifierType_Ocean) {
+ OceanModifierData *omd = (OceanModifierData *) md;
+ rewrite_path_fixed(omd->cachepath, visit_cb, absbase, bpath_user_data);
}
}
- else if (md->type==eModifierType_Cloth) {
- ClothModifierData *clmd= (ClothModifierData*) md;
- BPATH_TRAVERSE_POINTCACHE(clmd->ptcaches);
- }
- else if (md->type==eModifierType_Ocean) {
- OceanModifierData *omd= (OceanModifierData*) md;
- rewrite_path_fixed(omd->cachepath, visit_cb, absbase, bpath_user_data);
- }
- }
- if (ob->soft) {
- BPATH_TRAVERSE_POINTCACHE(ob->soft->ptcaches);
- }
+ if (ob->soft) {
+ BPATH_TRAVERSE_POINTCACHE(ob->soft->ptcaches);
+ }
- for (psys= ob->particlesystem.first; psys; psys= psys->next) {
- BPATH_TRAVERSE_POINTCACHE(psys->ptcaches);
+ for (psys = ob->particlesystem.first; psys; psys = psys->next) {
+ BPATH_TRAVERSE_POINTCACHE(psys->ptcaches);
+ }
}
- }
#undef BPATH_TRAVERSE_POINTCACHE
- break;
- case ID_SO:
+ break;
+ case ID_SO:
{
- bSound *sound= (bSound *)id;
+ bSound *sound = (bSound *)id;
if (sound->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) {
rewrite_path_fixed(sound->name, visit_cb, absbase, bpath_user_data);
}
}
break;
- case ID_TXT:
- if (((Text*)id)->name) {
- rewrite_path_alloc(&((Text *)id)->name, visit_cb, absbase, bpath_user_data);
- }
- break;
- case ID_VF:
+ case ID_TXT:
+ if (((Text *)id)->name) {
+ rewrite_path_alloc(&((Text *)id)->name, visit_cb, absbase, bpath_user_data);
+ }
+ break;
+ case ID_VF:
{
- VFont *vf= (VFont *)id;
+ VFont *vf = (VFont *)id;
if (vf->packedfile == NULL || (flag & BLI_BPATH_TRAVERSE_SKIP_PACKED) == 0) {
if (strcmp(vf->name, FO_BUILTIN_NAME) != 0) {
rewrite_path_fixed(((VFont *)id)->name, visit_cb, absbase, bpath_user_data);
@@ -491,7 +491,7 @@ void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
}
}
break;
- case ID_TE:
+ case ID_TE:
{
Tex *tex = (Tex *)id;
if (tex->plugin) {
@@ -505,14 +505,14 @@ void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
}
break;
- case ID_SCE:
+ case ID_SCE:
{
- Scene *scene= (Scene *)id;
+ Scene *scene = (Scene *)id;
SceneRenderLayer *srl= scene->r.layers.first;
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)) {
@@ -521,16 +521,16 @@ void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
}
else if (seq->type == SEQ_IMAGE) {
/* might want an option not to loop over all strips */
- StripElem *se= seq->strip->stripdata;
- int len= MEM_allocN_len(se) / sizeof(*se);
+ StripElem *se = seq->strip->stripdata;
+ int len = MEM_allocN_len(se) / sizeof(*se);
int i;
if (flag & BLI_BPATH_TRAVERSE_SKIP_MULTIFILE) {
/* only operate on one path */
- len= MIN2(1, len);
+ len = MIN2(1, len);
}
- for (i= 0; i < len; i++, se++) {
+ for (i = 0; i < len; i++, se++) {
rewrite_path_fixed_dirfile(seq->strip->dir, se->name,
visit_cb, absbase, bpath_user_data);
}
@@ -555,31 +555,31 @@ void BLI_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
}
}
break;
- case ID_ME:
+ case ID_ME:
{
- Mesh *me= (Mesh *)id;
+ Mesh *me = (Mesh *)id;
if (me->fdata.external) {
rewrite_path_fixed(me->fdata.external->filename, visit_cb, absbase, bpath_user_data);
}
}
break;
- case ID_LI:
+ case ID_LI:
{
- Library *lib= (Library *)id;
+ Library *lib = (Library *)id;
if (rewrite_path_fixed(lib->name, visit_cb, absbase, bpath_user_data)) {
BKE_library_filepath_set(lib, lib->name);
}
}
break;
- case ID_MC:
+ case ID_MC:
{
- MovieClip *clip= (MovieClip *)id;
+ MovieClip *clip = (MovieClip *)id;
rewrite_path_fixed(clip->name, visit_cb, absbase, bpath_user_data);
}
break;
- default:
- /* Nothing to do for other IDs that don't contain file paths. */
- break;
+ default:
+ /* Nothing to do for other IDs that don't contain file paths. */
+ break;
}
}
diff --git a/source/blender/blenlib/intern/callbacks.c b/source/blender/blenlib/intern/callbacks.c
index 876599f7480..614a9a63d90 100644
--- a/source/blender/blenlib/intern/callbacks.c
+++ b/source/blender/blenlib/intern/callbacks.c
@@ -26,21 +26,21 @@
#include "MEM_guardedalloc.h"
-static ListBase callback_slots[BLI_CB_EVT_TOT]= {{NULL}};
+static ListBase callback_slots[BLI_CB_EVT_TOT] = {{NULL}};
void BLI_callback_exec(struct Main *main, struct ID *self, eCbEvent evt)
{
- ListBase *lb= &callback_slots[evt];
+ ListBase *lb = &callback_slots[evt];
bCallbackFuncStore *funcstore;
- for (funcstore= (bCallbackFuncStore *)lb->first; funcstore; funcstore= (bCallbackFuncStore *)funcstore->next) {
+ for (funcstore = (bCallbackFuncStore *)lb->first; funcstore; funcstore = (bCallbackFuncStore *)funcstore->next) {
funcstore->func(main, self, funcstore->arg);
}
}
void BLI_callback_add(bCallbackFuncStore *funcstore, eCbEvent evt)
{
- ListBase *lb= &callback_slots[evt];
+ ListBase *lb = &callback_slots[evt];
BLI_addtail(lb, funcstore);
}
@@ -53,12 +53,12 @@ void BLI_callback_global_init(void)
void BLI_callback_global_finalize(void)
{
eCbEvent evt;
- for (evt= 0; evt < BLI_CB_EVT_TOT; evt++) {
- ListBase *lb= &callback_slots[evt];
+ for (evt = 0; evt < BLI_CB_EVT_TOT; evt++) {
+ ListBase *lb = &callback_slots[evt];
bCallbackFuncStore *funcstore;
bCallbackFuncStore *funcstore_next;
- for (funcstore= (bCallbackFuncStore *)lb->first; funcstore; funcstore= funcstore_next) {
- funcstore_next= (bCallbackFuncStore *)funcstore->next;
+ for (funcstore = (bCallbackFuncStore *)lb->first; funcstore; funcstore = funcstore_next) {
+ funcstore_next = (bCallbackFuncStore *)funcstore->next;
BLI_remlink(lb, funcstore);
if (funcstore->alloc) {
MEM_freeN(funcstore);
diff --git a/source/blender/blenlib/intern/cpu.c b/source/blender/blenlib/intern/cpu.c
index 4e2003dcbf7..d942ffdf2c9 100644
--- a/source/blender/blenlib/intern/cpu.c
+++ b/source/blender/blenlib/intern/cpu.c
@@ -34,22 +34,22 @@ int BLI_cpu_support_sse2(void)
/* for GCC x86 we check cpuid */
unsigned int d;
__asm__(
- "pushl %%ebx\n\t"
- "cpuid\n\t"
- "popl %%ebx\n\t"
- : "=d"(d)
- : "a"(1));
+ "pushl %%ebx\n\t"
+ "cpuid\n\t"
+ "popl %%ebx\n\t"
+ : "=d" (d)
+ : "a" (1));
return (d & 0x04000000) != 0;
#elif (defined(_MSC_VER) && defined(_M_IX86))
/* also check cpuid for MSVC x86 */
unsigned int d;
__asm {
xor eax, eax
- inc eax
- push ebx
+ inc eax
+ push ebx
cpuid
- pop ebx
- mov d, edx
+ pop ebx
+ mov d, edx
}
return (d & 0x04000000) != 0;
#endif
diff --git a/source/blender/blenlib/intern/dynlib.c b/source/blender/blenlib/intern/dynlib.c
index c80f3e08e3b..b66eda4f141 100644
--- a/source/blender/blenlib/intern/dynlib.c
+++ b/source/blender/blenlib/intern/dynlib.c
@@ -53,14 +53,14 @@ DynamicLibrary *BLI_dynlib_open(char *name)
void *handle;
UTF16_ENCODE(name);
- handle= LoadLibraryW(name_16);
+ handle = LoadLibraryW(name_16);
UTF16_UN_ENCODE(name);
if (!handle)
return NULL;
- lib= MEM_callocN(sizeof(*lib), "Dynamic Library");
- lib->handle= handle;
+ lib = MEM_callocN(sizeof(*lib), "Dynamic Library");
+ lib->handle = handle;
return lib;
}
@@ -75,16 +75,16 @@ char *BLI_dynlib_get_error_as_string(DynamicLibrary *lib)
int err;
/* if lib is NULL reset the last error code */
- err= GetLastError();
+ err = GetLastError();
if (!lib)
SetLastError(ERROR_SUCCESS);
if (err) {
static char buf[1024];
- if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- buf, sizeof(buf), NULL))
+ if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ buf, sizeof(buf), NULL))
{
return buf;
}
@@ -106,13 +106,13 @@ void BLI_dynlib_close(DynamicLibrary *lib)
DynamicLibrary *BLI_dynlib_open(char *name)
{
DynamicLibrary *lib;
- void *handle= dlopen(name, RTLD_LAZY);
+ void *handle = dlopen(name, RTLD_LAZY);
if (!handle)
return NULL;
- lib= MEM_callocN(sizeof(*lib), "Dynamic Library");
- lib->handle= handle;
+ lib = MEM_callocN(sizeof(*lib), "Dynamic Library");
+ lib->handle = handle;
return lib;
}
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c
index 531a4de361e..cdaf270adcb 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -41,14 +41,14 @@
#include "BLI_mempool.h"
/**************inlined code************/
-static unsigned int _ehash_hashsizes[]= {
+static unsigned int _ehash_hashsizes[] = {
1, 3, 5, 11, 17, 37, 67, 131, 257, 521, 1031, 2053, 4099, 8209,
16411, 32771, 65537, 131101, 262147, 524309, 1048583, 2097169,
4194319, 8388617, 16777259, 33554467, 67108879, 134217757,
268435459
};
-#define EDGE_HASH(v0, v1) ((v0 * 39)^(v1 * 31))
+#define EDGE_HASH(v0, v1) ((v0 * 39) ^ (v1 * 31))
/* ensure v0 is smaller */
#define EDGE_ORD(v0, v1) \
@@ -105,9 +105,9 @@ void BLI_edgehash_insert(EdgeHash *eh, unsigned int v0, unsigned int v1, void *v
e->v1 = v1;
e->val = val;
e->next = eh->buckets[hash];
- eh->buckets[hash]= e;
+ eh->buckets[hash] = e;
- if (++eh->nentries>eh->nbuckets * 3) {
+ if (++eh->nentries > eh->nbuckets * 3) {
EdgeEntry *e, **old = eh->buckets;
int i, nold = eh->nbuckets;
@@ -116,12 +116,12 @@ void BLI_edgehash_insert(EdgeHash *eh, unsigned int v0, unsigned int v1, void *v
memset(eh->buckets, 0, eh->nbuckets * sizeof(*eh->buckets));
for (i = 0; i < nold; i++) {
- for (e = old[i]; e;) {
+ for (e = old[i]; e; ) {
EdgeEntry *n = e->next;
hash = EDGE_HASH(e->v0, e->v1) % eh->nbuckets;
e->next = eh->buckets[hash];
- eh->buckets[hash]= e;
+ eh->buckets[hash] = e;
e = n;
}
@@ -150,7 +150,7 @@ void *BLI_edgehash_lookup(EdgeHash *eh, unsigned int v0, unsigned int v1)
{
void **value_p = BLI_edgehash_lookup_p(eh, v0, v1);
- return value_p?*value_p:NULL;
+ return value_p ? *value_p : NULL;
}
int BLI_edgehash_haskey(EdgeHash *eh, unsigned int v0, unsigned int v1)
@@ -167,7 +167,7 @@ void BLI_edgehash_clear(EdgeHash *eh, EdgeHashFreeFP valfreefp)
{
int i;
- for (i = 0; i<eh->nbuckets; i++) {
+ for (i = 0; i < eh->nbuckets; i++) {
EdgeEntry *e;
for (e = eh->buckets[i]; e; ) {
@@ -231,7 +231,7 @@ void BLI_edgehashIterator_getKey(EdgeHashIterator *ehi, unsigned int *v0_r, unsi
}
void *BLI_edgehashIterator_getValue(EdgeHashIterator *ehi)
{
- return ehi->curEntry?ehi->curEntry->val:NULL;
+ return ehi->curEntry ? ehi->curEntry->val : NULL;
}
void BLI_edgehashIterator_setValue(EdgeHashIterator *ehi, void *val)
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 0a5e4d9fd48..e6d06484e74 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -74,7 +74,7 @@ int BLI_file_gzip(const char *from, const char *to)
char buffer[10240];
int file;
int readsize = 0;
- int rval= 0, err;
+ int rval = 0, err;
gzFile gzfile;
/* level 1 is very close to 3 (the default) in terms of file size,
@@ -82,7 +82,7 @@ int BLI_file_gzip(const char *from, const char *to)
gzfile = BLI_gzopen(to, "wb1");
if (gzfile == NULL)
return -1;
- file = BLI_open(from, O_BINARY|O_RDONLY, 0);
+ file = BLI_open(from, O_BINARY | O_RDONLY, 0);
if (file < 0)
return -2;
@@ -90,15 +90,15 @@ int BLI_file_gzip(const char *from, const char *to)
readsize = read(file, buffer, sizeof(buffer));
if (readsize < 0) {
- rval= -2; /* error happened in reading */
+ rval = -2; /* error happened in reading */
fprintf(stderr, "Error reading file %s: %s.\n", from, strerror(errno));
break;
}
else if (readsize == 0)
- break; /* done reading */
+ break; /* done reading */
if (gzwrite(gzfile, buffer, readsize) <= 0) {
- rval= -1; /* error happened in writing */
+ rval = -1; /* error happened in writing */
fprintf(stderr, "Error writing gz file %s: %s.\n", to, gzerror(gzfile, &err));
break;
}
@@ -116,38 +116,38 @@ int BLI_file_gzip(const char *from, const char *to)
char *BLI_file_ungzip_to_mem(const char *from_file, int *size_r)
{
gzFile gzfile;
- int readsize, size, alloc_size=0;
- char *mem= NULL;
- const int chunk_size= 512*1024;
+ int readsize, size, alloc_size = 0;
+ char *mem = NULL;
+ const int chunk_size = 512 * 1024;
- size= 0;
+ size = 0;
- gzfile = BLI_gzopen( from_file, "rb" );
- for (;;) {
- if (mem==NULL) {
- mem= MEM_callocN(chunk_size, "BLI_ungzip_to_mem");
- alloc_size= chunk_size;
+ gzfile = BLI_gzopen(from_file, "rb");
+ for (;; ) {
+ if (mem == NULL) {
+ mem = MEM_callocN(chunk_size, "BLI_ungzip_to_mem");
+ alloc_size = chunk_size;
}
else {
- mem= MEM_reallocN(mem, size+chunk_size);
- alloc_size+= chunk_size;
+ mem = MEM_reallocN(mem, size + chunk_size);
+ alloc_size += chunk_size;
}
- readsize= gzread(gzfile, mem+size, chunk_size);
- if (readsize>0) {
- size+= readsize;
+ readsize = gzread(gzfile, mem + size, chunk_size);
+ if (readsize > 0) {
+ size += readsize;
}
else break;
}
- if (size==0) {
+ if (size == 0) {
MEM_freeN(mem);
- mem= NULL;
+ mem = NULL;
}
- else if (alloc_size!=size)
- mem= MEM_reallocN(mem, size);
+ else if (alloc_size != size)
+ mem = MEM_reallocN(mem, size);
- *size_r= size;
+ *size_r = size;
return mem;
}
@@ -254,14 +254,14 @@ int BLI_delete(const char *file, int dir, int recursive)
if (recursive) {
callLocalErrorCallBack("Recursive delete is unsupported on Windows");
- err= 1;
+ err = 1;
}
else if (dir) {
- err= !RemoveDirectoryW(file_16);
- if (err) printf ("Unable to remove directory");
+ err = !RemoveDirectoryW(file_16);
+ if (err) printf("Unable to remove directory");
}
else {
- err= !DeleteFileW(file_16);
+ err = !DeleteFileW(file_16);
if (err) callLocalErrorCallBack("Unable to delete file");
}
@@ -288,7 +288,7 @@ int BLI_move(const char *file, const char *to)
UTF16_ENCODE(file);
UTF16_ENCODE(str);
- err= !MoveFileW(file_16, str_16);
+ err = !MoveFileW(file_16, str_16);
UTF16_UN_ENCODE(str);
UTF16_UN_ENCODE(file);
@@ -350,7 +350,7 @@ void BLI_dir_create_recursive(const char *dirname)
* blah1/blah2 (without slash) */
BLI_strncpy(tmp, dirname, sizeof(tmp));
- lslash= BLI_last_slash(tmp);
+ lslash = BLI_last_slash(tmp);
if (lslash == tmp + strlen(tmp) - 1) {
*lslash = 0;
@@ -358,7 +358,7 @@ void BLI_dir_create_recursive(const char *dirname)
if (BLI_exists(tmp)) return;
- lslash= BLI_last_slash(tmp);
+ lslash = BLI_last_slash(tmp);
if (lslash) {
/* Split about the last slash and recurse */
*lslash = 0;
@@ -366,7 +366,7 @@ void BLI_dir_create_recursive(const char *dirname)
}
if (dirname[0]) /* patch, this recursive loop tries to create a nameless directory */
- if (umkdir(dirname)==-1)
+ if (umkdir(dirname) == -1)
printf("Unable to create directory %s\n", dirname);
}
@@ -394,7 +394,7 @@ enum {
recursiveOp_Callback_Error = 2
} recuresiveOp_Callback_Result;
-typedef int (*recursiveOp_Callback) (const char *from, const char *to);
+typedef int (*recursiveOp_Callback)(const char *from, const char *to);
/* appending of filename to dir (ensures for buffer size before appending) */
static void join_dirfile_alloc(char **dst, size_t *alloc_len, const char *dir, const char *file)
@@ -680,11 +680,11 @@ static int copy_single_file(const char *from, const char *to)
need_free = 0;
}
else {
- link_buffer = MEM_callocN(st.st_size+2, "copy_single_file link_buffer");
+ link_buffer = MEM_callocN(st.st_size + 2, "copy_single_file link_buffer");
need_free = 1;
}
- link_len = readlink(from, link_buffer, st.st_size+1);
+ link_len = readlink(from, link_buffer, st.st_size + 1);
if (link_len < 0) {
perror("readlink");
@@ -706,10 +706,10 @@ static int copy_single_file(const char *from, const char *to)
return recursiveOp_Callback_OK;
}
- else if (S_ISCHR (st.st_mode) ||
- S_ISBLK (st.st_mode) ||
- S_ISFIFO (st.st_mode) ||
- S_ISSOCK (st.st_mode))
+ else if (S_ISCHR(st.st_mode) ||
+ S_ISBLK(st.st_mode) ||
+ S_ISFIFO(st.st_mode) ||
+ S_ISSOCK(st.st_mode))
{
/* copy special type of file */
if (mknod(to, st.st_mode, st.st_rdev)) {
@@ -798,7 +798,7 @@ static char *check_destination(const char *file, const char *to)
if (!filename) {
MEM_freeN(str);
- return (char*)to;
+ return (char *)to;
}
/* skip slash */
@@ -814,7 +814,7 @@ static char *check_destination(const char *file, const char *to)
}
}
- return (char*)to;
+ return (char *)to;
}
int BLI_copy(const char *file, const char *to)
@@ -824,7 +824,7 @@ int BLI_copy(const char *file, const char *to)
ret = recursive_operation(file, actual_to, copy_callback_pre, copy_single_file, NULL);
- if (actual_to!=to)
+ if (actual_to != to)
MEM_freeN(actual_to);
return ret;
@@ -852,16 +852,16 @@ void BLI_dir_create_recursive(const char *dirname)
tmp = static_buf;
needs_free = 0;
#else
- size = strlen(dirname)+1;
+ size = strlen(dirname) + 1;
tmp = MEM_callocN(size, "BLI_dir_create_recursive tmp");
needs_free = 1;
#endif
BLI_strncpy(tmp, dirname, size);
- lslash= BLI_last_slash(tmp);
+ lslash = BLI_last_slash(tmp);
if (lslash) {
- /* Split about the last slash and recurse */
+ /* Split about the last slash and recurse */
*lslash = 0;
BLI_dir_create_recursive(tmp);
}
diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c
index d85765d8f56..da07bb156d7 100644
--- a/source/blender/blenlib/intern/freetypefont.c
+++ b/source/blender/blenlib/intern/freetypefont.c
@@ -61,12 +61,12 @@
#include "DNA_packedFile_types.h"
#include "DNA_curve_types.h"
-#define myMIN_ASCII 32
-#define myMAX_ASCII 255
+#define myMIN_ASCII 32
+#define myMAX_ASCII 255
/* local variables */
-static FT_Library library;
-static FT_Error err;
+static FT_Library library;
+static FT_Error err;
static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vfd)
@@ -82,10 +82,10 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
FT_Outline ftoutline;
float scale, height;
float dx, dy;
- int j, k, l, m=0;
+ int j, k, l, m = 0;
// adjust font size
- height= ((double) face->bbox.yMax - (double) face->bbox.yMin);
+ height = ((double) face->bbox.yMax - (double) face->bbox.yMin);
if (height != 0.0f)
scale = 1.0f / height;
else
@@ -95,8 +95,8 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
// Generate the character 3D data
//
// Get the FT Glyph index and load the Glyph
- glyph_index= FT_Get_Char_Index(face, charcode);
- err= FT_Load_Glyph(face, glyph_index, FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP);
+ glyph_index = FT_Get_Char_Index(face, charcode);
+ err = FT_Load_Glyph(face, glyph_index, FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP);
// If loading succeeded, convert the FT glyph to the internal format
if (!err) {
@@ -104,16 +104,16 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
int *onpoints;
// First we create entry for the new character to the character list
- che= (VChar *) MEM_callocN(sizeof(struct VChar), "objfnt_char");
+ che = (VChar *) MEM_callocN(sizeof(struct VChar), "objfnt_char");
BLI_addtail(&vfd->characters, che);
// Take some data for modifying purposes
- glyph= face->glyph;
- ftoutline= glyph->outline;
+ glyph = face->glyph;
+ ftoutline = glyph->outline;
// Set the width and character code
- che->index= charcode;
- che->width= glyph->advance.x * scale;
+ che->index = charcode;
+ che->width = glyph->advance.x * scale;
// Start converting the FT data
npoints = (int *)MEM_callocN((ftoutline.n_contours) * sizeof(int), "endpoints");
@@ -135,9 +135,9 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
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)
+ if (k < npoints[j] - 1) {
+ if (ftoutline.tags[l] == FT_Curve_Tag_Conic &&
+ ftoutline.tags[l + 1] == FT_Curve_Tag_Conic)
{
onpoints[j]++;
}
@@ -152,11 +152,11 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
bezt = (BezTriple *)MEM_callocN((onpoints[j]) * sizeof(BezTriple), "objfnt_bezt");
BLI_addtail(&che->nurbsbase, nu);
- nu->type= CU_BEZIER;
+ nu->type = CU_BEZIER;
nu->pntsu = onpoints[j];
- nu->resolu= 8;
- nu->flag= CU_2D;
- nu->flagu= CU_NURB_CYCLIC;
+ nu->resolu = 8;
+ nu->flag = CU_2D;
+ nu->flagu = CU_NURB_CYCLIC;
nu->bezt = bezt;
//individual curve loop, start-end
@@ -166,24 +166,24 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
//virtual conic on-curve points
if (k < npoints[j] - 1) {
- if (ftoutline.tags[l] == FT_Curve_Tag_Conic && ftoutline.tags[l+1] == FT_Curve_Tag_Conic) {
- dx = (ftoutline.points[l].x + ftoutline.points[l+1].x)* scale / 2.0f;
- dy = (ftoutline.points[l].y + ftoutline.points[l+1].y)* scale / 2.0f;
+ if (ftoutline.tags[l] == FT_Curve_Tag_Conic && ftoutline.tags[l + 1] == FT_Curve_Tag_Conic) {
+ dx = (ftoutline.points[l].x + ftoutline.points[l + 1].x) * scale / 2.0f;
+ dy = (ftoutline.points[l].y + ftoutline.points[l + 1].y) * scale / 2.0f;
//left handle
- bezt->vec[0][0] = (dx + (2 * ftoutline.points[l].x)* scale) / 3.0f;
- bezt->vec[0][1] = (dy + (2 * ftoutline.points[l].y)* scale) / 3.0f;
+ bezt->vec[0][0] = (dx + (2 * ftoutline.points[l].x) * scale) / 3.0f;
+ bezt->vec[0][1] = (dy + (2 * ftoutline.points[l].y) * scale) / 3.0f;
//midpoint (virtual on-curve point)
bezt->vec[1][0] = dx;
bezt->vec[1][1] = dy;
//right handle
- bezt->vec[2][0] = (dx + (2 * ftoutline.points[l+1].x)* scale) / 3.0f;
- bezt->vec[2][1] = (dy + (2 * ftoutline.points[l+1].y)* scale) / 3.0f;
+ bezt->vec[2][0] = (dx + (2 * ftoutline.points[l + 1].x) * scale) / 3.0f;
+ bezt->vec[2][1] = (dy + (2 * ftoutline.points[l + 1].y) * scale) / 3.0f;
- bezt->h1= bezt->h2= HD_ALIGN;
- bezt->radius= 1.0f;
+ bezt->h1 = bezt->h2 = HD_ALIGN;
+ bezt->radius = 1.0f;
bezt++;
}
}
@@ -193,76 +193,76 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
//left handle
if (k > 0) {
if (ftoutline.tags[l - 1] == FT_Curve_Tag_Cubic) {
- bezt->vec[0][0] = ftoutline.points[l-1].x* scale;
- bezt->vec[0][1] = ftoutline.points[l-1].y* scale;
- bezt->h1= HD_FREE;
+ bezt->vec[0][0] = ftoutline.points[l - 1].x * scale;
+ bezt->vec[0][1] = ftoutline.points[l - 1].y * scale;
+ bezt->h1 = HD_FREE;
}
else if (ftoutline.tags[l - 1] == FT_Curve_Tag_Conic) {
- bezt->vec[0][0] = (ftoutline.points[l].x + (2 * ftoutline.points[l - 1].x))* scale / 3.0f;
- bezt->vec[0][1] = (ftoutline.points[l].y + (2 * ftoutline.points[l - 1].y))* scale / 3.0f;
- bezt->h1= HD_FREE;
+ bezt->vec[0][0] = (ftoutline.points[l].x + (2 * ftoutline.points[l - 1].x)) * scale / 3.0f;
+ bezt->vec[0][1] = (ftoutline.points[l].y + (2 * ftoutline.points[l - 1].y)) * scale / 3.0f;
+ bezt->h1 = HD_FREE;
}
else {
- bezt->vec[0][0] = ftoutline.points[l].x* scale - (ftoutline.points[l].x - ftoutline.points[l-1].x)* scale / 3.0f;
- bezt->vec[0][1] = ftoutline.points[l].y* scale - (ftoutline.points[l].y - ftoutline.points[l-1].y)* scale / 3.0f;
- bezt->h1= HD_VECT;
+ bezt->vec[0][0] = ftoutline.points[l].x * scale - (ftoutline.points[l].x - ftoutline.points[l - 1].x) * scale / 3.0f;
+ bezt->vec[0][1] = ftoutline.points[l].y * scale - (ftoutline.points[l].y - ftoutline.points[l - 1].y) * scale / 3.0f;
+ bezt->h1 = HD_VECT;
}
}
else { //first point on curve
if (ftoutline.tags[ftoutline.contours[j]] == FT_Curve_Tag_Cubic) {
bezt->vec[0][0] = ftoutline.points[ftoutline.contours[j]].x * scale;
bezt->vec[0][1] = ftoutline.points[ftoutline.contours[j]].y * scale;
- bezt->h1= HD_FREE;
+ bezt->h1 = HD_FREE;
}
else if (ftoutline.tags[ftoutline.contours[j]] == FT_Curve_Tag_Conic) {
- bezt->vec[0][0] = (ftoutline.points[l].x + (2 * ftoutline.points[ftoutline.contours[j]].x))* scale / 3.0f;
- bezt->vec[0][1] = (ftoutline.points[l].y + (2 * ftoutline.points[ftoutline.contours[j]].y))* scale / 3.0f;
- bezt->h1= HD_FREE;
+ bezt->vec[0][0] = (ftoutline.points[l].x + (2 * ftoutline.points[ftoutline.contours[j]].x)) * scale / 3.0f;
+ bezt->vec[0][1] = (ftoutline.points[l].y + (2 * ftoutline.points[ftoutline.contours[j]].y)) * scale / 3.0f;
+ bezt->h1 = HD_FREE;
}
else {
- bezt->vec[0][0] = ftoutline.points[l].x* scale - (ftoutline.points[l].x - ftoutline.points[ftoutline.contours[j]].x)* scale / 3.0f;
- bezt->vec[0][1] = ftoutline.points[l].y* scale - (ftoutline.points[l].y - ftoutline.points[ftoutline.contours[j]].y)* scale / 3.0f;
- bezt->h1= HD_VECT;
+ bezt->vec[0][0] = ftoutline.points[l].x * scale - (ftoutline.points[l].x - ftoutline.points[ftoutline.contours[j]].x) * scale / 3.0f;
+ bezt->vec[0][1] = ftoutline.points[l].y * scale - (ftoutline.points[l].y - ftoutline.points[ftoutline.contours[j]].y) * scale / 3.0f;
+ bezt->h1 = HD_VECT;
}
}
//midpoint (on-curve point)
- bezt->vec[1][0] = ftoutline.points[l].x* scale;
- bezt->vec[1][1] = ftoutline.points[l].y* scale;
+ bezt->vec[1][0] = ftoutline.points[l].x * scale;
+ bezt->vec[1][1] = ftoutline.points[l].y * scale;
//right handle
if (k < (npoints[j] - 1)) {
- if (ftoutline.tags[l+1] == FT_Curve_Tag_Cubic) {
- bezt->vec[2][0] = ftoutline.points[l+1].x* scale;
- bezt->vec[2][1] = ftoutline.points[l+1].y* scale;
- bezt->h2= HD_FREE;
+ if (ftoutline.tags[l + 1] == FT_Curve_Tag_Cubic) {
+ bezt->vec[2][0] = ftoutline.points[l + 1].x * scale;
+ bezt->vec[2][1] = ftoutline.points[l + 1].y * scale;
+ bezt->h2 = HD_FREE;
}
- else if (ftoutline.tags[l+1] == FT_Curve_Tag_Conic) {
- bezt->vec[2][0] = (ftoutline.points[l].x + (2 * ftoutline.points[l+1].x))* scale / 3.0f;
- bezt->vec[2][1] = (ftoutline.points[l].y + (2 * ftoutline.points[l+1].y))* scale / 3.0f;
- bezt->h2= HD_FREE;
+ else if (ftoutline.tags[l + 1] == FT_Curve_Tag_Conic) {
+ bezt->vec[2][0] = (ftoutline.points[l].x + (2 * ftoutline.points[l + 1].x)) * scale / 3.0f;
+ bezt->vec[2][1] = (ftoutline.points[l].y + (2 * ftoutline.points[l + 1].y)) * scale / 3.0f;
+ bezt->h2 = HD_FREE;
}
else {
- bezt->vec[2][0] = ftoutline.points[l].x* scale - (ftoutline.points[l].x - ftoutline.points[l+1].x)* scale / 3.0f;
- bezt->vec[2][1] = ftoutline.points[l].y* scale - (ftoutline.points[l].y - ftoutline.points[l+1].y)* scale / 3.0f;
- bezt->h2= HD_VECT;
+ bezt->vec[2][0] = ftoutline.points[l].x * scale - (ftoutline.points[l].x - ftoutline.points[l + 1].x) * scale / 3.0f;
+ bezt->vec[2][1] = ftoutline.points[l].y * scale - (ftoutline.points[l].y - ftoutline.points[l + 1].y) * scale / 3.0f;
+ bezt->h2 = HD_VECT;
}
}
else { //last point on curve
if (ftoutline.tags[m] == FT_Curve_Tag_Cubic) {
- bezt->vec[2][0] = ftoutline.points[m].x* scale;
- bezt->vec[2][1] = ftoutline.points[m].y* scale;
- bezt->h2= HD_FREE;
+ bezt->vec[2][0] = ftoutline.points[m].x * scale;
+ bezt->vec[2][1] = ftoutline.points[m].y * scale;
+ bezt->h2 = HD_FREE;
}
else if (ftoutline.tags[m] == FT_Curve_Tag_Conic) {
- bezt->vec[2][0] = (ftoutline.points[l].x + (2 * ftoutline.points[m].x))* scale / 3.0f;
- bezt->vec[2][1] = (ftoutline.points[l].y + (2 * ftoutline.points[m].y))* scale / 3.0f;
- bezt->h2= HD_FREE;
+ bezt->vec[2][0] = (ftoutline.points[l].x + (2 * ftoutline.points[m].x)) * scale / 3.0f;
+ bezt->vec[2][1] = (ftoutline.points[l].y + (2 * ftoutline.points[m].y)) * scale / 3.0f;
+ bezt->h2 = HD_FREE;
}
else {
- bezt->vec[2][0] = ftoutline.points[l].x* scale - (ftoutline.points[l].x - ftoutline.points[m].x)* scale / 3.0f;
- bezt->vec[2][1] = ftoutline.points[l].y* scale - (ftoutline.points[l].y - ftoutline.points[m].y)* scale / 3.0f;
- bezt->h2= HD_VECT;
+ bezt->vec[2][0] = ftoutline.points[l].x * scale - (ftoutline.points[l].x - ftoutline.points[m].x) * scale / 3.0f;
+ bezt->vec[2][1] = ftoutline.points[l].y * scale - (ftoutline.points[l].y - ftoutline.points[m].y) * scale / 3.0f;
+ bezt->h2 = HD_VECT;
}
}
@@ -272,15 +272,15 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf
// len_squared_v2v2 again, to check the angle between the handles
// finally, check if one of them is a vector handle
if ((dist_to_line_v2(bezt->vec[0], bezt->vec[1], bezt->vec[2]) < 0.001f) &&
- (len_squared_v2v2(bezt->vec[0], bezt->vec[1]) > 0.0001f*0.0001f) &&
- (len_squared_v2v2(bezt->vec[1], bezt->vec[2]) > 0.0001f*0.0001f) &&
- (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > 0.0002f*0.0001f) &&
- (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > MAX2(len_squared_v2v2(bezt->vec[0], bezt->vec[1]), len_squared_v2v2(bezt->vec[1], bezt->vec[2]))) &&
- bezt->h1 != HD_VECT && bezt->h2 != HD_VECT)
+ (len_squared_v2v2(bezt->vec[0], bezt->vec[1]) > 0.0001f * 0.0001f) &&
+ (len_squared_v2v2(bezt->vec[1], bezt->vec[2]) > 0.0001f * 0.0001f) &&
+ (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > 0.0002f * 0.0001f) &&
+ (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > MAX2(len_squared_v2v2(bezt->vec[0], bezt->vec[1]), len_squared_v2v2(bezt->vec[1], bezt->vec[2]))) &&
+ bezt->h1 != HD_VECT && bezt->h2 != HD_VECT)
{
- bezt->h1= bezt->h2= HD_ALIGN;
+ bezt->h1 = bezt->h2 = HD_ALIGN;
}
- bezt->radius= 1.0f;
+ bezt->radius = 1.0f;
bezt++;
}
}
@@ -297,18 +297,18 @@ static int objchr_to_ftvfontdata(VFont *vfont, FT_ULong charcode)
struct TmpFont *tf;
// Find the correct FreeType font
- tf= BKE_vfont_find_tmpfont(vfont);
+ tf = BKE_vfont_find_tmpfont(vfont);
// What, no font found. Something strange here
if (!tf) return FALSE;
// Load the font to memory
if (tf->pf) {
- err= FT_New_Memory_Face(library,
- tf->pf->data,
- tf->pf->size,
- 0,
- &face);
+ err = FT_New_Memory_Face(library,
+ tf->pf->data,
+ tf->pf->size,
+ 0,
+ &face);
if (err) return FALSE;
}
else {
@@ -324,7 +324,7 @@ static int objchr_to_ftvfontdata(VFont *vfont, FT_ULong charcode)
}
-static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
+static VFontData *objfnt_to_ftvfontdata(PackedFile *pf)
{
// Variables
FT_Face face;
@@ -334,19 +334,19 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
VFontData *vfd;
#if 0
- FT_CharMap found = 0;
- FT_CharMap charmap;
+ FT_CharMap found = 0;
+ FT_CharMap charmap;
FT_UShort my_platform_id = TT_PLATFORM_MICROSOFT;
FT_UShort my_encoding_id = TT_MS_ID_UNICODE_CS;
- int n;
+ int n;
#endif
// load the freetype font
err = FT_New_Memory_Face(library,
- pf->data,
- pf->size,
- 0,
- &face );
+ pf->data,
+ pf->size,
+ 0,
+ &face);
if (err) return NULL;
@@ -355,14 +355,14 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
{
charmap = face->charmaps[n];
if (charmap->platform_id == my_platform_id &&
- charmap->encoding_id == my_encoding_id )
+ charmap->encoding_id == my_encoding_id)
{
found = charmap;
break;
}
}
- if (!found ) { return NULL; }
+ if (!found) { return NULL; }
// now, select the charmap for the face object
err = FT_Set_Charmap(face, found);
@@ -370,19 +370,19 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
#endif
// allocate blender font
- vfd= MEM_callocN(sizeof(*vfd), "FTVFontData");
+ vfd = MEM_callocN(sizeof(*vfd), "FTVFontData");
// get the name
fontname = FT_Get_Postscript_Name(face);
BLI_strncpy(vfd->name, (fontname == NULL) ? "" : fontname, sizeof(vfd->name));
// Extract the first 256 character from TTF
- lcode= charcode= FT_Get_First_Char(face, &glyph_index);
+ lcode = charcode = FT_Get_First_Char(face, &glyph_index);
// No charmap found from the ttf so we need to figure it out
if (glyph_index == 0) {
- FT_CharMap found = NULL;
- FT_CharMap charmap;
+ FT_CharMap found = NULL;
+ FT_CharMap charmap;
int n;
for (n = 0; n < face->num_charmaps; n++) {
@@ -395,10 +395,10 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
err = FT_Set_Charmap(face, found);
- if ( err )
+ if (err)
return NULL;
- lcode= charcode= FT_Get_First_Char(face, &glyph_index);
+ lcode = charcode = FT_Get_First_Char(face, &glyph_index);
}
// Load characters
@@ -419,25 +419,25 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
}
-static int check_freetypefont(PackedFile * pf)
+static int check_freetypefont(PackedFile *pf)
{
- FT_Face face;
- FT_GlyphSlot glyph;
- FT_UInt glyph_index;
+ FT_Face face;
+ FT_GlyphSlot glyph;
+ FT_UInt glyph_index;
#if 0
- FT_CharMap charmap;
- FT_CharMap found;
+ FT_CharMap charmap;
+ FT_CharMap found;
FT_UShort my_platform_id = TT_PLATFORM_MICROSOFT;
FT_UShort my_encoding_id = TT_MS_ID_UNICODE_CS;
- int n;
+ int n;
#endif
int success = 0;
- err = FT_New_Memory_Face( library,
- pf->data,
- pf->size,
- 0,
- &face );
+ err = FT_New_Memory_Face(library,
+ pf->data,
+ pf->size,
+ 0,
+ &face);
if (err) {
success = 0;
//XXX error("This is not a valid font");
@@ -445,7 +445,7 @@ static int check_freetypefont(PackedFile * pf)
else {
#if 0
- for ( n = 0; n < face->num_charmaps; n++) {
+ for (n = 0; n < face->num_charmaps; n++) {
charmap = face->charmaps[n];
if (charmap->platform_id == my_platform_id && charmap->encoding_id == my_encoding_id) {
found = charmap;
@@ -453,19 +453,19 @@ static int check_freetypefont(PackedFile * pf)
}
}
- if (!found ) { return 0; }
+ if (!found) { return 0; }
// now, select the charmap for the face object
- err = FT_Set_Charmap( face, found );
- if ( err ) { return 0; }
+ err = FT_Set_Charmap(face, found);
+ if (err) { return 0; }
#endif
- glyph_index = FT_Get_Char_Index( face, 'A' );
+ glyph_index = FT_Get_Char_Index(face, 'A');
err = FT_Load_Glyph(face, glyph_index, FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP);
if (err) success = 0;
else {
glyph = face->glyph;
- if (glyph->format == ft_glyph_format_outline ) {
+ if (glyph->format == ft_glyph_format_outline) {
success = 1;
}
else {
@@ -481,11 +481,11 @@ static int check_freetypefont(PackedFile * pf)
VFontData *BLI_vfontdata_from_freetypefont(PackedFile *pf)
{
- VFontData *vfd= NULL;
+ VFontData *vfd = NULL;
int success = 0;
//init Freetype
- err = FT_Init_FreeType( &library);
+ err = FT_Init_FreeType(&library);
if (err) {
//XXX error("Failed to load the Freetype font library");
return NULL;
@@ -494,7 +494,7 @@ VFontData *BLI_vfontdata_from_freetypefont(PackedFile *pf)
success = check_freetypefont(pf);
if (success) {
- vfd= objfnt_to_ftvfontdata(pf);
+ vfd = objfnt_to_ftvfontdata(pf);
}
//free Freetype
diff --git a/source/blender/blenlib/intern/graph.c b/source/blender/blenlib/intern/graph.c
index 432a74a5890..51d7cb58b00 100644
--- a/source/blender/blenlib/intern/graph.c
+++ b/source/blender/blenlib/intern/graph.c
@@ -38,10 +38,10 @@
-static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, int total, float axis[3], float limit, int group);
+static void testRadialSymmetry(BGraph *graph, BNode *root_node, RadialArc *ring, int total, float axis[3], float limit, int group);
static void handleAxialSymmetry(BGraph *graph, BNode *root_node, int depth, float axis[3], float limit);
-static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNode* node2, BArc* arc1, BArc* arc2, float axis[3], float limit, int group);
+static void testAxialSymmetry(BGraph *graph, BNode *root_node, BNode *node1, BNode *node2, BArc *arc1, BArc *arc2, float axis[3], float limit, int group);
static void flagAxialSymmetry(BNode *root_node, BNode *end_node, BArc *arc, int group);
void BLI_freeNode(BGraph *graph, BNode *node)
@@ -109,13 +109,13 @@ void BLI_buildAdjacencyList(BGraph *graph)
MEM_freeN(node->arcs);
}
- node->arcs = MEM_callocN((node->degree) * sizeof(BArc*), "adjacency list");
+ node->arcs = MEM_callocN((node->degree) * sizeof(BArc *), "adjacency list");
/* temporary use to indicate the first index available in the lists */
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);
}
@@ -127,7 +127,7 @@ void BLI_buildAdjacencyList(BGraph *graph)
}
}
-void BLI_rebuildAdjacencyListForNode(BGraph* graph, BNode *node)
+void BLI_rebuildAdjacencyListForNode(BGraph *graph, BNode *node)
{
BArc *arc;
@@ -135,12 +135,12 @@ void BLI_rebuildAdjacencyListForNode(BGraph* graph, BNode *node)
MEM_freeN(node->arcs);
}
- node->arcs = MEM_callocN((node->degree) * sizeof(BArc*), "adjacency list");
+ node->arcs = MEM_callocN((node->degree) * sizeof(BArc *), "adjacency list");
/* temporary use to indicate the first index available in the lists */
node->flag = 0;
- for (arc = graph->arcs.first; arc; arc= arc->next) {
+ for (arc = graph->arcs.first; arc; arc = arc->next) {
if (arc->head == node) {
addArcToNodeAdjacencyList(arc->head, arc);
}
@@ -249,7 +249,7 @@ void BLI_removeDoubleNodes(BGraph *graph, float limit)
}
-BNode * BLI_FindNodeByPosition(BGraph *graph, float *p, float limit)
+BNode *BLI_FindNodeByPosition(BGraph *graph, const float p[3], const float limit)
{
BNode *closest_node = NULL, *node;
float min_distance = 0.0f;
@@ -343,7 +343,7 @@ static int detectCycle(BNode *node, BArc *src_arc)
return value;
}
-int BLI_isGraphCyclic(BGraph *graph)
+int BLI_isGraphCyclic(BGraph *graph)
{
BNode *node;
int value = 0;
@@ -364,7 +364,7 @@ int BLI_isGraphCyclic(BGraph *graph)
return value;
}
-BArc * BLI_findConnectedArc(BGraph *graph, BArc *arc, BNode *v)
+BArc *BLI_findConnectedArc(BGraph *graph, BArc *arc, BNode *v)
{
BArc *nextArc;
@@ -476,7 +476,7 @@ void BLI_mirrorAlongAxis(float v[3], float center[3], float axis[3])
add_v3_v3(v, pv);
}
-static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, int total, float axis[3], float limit, int group)
+static void testRadialSymmetry(BGraph *graph, BNode *root_node, RadialArc *ring, int total, float axis[3], float limit, int group)
{
int symmetric = 1;
int i;
@@ -707,7 +707,7 @@ static void flagAxialSymmetry(BNode *root_node, BNode *end_node, BArc *arc, int
}
}
-static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNode* node2, BArc* arc1, BArc* arc2, float axis[3], float limit, int group)
+static void testAxialSymmetry(BGraph *graph, BNode *root_node, BNode *node1, BNode *node2, BArc *arc1, BArc *arc2, float axis[3], float limit, int group)
{
float nor[3], vec[3], p[3];
@@ -962,21 +962,21 @@ void BLI_markdownSymmetry(BGraph *graph, BNode *root_node, float limit)
}
}
-void* IT_head(void* arg)
+void *IT_head(void *arg)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
return iter->head(iter);
}
-void* IT_tail(void* arg)
+void *IT_tail(void *arg)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
return iter->tail(iter);
}
-void* IT_peek(void* arg, int n)
+void *IT_peek(void *arg, int n)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
if (iter->index + n < 0) {
return iter->head(iter);
@@ -989,26 +989,26 @@ void* IT_peek(void* arg, int n)
}
}
-void* IT_next(void* arg)
+void *IT_next(void *arg)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
return iter->next(iter);
}
-void* IT_nextN(void* arg, int n)
+void *IT_nextN(void *arg, int n)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
return iter->nextN(iter, n);
}
-void* IT_previous(void* arg)
+void *IT_previous(void *arg)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
return iter->previous(iter);
}
-int IT_stopped(void* arg)
+int IT_stopped(void *arg)
{
- BArcIterator *iter = (BArcIterator*)arg;
+ BArcIterator *iter = (BArcIterator *)arg;
return iter->stopped(iter);
}
diff --git a/source/blender/blenlib/intern/gsqueue.c b/source/blender/blenlib/intern/gsqueue.c
index 2aa51387c48..d569534f2f3 100644
--- a/source/blender/blenlib/intern/gsqueue.c
+++ b/source/blender/blenlib/intern/gsqueue.c
@@ -40,31 +40,31 @@ struct _GSQueueElem {
};
struct _GSQueue {
- GSQueueElem *head;
- GSQueueElem *tail;
- int elem_size;
+ GSQueueElem *head;
+ GSQueueElem *tail;
+ int elem_size;
};
GSQueue *BLI_gsqueue_new(int elem_size)
{
- GSQueue *gq= MEM_mallocN(sizeof(*gq), "gqueue_new");
- gq->head= gq->tail= NULL;
- gq->elem_size= elem_size;
+ GSQueue *gq = MEM_mallocN(sizeof(*gq), "gqueue_new");
+ gq->head = gq->tail = NULL;
+ gq->elem_size = elem_size;
return gq;
}
int BLI_gsqueue_is_empty(GSQueue *gq)
{
- return (gq->head==NULL);
+ return (gq->head == NULL);
}
int BLI_gsqueue_size(GSQueue *gq)
{
GSQueueElem *elem;
- int size= 0;
+ int size = 0;
- for (elem=gq->head; elem; elem=elem->next)
+ for (elem = gq->head; elem; elem = elem->next)
size++;
return size;
@@ -76,12 +76,12 @@ void BLI_gsqueue_peek(GSQueue *gq, void *item_r)
}
void BLI_gsqueue_pop(GSQueue *gq, void *item_r)
{
- GSQueueElem *elem= gq->head;
- if (elem==gq->tail) {
- gq->head= gq->tail= NULL;
+ GSQueueElem *elem = gq->head;
+ if (elem == gq->tail) {
+ gq->head = gq->tail = NULL;
}
else {
- gq->head= gq->head->next;
+ gq->head = gq->head->next;
}
if (item_r) memcpy(item_r, &elem[1], gq->elem_size);
@@ -93,31 +93,31 @@ void BLI_gsqueue_push(GSQueue *gq, void *item)
/* compare: prevent events added double in row */
if (!BLI_gsqueue_is_empty(gq)) {
- if (0==memcmp(item, &gq->head[1], gq->elem_size))
+ if (0 == memcmp(item, &gq->head[1], gq->elem_size))
return;
}
- elem= MEM_mallocN(sizeof(*elem)+gq->elem_size, "gqueue_push");
+ elem = MEM_mallocN(sizeof(*elem) + gq->elem_size, "gqueue_push");
memcpy(&elem[1], item, gq->elem_size);
- elem->next= NULL;
+ elem->next = NULL;
if (BLI_gsqueue_is_empty(gq)) {
- gq->tail= gq->head= elem;
+ gq->tail = gq->head = elem;
}
else {
- gq->tail= gq->tail->next= elem;
+ gq->tail = gq->tail->next = elem;
}
}
void BLI_gsqueue_pushback(GSQueue *gq, void *item)
{
- GSQueueElem *elem= MEM_mallocN(sizeof(*elem)+gq->elem_size, "gqueue_push");
+ GSQueueElem *elem = MEM_mallocN(sizeof(*elem) + gq->elem_size, "gqueue_push");
memcpy(&elem[1], item, gq->elem_size);
- elem->next= gq->head;
+ elem->next = gq->head;
if (BLI_gsqueue_is_empty(gq)) {
- gq->head= gq->tail= elem;
+ gq->head = gq->tail = elem;
}
else {
- gq->head= elem;
+ gq->head = elem;
}
}
diff --git a/source/blender/blenlib/intern/jitter.c b/source/blender/blenlib/intern/jitter.c
index afe31fb1377..6203a98828b 100644
--- a/source/blender/blenlib/intern/jitter.c
+++ b/source/blender/blenlib/intern/jitter.c
@@ -43,41 +43,41 @@ void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1)
int i, j, k;
float vecx, vecy, dvecx, dvecy, x, y, len;
- for (i = 2*num-2; i>=0 ; i-=2) {
+ for (i = 2 * num - 2; i >= 0; i -= 2) {
dvecx = dvecy = 0.0;
x = jit1[i];
- y = jit1[i+1];
- for (j = 2*num-2; j>=0 ; j-=2) {
+ y = jit1[i + 1];
+ for (j = 2 * num - 2; j >= 0; j -= 2) {
if (i != j) {
vecx = jit1[j] - x - 1.0f;
- vecy = jit1[j+1] - y - 1.0f;
- for (k = 3; k>0 ; k--) {
- if ( fabsf(vecx)<rad1 && fabsf(vecy)<rad1) {
- len= sqrt(vecx*vecx + vecy*vecy);
- if (len>0 && len<rad1) {
- len= len/rad1;
- dvecx += vecx/len;
- dvecy += vecy/len;
+ vecy = jit1[j + 1] - y - 1.0f;
+ for (k = 3; k > 0; k--) {
+ if (fabsf(vecx) < rad1 && fabsf(vecy) < rad1) {
+ len = sqrt(vecx * vecx + vecy * vecy);
+ if (len > 0 && len < rad1) {
+ len = len / rad1;
+ dvecx += vecx / len;
+ dvecy += vecy / len;
}
}
vecx += 1.0f;
- if ( fabsf(vecx)<rad1 && fabsf(vecy)<rad1) {
- len= sqrt(vecx*vecx + vecy*vecy);
- if (len>0 && len<rad1) {
- len= len/rad1;
- dvecx += vecx/len;
- dvecy += vecy/len;
+ if (fabsf(vecx) < rad1 && fabsf(vecy) < rad1) {
+ len = sqrt(vecx * vecx + vecy * vecy);
+ if (len > 0 && len < rad1) {
+ len = len / rad1;
+ dvecx += vecx / len;
+ dvecy += vecy / len;
}
}
vecx += 1.0f;
- if ( fabsf(vecx)<rad1 && fabsf(vecy)<rad1) {
- len= sqrt(vecx*vecx + vecy*vecy);
- if (len>0 && len<rad1) {
- len= len/rad1;
- dvecx += vecx/len;
- dvecy += vecy/len;
+ if (fabsf(vecx) < rad1 && fabsf(vecy) < rad1) {
+ len = sqrt(vecx * vecx + vecy * vecy);
+ if (len > 0 && len < rad1) {
+ len = len / rad1;
+ dvecx += vecx / len;
+ dvecy += vecy / len;
}
}
vecx -= 2.0f;
@@ -86,12 +86,12 @@ void BLI_jitterate1(float *jit1, float *jit2, int num, float rad1)
}
}
- x -= dvecx/18.0f;
- y -= dvecy/18.0f;
+ x -= dvecx / 18.0f;
+ y -= dvecy / 18.0f;
x -= floorf(x);
y -= floorf(y);
jit2[i] = x;
- jit2[i+1] = y;
+ jit2[i + 1] = y;
}
memcpy(jit1, jit2, 2 * num * sizeof(float));
}
@@ -101,36 +101,36 @@ void BLI_jitterate2(float *jit1, float *jit2, int num, float rad2)
int i, j;
float vecx, vecy, dvecx, dvecy, x, y;
- for (i=2*num -2; i>= 0 ; i-=2) {
+ for (i = 2 * num - 2; i >= 0; i -= 2) {
dvecx = dvecy = 0.0;
x = jit1[i];
- y = jit1[i+1];
- for (j =2*num -2; j>= 0 ; j-=2) {
+ y = jit1[i + 1];
+ for (j = 2 * num - 2; j >= 0; j -= 2) {
if (i != j) {
vecx = jit1[j] - x - 1.0f;
- vecy = jit1[j+1] - y - 1.0f;
+ vecy = jit1[j + 1] - y - 1.0f;
- if ( fabsf(vecx)<rad2) dvecx+= vecx*rad2;
+ if (fabsf(vecx) < rad2) dvecx += vecx * rad2;
vecx += 1.0f;
- if ( fabsf(vecx)<rad2) dvecx+= vecx*rad2;
+ if (fabsf(vecx) < rad2) dvecx += vecx * rad2;
vecx += 1.0f;
- if ( fabsf(vecx)<rad2) dvecx+= vecx*rad2;
+ if (fabsf(vecx) < rad2) dvecx += vecx * rad2;
- if ( fabsf(vecy)<rad2) dvecy+= vecy*rad2;
+ if (fabsf(vecy) < rad2) dvecy += vecy * rad2;
vecy += 1.0f;
- if ( fabsf(vecy)<rad2) dvecy+= vecy*rad2;
+ if (fabsf(vecy) < rad2) dvecy += vecy * rad2;
vecy += 1.0f;
- if ( fabsf(vecy)<rad2) dvecy+= vecy*rad2;
+ if (fabsf(vecy) < rad2) dvecy += vecy * rad2;
}
}
- x -= dvecx/2.0f;
- y -= dvecy/2.0f;
+ x -= dvecx / 2.0f;
+ y -= dvecy / 2.0f;
x -= floorf(x);
y -= floorf(y);
jit2[i] = x;
- jit2[i+1] = y;
+ jit2[i + 1] = y;
}
memcpy(jit1, jit2, 2 * num * sizeof(float));
}
@@ -141,23 +141,23 @@ void BLI_jitter_init(float *jitarr, int num)
float *jit2, x, rad1, rad2, rad3;
int i;
- if (num==0) return;
+ if (num == 0) return;
- jit2= MEM_mallocN(12 + 2*sizeof(float)*num, "initjit");
- rad1= 1.0f/sqrtf((float)num);
- rad2= 1.0f/((float)num);
- rad3= sqrtf((float)num)/((float)num);
+ jit2 = MEM_mallocN(12 + 2 * sizeof(float) * num, "initjit");
+ rad1 = 1.0f / sqrtf((float)num);
+ rad2 = 1.0f / ((float)num);
+ rad3 = sqrtf((float)num) / ((float)num);
BLI_srand(31415926 + num);
- x= 0;
- for (i=0; i<2*num; i+=2) {
- jitarr[i]= x+ rad1*(float)(0.5-BLI_drand());
- jitarr[i+1]= ((float)i/2)/num +rad1*(float)(0.5-BLI_drand());
- x+= rad3;
+ x = 0;
+ for (i = 0; i < 2 * num; i += 2) {
+ jitarr[i] = x + rad1 * (float)(0.5 - BLI_drand());
+ jitarr[i + 1] = ((float)i / 2) / num + rad1 * (float)(0.5 - BLI_drand());
+ x += rad3;
x -= floorf(x);
}
- for (i=0 ; i<24 ; i++) {
+ for (i = 0; i < 24; i++) {
BLI_jitterate1(jitarr, jit2, num, rad1);
BLI_jitterate1(jitarr, jit2, num, rad1);
BLI_jitterate2(jitarr, jit2, num, rad2);
@@ -166,9 +166,9 @@ void BLI_jitter_init(float *jitarr, int num)
MEM_freeN(jit2);
/* finally, move jittertab to be centered around (0,0) */
- for (i=0; i<2*num; i+=2) {
+ for (i = 0; i < 2 * num; i += 2) {
jitarr[i] -= 0.5f;
- jitarr[i+1] -= 0.5f;
+ jitarr[i + 1] -= 0.5f;
}
}
diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c
index 19cae7456c9..8fe9a94b466 100644
--- a/source/blender/blenlib/intern/listbase.c
+++ b/source/blender/blenlib/intern/listbase.c
@@ -47,23 +47,23 @@
/* Ripped this from blender.c */
void BLI_movelisttolist(ListBase *dst, ListBase *src)
{
- if (src->first==NULL) return;
+ if (src->first == NULL) return;
- if (dst->first==NULL) {
- dst->first= src->first;
- dst->last= src->last;
+ if (dst->first == NULL) {
+ dst->first = src->first;
+ dst->last = src->last;
}
else {
- ((Link *)dst->last)->next= src->first;
- ((Link *)src->first)->prev= dst->last;
- dst->last= src->last;
+ ((Link *)dst->last)->next = src->first;
+ ((Link *)src->first)->prev = dst->last;
+ dst->last = src->last;
}
- src->first= src->last= NULL;
+ src->first = src->last = NULL;
}
void BLI_addhead(ListBase *listbase, void *vlink)
{
- Link *link= vlink;
+ Link *link = vlink;
if (link == NULL) return;
if (listbase == NULL) return;
@@ -79,7 +79,7 @@ void BLI_addhead(ListBase *listbase, void *vlink)
void BLI_addtail(ListBase *listbase, void *vlink)
{
- Link *link= vlink;
+ Link *link = vlink;
if (link == NULL) return;
if (listbase == NULL) return;
@@ -95,7 +95,7 @@ void BLI_addtail(ListBase *listbase, void *vlink)
void BLI_remlink(ListBase *listbase, void *vlink)
{
- Link *link= vlink;
+ Link *link = vlink;
if (link == NULL) return;
if (listbase == NULL) return;
@@ -121,7 +121,7 @@ int BLI_remlink_safe(ListBase *listbase, void *vlink)
void BLI_freelinkN(ListBase *listbase, void *vlink)
{
- Link *link= vlink;
+ Link *link = vlink;
if (link == NULL) return;
if (listbase == NULL) return;
@@ -133,8 +133,8 @@ void BLI_freelinkN(ListBase *listbase, void *vlink)
void BLI_insertlink(ListBase *listbase, void *vprevlink, void *vnewlink)
{
- Link *prevlink= vprevlink;
- Link *newlink= vnewlink;
+ Link *prevlink = vprevlink;
+ Link *newlink = vnewlink;
/* newlink comes after prevlink */
if (newlink == NULL) return;
@@ -143,28 +143,28 @@ void BLI_insertlink(ListBase *listbase, void *vprevlink, void *vnewlink)
/* empty list */
if (listbase->first == NULL) {
- listbase->first= newlink;
- listbase->last= newlink;
+ listbase->first = newlink;
+ listbase->last = newlink;
return;
}
/* insert before first element */
if (prevlink == NULL) {
- newlink->next= listbase->first;
- newlink->prev= NULL;
- newlink->next->prev= newlink;
- listbase->first= newlink;
+ newlink->next = listbase->first;
+ newlink->prev = NULL;
+ newlink->next->prev = newlink;
+ listbase->first = newlink;
return;
}
/* at end of list */
- if (listbase->last== prevlink)
+ if (listbase->last == prevlink)
listbase->last = newlink;
- newlink->next= prevlink->next;
- prevlink->next= newlink;
- if (newlink->next) newlink->next->prev= newlink;
- newlink->prev= prevlink;
+ newlink->next = prevlink->next;
+ prevlink->next = newlink;
+ if (newlink->next) newlink->next->prev = newlink;
+ newlink->prev = prevlink;
}
/* This uses insertion sort, so NOT ok for large list */
@@ -195,8 +195,8 @@ void BLI_sortlist(ListBase *listbase, int (*cmp)(void *, void *))
void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink)
{
- Link *prevlink= vprevlink;
- Link *newlink= vnewlink;
+ Link *prevlink = vprevlink;
+ Link *newlink = vnewlink;
/* newlink before nextlink */
if (newlink == NULL) return;
@@ -204,8 +204,8 @@ void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink)
/* empty list */
if (listbase->first == NULL) {
- listbase->first= newlink;
- listbase->last= newlink;
+ listbase->first = newlink;
+ listbase->last = newlink;
return;
}
@@ -230,8 +230,8 @@ void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink)
void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink)
{
- Link *nextlink= vnextlink;
- Link *newlink= vnewlink;
+ Link *nextlink = vnextlink;
+ Link *newlink = vnewlink;
/* newlink before nextlink */
if (newlink == NULL) return;
@@ -239,28 +239,28 @@ void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink)
/* empty list */
if (listbase->first == NULL) {
- listbase->first= newlink;
- listbase->last= newlink;
+ listbase->first = newlink;
+ listbase->last = newlink;
return;
}
/* insert at end of list */
if (nextlink == NULL) {
- newlink->prev= listbase->last;
- newlink->next= NULL;
- ((Link *)listbase->last)->next= newlink;
- listbase->last= newlink;
+ newlink->prev = listbase->last;
+ newlink->next = NULL;
+ ((Link *)listbase->last)->next = newlink;
+ listbase->last = newlink;
return;
}
/* at beginning of list */
- if (listbase->first== nextlink)
+ if (listbase->first == nextlink)
listbase->first = newlink;
- newlink->next= nextlink;
- newlink->prev= nextlink->prev;
- nextlink->prev= newlink;
- if (newlink->prev) newlink->prev->next= newlink;
+ newlink->next = nextlink;
+ newlink->prev = nextlink->prev;
+ nextlink->prev = newlink;
+ if (newlink->prev) newlink->prev->next = newlink;
}
@@ -271,15 +271,15 @@ void BLI_freelist(ListBase *listbase)
if (listbase == NULL)
return;
- link= listbase->first;
+ link = listbase->first;
while (link) {
- next= link->next;
+ next = link->next;
free(link);
- link= next;
+ link = next;
}
- listbase->first= NULL;
- listbase->last= NULL;
+ listbase->first = NULL;
+ listbase->last = NULL;
}
void BLI_freelistN(ListBase *listbase)
@@ -288,15 +288,15 @@ void BLI_freelistN(ListBase *listbase)
if (listbase == NULL) return;
- link= listbase->first;
+ link = listbase->first;
while (link) {
- next= link->next;
+ next = link->next;
MEM_freeN(link);
- link= next;
+ link = next;
}
- listbase->first= NULL;
- listbase->last= NULL;
+ listbase->first = NULL;
+ listbase->last = NULL;
}
@@ -309,7 +309,7 @@ int BLI_countlist(const ListBase *listbase)
link = listbase->first;
while (link) {
count++;
- link= link->next;
+ link = link->next;
}
}
return count;
@@ -347,19 +347,19 @@ void *BLI_rfindlink(const ListBase *listbase, int number)
int BLI_findindex(const ListBase *listbase, void *vlink)
{
- Link *link= NULL;
- int number= 0;
+ Link *link = NULL;
+ int number = 0;
if (listbase == NULL) return -1;
if (vlink == NULL) return -1;
- link= listbase->first;
+ link = listbase->first;
while (link) {
if (link == vlink)
return number;
number++;
- link= link->next;
+ link = link->next;
}
return -1;
@@ -367,15 +367,15 @@ int BLI_findindex(const ListBase *listbase, void *vlink)
void *BLI_findstring(const ListBase *listbase, const char *id, const int offset)
{
- Link *link= NULL;
+ Link *link = NULL;
const char *id_iter;
if (listbase == NULL) return NULL;
- for (link= listbase->first; link; link= link->next) {
- id_iter= ((const char *)link) + offset;
+ for (link = listbase->first; link; link = link->next) {
+ id_iter = ((const char *)link) + offset;
- if (id[0] == id_iter[0] && strcmp(id, id_iter)==0) {
+ if (id[0] == id_iter[0] && strcmp(id, id_iter) == 0) {
return link;
}
}
@@ -385,15 +385,15 @@ void *BLI_findstring(const ListBase *listbase, const char *id, const int offset)
/* same as above but find reverse */
void *BLI_rfindstring(const ListBase *listbase, const char *id, const int offset)
{
- Link *link= NULL;
+ Link *link = NULL;
const char *id_iter;
if (listbase == NULL) return NULL;
- for (link= listbase->last; link; link= link->prev) {
- id_iter= ((const char *)link) + offset;
+ for (link = listbase->last; link; link = link->prev) {
+ id_iter = ((const char *)link) + offset;
- if (id[0] == id_iter[0] && strcmp(id, id_iter)==0) {
+ if (id[0] == id_iter[0] && strcmp(id, id_iter) == 0) {
return link;
}
}
@@ -403,16 +403,16 @@ void *BLI_rfindstring(const ListBase *listbase, const char *id, const int offset
void *BLI_findstring_ptr(const ListBase *listbase, const char *id, const int offset)
{
- Link *link= NULL;
+ Link *link = NULL;
const char *id_iter;
if (listbase == NULL) return NULL;
- for (link= listbase->first; link; link= link->next) {
+ for (link = listbase->first; link; link = link->next) {
/* exact copy of BLI_findstring(), except for this line */
- id_iter= *((const char **)(((const char *)link) + offset));
+ id_iter = *((const char **)(((const char *)link) + offset));
- if (id[0] == id_iter[0] && strcmp(id, id_iter)==0) {
+ if (id[0] == id_iter[0] && strcmp(id, id_iter) == 0) {
return link;
}
}
@@ -422,16 +422,16 @@ void *BLI_findstring_ptr(const ListBase *listbase, const char *id, const int off
/* same as above but find reverse */
void *BLI_rfindstring_ptr(const ListBase *listbase, const char *id, const int offset)
{
- Link *link= NULL;
+ Link *link = NULL;
const char *id_iter;
if (listbase == NULL) return NULL;
- for (link= listbase->last; link; link= link->prev) {
+ for (link = listbase->last; link; link = link->prev) {
/* exact copy of BLI_rfindstring(), except for this line */
- id_iter= *((const char **)(((const char *)link) + offset));
+ id_iter = *((const char **)(((const char *)link) + offset));
- if (id[0] == id_iter[0] && strcmp(id, id_iter)==0) {
+ if (id[0] == id_iter[0] && strcmp(id, id_iter) == 0) {
return link;
}
}
@@ -441,20 +441,20 @@ void *BLI_rfindstring_ptr(const ListBase *listbase, const char *id, const int of
int BLI_findstringindex(const ListBase *listbase, const char *id, const int offset)
{
- Link *link= NULL;
+ Link *link = NULL;
const char *id_iter;
- int i= 0;
+ int i = 0;
if (listbase == NULL) return -1;
- link= listbase->first;
+ link = listbase->first;
while (link) {
- id_iter= ((const char *)link) + offset;
+ id_iter = ((const char *)link) + offset;
- if (id[0] == id_iter[0] && strcmp(id, id_iter)==0)
+ if (id[0] == id_iter[0] && strcmp(id, id_iter) == 0)
return i;
i++;
- link= link->next;
+ link = link->next;
}
return -1;
@@ -465,19 +465,19 @@ void BLI_duplicatelist(ListBase *dst, const ListBase *src)
struct Link *dst_link, *src_link;
/* in this order, to ensure it works if dst == src */
- src_link= src->first;
- dst->first= dst->last= NULL;
+ src_link = src->first;
+ dst->first = dst->last = NULL;
while (src_link) {
- dst_link= MEM_dupallocN(src_link);
+ dst_link = MEM_dupallocN(src_link);
BLI_addtail(dst, dst_link);
- src_link= src_link->next;
+ src_link = src_link->next;
}
}
/* create a generic list node containing link to provided data */
-LinkData *BLI_genericNodeN (void *data)
+LinkData *BLI_genericNodeN(void *data)
{
LinkData *ld;
@@ -485,8 +485,8 @@ LinkData *BLI_genericNodeN (void *data)
return NULL;
/* create new link, and make it hold the given data */
- ld= MEM_callocN(sizeof(LinkData), "BLI_genericNodeN()");
- ld->data= data;
+ ld = MEM_callocN(sizeof(LinkData), "BLI_genericNodeN()");
+ ld->data = data;
return ld;
}
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index a81656d7ded..3962f53862d 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -429,23 +429,23 @@ int isect_line_sphere_v3(const float l1[3], const float l2[3],
*/
const float ldir[3] = {
- l2[0] - l1[0],
- l2[1] - l1[1],
- l2[2] - l1[2]
+ l2[0] - l1[0],
+ l2[1] - l1[1],
+ l2[2] - l1[2]
};
const float a = dot_v3v3(ldir, ldir);
const float b = 2.0f *
- (ldir[0] * (l1[0] - sp[0]) +
- ldir[1] * (l1[1] - sp[1]) +
- ldir[2] * (l1[2] - sp[2]));
+ (ldir[0] * (l1[0] - sp[0]) +
+ ldir[1] * (l1[1] - sp[1]) +
+ ldir[2] * (l1[2] - sp[2]));
const float c =
- dot_v3v3(sp, sp) +
- dot_v3v3(l1, l1) -
- (2.0f * dot_v3v3(sp, l1)) -
- (r * r);
+ dot_v3v3(sp, sp) +
+ dot_v3v3(l1, l1) -
+ (2.0f * dot_v3v3(sp, l1)) -
+ (r * r);
const float i = b * b - 4.0f * a * c;
@@ -490,14 +490,14 @@ int isect_line_sphere_v2(const float l1[2], const float l2[2],
const float a = dot_v2v2(ldir, ldir);
const float b = 2.0f *
- (ldir[0] * (l1[0] - sp[0]) +
- ldir[1] * (l1[1] - sp[1]));
+ (ldir[0] * (l1[0] - sp[0]) +
+ ldir[1] * (l1[1] - sp[1]));
const float c =
- dot_v2v2(sp, sp) +
- dot_v2v2(l1, l1) -
- (2.0f * dot_v2v2(sp, l1)) -
- (r * r);
+ dot_v2v2(sp, sp) +
+ dot_v2v2(l1, l1) -
+ (2.0f * dot_v2v2(sp, l1)) -
+ (r * r);
const float i = b * b - 4.0f * a * c;
@@ -1738,9 +1738,9 @@ void axis_dominant_v3(int *axis_a, int *axis_b, const float axis[3])
const float yn = fabsf(axis[1]);
const float zn = fabsf(axis[2]);
- if (zn >= xn && zn >= yn) { *axis_a= 0; *axis_b = 1; }
- else if (yn >= xn && yn >= zn) { *axis_a= 0; *axis_b = 2; }
- else { *axis_a= 1; *axis_b = 2; }
+ if (zn >= xn && zn >= yn) { *axis_a = 0; *axis_b = 1; }
+ else if (yn >= xn && yn >= zn) { *axis_a = 0; *axis_b = 2; }
+ else { *axis_a = 1; *axis_b = 2; }
}
static float tri_signed_area(const float v1[3], const float v2[3], const float v3[3], const int i, const int j)
@@ -2323,7 +2323,7 @@ void box_minmax_bounds_m4(float min[3], float max[3], float boundbox[2][3], floa
vec[2] = (a & 4) ? boundbox[0][2] : boundbox[1][2];
mul_m4_v3(mat, vec);
- DO_MINMAX(vec, mn, mx);
+ minmax_v3v3_v3(mn, mx, vec);
}
copy_v3_v3(min, mn);
diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c
index 37402f9391c..066c9e7cd15 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -1691,12 +1691,13 @@ void quat_apply_track(float quat[4], short axis, short upflag)
{
/* rotations are hard coded to match vec_to_quat */
const float quat_track[][4] = {
- {0.70710676908493, 0.0, -0.70710676908493, 0.0}, /* pos-y90 */
- {0.5, 0.5, 0.5, 0.5}, /* Quaternion((1,0,0), radians(90)) * Quaternion((0,1,0), radians(90)) */
- {0.70710676908493, 0.0, 0.0, 0.70710676908493}, /* pos-z90 */
- {0.70710676908493, 0.0, 0.70710676908493, 0.0}, /* neg-y90 */
- {0.5, -0.5, -0.5, 0.5}, /* Quaternion((1,0,0), radians(-90)) * Quaternion((0,1,0), radians(-90)) */
- {-3.0908619663705394e-08, 0.70710676908493, 0.70710676908493, 3.0908619663705394e-08}}; /* no rotation */
+ {0.70710676908493, 0.0, -0.70710676908493, 0.0}, /* pos-y90 */
+ {0.5, 0.5, 0.5, 0.5}, /* Quaternion((1,0,0), radians(90)) * Quaternion((0,1,0), radians(90)) */
+ {0.70710676908493, 0.0, 0.0, 0.70710676908493}, /* pos-z90 */
+ {0.70710676908493, 0.0, 0.70710676908493, 0.0}, /* neg-y90 */
+ {0.5, -0.5, -0.5, 0.5}, /* Quaternion((1,0,0), radians(-90)) * Quaternion((0,1,0), radians(-90)) */
+ {-3.0908619663705394e-08, 0.70710676908493, 0.70710676908493, 3.0908619663705394e-08} /* no rotation */
+ };
assert(axis >= 0 && axis <= 5);
assert(upflag >= 0 && upflag <= 2);
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index ef8f26e3780..56188048c02 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -458,6 +458,14 @@ MINLINE void negate_v4_v4(float r[4], const float a[4])
r[3] = -a[3];
}
+/* could add more... */
+MINLINE void negate_v3_short(short r[3])
+{
+ r[0] = -r[0];
+ r[1] = -r[1];
+ r[2] = -r[2];
+}
+
MINLINE float dot_v2v2(const float a[2], const float b[2])
{
return a[0] * b[0] + a[1] * b[1];
diff --git a/source/blender/blenlib/intern/noise.c b/source/blender/blenlib/intern/noise.c
index d795f9bf332..f591dc17f5b 100644
--- a/source/blender/blenlib/intern/noise.c
+++ b/source/blender/blenlib/intern/noise.c
@@ -45,10 +45,10 @@ static float noise3_perlin(float vec[3]);
//static float turbulence_perlin(float *point, float lofreq, float hifreq);
//static float turbulencep(float noisesize, float x, float y, float z, int nr);
-#define HASHVEC(x, y, z) hashvectf + 3 * hash[ (hash[ (hash[(z) & 255] + (y)) & 255] + (x)) & 255]
+#define HASHVEC(x, y, z) hashvectf + 3 * hash[(hash[(hash[(z) & 255] + (y)) & 255] + (x)) & 255]
/* needed for voronoi */
-#define HASHPNT(x, y, z) hashpntf + 3 * hash[ (hash[ (hash[(z) & 255] + (y)) & 255] + (x)) & 255]
+#define HASHPNT(x, y, z) hashpntf + 3 * hash[(hash[(hash[(z) & 255] + (y)) & 255] + (x)) & 255]
static float hashpntf[768] = {
0.536902, 0.020915, 0.501445, 0.216316, 0.517036, 0.822466, 0.965315,
0.377313, 0.678764, 0.744545, 0.097731, 0.396357, 0.247202, 0.520897,
@@ -162,7 +162,7 @@ static float hashpntf[768] = {
0.114246, 0.905043, 0.713870, 0.555261, 0.951333
};
-unsigned char hash[512]= {
+unsigned char hash[512] = {
0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE, 0x95, 0x2E, 0xDC,
0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32, 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63,
0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7, 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80,
@@ -193,7 +193,7 @@ unsigned char hash[512]= {
};
-float hashvectf[768]= {
+float hashvectf[768] = {
0.33783, 0.715698, -0.611206, -0.944031, -0.326599, -0.045624, -0.101074, -0.416443, -0.903503, 0.799286, 0.49411,
-0.341949, -0.854645, 0.518036, 0.033936, 0.42514, -0.437866, -0.792114, -0.358948, 0.597046, 0.717377, -0.985413,
0.144714, 0.089294, -0.601776, -0.33728, -0.723907, -0.449921, 0.594513, 0.666382, 0.208313, -0.10791, 0.972076,
@@ -263,7 +263,7 @@ float hashvectf[768]= {
0.196045, -0.982941, 0.164307, -0.082245, 0.233734, -0.97226, -0.005005, -0.747253, -0.611328, 0.260437, 0.645599,
0.592773, 0.481384, 0.117706, -0.949524, -0.29068, -0.535004, -0.791901, -0.294312, -0.627167, -0.214447, 0.748718,
-0.047974, -0.813477, -0.57959, -0.175537, 0.477264, -0.860992, 0.738556, -0.414246, -0.53183, 0.562561, -0.704071,
-0.433289, -0.754944, 0.64801, -0.100586, 0.114716, 0.044525, -0.992371, 0.966003, 0.244873, -0.082764,
+ 0.433289, -0.754944, 0.64801, -0.100586, 0.114716, 0.044525, -0.992371, 0.966003, 0.244873, -0.082764,
};
/**************************/
@@ -272,28 +272,28 @@ float hashvectf[768]= {
static float lerp(float t, float a, float b)
{
- return (a+t*(b-a));
+ return (a + t * (b - a));
}
static float npfade(float t)
{
- return (t*t*t*(t*(t*6.0f-15.0f)+10.0f));
+ return (t * t * t * (t * (t * 6.0f - 15.0f) + 10.0f));
}
static float grad(int hash, float x, float y, float z)
{
int h = hash & 15; // CONVERT LO 4 BITS OF HASH CODE
- float u = h<8 ? x : y, // INTO 12 GRADIENT DIRECTIONS.
- v = h<4 ? y : h==12||h==14 ? x : z;
- return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v);
+ float u = h < 8 ? x : y, // INTO 12 GRADIENT DIRECTIONS.
+ v = h < 4 ? y : h == 12 || h == 14 ? x : z;
+ return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
}
/* instead of adding another permutation array, just use hash table defined above */
static float newPerlin(float x, float y, float z)
{
int A, AA, AB, B, BA, BB;
- float u=floor(x), v=floor(y), w=floor(z);
- int X=((int)u) & 255, Y=((int)v) & 255, Z=((int)w) & 255; // FIND UNIT CUBE THAT CONTAINS POINT
+ float u = floor(x), v = floor(y), w = floor(z);
+ int X = ((int)u) & 255, Y = ((int)v) & 255, Z = ((int)w) & 255; // FIND UNIT CUBE THAT CONTAINS POINT
x -= u; // FIND RELATIVE X,Y,Z
y -= v; // OF POINT IN CUBE.
z -= w;
@@ -315,7 +315,7 @@ static float newPerlin(float x, float y, float z)
/* for use with BLI_gNoise()/BLI_gTurbulence(), returns unsigned improved perlin noise */
static float newPerlinU(float x, float y, float z)
{
- return (0.5f+0.5f*newPerlin(x, y, z));
+ return (0.5f + 0.5f * newPerlin(x, y, z));
}
@@ -328,92 +328,92 @@ static float orgBlenderNoise(float x, float y, float z)
{
register float cn1, cn2, cn3, cn4, cn5, cn6, i, *h;
float fx, fy, fz, ox, oy, oz, jx, jy, jz;
- float n= 0.5;
+ float n = 0.5;
int ix, iy, iz, b00, b01, b10, b11, b20, b21;
- fx= floor(x);
- fy= floor(y);
- fz= floor(z);
-
- ox= x- fx;
- oy= y- fy;
- oz= z- fz;
-
- ix= (int)fx;
- iy= (int)fy;
- iz= (int)fz;
-
- jx= ox-1;
- jy= oy-1;
- jz= oz-1;
-
- cn1=ox*ox; cn2=oy*oy; cn3=oz*oz;
- cn4=jx*jx; cn5=jy*jy; cn6=jz*jz;
-
- cn1= 1.0f-3.0f*cn1+2.0f*cn1*ox;
- cn2= 1.0f-3.0f*cn2+2.0f*cn2*oy;
- cn3= 1.0f-3.0f*cn3+2.0f*cn3*oz;
- cn4= 1.0f-3.0f*cn4-2.0f*cn4*jx;
- cn5= 1.0f-3.0f*cn5-2.0f*cn5*jy;
- cn6= 1.0f-3.0f*cn6-2.0f*cn6*jz;
-
- b00= hash[ hash[ix & 255]+(iy & 255)];
- b10= hash[ hash[(ix+1) & 255]+(iy & 255)];
- b01= hash[ hash[ix & 255]+((iy+1) & 255)];
- b11= hash[ hash[(ix+1) & 255]+((iy+1) & 255)];
-
- b20=iz & 255; b21= (iz+1) & 255;
-
- /* 0 */
- i= (cn1*cn2*cn3);
- h=hashvectf+ 3*hash[b20+b00];
- n+= i*(h[0]*ox+h[1]*oy+h[2]*oz);
- /* 1 */
- i= (cn1*cn2*cn6);
- h=hashvectf+ 3*hash[b21+b00];
- n+= i*(h[0]*ox+h[1]*oy+h[2]*jz);
- /* 2 */
- i= (cn1*cn5*cn3);
- h=hashvectf+ 3*hash[b20+b01];
- n+= i*(h[0]*ox+h[1]*jy+h[2]*oz);
- /* 3 */
- i= (cn1*cn5*cn6);
- h=hashvectf+ 3*hash[b21+b01];
- n+= i*(h[0]*ox+h[1]*jy+h[2]*jz);
- /* 4 */
- i= cn4*cn2*cn3;
- h=hashvectf+ 3*hash[b20+b10];
- n+= i*(h[0]*jx+h[1]*oy+h[2]*oz);
- /* 5 */
- i= cn4*cn2*cn6;
- h=hashvectf+ 3*hash[b21+b10];
- n+= i*(h[0]*jx+h[1]*oy+h[2]*jz);
- /* 6 */
- i= cn4*cn5*cn3;
- h=hashvectf+ 3*hash[b20+b11];
- n+= i*(h[0]*jx+h[1]*jy+h[2]*oz);
- /* 7 */
- i= (cn4*cn5*cn6);
- h=hashvectf+ 3*hash[b21+b11];
- n+= i*(h[0]*jx+h[1]*jy+h[2]*jz);
-
- if (n<0.0f) n=0.0f; else if (n>1.0f) n=1.0f;
+ fx = floor(x);
+ fy = floor(y);
+ fz = floor(z);
+
+ ox = x - fx;
+ oy = y - fy;
+ oz = z - fz;
+
+ ix = (int)fx;
+ iy = (int)fy;
+ iz = (int)fz;
+
+ jx = ox - 1;
+ jy = oy - 1;
+ jz = oz - 1;
+
+ cn1 = ox * ox; cn2 = oy * oy; cn3 = oz * oz;
+ cn4 = jx * jx; cn5 = jy * jy; cn6 = jz * jz;
+
+ cn1 = 1.0f - 3.0f * cn1 + 2.0f * cn1 * ox;
+ cn2 = 1.0f - 3.0f * cn2 + 2.0f * cn2 * oy;
+ cn3 = 1.0f - 3.0f * cn3 + 2.0f * cn3 * oz;
+ cn4 = 1.0f - 3.0f * cn4 - 2.0f * cn4 * jx;
+ cn5 = 1.0f - 3.0f * cn5 - 2.0f * cn5 * jy;
+ cn6 = 1.0f - 3.0f * cn6 - 2.0f * cn6 * jz;
+
+ b00 = hash[hash[ix & 255] + (iy & 255)];
+ b10 = hash[hash[(ix + 1) & 255] + (iy & 255)];
+ b01 = hash[hash[ix & 255] + ((iy + 1) & 255)];
+ b11 = hash[hash[(ix + 1) & 255] + ((iy + 1) & 255)];
+
+ b20 = iz & 255; b21 = (iz + 1) & 255;
+
+ /* 0 */
+ i = (cn1 * cn2 * cn3);
+ h = hashvectf + 3 * hash[b20 + b00];
+ n += i * (h[0] * ox + h[1] * oy + h[2] * oz);
+ /* 1 */
+ i = (cn1 * cn2 * cn6);
+ h = hashvectf + 3 * hash[b21 + b00];
+ n += i * (h[0] * ox + h[1] * oy + h[2] * jz);
+ /* 2 */
+ i = (cn1 * cn5 * cn3);
+ h = hashvectf + 3 * hash[b20 + b01];
+ n += i * (h[0] * ox + h[1] * jy + h[2] * oz);
+ /* 3 */
+ i = (cn1 * cn5 * cn6);
+ h = hashvectf + 3 * hash[b21 + b01];
+ n += i * (h[0] * ox + h[1] * jy + h[2] * jz);
+ /* 4 */
+ i = cn4 * cn2 * cn3;
+ h = hashvectf + 3 * hash[b20 + b10];
+ n += i * (h[0] * jx + h[1] * oy + h[2] * oz);
+ /* 5 */
+ i = cn4 * cn2 * cn6;
+ h = hashvectf + 3 * hash[b21 + b10];
+ n += i * (h[0] * jx + h[1] * oy + h[2] * jz);
+ /* 6 */
+ i = cn4 * cn5 * cn3;
+ h = hashvectf + 3 * hash[b20 + b11];
+ n += i * (h[0] * jx + h[1] * jy + h[2] * oz);
+ /* 7 */
+ i = (cn4 * cn5 * cn6);
+ h = hashvectf + 3 * hash[b21 + b11];
+ n += i * (h[0] * jx + h[1] * jy + h[2] * jz);
+
+ if (n < 0.0f) n = 0.0f; else if (n > 1.0f) n = 1.0f;
return n;
}
/* as orgBlenderNoise(), returning signed noise */
static float orgBlenderNoiseS(float x, float y, float z)
{
- return (2.0f*orgBlenderNoise(x, y, z)-1.0f);
+ return (2.0f * orgBlenderNoise(x, y, z) - 1.0f);
}
/* separated from orgBlenderNoise above, with scaling */
float BLI_hnoise(float noisesize, float x, float y, float z)
{
- if (noisesize==0.0f) return 0.0f;
- x= (1.0f+x)/noisesize;
- y= (1.0f+y)/noisesize;
- z= (1.0f+z)/noisesize;
+ if (noisesize == 0.0f) return 0.0f;
+ x = (1.0f + x) / noisesize;
+ y = (1.0f + y) / noisesize;
+ z = (1.0f + z) / noisesize;
return orgBlenderNoise(x, y, z);
}
@@ -421,53 +421,54 @@ float BLI_hnoise(float noisesize, float x, float y, float z)
/* original turbulence functions */
float BLI_turbulence(float noisesize, float x, float y, float z, int nr)
{
- float s, d= 0.5, div=1.0;
+ float s, d = 0.5, div = 1.0;
- s= BLI_hnoise(noisesize, x, y, z);
+ s = BLI_hnoise(noisesize, x, y, z);
- while (nr>0) {
+ while (nr > 0) {
- s+= d*BLI_hnoise(noisesize*d, x, y, z);
- div+= d;
- d*= 0.5f;
+ s += d * BLI_hnoise(noisesize * d, x, y, z);
+ div += d;
+ d *= 0.5f;
nr--;
}
- return s/div;
+ return s / div;
}
float BLI_turbulence1(float noisesize, float x, float y, float z, int nr)
{
- float s, d= 0.5, div=1.0;
+ float s, d = 0.5, div = 1.0;
- s= fabsf((-1.0f + 2.0f * BLI_hnoise(noisesize, x, y, z)));
+ s = fabsf((-1.0f + 2.0f * BLI_hnoise(noisesize, x, y, z)));
- while (nr>0) {
+ while (nr > 0) {
- s+= fabsf(d* (-1.0f+2.0f*BLI_hnoise(noisesize*d, x, y, z)));
- div+= d;
- d*= 0.5f;
+ s += fabsf(d * (-1.0f + 2.0f * BLI_hnoise(noisesize * d, x, y, z)));
+ div += d;
+ d *= 0.5f;
nr--;
}
- return s/div;
+ return s / div;
}
/* ********************* FROM PERLIN HIMSELF: ******************** */
-static char p[512+2]= {
-0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57,
-0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D,
-0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D,
-0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D,
-0xA2,0xA0,0x19,0x3B,0xF8,0xEB,0xAA,0xEE,0xF3,0x1C,0x67,0x28,0x1D,0xED,0x0,0xDE,0x95,0x2E,0xDC,0x3F,0x3A,0x82,0x35,0x4D,0x6C,0xBA,0x36,0xD0,0xF6,0xC,0x79,0x32,0xD1,0x59,0xF4,0x8,0x8B,0x63,0x89,0x2F,0xB8,0xB4,0x97,0x83,0xF2,0x8F,0x18,0xC7,0x51,0x14,0x65,0x87,0x48,0x20,0x42,0xA8,0x80,0xB5,0x40,0x13,0xB2,0x22,0x7E,0x57,
-0xBC,0x7F,0x6B,0x9D,0x86,0x4C,0xC8,0xDB,0x7C,0xD5,0x25,0x4E,0x5A,0x55,0x74,0x50,0xCD,0xB3,0x7A,0xBB,0xC3,0xCB,0xB6,0xE2,0xE4,0xEC,0xFD,0x98,0xB,0x96,0xD3,0x9E,0x5C,0xA1,0x64,0xF1,0x81,0x61,0xE1,0xC4,0x24,0x72,0x49,0x8C,0x90,0x4B,0x84,0x34,0x38,0xAB,0x78,0xCA,0x1F,0x1,0xD7,0x93,0x11,0xC1,0x58,0xA9,0x31,0xF9,0x44,0x6D,
-0xBF,0x33,0x9C,0x5F,0x9,0x94,0xA3,0x85,0x6,0xC6,0x9A,0x1E,0x7B,0x46,0x15,0x30,0x27,0x2B,0x1B,0x71,0x3C,0x5B,0xD6,0x6F,0x62,0xAC,0x4F,0xC2,0xC0,0xE,0xB1,0x23,0xA7,0xDF,0x47,0xB0,0x77,0x69,0x5,0xE9,0xE6,0xE7,0x76,0x73,0xF,0xFE,0x6E,0x9B,0x56,0xEF,0x12,0xA5,0x37,0xFC,0xAE,0xD9,0x3,0x8E,0xDD,0x10,0xB9,0xCE,0xC9,0x8D,
-0xDA,0x2A,0xBD,0x68,0x17,0x9F,0xBE,0xD4,0xA,0xCC,0xD2,0xE8,0x43,0x3D,0x70,0xB7,0x2,0x7D,0x99,0xD8,0xD,0x60,0x8A,0x4,0x2C,0x3E,0x92,0xE5,0xAF,0x53,0x7,0xE0,0x29,0xA6,0xC5,0xE3,0xF5,0xF7,0x4A,0x41,0x26,0x6A,0x16,0x5E,0x52,0x2D,0x21,0xAD,0xF0,0x91,0xFF,0xEA,0x54,0xFA,0x66,0x1A,0x45,0x39,0xCF,0x75,0xA4,0x88,0xFB,0x5D,
-0xA2,0xA0};
+static char p[512 + 2] = {
+ 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE, 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32, 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7, 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57,
+ 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50, 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E, 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34, 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D,
+ 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30, 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23, 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B, 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D,
+ 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7, 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0, 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD, 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D,
+ 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE, 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32, 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7, 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57,
+ 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50, 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E, 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34, 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D,
+ 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30, 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23, 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B, 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D,
+ 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7, 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0, 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD, 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D,
+ 0xA2, 0xA0
+};
-static float g[512+2][3]= {
+static float g[512 + 2][3] = {
{0.33783, 0.715698, -0.611206},
{-0.944031, -0.326599, -0.045624},
{-0.101074, -0.416443, -0.903503},
@@ -1005,15 +1006,15 @@ static float noise3_perlin(float vec[3])
SETUP(vec[1], by0, by1, ry0, ry1);
SETUP(vec[2], bz0, bz1, rz0, rz1);
- i = p[ bx0 ];
- j = p[ bx1 ];
+ i = p[bx0];
+ j = p[bx1];
- b00 = p[ i + by0 ];
- b10 = p[ j + by0 ];
- b01 = p[ i + by1 ];
- b11 = p[ j + by1 ];
+ b00 = p[i + by0];
+ b10 = p[j + by0];
+ b01 = p[i + by1];
+ b11 = p[j + by1];
-#define VALUE_AT(rx,ry,rz) (rx * q[0] + ry * q[1] + rz * q[2])
+#define VALUE_AT(rx, ry, rz) (rx * q[0] + ry * q[1] + rz * q[2])
#define SURVE(t) (t * t * (3.0f - 2.0f * t))
/* lerp moved to improved perlin above */
@@ -1023,30 +1024,30 @@ static float noise3_perlin(float vec[3])
sz = SURVE(rz0);
- q = g[ b00 + bz0 ];
- u = VALUE_AT(rx0,ry0,rz0);
- q = g[ b10 + bz0 ];
- v = VALUE_AT(rx1,ry0,rz0);
+ q = g[b00 + bz0];
+ u = VALUE_AT(rx0, ry0, rz0);
+ q = g[b10 + bz0];
+ v = VALUE_AT(rx1, ry0, rz0);
a = lerp(sx, u, v);
- q = g[ b01 + bz0 ];
- u = VALUE_AT(rx0,ry1,rz0);
- q = g[ b11 + bz0 ];
- v = VALUE_AT(rx1,ry1,rz0);
+ q = g[b01 + bz0];
+ u = VALUE_AT(rx0, ry1, rz0);
+ q = g[b11 + bz0];
+ v = VALUE_AT(rx1, ry1, rz0);
b = lerp(sx, u, v);
c = lerp(sy, a, b); /* interpolate in y at lo x */
- q = g[ b00 + bz1 ];
- u = VALUE_AT(rx0,ry0,rz1);
- q = g[ b10 + bz1 ];
- v = VALUE_AT(rx1,ry0,rz1);
+ q = g[b00 + bz1];
+ u = VALUE_AT(rx0, ry0, rz1);
+ q = g[b10 + bz1];
+ v = VALUE_AT(rx1, ry0, rz1);
a = lerp(sx, u, v);
- q = g[ b01 + bz1 ];
- u = VALUE_AT(rx0,ry1,rz1);
- q = g[ b11 + bz1 ];
- v = VALUE_AT(rx1,ry1,rz1);
+ q = g[b01 + bz1];
+ u = VALUE_AT(rx0, ry1, rz1);
+ q = g[b11 + bz1];
+ v = VALUE_AT(rx1, ry1, rz1);
b = lerp(sx, u, v);
d = lerp(sy, a, b); /* interpolate in y at hi x */
@@ -1067,7 +1068,7 @@ static float turbulence_perlin(float *point, float lofreq, float hifreq)
p[2] = point[2];
t = 0;
- for (freq = lofreq ; freq < hifreq ; freq *= 2.0) {
+ for (freq = lofreq; freq < hifreq; freq *= 2.0) {
t += fabsf(noise3_perlin(p)) / freq;
p[0] *= 2.0f;
p[1] *= 2.0f;
@@ -1096,7 +1097,7 @@ static float orgPerlinNoiseU(float x, float y, float z)
v[0] = x;
v[1] = y;
v[2] = z;
- return (0.5f+0.5f*noise3_perlin(v));
+ return (0.5f + 0.5f * noise3_perlin(v));
}
/* *************** CALL AS: *************** */
@@ -1105,9 +1106,9 @@ float BLI_hnoisep(float noisesize, float x, float y, float z)
{
float vec[3];
- vec[0]= x/noisesize;
- vec[1]= y/noisesize;
- vec[2]= z/noisesize;
+ vec[0] = x / noisesize;
+ vec[1] = y / noisesize;
+ vec[2] = z / noisesize;
return noise3_perlin(vec);
}
@@ -1117,11 +1118,11 @@ static float turbulencep(float noisesize, float x, float y, float z, int nr)
{
float vec[3];
- vec[0]= x/noisesize;
- vec[1]= y/noisesize;
- vec[2]= z/noisesize;
+ vec[0] = x / noisesize;
+ vec[1] = y / noisesize;
+ vec[2] = z / noisesize;
nr++;
- return turbulence_perlin(vec, 1.0, (float)(1<<nr));
+ return turbulence_perlin(vec, 1.0, (float)(1 << nr));
}
#endif
@@ -1133,11 +1134,17 @@ static float turbulencep(float noisesize, float x, float y, float z, int nr)
/* Camberra omitted, didn't seem useful */
/* distance squared */
-static float dist_Squared(float x, float y, float z, float e) { (void)e; return (x*x + y*y + z*z); }
+static float dist_Squared(float x, float y, float z, float e) {
+ (void)e; return (x * x + y * y + z * z);
+}
/* real distance */
-static float dist_Real(float x, float y, float z, float e) { (void)e; return sqrtf(x*x + y*y + z*z); }
+static float dist_Real(float x, float y, float z, float e) {
+ (void)e; return sqrtf(x * x + y * y + z * z);
+}
/* manhattan/taxicab/cityblock distance */
-static float dist_Manhattan(float x, float y, float z, float e) { (void)e; return (fabsf(x) + fabsf(y) + fabsf(z)); }
+static float dist_Manhattan(float x, float y, float z, float e) {
+ (void)e; return (fabsf(x) + fabsf(y) + fabsf(z));
+}
/* Chebychev */
static float dist_Chebychev(float x, float y, float z, float e)
{
@@ -1147,8 +1154,8 @@ static float dist_Chebychev(float x, float y, float z, float e)
x = fabsf(x);
y = fabsf(y);
z = fabsf(z);
- t = (x>y)?x:y;
- return ((z>t)?z:t);
+ t = (x > y) ? x : y;
+ return ((z > t) ? z : t);
}
/* minkovsky preset exponent 0.5 */
@@ -1156,7 +1163,7 @@ static float dist_MinkovskyH(float x, float y, float z, float e)
{
float d = sqrtf(fabsf(x)) + sqrtf(fabsf(y)) + sqrtf(fabsf(z));
(void)e;
- return (d*d);
+ return (d * d);
}
/* minkovsky preset exponent 4 */
@@ -1166,19 +1173,19 @@ static float dist_Minkovsky4(float x, float y, float z, float e)
x *= x;
y *= y;
z *= z;
- return sqrtf(sqrtf(x*x + y*y + z*z));
+ return sqrtf(sqrtf(x * x + y * y + z * z));
}
/* Minkovsky, general case, slow, maybe too slow to be useful */
static float dist_Minkovsky(float x, float y, float z, float e)
{
- return powf(powf(fabsf(x), e) + powf(fabsf(y), e) + powf(fabsf(z), e), 1.0f/e);
+ return powf(powf(fabsf(x), e) + powf(fabsf(y), e) + powf(fabsf(z), e), 1.0f / e);
}
/* Not 'pure' Worley, but the results are virtually the same.
* Returns distances in da and point coords in pa */
-void voronoi(float x, float y, float z, float* da, float* pa, float me, int dtype)
+void voronoi(float x, float y, float z, float *da, float *pa, float me, int dtype)
{
int xx, yy, zz, xi, yi, zi;
float xd, yd, zd, d, *p;
@@ -1212,35 +1219,35 @@ void voronoi(float x, float y, float z, float* da, float* pa, float me, int dtyp
yi = (int)(floor(y));
zi = (int)(floor(z));
da[0] = da[1] = da[2] = da[3] = 1e10f;
- for (xx=xi-1;xx<=xi+1;xx++) {
- for (yy=yi-1;yy<=yi+1;yy++) {
- for (zz=zi-1;zz<=zi+1;zz++) {
+ for (xx = xi - 1; xx <= xi + 1; xx++) {
+ for (yy = yi - 1; yy <= yi + 1; yy++) {
+ for (zz = zi - 1; zz <= zi + 1; zz++) {
p = HASHPNT(xx, yy, zz);
xd = x - (p[0] + xx);
yd = y - (p[1] + yy);
zd = z - (p[2] + zz);
d = distfunc(xd, yd, zd, me);
- if (d<da[0]) {
- da[3]=da[2]; da[2]=da[1]; da[1]=da[0]; da[0]=d;
- pa[9]=pa[6]; pa[10]=pa[7]; pa[11]=pa[8];
- pa[6]=pa[3]; pa[7]=pa[4]; pa[8]=pa[5];
- pa[3]=pa[0]; pa[4]=pa[1]; pa[5]=pa[2];
- pa[0]=p[0]+xx; pa[1]=p[1]+yy; pa[2]=p[2]+zz;
+ if (d < da[0]) {
+ da[3] = da[2]; da[2] = da[1]; da[1] = da[0]; da[0] = d;
+ pa[9] = pa[6]; pa[10] = pa[7]; pa[11] = pa[8];
+ pa[6] = pa[3]; pa[7] = pa[4]; pa[8] = pa[5];
+ pa[3] = pa[0]; pa[4] = pa[1]; pa[5] = pa[2];
+ pa[0] = p[0] + xx; pa[1] = p[1] + yy; pa[2] = p[2] + zz;
}
- else if (d<da[1]) {
- da[3]=da[2]; da[2]=da[1]; da[1]=d;
- pa[9]=pa[6]; pa[10]=pa[7]; pa[11]=pa[8];
- pa[6]=pa[3]; pa[7]=pa[4]; pa[8]=pa[5];
- pa[3]=p[0]+xx; pa[4]=p[1]+yy; pa[5]=p[2]+zz;
+ else if (d < da[1]) {
+ da[3] = da[2]; da[2] = da[1]; da[1] = d;
+ pa[9] = pa[6]; pa[10] = pa[7]; pa[11] = pa[8];
+ pa[6] = pa[3]; pa[7] = pa[4]; pa[8] = pa[5];
+ pa[3] = p[0] + xx; pa[4] = p[1] + yy; pa[5] = p[2] + zz;
}
- else if (d<da[2]) {
- da[3]=da[2]; da[2]=d;
- pa[9]=pa[6]; pa[10]=pa[7]; pa[11]=pa[8];
- pa[6]=p[0]+xx; pa[7]=p[1]+yy; pa[8]=p[2]+zz;
+ else if (d < da[2]) {
+ da[3] = da[2]; da[2] = d;
+ pa[9] = pa[6]; pa[10] = pa[7]; pa[11] = pa[8];
+ pa[6] = p[0] + xx; pa[7] = p[1] + yy; pa[8] = p[2] + zz;
}
- else if (d<da[3]) {
- da[3]=d;
- pa[9]=p[0]+xx; pa[10]=p[1]+yy; pa[11]=p[2]+zz;
+ else if (d < da[3]) {
+ da[3] = d;
+ pa[9] = p[0] + xx; pa[10] = p[1] + yy; pa[11] = p[2] + zz;
}
}
}
@@ -1280,14 +1287,14 @@ static float voronoi_F1F2(float x, float y, float z)
{
float da[4], pa[12];
voronoi(x, y, z, da, pa, 1, 0);
- return (da[1]-da[0]);
+ return (da[1] - da[0]);
}
/* Crackle type pattern, just a scale/clamp of F2-F1 */
static float voronoi_Cr(float x, float y, float z)
{
- float t = 10*voronoi_F1F2(x, y, z);
- if (t>1.f) return 1.f;
+ float t = 10 * voronoi_F1F2(x, y, z);
+ if (t > 1.f) return 1.f;
return t;
}
@@ -1298,43 +1305,43 @@ static float voronoi_F1S(float x, float y, float z)
{
float da[4], pa[12];
voronoi(x, y, z, da, pa, 1, 0);
- return (2.0f*da[0]-1.0f);
+ return (2.0f * da[0] - 1.0f);
}
static float voronoi_F2S(float x, float y, float z)
{
float da[4], pa[12];
voronoi(x, y, z, da, pa, 1, 0);
- return (2.0f*da[1]-1.0f);
+ return (2.0f * da[1] - 1.0f);
}
static float voronoi_F3S(float x, float y, float z)
{
float da[4], pa[12];
voronoi(x, y, z, da, pa, 1, 0);
- return (2.0f*da[2]-1.0f);
+ return (2.0f * da[2] - 1.0f);
}
static float voronoi_F4S(float x, float y, float z)
{
float da[4], pa[12];
voronoi(x, y, z, da, pa, 1, 0);
- return (2.0f*da[3]-1.0f);
+ return (2.0f * da[3] - 1.0f);
}
static float voronoi_F1F2S(float x, float y, float z)
{
float da[4], pa[12];
voronoi(x, y, z, da, pa, 1, 0);
- return (2.0f*(da[1]-da[0])-1.0f);
+ return (2.0f * (da[1] - da[0]) - 1.0f);
}
/* Crackle type pattern, just a scale/clamp of F2-F1 */
static float voronoi_CrS(float x, float y, float z)
{
- float t = 10*voronoi_F1F2(x, y, z);
- if (t>1.f) return 1.f;
- return (2.0f*t-1.0f);
+ float t = 10 * voronoi_F1F2(x, y, z);
+ if (t > 1.f) return 1.f;
+ return (2.0f * t - 1.0f);
}
@@ -1352,15 +1359,15 @@ static float cellNoiseU(float x, float y, float z)
int xi = (int)(floor(x));
int yi = (int)(floor(y));
int zi = (int)(floor(z));
- unsigned int n = xi + yi*1301 + zi*314159;
- n ^= (n<<13);
- return ((float)(n*(n*n*15731 + 789221) + 1376312589) / 4294967296.0f);
+ unsigned int n = xi + yi * 1301 + zi * 314159;
+ n ^= (n << 13);
+ return ((float)(n * (n * n * 15731 + 789221) + 1376312589) / 4294967296.0f);
}
/* idem, signed */
float cellNoise(float x, float y, float z)
{
- return (2.0f*cellNoiseU(x, y, z)-1.0f);
+ return (2.0f * cellNoiseU(x, y, z) - 1.0f);
}
/* returns a vector/point/color in ca, using point hasharray directly */
@@ -1423,14 +1430,14 @@ float BLI_gNoise(float noisesize, float x, float y, float z, int hard, int noise
}
}
- if (noisesize!=0.0f) {
- noisesize = 1.0f/noisesize;
+ if (noisesize != 0.0f) {
+ noisesize = 1.0f / noisesize;
x *= noisesize;
y *= noisesize;
z *= noisesize;
}
- if (hard) return fabsf(2.0f*noisefunc(x, y, z)-1.0f);
+ if (hard) return fabsf(2.0f * noisefunc(x, y, z) - 1.0f);
return noisefunc(x, y, z);
}
@@ -1438,7 +1445,7 @@ float BLI_gNoise(float noisesize, float x, float y, float z, int hard, int noise
float BLI_gTurbulence(float noisesize, float x, float y, float z, int oct, int hard, int noisebasis)
{
float (*noisefunc)(float, float, float);
- float sum, t, amp=1, fscale=1;
+ float sum, t, amp = 1, fscale = 1;
int i;
switch (noisebasis) {
@@ -1477,21 +1484,21 @@ float BLI_gTurbulence(float noisesize, float x, float y, float z, int oct, int h
z += 1;
}
- if (noisesize!=0.0f) {
- noisesize = 1.0f/noisesize;
+ if (noisesize != 0.0f) {
+ noisesize = 1.0f / noisesize;
x *= noisesize;
y *= noisesize;
z *= noisesize;
}
sum = 0;
- for (i=0;i<=oct;i++, amp*=0.5f, fscale*=2.0f) {
- t = noisefunc(fscale*x, fscale*y, fscale*z);
- if (hard) t = fabsf(2.0f*t-1.0f);
+ for (i = 0; i <= oct; i++, amp *= 0.5f, fscale *= 2.0f) {
+ t = noisefunc(fscale * x, fscale * y, fscale * z);
+ if (hard) t = fabsf(2.0f * t - 1.0f);
sum += t * amp;
}
- sum *= ((float)(1<<oct)/(float)((1<<(oct+1))-1));
+ sum *= ((float)(1 << oct) / (float)((1 << (oct + 1)) - 1));
return sum;
@@ -1513,8 +1520,8 @@ float BLI_gTurbulence(float noisesize, float x, float y, float z, int oct, int h
*/
float mg_fBm(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
{
- float rmd, value=0.0, pwr=1.0, pwHL=powf(lacunarity, -H);
- int i;
+ float rmd, value = 0.0, pwr = 1.0, pwHL = powf(lacunarity, -H);
+ int i;
float (*noisefunc)(float, float, float);
switch (noisebasis) {
@@ -1551,7 +1558,7 @@ float mg_fBm(float x, float y, float z, float H, float lacunarity, float octaves
}
}
- for (i=0; i<(int)octaves; i++) {
+ for (i = 0; i < (int)octaves; i++) {
value += noisefunc(x, y, z) * pwr;
pwr *= pwHL;
x *= lacunarity;
@@ -1560,7 +1567,7 @@ float mg_fBm(float x, float y, float z, float H, float lacunarity, float octaves
}
rmd = octaves - floorf(octaves);
- if (rmd!=0.f) value += rmd * noisefunc(x, y, z) * pwr;
+ if (rmd != 0.f) value += rmd * noisefunc(x, y, z) * pwr;
return value;
@@ -1583,7 +1590,7 @@ float mg_fBm(float x, float y, float z, float H, float lacunarity, float octaves
* I modified it to something that made sense to me, so it might be wrong... */
float mg_MultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
{
- float rmd, value=1.0, pwr=1.0, pwHL=powf(lacunarity, -H);
+ float rmd, value = 1.0, pwr = 1.0, pwHL = powf(lacunarity, -H);
int i;
float (*noisefunc)(float, float, float);
@@ -1621,7 +1628,7 @@ float mg_MultiFractal(float x, float y, float z, float H, float lacunarity, floa
}
}
- for (i=0; i<(int)octaves; i++) {
+ for (i = 0; i < (int)octaves; i++) {
value *= (pwr * noisefunc(x, y, z) + 1.0f);
pwr *= pwHL;
x *= lacunarity;
@@ -1629,7 +1636,7 @@ float mg_MultiFractal(float x, float y, float z, float H, float lacunarity, floa
z *= lacunarity;
}
rmd = octaves - floorf(octaves);
- if (rmd!=0.0f) value *= (rmd * noisefunc(x, y, z) * pwr + 1.0f);
+ if (rmd != 0.0f) value *= (rmd * noisefunc(x, y, z) * pwr + 1.0f);
return value;
@@ -1647,10 +1654,10 @@ float mg_MultiFractal(float x, float y, float z, float H, float lacunarity, floa
*/
float mg_HeteroTerrain(float x, float y, float z, float H, float lacunarity, float octaves, float offset, int noisebasis)
{
- float value, increment, rmd;
+ float value, increment, rmd;
int i;
float pwHL = powf(lacunarity, -H);
- float pwr = pwHL; /* starts with i=1 instead of 0 */
+ float pwr = pwHL; /* starts with i=1 instead of 0 */
float (*noisefunc)(float, float, float);
switch (noisebasis) {
@@ -1693,7 +1700,7 @@ float mg_HeteroTerrain(float x, float y, float z, float H, float lacunarity, flo
y *= lacunarity;
z *= lacunarity;
- for (i=1; i<(int)octaves; i++) {
+ for (i = 1; i < (int)octaves; i++) {
increment = (noisefunc(x, y, z) + offset) * pwr * value;
value += increment;
pwr *= pwHL;
@@ -1703,7 +1710,7 @@ float mg_HeteroTerrain(float x, float y, float z, float H, float lacunarity, flo
}
rmd = octaves - floorf(octaves);
- if (rmd!=0.0f) {
+ if (rmd != 0.0f) {
increment = (noisefunc(x, y, z) + offset) * pwr * value;
value += rmd * increment;
}
@@ -1723,7 +1730,7 @@ float mg_HybridMultiFractal(float x, float y, float z, float H, float lacunarity
float result, signal, weight, rmd;
int i;
float pwHL = powf(lacunarity, -H);
- float pwr = pwHL; /* starts with i=1 instead of 0 */
+ float pwr = pwHL; /* starts with i=1 instead of 0 */
float (*noisefunc)(float, float, float);
switch (noisebasis) {
@@ -1766,8 +1773,8 @@ float mg_HybridMultiFractal(float x, float y, float z, float H, float lacunarity
y *= lacunarity;
z *= lacunarity;
- for (i=1; (weight>0.001f) && (i<(int)octaves); i++) {
- if (weight>1.0f) weight=1.0f;
+ for (i = 1; (weight > 0.001f) && (i < (int)octaves); i++) {
+ if (weight > 1.0f) weight = 1.0f;
signal = (noisefunc(x, y, z) + offset) * pwr;
pwr *= pwHL;
result += weight * signal;
@@ -1778,7 +1785,7 @@ float mg_HybridMultiFractal(float x, float y, float z, float H, float lacunarity
}
rmd = octaves - floorf(octaves);
- if (rmd!=0.f) result += rmd * ((noisefunc(x, y, z) + offset) * pwr);
+ if (rmd != 0.f) result += rmd * ((noisefunc(x, y, z) + offset) * pwr);
return result;
@@ -1796,9 +1803,9 @@ float mg_HybridMultiFractal(float x, float y, float z, float H, float lacunarity
float mg_RidgedMultiFractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis)
{
float result, signal, weight;
- int i;
+ int i;
float pwHL = powf(lacunarity, -H);
- float pwr = pwHL; /* starts with i=1 instead of 0 */
+ float pwr = pwHL; /* starts with i=1 instead of 0 */
float (*noisefunc)(float, float, float);
switch (noisebasis) {
@@ -1840,12 +1847,12 @@ float mg_RidgedMultiFractal(float x, float y, float z, float H, float lacunarity
result = signal;
- for ( i=1; i<(int)octaves; i++ ) {
+ for (i = 1; i < (int)octaves; i++) {
x *= lacunarity;
y *= lacunarity;
z *= lacunarity;
weight = signal * gain;
- if (weight>1.0f) weight=1.0f; else if (weight<0.0f) weight=0.0f;
+ if (weight > 1.0f) weight = 1.0f; else if (weight < 0.0f) weight = 0.0f;
signal = offset - fabsf(noisefunc(x, y, z));
signal *= signal;
signal *= weight;
@@ -1934,10 +1941,10 @@ float mg_VLNoise(float x, float y, float z, float distortion, int nbas1, int nba
}
/* get a random vector and scale the randomization */
- rv[0] = noisefunc1(x+13.5f, y+13.5f, z+13.5f) * distortion;
+ rv[0] = noisefunc1(x + 13.5f, y + 13.5f, z + 13.5f) * distortion;
rv[1] = noisefunc1(x, y, z) * distortion;
- rv[2] = noisefunc1(x-13.5f, y-13.5f, z-13.5f) * distortion;
- return noisefunc2(x+rv[0], y+rv[1], z+rv[2]); /* distorted-domain noise */
+ rv[2] = noisefunc1(x - 13.5f, y - 13.5f, z - 13.5f) * distortion;
+ return noisefunc2(x + rv[0], y + rv[1], z + rv[2]); /* distorted-domain noise */
}
/****************/
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c
index a18c297fdae..59147040fd8 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -48,7 +48,7 @@
#include "BLI_utildefines.h"
#include "BKE_utildefines.h"
-#include "BKE_blender.h" // BLENDER_VERSION
+#include "BKE_blender.h" // BLENDER_VERSION
#include "GHOST_Path-api.h"
@@ -79,26 +79,26 @@
/* standard paths */
#ifdef WIN32
-# define BLENDER_USER_FORMAT "%s\\Blender Foundation\\Blender\\%s"
-# define BLENDER_SYSTEM_FORMAT "%s\\Blender Foundation\\Blender\\%s"
+# define BLENDER_USER_FORMAT "%s\\Blender Foundation\\Blender\\%s"
+# define BLENDER_SYSTEM_FORMAT "%s\\Blender Foundation\\Blender\\%s"
#elif defined(__APPLE__)
-# define BLENDER_USER_FORMAT "%s/Blender/%s"
-# define BLENDER_SYSTEM_FORMAT "%s/Blender/%s"
+# define BLENDER_USER_FORMAT "%s/Blender/%s"
+# define BLENDER_SYSTEM_FORMAT "%s/Blender/%s"
#else /* UNIX */
# ifndef WITH_XDG_USER_DIRS /* oldschool unix ~/.blender/ */
-# define BLENDER_USER_FORMAT "%s/.blender/%s"
+# define BLENDER_USER_FORMAT "%s/.blender/%s"
# else /* new XDG ~/blender/.config/ */
-# define BLENDER_USER_FORMAT "%s/blender/%s"
+# define BLENDER_USER_FORMAT "%s/blender/%s"
# endif // WITH_XDG_USER_DIRS
-# define BLENDER_SYSTEM_FORMAT "%s/blender/%s"
+# define BLENDER_SYSTEM_FORMAT "%s/blender/%s"
#endif
/* local */
#define UNIQUE_NAME_MAX 128
-static char bprogname[FILE_MAX]; /* path to program executable */
-static char bprogdir[FILE_MAX]; /* path in which executable is located */
-static char btempdir[FILE_MAX]; /* temporary directory */
+static char bprogname[FILE_MAX]; /* path to program executable */
+static char bprogdir[FILE_MAX]; /* path in which executable is located */
+static char btempdir[FILE_MAX]; /* temporary directory */
static int add_win32_extension(char *name);
static char *blender_version_decimal(const int ver);
@@ -112,7 +112,7 @@ int BLI_stringdec(const char *string, char *head, char *tail, unsigned short *nu
char *lslash = BLI_last_slash(string);
len2 = len = strlen(string);
if (lslash)
- lenlslash= (int)(lslash - string);
+ lenlslash = (int)(lslash - string);
while (len > lenlslash && string[--len] != '.') {};
if (len == lenlslash && string[len] != '.') len = len2;
@@ -133,12 +133,12 @@ int BLI_stringdec(const char *string, char *head, char *tail, unsigned short *nu
}
}
if (found) {
- if (tail) strcpy(tail, &string[nume+1]);
+ if (tail) strcpy(tail, &string[nume + 1]);
if (head) {
strcpy(head, string);
- head[nums]=0;
+ head[nums] = 0;
}
- if (numlen) *numlen = nume-nums+1;
+ if (numlen) *numlen = nume - nums + 1;
return ((int)atoi(&(string[nums])));
}
if (tail) strcpy(tail, string + len);
@@ -146,15 +146,15 @@ int BLI_stringdec(const char *string, char *head, char *tail, unsigned short *nu
strncpy(head, string, len);
head[len] = '\0';
}
- if (numlen) *numlen=0;
+ if (numlen) *numlen = 0;
return 0;
}
void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic)
{
- char fmtstr[16]="";
- if (pic < 0) pic= 0;
+ char fmtstr[16] = "";
+ if (pic < 0) pic = 0;
sprintf(fmtstr, "%%s%%.%dd%%s", numlen);
sprintf(string, fmtstr, head, pic, tail);
}
@@ -165,28 +165,28 @@ int BLI_split_name_num(char *left, int *nr, const char *name, const char delim)
{
int a;
- *nr= 0;
- a= strlen(name);
+ *nr = 0;
+ a = strlen(name);
memcpy(left, name, (a + 1) * sizeof(char));
- if (a>1 && name[a-1]==delim) return a;
+ if (a > 1 && name[a - 1] == delim) return a;
while (a--) {
- if ( name[a]==delim ) {
- left[a]= 0;
- *nr= atol(name+a+1);
+ if (name[a] == delim) {
+ left[a] = 0;
+ *nr = atol(name + a + 1);
/* casting down to an int, can overflow for large numbers */
if (*nr < 0)
- *nr= 0;
+ *nr = 0;
return a;
}
- if ( isdigit(name[a])==0 ) break;
+ if (isdigit(name[a]) == 0) break;
- left[a]= 0;
+ left[a] = 0;
}
- for (a= 0; name[a]; a++)
- left[a]= name[a];
+ for (a = 0; name[a]; a++)
+ left[a] = name[a];
return a;
}
@@ -209,7 +209,7 @@ void BLI_newname(char *name, int add)
pic += add;
- if (digits==4 && pic<0) pic= 0;
+ if (digits == 4 && pic < 0) pic = 0;
BLI_stringenc(name, head, tail, digits, pic);
}
@@ -222,13 +222,13 @@ int BLI_uniquename_cb(int (*unique_check)(void *, const char *), void *arg, cons
}
if (unique_check(arg, name)) {
- char numstr[16];
- char tempname[UNIQUE_NAME_MAX];
- char left[UNIQUE_NAME_MAX];
- int number;
- int len= BLI_split_name_num(left, &number, name, delim);
+ char numstr[16];
+ char tempname[UNIQUE_NAME_MAX];
+ char left[UNIQUE_NAME_MAX];
+ int number;
+ int len = BLI_split_name_num(left, &number, name, delim);
do {
- int numlen= BLI_snprintf(numstr, sizeof(numstr), "%c%03d", delim, ++number);
+ int numlen = BLI_snprintf(numstr, sizeof(numstr), "%c%03d", delim, ++number);
/* highly unlikely the string only has enough room for the number
* but support anyway */
@@ -238,7 +238,7 @@ int BLI_uniquename_cb(int (*unique_check)(void *, const char *), void *arg, cons
}
else {
char *tempname_buf;
- tempname[0]= '\0';
+ tempname[0] = '\0';
tempname_buf = BLI_strncat_utf8(tempname, left, name_len - numlen);
memcpy(tempname_buf, numstr, numlen + 1);
}
@@ -254,7 +254,7 @@ int BLI_uniquename_cb(int (*unique_check)(void *, const char *), void *arg, cons
/* little helper macro for BLI_uniquename */
#ifndef GIVE_STRADDR
- #define GIVE_STRADDR(data, offset) ( ((char *)data) + offset )
+ #define GIVE_STRADDR(data, offset) ( ((char *)data) + offset)
#endif
/* Generic function to set a unique name. It is only designed to be used in situations
@@ -262,16 +262,16 @@ int BLI_uniquename_cb(int (*unique_check)(void *, const char *), void *arg, cons
*
* For places where this is used, see constraint.c for example...
*
- * name_offs: should be calculated using offsetof(structname, membername) macro from stddef.h
- * len: maximum length of string (to prevent overflows, etc.)
- * defname: the name that should be used by default if none is specified already
- * delim: the character which acts as a delimiter between parts of the name
+ * name_offs: should be calculated using offsetof(structname, membername) macro from stddef.h
+ * len: maximum length of string (to prevent overflows, etc.)
+ * defname: the name that should be used by default if none is specified already
+ * delim: the character which acts as a delimiter between parts of the name
*/
static int uniquename_find_dupe(ListBase *list, void *vlink, const char *name, short name_offs)
{
Link *link;
- for (link = list->first; link; link= link->next) {
+ for (link = list->first; link; link = link->next) {
if (link != vlink) {
if (!strcmp(GIVE_STRADDR(link, name_offs), name)) {
return 1;
@@ -284,16 +284,16 @@ static int uniquename_find_dupe(ListBase *list, void *vlink, const char *name, s
static int uniquename_unique_check(void *arg, const char *name)
{
- struct {ListBase *lb; void *vlink; short name_offs;} *data= arg;
+ struct {ListBase *lb; void *vlink; short name_offs; } *data = arg;
return uniquename_find_dupe(data->lb, data->vlink, name, data->name_offs);
}
void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short name_len)
{
- struct {ListBase *lb; void *vlink; short name_offs;} data;
- data.lb= list;
- data.vlink= vlink;
- data.name_offs= name_offs;
+ struct {ListBase *lb; void *vlink; short name_offs; } data;
+ data.lb = list;
+ data.vlink = vlink;
+ data.name_offs = name_offs;
assert((name_len > 1) && (name_len <= UNIQUE_NAME_MAX));
@@ -324,11 +324,11 @@ void BLI_cleanup_path(const char *relabase, char *dir)
BLI_path_abs(dir, relabase);
}
else {
- if (dir[0]=='/' && dir[1]=='/') {
- if (dir[2]== '\0') {
+ if (dir[0] == '/' && dir[1] == '/') {
+ if (dir[2] == '\0') {
return; /* path is "//" - cant clean it */
}
- dir = dir+2; /* skip the first // */
+ dir = dir + 2; /* skip the first // */
}
}
@@ -344,19 +344,19 @@ void BLI_cleanup_path(const char *relabase, char *dir)
/* Note, this should really be moved to the file selector,
* since this function is used in many areas */
- if (strcmp(dir, ".")==0) { /* happens for example in FILE_MAIN */
+ if (strcmp(dir, ".") == 0) { /* happens for example in FILE_MAIN */
get_default_root(dir);
return;
}
while ( (start = strstr(dir, "\\..\\")) ) {
eind = start + strlen("\\..\\") - 1;
- a = start-dir-1;
- while (a>0) {
+ a = start - dir - 1;
+ while (a > 0) {
if (dir[a] == '\\') break;
a--;
}
- if (a<0) {
+ if (a < 0) {
break;
}
else {
@@ -369,36 +369,36 @@ void BLI_cleanup_path(const char *relabase, char *dir)
memmove(start, eind, strlen(eind) + 1);
}
- while ( (start = strstr(dir, "\\\\" )) ) {
+ while ( (start = strstr(dir, "\\\\")) ) {
eind = start + strlen("\\\\") - 1;
memmove(start, eind, strlen(eind) + 1);
}
#else
- if (dir[0]=='.') { /* happens, for example in FILE_MAIN */
- dir[0]= '/';
- dir[1]= 0;
+ if (dir[0] == '.') { /* happens, for example in FILE_MAIN */
+ dir[0] = '/';
+ dir[1] = 0;
return;
}
/* support for odd paths: eg /../home/me --> /home/me
* this is a valid path in blender but we cant handle this the usual way below
* simply strip this prefix then evaluate the path as usual. pythons os.path.normpath() does this */
- while ((strncmp(dir, "/../", 4)==0)) {
+ while ((strncmp(dir, "/../", 4) == 0)) {
memmove(dir, dir + 4, strlen(dir + 4) + 1);
}
while ( (start = strstr(dir, "/../")) ) {
eind = start + (4 - 1) /* strlen("/../") - 1 */;
- a = start-dir-1;
- while (a>0) {
+ a = start - dir - 1;
+ while (a > 0) {
if (dir[a] == '/') break;
a--;
}
- if (a<0) {
+ if (a < 0) {
break;
}
else {
- memmove(dir+a, eind, strlen(eind) + 1);
+ memmove(dir + a, eind, strlen(eind) + 1);
}
}
@@ -407,7 +407,7 @@ void BLI_cleanup_path(const char *relabase, char *dir)
memmove(start, eind, strlen(eind) + 1);
}
- while ( (start = strstr(dir, "//" )) ) {
+ while ( (start = strstr(dir, "//")) ) {
eind = start + (2 - 1) /* strlen("//") - 1 */;
memmove(start, eind, strlen(eind) + 1);
}
@@ -429,19 +429,19 @@ void BLI_cleanup_file(const char *relabase, char *dir)
void BLI_path_rel(char *file, const char *relfile)
{
- char * lslash;
+ char *lslash;
char temp[FILE_MAX];
char res[FILE_MAX];
/* if file is already relative, bail out */
- if (file[0]=='/' && file[1]=='/') return;
+ if (file[0] == '/' && file[1] == '/') return;
/* also bail out if relative path is not set */
if (relfile[0] == 0) return;
#ifdef WIN32
if (BLI_strnlen(relfile, 3) > 2 && relfile[1] != ':') {
- char* ptemp;
+ char *ptemp;
/* fix missing volume name in relative base,
* can happen with old recent-files.txt files */
get_default_root(temp);
@@ -449,14 +449,14 @@ void BLI_path_rel(char *file, const char *relfile)
if (relfile[0] != '\\' && relfile[0] != '/') {
ptemp++;
}
- BLI_strncpy(ptemp, relfile, FILE_MAX-3);
+ BLI_strncpy(ptemp, relfile, FILE_MAX - 3);
}
else {
BLI_strncpy(temp, relfile, FILE_MAX);
}
if (BLI_strnlen(file, 3) > 2) {
- if ( temp[1] == ':' && file[1] == ':' && temp[0] != file[0] )
+ if (temp[1] == ':' && file[1] == ':' && temp[0] != file[0])
return;
}
#else
@@ -476,8 +476,8 @@ void BLI_path_rel(char *file, const char *relfile)
if (lslash) {
/* find the prefix of the filename that is equal for both filenames.
* This is replaced by the two slashes at the beginning */
- char *p= temp;
- char *q= file;
+ char *p = temp;
+ char *q = file;
#ifdef WIN32
while (tolower(*p) == tolower(*q))
@@ -490,7 +490,7 @@ void BLI_path_rel(char *file, const char *relfile)
/* don't search beyond the end of the string
* in the rare case they match */
- if ((*p=='\0') || (*q=='\0')) {
+ if ((*p == '\0') || (*q == '\0')) {
break;
}
}
@@ -505,23 +505,23 @@ void BLI_path_rel(char *file, const char *relfile)
while ( (p >= temp) && (*p != '/') ) { --p; --q; }
}
- strcpy(res, "//");
+ strcpy(res, "//");
/* p now points to the slash that is at the beginning of the part
* where the path is different from the relative path.
* We count the number of directories we need to go up in the
* hierarchy to arrive at the common 'prefix' of the path
*/
- while (p && p < lslash) {
+ while (p && p < lslash) {
if (*p == '/')
- strcat(res, "../");
+ strcat(res, "../");
p++;
}
- strcat(res, q+1); /* don't copy the slash at the beginning */
+ strcat(res, q + 1); /* don't copy the slash at the beginning */
-#ifdef WIN32
- BLI_char_switch(res+2, '/', '\\');
+#ifdef WIN32
+ BLI_char_switch(res + 2, '/', '\\');
#endif
strcpy(file, res);
}
@@ -534,7 +534,7 @@ int BLI_has_parent(char *path)
BLI_clean(path);
len = BLI_add_slash(path) - 1;
- while (len>=0) {
+ while (len >= 0) {
if ((path[len] == '\\') || (path[len] == '/'))
slashes++;
len--;
@@ -544,9 +544,9 @@ int BLI_has_parent(char *path)
int BLI_parent_dir(char *path)
{
- static char parent_dir[]= {'.', '.', SEP, '\0'}; /* "../" or "..\\" */
- char tmp[FILE_MAX+4];
- BLI_strncpy(tmp, path, sizeof(tmp)-4);
+ static char parent_dir[] = {'.', '.', SEP, '\0'}; /* "../" or "..\\" */
+ char tmp[FILE_MAX + 4];
+ BLI_strncpy(tmp, path, sizeof(tmp) - 4);
BLI_add_slash(tmp);
strcat(tmp, parent_dir);
BLI_cleanup_dir(NULL, tmp);
@@ -571,42 +571,42 @@ static int stringframe_chars(char *path, int *char_start, int *char_end)
}
else if (path[i] == '#') {
ch_sta = i;
- ch_end = ch_sta+1;
+ ch_end = ch_sta + 1;
while (path[ch_end] == '#') {
ch_end++;
}
- i = ch_end-1; /* keep searching */
+ i = ch_end - 1; /* keep searching */
/* don't break, there may be a slash after this that invalidates the previous #'s */
}
}
if (ch_end) {
- *char_start= ch_sta;
- *char_end= ch_end;
+ *char_start = ch_sta;
+ *char_end = ch_end;
return 1;
}
else {
- *char_start= -1;
- *char_end= -1;
+ *char_start = -1;
+ *char_end = -1;
return 0;
}
}
static void ensure_digits(char *path, int digits)
{
- char *file= BLI_last_slash(path);
+ char *file = BLI_last_slash(path);
- if (file==NULL)
- file= path;
+ if (file == NULL)
+ file = path;
if (strrchr(file, '#') == NULL) {
- int len= strlen(file);
+ int len = strlen(file);
while (digits--) {
- file[len++]= '#';
+ file[len++] = '#';
}
- file[len]= '\0';
+ file[len] = '\0';
}
}
@@ -619,7 +619,7 @@ int BLI_path_frame(char *path, int frame, int digits)
if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is the last # +1 */
char tmp[FILE_MAX];
- sprintf(tmp, "%.*s%.*d%s", ch_sta, path, ch_end-ch_sta, frame, path+ch_end);
+ sprintf(tmp, "%.*s%.*d%s", ch_sta, path, ch_end - ch_sta, frame, path + ch_end);
strcpy(path, tmp);
return 1;
}
@@ -637,7 +637,7 @@ int BLI_path_frame_range(char *path, int sta, int end, int digits)
char tmp[FILE_MAX];
BLI_snprintf(tmp, sizeof(tmp),
"%.*s%.*d-%.*d%s",
- ch_sta, path, ch_end-ch_sta, sta, ch_end-ch_sta, end, path+ch_end);
+ ch_sta, path, ch_end - ch_sta, sta, ch_end - ch_sta, end, path + ch_end);
BLI_strncpy(path, tmp, FILE_MAX);
return 1;
}
@@ -646,7 +646,7 @@ int BLI_path_frame_range(char *path, int sta, int end, int digits)
int BLI_path_abs(char *path, const char *basepath)
{
- int wasrelative = (strncmp(path, "//", 2)==0);
+ int wasrelative = (strncmp(path, "//", 2) == 0);
char tmp[FILE_MAX];
char base[FILE_MAX];
#ifdef WIN32
@@ -679,7 +679,7 @@ int BLI_path_abs(char *path, const char *basepath)
* Add a / prefix and lowercase the driveletter, remove the :
* C:\foo.JPG -> /c/foo.JPG */
- if (isalpha(tmp[0]) && tmp[1] == ':' && (tmp[2]=='\\' || tmp[2]=='/') ) {
+ if (isalpha(tmp[0]) && tmp[1] == ':' && (tmp[2] == '\\' || tmp[2] == '/') ) {
tmp[1] = tolower(tmp[0]); /* replace ':' with driveletter */
tmp[0] = '/';
/* '\' the slash will be converted later */
@@ -704,18 +704,18 @@ int BLI_path_abs(char *path, const char *basepath)
/* Paths starting with // will get the blend file as their base,
* this isn't standard in any os but is used in blender all over the place */
if (wasrelative) {
- char *lslash= BLI_last_slash(base);
+ char *lslash = BLI_last_slash(base);
if (lslash) {
- int baselen= (int) (lslash-base) + 1;
+ int baselen = (int) (lslash - base) + 1;
/* use path for temp storage here, we copy back over it right away */
- BLI_strncpy(path, tmp+2, FILE_MAX);
+ BLI_strncpy(path, tmp + 2, FILE_MAX);
memcpy(tmp, base, baselen);
- BLI_strncpy(tmp+baselen, path, sizeof(tmp)-baselen);
+ BLI_strncpy(tmp + baselen, path, sizeof(tmp) - baselen);
BLI_strncpy(path, tmp, FILE_MAX);
}
else {
- BLI_strncpy(path, tmp+2, FILE_MAX);
+ BLI_strncpy(path, tmp + 2, FILE_MAX);
}
}
else {
@@ -731,7 +731,7 @@ int BLI_path_abs(char *path, const char *basepath)
* // will be retained, rest will be nice and
* shiny win32 backward slashes :) -jesterKing
*/
- BLI_char_switch(path+2, '/', '\\');
+ BLI_char_switch(path + 2, '/', '\\');
#endif
return wasrelative;
@@ -755,8 +755,8 @@ int BLI_path_cwd(char *path)
wasrelative = 0;
#endif
- if (wasrelative==1) {
- char cwd[FILE_MAX]= "";
+ if (wasrelative == 1) {
+ char cwd[FILE_MAX] = "";
BLI_current_working_dir(cwd, sizeof(cwd)); /* in case the full path to the blend isn't used */
if (cwd[0] == '\0') {
@@ -784,19 +784,19 @@ int BLI_path_cwd(char *path)
/* 'di's filename component is moved into 'fi', di is made a dir path */
void BLI_splitdirstring(char *di, char *fi)
{
- char *lslash= BLI_last_slash(di);
+ char *lslash = BLI_last_slash(di);
if (lslash) {
- BLI_strncpy(fi, lslash+1, FILE_MAXFILE);
- *(lslash+1)=0;
+ BLI_strncpy(fi, lslash + 1, FILE_MAXFILE);
+ *(lslash + 1) = 0;
}
else {
BLI_strncpy(fi, di, FILE_MAXFILE);
- di[0]= 0;
+ di[0] = 0;
}
}
-void BLI_getlastdir(const char* dir, char *last, const size_t maxlen)
+void BLI_getlastdir(const char *dir, char *last, const size_t maxlen)
{
const char *s = dir;
const char *lslash = NULL;
@@ -809,7 +809,7 @@ void BLI_getlastdir(const char* dir, char *last, const size_t maxlen)
s++;
}
if (prevslash) {
- BLI_strncpy(last, prevslash+1, maxlen);
+ BLI_strncpy(last, prevslash + 1, maxlen);
}
else {
BLI_strncpy(last, dir, maxlen);
@@ -824,35 +824,35 @@ const char *BLI_getDefaultDocumentFolder(void)
#ifndef WIN32
#ifdef WITH_XDG_USER_DIRS
- const char *xdg_documents_dir= getenv("XDG_DOCUMENTS_DIR");
- if (xdg_documents_dir) {
- return xdg_documents_dir;
- }
+ const char *xdg_documents_dir = getenv("XDG_DOCUMENTS_DIR");
+ if (xdg_documents_dir) {
+ return xdg_documents_dir;
+ }
#endif
- return getenv("HOME");
+ return getenv("HOME");
#else /* Windows */
- static char documentfolder[MAXPATHLEN];
- HRESULT hResult;
+ static char documentfolder[MAXPATHLEN];
+ HRESULT hResult;
- /* Check for %HOME% env var */
- if (uput_getenv("HOME", documentfolder, MAXPATHLEN)) {
- if (BLI_is_dir(documentfolder)) return documentfolder;
- }
+ /* Check for %HOME% env var */
+ if (uput_getenv("HOME", documentfolder, MAXPATHLEN)) {
+ if (BLI_is_dir(documentfolder)) return documentfolder;
+ }
- /* add user profile support for WIN 2K / NT.
- * This is %APPDATA%, which translates to either
- * %USERPROFILE%\Application Data or since Vista
- * to %USERPROFILE%\AppData\Roaming
- */
- hResult = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, documentfolder);
+ /* add user profile support for WIN 2K / NT.
+ * This is %APPDATA%, which translates to either
+ * %USERPROFILE%\Application Data or since Vista
+ * to %USERPROFILE%\AppData\Roaming
+ */
+ hResult = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, documentfolder);
- if (hResult == S_OK) {
- if (BLI_is_dir(documentfolder)) return documentfolder;
- }
+ if (hResult == S_OK) {
+ if (BLI_is_dir(documentfolder)) return documentfolder;
+ }
- return NULL;
+ return NULL;
#endif /* WIN32 */
}
@@ -865,7 +865,7 @@ const char *BLI_getDefaultDocumentFolder(void)
static char *blender_version_decimal(const int ver)
{
static char version_str[5];
- sprintf(version_str, "%d.%02d", ver/100, ver%100);
+ sprintf(version_str, "%d.%02d", ver / 100, ver % 100);
return version_str;
}
@@ -873,8 +873,8 @@ static int test_path(char *targetpath, const char *path_base, const char *path_s
{
char tmppath[FILE_MAX];
- if (path_sep) BLI_join_dirfile(tmppath, sizeof(tmppath), path_base, path_sep);
- else BLI_strncpy(tmppath, path_base, sizeof(tmppath));
+ if (path_sep) BLI_join_dirfile(tmppath, sizeof(tmppath), path_base, path_sep);
+ else BLI_strncpy(tmppath, path_base, sizeof(tmppath));
/* rare cases folder_name is omitted (when looking for ~/.blender/2.xx dir only) */
if (folder_name)
@@ -899,7 +899,7 @@ static int test_path(char *targetpath, const char *path_base, const char *path_s
static int test_env_path(char *path, const char *envvar)
{
- const char *env = envvar?getenv(envvar):NULL;
+ const char *env = envvar ? getenv(envvar) : NULL;
if (!env) return 0;
if (BLI_is_dir(env)) {
@@ -929,7 +929,7 @@ static int get_path_local(char *targetpath, const char *folder_name, const char
}
}
else {
- relfolder[0]= '\0';
+ relfolder[0] = '\0';
}
/* try EXECUTABLE_DIR/2.5x/folder_name - new default directory for local blender installed files */
@@ -942,7 +942,7 @@ static int get_path_local(char *targetpath, const char *folder_name, const char
static int is_portable_install(void)
{
/* detect portable install by the existance of config folder */
- const int ver= BLENDER_VERSION;
+ const int ver = BLENDER_VERSION;
char path[FILE_MAX];
return get_path_local(path, "config", NULL, ver);
@@ -1011,7 +1011,7 @@ static int get_path_system(char *targetpath, const char *folder_name, const char
}
}
else {
- relfolder[0]= '\0';
+ relfolder[0] = '\0';
}
/* try CWD/release/folder_name */
@@ -1066,27 +1066,27 @@ static int get_path_system(char *targetpath, const char *folder_name, const char
/* returns the path if found, NULL string if not */
char *BLI_get_folder(int folder_id, const char *subfolder)
{
- const int ver= BLENDER_VERSION;
+ const int ver = BLENDER_VERSION;
static char path[FILE_MAX] = "";
switch (folder_id) {
- case BLENDER_DATAFILES: /* general case */
- if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES", ver)) break;
+ case BLENDER_DATAFILES: /* general case */
+ if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES", ver)) break;
if (get_path_local(path, "datafiles", subfolder, ver)) break;
if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES", ver)) break;
return NULL;
case BLENDER_USER_DATAFILES:
- if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES", ver)) break;
+ if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES", ver)) break;
return NULL;
case BLENDER_SYSTEM_DATAFILES:
if (get_path_local(path, "datafiles", subfolder, ver)) break;
- if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES", ver)) break;
+ if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES", ver)) break;
return NULL;
case BLENDER_USER_AUTOSAVE:
- if (get_path_user(path, "autosave", subfolder, "BLENDER_USER_DATAFILES", ver)) break;
+ if (get_path_user(path, "autosave", subfolder, "BLENDER_USER_DATAFILES", ver)) break;
return NULL;
case BLENDER_USER_CONFIG:
@@ -1113,7 +1113,7 @@ char *BLI_get_folder(int folder_id, const char *subfolder)
char *BLI_get_user_folder_notest(int folder_id, const char *subfolder)
{
- const int ver= BLENDER_VERSION;
+ const int ver = BLENDER_VERSION;
static char path[FILE_MAX] = "";
switch (folder_id) {
@@ -1159,19 +1159,19 @@ char *BLI_get_folder_version(const int id, const int ver, const int do_check)
static char path[FILE_MAX] = "";
int ok;
switch (id) {
- case BLENDER_RESOURCE_PATH_USER:
- ok= get_path_user(path, NULL, NULL, NULL, ver);
- break;
- case BLENDER_RESOURCE_PATH_LOCAL:
- ok= get_path_local(path, NULL, NULL, ver);
- break;
- case BLENDER_RESOURCE_PATH_SYSTEM:
- ok= get_path_system(path, NULL, NULL, NULL, ver);
- break;
- default:
- path[0]= '\0'; /* in case do_check is false */
- ok= FALSE;
- BLI_assert(!"incorrect ID");
+ case BLENDER_RESOURCE_PATH_USER:
+ ok = get_path_user(path, NULL, NULL, NULL, ver);
+ break;
+ case BLENDER_RESOURCE_PATH_LOCAL:
+ ok = get_path_local(path, NULL, NULL, ver);
+ break;
+ case BLENDER_RESOURCE_PATH_SYSTEM:
+ ok = get_path_system(path, NULL, NULL, NULL, ver);
+ break;
+ default:
+ path[0] = '\0'; /* in case do_check is false */
+ ok = FALSE;
+ BLI_assert(!"incorrect ID");
}
if ((ok == FALSE) && do_check) {
@@ -1191,11 +1191,11 @@ char *BLI_get_folder_version(const int id, const int ver, const int do_check)
#undef PATH_DEBUG
#endif
-void BLI_setenv(const char *env, const char*val)
+void BLI_setenv(const char *env, const char *val)
{
/* free windows */
#if (defined(WIN32) || defined(WIN64)) && defined(FREE_WINDOWS)
- char *envstr= MEM_mallocN(sizeof(char) * (strlen(env) + strlen(val) + 2), "envstr"); /* one for = another for \0 */
+ char *envstr = MEM_mallocN(sizeof(char) * (strlen(env) + strlen(val) + 2), "envstr"); /* one for = another for \0 */
sprintf(envstr, "%s=%s", env, val);
putenv(envstr);
@@ -1217,7 +1217,7 @@ void BLI_setenv(const char *env, const char*val)
* Only set an env var if already not there.
* Like Unix setenv(env, val, 0);
*/
-void BLI_setenv_if_new(const char *env, const char* val)
+void BLI_setenv_if_new(const char *env, const char *val)
{
if (getenv(env) == NULL)
BLI_setenv(env, val);
@@ -1226,11 +1226,11 @@ void BLI_setenv_if_new(const char *env, const char* val)
void BLI_clean(char *path)
{
- if (path==NULL) return;
+ if (path == NULL) return;
#ifdef WIN32
if (path && BLI_strnlen(path, 3) > 2) {
- BLI_char_switch(path+2, '/', '\\');
+ BLI_char_switch(path + 2, '/', '\\');
}
#else
BLI_char_switch(path, '\\', '/');
@@ -1239,7 +1239,7 @@ void BLI_clean(char *path)
void BLI_char_switch(char *string, char from, char to)
{
- if (string==NULL) return;
+ if (string == NULL) return;
while (*string != 0) {
if (*string == from) *string = to;
string++;
@@ -1255,13 +1255,13 @@ void BLI_make_exist(char *dir)
a = strlen(dir);
while (BLI_is_dir(dir) == 0) {
- a --;
+ a--;
while (dir[a] != SEP) {
a--;
if (a <= 0) break;
}
if (a >= 0) {
- dir[a+1] = '\0';
+ dir[a + 1] = '\0';
}
else {
#ifdef WIN32
@@ -1294,7 +1294,7 @@ void BLI_make_file_string(const char *relabase, char *string, const char *dir,
if (string) {
/* ensure this is always set even if dir/file are NULL */
- string[0]= '\0';
+ string[0] = '\0';
if (ELEM(NULL, dir, file)) {
return; /* We don't want any NULLs */
@@ -1321,20 +1321,20 @@ void BLI_make_file_string(const char *relabase, char *string, const char *dir,
/* Get the file name, chop everything past the last slash (ie. the filename) */
strcpy(string, relabase);
- lslash= BLI_last_slash(string);
- if (lslash) *(lslash+1)= 0;
+ lslash = BLI_last_slash(string);
+ if (lslash) *(lslash + 1) = 0;
- dir+=2; /* Skip over the relative reference */
+ dir += 2; /* Skip over the relative reference */
}
#ifdef WIN32
else {
- if (BLI_strnlen(dir, 3) >= 2 && dir[1] == ':' ) {
+ if (BLI_strnlen(dir, 3) >= 2 && dir[1] == ':') {
BLI_strncpy(string, dir, 3);
dir += 2;
}
else { /* no drive specified */
- /* first option: get the drive from the relabase if it has one */
- if (relabase && strlen(relabase) >= 2 && relabase[1] == ':' ) {
+ /* first option: get the drive from the relabase if it has one */
+ if (relabase && strlen(relabase) >= 2 && relabase[1] == ':') {
BLI_strncpy(string, relabase, 3);
string[2] = '\\';
string[3] = '\0';
@@ -1354,8 +1354,8 @@ void BLI_make_file_string(const char *relabase, char *string, const char *dir,
/* Make sure string ends in one (and only one) slash */
/* first trim all slashes from the end of the string */
sl = strlen(string);
- while (sl>0 && ( string[sl-1] == '/' || string[sl-1] == '\\') ) {
- string[sl-1] = '\0';
+ while (sl > 0 && (string[sl - 1] == '/' || string[sl - 1] == '\\') ) {
+ string[sl - 1] = '\0';
sl--;
}
/* since we've now removed all slashes, put back one slash at the end. */
@@ -1364,7 +1364,7 @@ void BLI_make_file_string(const char *relabase, char *string, const char *dir,
while (*file && (*file == '/' || *file == '\\')) /* Trim slashes from the front of file */
file++;
- strcat (string, file);
+ strcat(string, file);
/* Push all slashes to the system preferred direction */
BLI_clean(string);
@@ -1375,10 +1375,10 @@ int BLI_testextensie(const char *str, const char *ext)
short a, b;
int retval;
- a= strlen(str);
- b= strlen(ext);
+ a = strlen(str);
+ b = strlen(ext);
- if (a==0 || b==0 || b>=a) {
+ if (a == 0 || b == 0 || b >= a) {
retval = 0;
}
else if (BLI_strcasecmp(ext, str + a - b)) {
@@ -1393,7 +1393,7 @@ int BLI_testextensie(const char *str, const char *ext)
int BLI_testextensie_array(const char *str, const char **ext_array)
{
- int i=0;
+ int i = 0;
while (ext_array[i]) {
if (BLI_testextensie(str, ext_array[i])) {
return 1;
@@ -1408,23 +1408,23 @@ int BLI_testextensie_array(const char *str, const char **ext_array)
* '*.zip;*.py;*.exe' */
int BLI_testextensie_glob(const char *str, const char *ext_fnmatch)
{
- const char *ext_step= ext_fnmatch;
+ const char *ext_step = ext_fnmatch;
char pattern[16];
while (ext_step[0]) {
char *ext_next;
int len_ext;
- if ((ext_next=strchr(ext_step, ';'))) {
- len_ext= (int)(ext_next - ext_step) + 1;
+ if ((ext_next = strchr(ext_step, ';'))) {
+ len_ext = (int)(ext_next - ext_step) + 1;
}
else {
- len_ext= sizeof(pattern);
+ len_ext = sizeof(pattern);
}
BLI_strncpy(pattern, ext_step, len_ext);
- if (fnmatch(pattern, str, FNM_CASEFOLD)==0) {
+ if (fnmatch(pattern, str, FNM_CASEFOLD) == 0) {
return 1;
}
ext_step += len_ext;
@@ -1436,32 +1436,32 @@ int BLI_testextensie_glob(const char *str, const char *ext_fnmatch)
int BLI_replace_extension(char *path, size_t maxlen, const char *ext)
{
- size_t path_len= strlen(path);
- size_t ext_len= strlen(ext);
+ size_t path_len = strlen(path);
+ size_t ext_len = strlen(ext);
ssize_t a;
- for (a= path_len - 1; a >= 0; a--) {
+ for (a = path_len - 1; a >= 0; a--) {
if (ELEM3(path[a], '.', '/', '\\')) {
break;
}
}
if ((a < 0) || (path[a] != '.')) {
- a= path_len;
+ a = path_len;
}
if (a + ext_len >= maxlen)
return 0;
- memcpy(path+a, ext, ext_len + 1);
+ memcpy(path + a, ext, ext_len + 1);
return 1;
}
/* strip's trailing '.'s and adds the extension only when needed */
int BLI_ensure_extension(char *path, size_t maxlen, const char *ext)
{
- size_t path_len= strlen(path);
- size_t ext_len= strlen(ext);
+ size_t path_len = strlen(path);
+ size_t ext_len = strlen(ext);
ssize_t a;
/* first check the extension is alread there */
@@ -1471,9 +1471,9 @@ int BLI_ensure_extension(char *path, size_t maxlen, const char *ext)
return 1;
}
- for (a= path_len - 1; a >= 0; a--) {
+ for (a = path_len - 1; a >= 0; a--) {
if (path[a] == '.') {
- path[a]= '\0';
+ path[a] = '\0';
}
else {
break;
@@ -1484,7 +1484,7 @@ int BLI_ensure_extension(char *path, size_t maxlen, const char *ext)
if (a + ext_len >= maxlen)
return 0;
- memcpy(path+a, ext, ext_len + 1);
+ memcpy(path + a, ext, ext_len + 1);
return 1;
}
@@ -1497,7 +1497,7 @@ int BLI_ensure_extension(char *path, size_t maxlen, const char *ext)
void BLI_split_dirfile(const char *string, char *dir, char *file, const size_t dirlen, const size_t filelen)
{
char *lslash_str = BLI_last_slash(string);
- size_t lslash= lslash_str ? (size_t)(lslash_str - string) + 1 : 0;
+ size_t lslash = lslash_str ? (size_t)(lslash_str - string) + 1 : 0;
if (dir) {
if (lslash) {
@@ -1509,7 +1509,7 @@ void BLI_split_dirfile(const char *string, char *dir, char *file, const size_t d
}
if (file) {
- BLI_strncpy(file, string+lslash, filelen);
+ BLI_strncpy(file, string + lslash, filelen);
}
}
@@ -1526,12 +1526,12 @@ void BLI_split_file_part(const char *string, char *file, const size_t filelen)
/* simple appending of filename to dir, does not check for valid path! */
void BLI_join_dirfile(char *dst, const size_t maxlen, const char *dir, const char *file)
{
- size_t dirlen= BLI_strnlen(dir, maxlen);
+ size_t dirlen = BLI_strnlen(dir, maxlen);
if (dst != dir) {
if (dirlen == maxlen) {
memcpy(dst, dir, dirlen);
- dst[dirlen - 1]= '\0';
+ dst[dirlen - 1] = '\0';
return; /* dir fills the path */
}
else {
@@ -1546,7 +1546,7 @@ void BLI_join_dirfile(char *dst, const size_t maxlen, const char *dir, const cha
/* inline BLI_add_slash */
if ((dirlen > 0) && (dst[dirlen - 1] != SEP)) {
dst[dirlen++] = SEP;
- dst[dirlen ] = '\0';
+ dst[dirlen] = '\0';
}
if (dirlen >= maxlen) {
@@ -1563,7 +1563,7 @@ void BLI_join_dirfile(char *dst, const size_t maxlen, const char *dir, const cha
/* like pythons os.path.basename( ) */
char *BLI_path_basename(char *path)
{
- char *filename= BLI_last_slash(path);
+ char *filename = BLI_last_slash(path);
return filename ? filename + 1 : path;
}
@@ -1598,20 +1598,20 @@ int BKE_rebase_path(char *abs, size_t abs_len, char *rel, size_t rel_len, const
char path[FILE_MAX];
char dir[FILE_MAX];
char base[FILE_MAX];
- char blend_dir[FILE_MAX]; /* directory, where current .blend file resides */
+ char blend_dir[FILE_MAX]; /* directory, where current .blend file resides */
char dest_path[FILE_MAX];
char rel_dir[FILE_MAX];
int len;
if (abs)
- abs[0]= 0;
+ abs[0] = 0;
if (rel)
- rel[0]= 0;
+ rel[0] = 0;
BLI_split_dir_part(base_dir, blend_dir, sizeof(blend_dir));
- if (src_dir[0]=='\0')
+ if (src_dir[0] == '\0')
return 0;
BLI_strncpy(path, src_dir, sizeof(path));
@@ -1622,7 +1622,7 @@ int BKE_rebase_path(char *abs, size_t abs_len, char *rel, size_t rel_len, const
/* get the directory part */
BLI_split_dirfile(path, dir, base, sizeof(dir), sizeof(base));
- len= strlen(blend_dir);
+ len = strlen(blend_dir);
rel_dir[0] = 0;
@@ -1669,8 +1669,8 @@ char *BLI_first_slash(char *string)
{
char *ffslash, *fbslash;
- ffslash= strchr(string, '/');
- fbslash= strchr(string, '\\');
+ ffslash = strchr(string, '/');
+ fbslash = strchr(string, '\\');
if (!ffslash) return fbslash;
else if (!fbslash) return ffslash;
@@ -1683,8 +1683,8 @@ char *BLI_last_slash(const char *string)
{
char *lfslash, *lbslash;
- lfslash= strrchr(string, '/');
- lbslash= strrchr(string, '\\');
+ lfslash = strrchr(string, '/');
+ lbslash = strrchr(string, '\\');
if (!lfslash) return lbslash;
else if (!lbslash) return lfslash;
@@ -1697,10 +1697,10 @@ char *BLI_last_slash(const char *string)
int BLI_add_slash(char *string)
{
int len = strlen(string);
- if (len==0 || string[len-1] != SEP) {
+ if (len == 0 || string[len - 1] != SEP) {
string[len] = SEP;
- string[len+1] = '\0';
- return len+1;
+ string[len + 1] = '\0';
+ return len + 1;
}
return len;
}
@@ -1710,8 +1710,8 @@ void BLI_del_slash(char *string)
{
int len = strlen(string);
while (len) {
- if (string[len-1] == SEP) {
- string[len-1] = '\0';
+ if (string[len - 1] == SEP) {
+ string[len - 1] = '\0';
len--;
}
else {
@@ -1747,7 +1747,7 @@ static int add_win32_extension(char *name)
}
type = BLI_exists(filename);
- if (type && (! S_ISDIR(type))) {
+ if (type && (!S_ISDIR(type))) {
retval = 1;
strcpy(name, filename);
break;
@@ -1798,7 +1798,7 @@ static void bli_where_am_i(char *fullname, const size_t maxlen, const char *name
#endif
#ifdef _WIN32
- wchar_t * fullname_16 = MEM_mallocN(maxlen*sizeof(wchar_t), "ProgramPath");
+ wchar_t *fullname_16 = MEM_mallocN(maxlen * sizeof(wchar_t), "ProgramPath");
if (GetModuleFileNameW(0, fullname_16, maxlen)) {
conv_utf_16_to_8(fullname_16, fullname, maxlen);
if (!BLI_exists(fullname)) {
@@ -1817,12 +1817,12 @@ static void bli_where_am_i(char *fullname, const size_t maxlen, const char *name
BLI_strncpy(fullname, name, maxlen);
if (name[0] == '.') {
- char wdir[FILE_MAX]= "";
- BLI_current_working_dir(wdir, sizeof(wdir)); /* backup cwd to restore after */
+ char wdir[FILE_MAX] = "";
+ BLI_current_working_dir(wdir, sizeof(wdir)); /* backup cwd to restore after */
// not needed but avoids annoying /./ in name
- if (name[1]==SEP)
- BLI_join_dirfile(fullname, maxlen, wdir, name+2);
+ if (name[1] == SEP)
+ BLI_join_dirfile(fullname, maxlen, wdir, name + 2);
else
BLI_join_dirfile(fullname, maxlen, wdir, name);
@@ -1955,22 +1955,22 @@ void BLI_system_temporary_dir(char *dir)
void BLI_string_to_utf8(char *original, char *utf_8, const char *code)
{
- size_t inbytesleft=strlen(original);
- size_t outbytesleft=512;
- size_t rv=0;
+ size_t inbytesleft = strlen(original);
+ size_t outbytesleft = 512;
+ size_t rv = 0;
iconv_t cd;
if (NULL == code) {
code = locale_charset();
}
- cd=iconv_open("UTF-8", code);
+ cd = iconv_open("UTF-8", code);
if (cd == (iconv_t)(-1)) {
printf("iconv_open Error");
- *utf_8='\0';
+ *utf_8 = '\0';
return;
}
- rv=iconv(cd, &original, &inbytesleft, &utf_8, &outbytesleft);
+ rv = iconv(cd, &original, &inbytesleft, &utf_8, &outbytesleft);
if (rv == (size_t) -1) {
printf("iconv Error\n");
return;
@@ -1979,5 +1979,3 @@ void BLI_string_to_utf8(char *original, char *utf_8, const char *code)
iconv_close(cd);
}
#endif // WITH_ICONV
-
-
diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c
index d80f90ec41a..fdb0cc0ccc8 100644
--- a/source/blender/blenlib/intern/pbvh.c
+++ b/source/blender/blenlib/intern/pbvh.c
@@ -381,7 +381,7 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
GHash *map;
int i, j, totface;
- map = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "build_mesh_leaf_node gh");
+ map = BLI_ghash_int_new("build_mesh_leaf_node gh");
node->uniq_verts = node->face_verts = 0;
totface = node->totprim;
@@ -1090,11 +1090,8 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes,
copy_v3_v3(no, vnor[v]);
normalize_v3(no);
-
- mvert->no[0] = (short)(no[0] * 32767.0f);
- mvert->no[1] = (short)(no[1] * 32767.0f);
- mvert->no[2] = (short)(no[2] * 32767.0f);
-
+ normal_float_to_short_v3(mvert->no, no);
+
mvert->flag &= ~ME_VERT_PBVH_UPDATE;
}
}
@@ -1265,7 +1262,7 @@ void BLI_pbvh_get_grid_updates(PBVH *bvh, int clear, void ***gridfaces, int *tot
unsigned i;
int tot;
- map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "pbvh_get_grid_updates gh");
+ map = BLI_ghash_ptr_new("pbvh_get_grid_updates gh");
pbvh_iter_begin(&iter, bvh, NULL, NULL);
diff --git a/source/blender/blenlib/intern/rand.c b/source/blender/blenlib/intern/rand.c
index b2e6cabec57..4435e9ce09c 100644
--- a/source/blender/blenlib/intern/rand.c
+++ b/source/blender/blenlib/intern/rand.c
@@ -41,22 +41,22 @@
#include "BLI_rand.h"
#if defined(WIN32) && !defined(FREE_WINDOWS)
-typedef unsigned __int64 r_uint64;
+typedef unsigned __int64 r_uint64;
-#define MULTIPLIER 0x5DEECE66Di64
-#define MASK 0x0000FFFFFFFFFFFFi64
+#define MULTIPLIER 0x5DEECE66Di64
+#define MASK 0x0000FFFFFFFFFFFFi64
#else
-typedef unsigned long long r_uint64;
+typedef unsigned long long r_uint64;
-#define MULTIPLIER 0x5DEECE66Dll
-#define MASK 0x0000FFFFFFFFFFFFll
+#define MULTIPLIER 0x5DEECE66Dll
+#define MASK 0x0000FFFFFFFFFFFFll
#endif
-#define ADDEND 0xB
+#define ADDEND 0xB
-#define LOWSEED 0x330E
+#define LOWSEED 0x330E
-extern unsigned char hash[]; // noise.c
+extern unsigned char hash[]; // noise.c
/***/
@@ -64,7 +64,7 @@ struct RNG {
r_uint64 X;
};
-RNG *rng_new(unsigned int seed)
+RNG *rng_new(unsigned int seed)
{
RNG *rng = MEM_mallocN(sizeof(*rng), "rng");
@@ -73,39 +73,39 @@ RNG *rng_new(unsigned int seed)
return rng;
}
-void rng_free(RNG* rng)
+void rng_free(RNG *rng)
{
MEM_freeN(rng);
}
void rng_seed(RNG *rng, unsigned int seed)
{
- rng->X= (((r_uint64) seed)<<16) | LOWSEED;
+ rng->X = (((r_uint64) seed) << 16) | LOWSEED;
}
void rng_srandom(RNG *rng, unsigned int seed)
{
rng_seed(rng, seed + hash[seed & 255]);
- seed= rng_getInt(rng);
+ seed = rng_getInt(rng);
rng_seed(rng, seed + hash[seed & 255]);
- seed= rng_getInt(rng);
+ seed = rng_getInt(rng);
rng_seed(rng, seed + hash[seed & 255]);
}
int rng_getInt(RNG *rng)
{
- rng->X= (MULTIPLIER*rng->X + ADDEND)&MASK;
- return (int) (rng->X>>17);
+ rng->X = (MULTIPLIER * rng->X + ADDEND) & MASK;
+ return (int) (rng->X >> 17);
}
double rng_getDouble(RNG *rng)
{
- return (double) rng_getInt(rng)/0x80000000;
+ return (double) rng_getInt(rng) / 0x80000000;
}
float rng_getFloat(RNG *rng)
{
- return (float) rng_getInt(rng)/0x80000000;
+ return (float) rng_getInt(rng) / 0x80000000;
}
void rng_shuffleArray(RNG *rng, void *data, int elemSize, int numElems)
@@ -122,10 +122,10 @@ void rng_shuffleArray(RNG *rng, void *data, int elemSize, int numElems)
/* XXX Shouldn't it rather be "while (i--) {" ?
* Else we have no guaranty first (0) element has a chance to be shuffled... --mont29 */
while (--i) {
- int j = rng_getInt(rng)%numElems;
- if (i!=j) {
- void *iElem = (unsigned char*)data + i*elemSize;
- void *jElem = (unsigned char*)data + j*elemSize;
+ int j = rng_getInt(rng) % numElems;
+ if (i != j) {
+ void *iElem = (unsigned char *)data + i * elemSize;
+ void *jElem = (unsigned char *)data + j * elemSize;
memcpy(temp, iElem, elemSize);
memcpy(iElem, jElem, elemSize);
memcpy(jElem, temp, elemSize);
@@ -139,7 +139,7 @@ void rng_skip(RNG *rng, int n)
{
int i;
- for (i=0; i<n; i++)
+ for (i = 0; i < n; i++)
rng_getInt(rng);
}
@@ -177,10 +177,10 @@ float BLI_frand(void)
void BLI_fillrand(void *addr, int len)
{
RNG rng;
- unsigned char *p= addr;
+ unsigned char *p = addr;
- rng_seed(&rng, (unsigned int) (PIL_check_seconds_timer()*0x7FFFFFFF));
- while (len--) *p++= rng_getInt(&rng)&0xFF;
+ rng_seed(&rng, (unsigned int) (PIL_check_seconds_timer() * 0x7FFFFFFF));
+ while (len--) *p++ = rng_getInt(&rng) & 0xFF;
}
void BLI_array_randomize(void *data, int elemSize, int numElems, unsigned int seed)
@@ -198,12 +198,12 @@ static RNG rng_tab[BLENDER_MAX_THREADS];
void BLI_thread_srandom(int thread, unsigned int seed)
{
if (thread >= BLENDER_MAX_THREADS)
- thread= 0;
+ thread = 0;
rng_seed(&rng_tab[thread], seed + hash[seed & 255]);
- seed= rng_getInt(&rng_tab[thread]);
+ seed = rng_getInt(&rng_tab[thread]);
rng_seed(&rng_tab[thread], seed + hash[seed & 255]);
- seed= rng_getInt(&rng_tab[thread]);
+ seed = rng_getInt(&rng_tab[thread]);
rng_seed(&rng_tab[thread], seed + hash[seed & 255]);
}
diff --git a/source/blender/blenlib/intern/rct.c b/source/blender/blenlib/intern/rct.c
index 81a940e4613..b36c3c717c0 100644
--- a/source/blender/blenlib/intern/rct.c
+++ b/source/blender/blenlib/intern/rct.c
@@ -38,17 +38,17 @@
#include "DNA_vec_types.h"
#include "BLI_rect.h"
-int BLI_rcti_is_empty(rcti * rect)
+int BLI_rcti_is_empty(rcti *rect)
{
return ((rect->xmax <= rect->xmin) || (rect->ymax <= rect->ymin));
}
-int BLI_rctf_is_empty(rctf * rect)
+int BLI_rctf_is_empty(rctf *rect)
{
return ((rect->xmax <= rect->xmin) || (rect->ymax <= rect->ymin));
}
-int BLI_in_rcti(rcti * rect, int x, int y)
+int BLI_in_rcti(rcti *rect, int x, int y)
{
if (x < rect->xmin) return 0;
if (x > rect->xmax) return 0;
diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c
index 503de31616a..94752965f3a 100644
--- a/source/blender/blenlib/intern/scanfill.c
+++ b/source/blender/blenlib/intern/scanfill.c
@@ -86,8 +86,8 @@ typedef struct PolyFill {
} PolyFill;
typedef struct ScanFillVertLink {
- ScanFillVert *v1;
- ScanFillEdge *first, *last;
+ ScanFillVert *vert;
+ ScanFillEdge *edge_first, *edge_last;
} ScanFillVertLink;
@@ -112,10 +112,10 @@ static int vergscdata(const void *a1, const void *a2)
{
const ScanFillVertLink *x1 = a1, *x2 = a2;
- if (x1->v1->xy[1] < x2->v1->xy[1]) return 1;
- else if (x1->v1->xy[1] > x2->v1->xy[1]) return -1;
- else if (x1->v1->xy[0] > x2->v1->xy[0]) return 1;
- else if (x1->v1->xy[0] < x2->v1->xy[0]) return -1;
+ if (x1->vert->xy[1] < x2->vert->xy[1]) return 1;
+ else if (x1->vert->xy[1] > x2->vert->xy[1]) return -1;
+ else if (x1->vert->xy[0] > x2->vert->xy[0]) return 1;
+ else if (x1->vert->xy[0] < x2->vert->xy[0]) return -1;
return 0;
}
@@ -193,7 +193,7 @@ static void mem_element_reset(ScanFillContext *sf_ctx, int keep_first)
void BLI_scanfill_end(ScanFillContext *sf_ctx)
{
- mem_element_reset(sf_ctx, FALSE);
+ mem_element_reset(sf_ctx, FALSE);
sf_ctx->fillvertbase.first = sf_ctx->fillvertbase.last = NULL;
sf_ctx->filledgebase.first = sf_ctx->filledgebase.last = NULL;
@@ -230,14 +230,14 @@ ScanFillEdge *BLI_scanfill_edge_add(ScanFillContext *sf_ctx, ScanFillVert *v1, S
static void addfillface(ScanFillContext *sf_ctx, ScanFillVert *v1, ScanFillVert *v2, ScanFillVert *v3)
{
/* does not make edges */
- ScanFillFace *evl;
+ ScanFillFace *sf_tri;
- evl = mem_element_new(sf_ctx, sizeof(ScanFillFace));
- BLI_addtail(&sf_ctx->fillfacebase, evl);
+ sf_tri = mem_element_new(sf_ctx, sizeof(ScanFillFace));
+ BLI_addtail(&sf_ctx->fillfacebase, sf_tri);
- evl->v1 = v1;
- evl->v2 = v2;
- evl->v3 = v3;
+ sf_tri->v1 = v1;
+ sf_tri->v2 = v2;
+ sf_tri->v3 = v3;
}
static int boundisect(PolyFill *pf2, PolyFill *pf1)
@@ -311,8 +311,8 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed)
ScanFillEdge *ed;
float fac, fac1, x, y;
- if (sc->first == NULL) {
- sc->first = sc->last = eed;
+ if (sc->edge_first == NULL) {
+ sc->edge_first = sc->edge_last = eed;
eed->prev = eed->next = NULL;
return 1;
}
@@ -327,7 +327,7 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed)
}
else fac1 = (x - eed->v2->xy[0]) / fac1;
- for (ed = sc->first; ed; ed = ed->next) {
+ for (ed = sc->edge_first; ed; ed = ed->next) {
if (ed->v2 == eed->v2) {
return 0;
@@ -345,8 +345,8 @@ static short addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed)
break;
}
}
- if (ed) BLI_insertlinkbefore((ListBase *)&(sc->first), ed, eed);
- else BLI_addtail((ListBase *)&(sc->first), eed);
+ if (ed) BLI_insertlinkbefore((ListBase *)&(sc->edge_first), ed, eed);
+ else BLI_addtail((ListBase *)&(sc->edge_first), eed);
return 1;
}
@@ -373,7 +373,7 @@ static ScanFillVertLink *addedgetoscanlist(ScanFillContext *sf_ctx, ScanFillEdge
eed->v2 = eve;
}
/* find location in list */
- scsearch.v1 = eed->v1;
+ scsearch.vert = eed->v1;
sc = (ScanFillVertLink *)bsearch(&scsearch, sf_ctx->_scdata, len,
sizeof(ScanFillVertLink), vergscdata);
@@ -559,7 +559,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
if (eve->f != SF_VERT_ZERO_LEN) {
verts++;
eve->f = 0; /* flag for connectedges later on */
- sc->v1 = eve;
+ sc->vert = eve;
sc++;
}
}
@@ -616,11 +616,11 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
sc = sf_ctx->_scdata;
for (a = 0; a < verts; a++) {
/* printf("VERTEX %d %x\n",a,sc->v1); */
- ed1 = sc->first;
+ ed1 = sc->edge_first;
while (ed1) { /* set connectflags */
nexted = ed1->next;
if (ed1->v1->h == 1 || ed1->v2->h == 1) {
- BLI_remlink((ListBase *)&(sc->first), ed1);
+ BLI_remlink((ListBase *)&(sc->edge_first), ed1);
BLI_addtail(&sf_ctx->filledgebase, ed1);
if (ed1->v1->h > 1) ed1->v1->h--;
if (ed1->v2->h > 1) ed1->v2->h--;
@@ -629,8 +629,8 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
ed1 = nexted;
}
- while (sc->first) { /* for as long there are edges */
- ed1 = sc->first;
+ while (sc->edge_first) { /* for as long there are edges */
+ ed1 = sc->edge_first;
ed2 = ed1->next;
/* commented out... the ESC here delivers corrupted memory (and doesnt work during grab) */
@@ -641,7 +641,7 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
break;
}
if (ed2 == 0) {
- sc->first = sc->last = NULL;
+ sc->edge_first = sc->edge_last = NULL;
/* printf("just 1 edge to vert\n"); */
BLI_addtail(&sf_ctx->filledgebase, ed1);
ed1->v2->f = 0;
@@ -663,12 +663,12 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
test = 0;
for (b = a + 1; b < verts; b++) {
- if (sc1->v1->f == 0) {
- if (sc1->v1->xy[1] <= miny) break;
+ if (sc1->vert->f == 0) {
+ if (sc1->vert->xy[1] <= miny) break;
- if (testedgeside(v1->xy, v2->xy, sc1->v1->xy))
- if (testedgeside(v2->xy, v3->xy, sc1->v1->xy))
- if (testedgeside(v3->xy, v1->xy, sc1->v1->xy)) {
+ if (testedgeside(v1->xy, v2->xy, sc1->vert->xy))
+ if (testedgeside(v2->xy, v3->xy, sc1->vert->xy))
+ if (testedgeside(v3->xy, v1->xy, sc1->vert->xy)) {
/* point in triangle */
test = 1;
@@ -679,11 +679,11 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
}
if (test) {
/* make new edge, and start over */
- /* printf("add new edge %x %x and start again\n",v2,sc1->v1); */
+ /* printf("add new edge %x %x and start again\n",v2,sc1->vert); */
- ed3 = BLI_scanfill_edge_add(sf_ctx, v2, sc1->v1);
+ ed3 = BLI_scanfill_edge_add(sf_ctx, v2, sc1->vert);
BLI_remlink(&sf_ctx->filledgebase, ed3);
- BLI_insertlinkbefore((ListBase *)&(sc->first), ed2, ed3);
+ BLI_insertlinkbefore((ListBase *)&(sc->edge_first), ed2, ed3);
ed3->v2->f = SF_VERT_UNKNOWN;
ed3->f = SF_EDGE_UNKNOWN;
ed3->v1->h++;
@@ -694,14 +694,14 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
/* printf("add face %x %x %x\n",v1,v2,v3); */
addfillface(sf_ctx, v1, v2, v3);
totface++;
- BLI_remlink((ListBase *)&(sc->first), ed1);
+ BLI_remlink((ListBase *)&(sc->edge_first), ed1);
BLI_addtail(&sf_ctx->filledgebase, ed1);
ed1->v2->f = 0;
ed1->v1->h--;
ed1->v2->h--;
/* ed2 can be removed when it's a boundary edge */
if ((ed2->f == 0 && twoconnected) || (ed2->f == SF_EDGE_BOUNDARY)) {
- BLI_remlink((ListBase *)&(sc->first), ed2);
+ BLI_remlink((ListBase *)&(sc->edge_first), ed2);
BLI_addtail(&sf_ctx->filledgebase, ed2);
ed2->v2->f = 0;
ed2->v1->h--;
@@ -723,11 +723,11 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
ed3->v1->h--;
ed3->v2->h--;
- ed3 = sc1->first;
+ ed3 = sc1->edge_first;
while (ed3) {
if ( (ed3->v1 == v1 && ed3->v2 == v3) || (ed3->v1 == v3 && ed3->v2 == v1) ) {
if (twoconnected || ed3->f == SF_EDGE_BOUNDARY) {
- BLI_remlink((ListBase *)&(sc1->first), ed3);
+ BLI_remlink((ListBase *)&(sc1->edge_first), ed3);
BLI_addtail(&sf_ctx->filledgebase, ed3);
ed3->v1->h--;
ed3->v2->h--;
@@ -741,11 +741,11 @@ static int scanfill(ScanFillContext *sf_ctx, PolyFill *pf)
}
}
/* test for loose edges */
- ed1 = sc->first;
+ ed1 = sc->edge_first;
while (ed1) {
nexted = ed1->next;
if (ed1->v1->h < 2 || ed1->v2->h < 2) {
- BLI_remlink((ListBase *)&(sc->first), ed1);
+ BLI_remlink((ListBase *)&(sc->edge_first), ed1);
BLI_addtail(&sf_ctx->filledgebase, ed1);
if (ed1->v1->h > 1) ed1->v1->h--;
if (ed1->v2->h > 1) ed1->v2->h--;
diff --git a/source/blender/blenlib/intern/smallhash.c b/source/blender/blenlib/intern/smallhash.c
index fb03849bfb3..92125c6e988 100644
--- a/source/blender/blenlib/intern/smallhash.c
+++ b/source/blender/blenlib/intern/smallhash.c
@@ -40,8 +40,8 @@
*
* note: these have the SMHASH suffix because we may want to make them public.
*/
-#define SMHASH_CELL_UNUSED ((void *)0x7FFFFFFF)
-#define SMHASH_CELL_FREE ((void *)0x7FFFFFFD)
+#define SMHASH_CELL_UNUSED ((void *)0x7FFFFFFF)
+#define SMHASH_CELL_FREE ((void *)0x7FFFFFFD)
#define SMHASH_NONZERO(n) ((n) + !(n))
#define SMHASH_NEXT(h, hoff) ABS(((h) + ((hoff = SMHASH_NONZERO(hoff * 2) + 1), hoff)))
@@ -80,7 +80,7 @@ void BLI_smallhash_release(SmallHash *hash)
void BLI_smallhash_insert(SmallHash *hash, uintptr_t key, void *item)
{
- int h, hoff=1;
+ int h, hoff = 1;
if (hash->size < hash->used * 3) {
int newsize = hashsizes[++hash->curhash];
@@ -103,7 +103,7 @@ void BLI_smallhash_insert(SmallHash *hash, uintptr_t key, void *item)
hash->table[i].val = SMHASH_CELL_FREE;
}
- for (i = 0; i<hashsizes[hash->curhash - 1]; i++) {
+ for (i = 0; i < hashsizes[hash->curhash - 1]; i++) {
if (ELEM(tmp[i].val, SMHASH_CELL_UNUSED, SMHASH_CELL_FREE)) {
continue;
}
@@ -141,7 +141,7 @@ void BLI_smallhash_insert(SmallHash *hash, uintptr_t key, void *item)
void BLI_smallhash_remove(SmallHash *hash, uintptr_t key)
{
- int h, hoff=1;
+ int h, hoff = 1;
h = ABS((int)key);
@@ -162,7 +162,7 @@ void BLI_smallhash_remove(SmallHash *hash, uintptr_t key)
void *BLI_smallhash_lookup(SmallHash *hash, uintptr_t key)
{
- int h, hoff=1;
+ int h, hoff = 1;
void *v;
h = ABS((int)key);
@@ -193,7 +193,7 @@ void *BLI_smallhash_lookup(SmallHash *hash, uintptr_t key)
int BLI_smallhash_haskey(SmallHash *hash, uintptr_t key)
{
int h = ABS((int)key);
- int hoff =1;
+ int hoff = 1;
if (hash->table == NULL) {
return 0;
@@ -251,21 +251,21 @@ void *BLI_smallhash_iternew(SmallHash *hash, SmallHashIter *iter, uintptr_t *key
#if 0
void BLI_smallhash_print(SmallHash *hash)
{
- int i, linecol=79, c=0;
+ int i, linecol = 79, c = 0;
printf("{");
- for (i=0; i<hash->size; i++) {
+ for (i = 0; i < hash->size; i++) {
if (hash->table[i].val == SMHASH_CELL_UNUSED) {
printf("--u-");
}
else if (hash->table[i].val == SMHASH_CELL_FREE) {
printf("--f-");
}
- else {
+ else {
printf("%2x", (unsigned int)hash->table[i].key);
}
- if (i != hash->size-1)
+ if (i != hash->size - 1)
printf(", ");
c += 6;
diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c
index 047463f1e26..d4f251d4f5e 100644
--- a/source/blender/blenlib/intern/storage.c
+++ b/source/blender/blenlib/intern/storage.c
@@ -43,13 +43,13 @@
#include <time.h>
#include <sys/stat.h>
-#if defined (__sun__) || defined (__sun) || defined (__NetBSD__)
+#if defined(__sun__) || defined(__sun) || defined(__NetBSD__)
#include <sys/statvfs.h> /* Other modern unix os's should probably use this also */
#elif !defined(__FreeBSD__) && !defined(linux) && (defined(__sparc) || defined(__sparc__))
#include <sys/statfs.h>
#endif
-#if defined (__FreeBSD__) || defined (__OpenBSD__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
#include <sys/param.h>
#include <sys/mount.h>
#endif
@@ -66,7 +66,7 @@
#include <fcntl.h>
-#include <string.h> /* strcpy etc.. */
+#include <string.h> /* strcpy etc.. */
#ifdef WIN32
# include <io.h>
@@ -98,13 +98,13 @@
static int totnum, actnum;
static struct direntry *files;
-static struct ListBase dirbase_={NULL, NULL};
+static struct ListBase dirbase_ = {NULL, NULL};
static struct ListBase *dirbase = &dirbase_;
/* can return NULL when the size is not big enough */
char *BLI_current_working_dir(char *dir, const int maxncpy)
{
- const char *pwd= getenv("PWD");
+ const char *pwd = getenv("PWD");
if (pwd) {
BLI_strncpy(dir, pwd, maxncpy);
return dir;
@@ -119,13 +119,13 @@ static int bli_compare(struct direntry *entry1, struct direntry *entry2)
/* type is equal to stat.st_mode */
if (S_ISDIR(entry1->type)) {
- if (S_ISDIR(entry2->type)==0) return (-1);
+ if (S_ISDIR(entry2->type) == 0) return (-1);
}
else {
if (S_ISDIR(entry2->type)) return (1);
}
if (S_ISREG(entry1->type)) {
- if (S_ISREG(entry2->type)==0) return (-1);
+ if (S_ISREG(entry2->type) == 0) return (-1);
}
else {
if (S_ISREG(entry2->type)) return (1);
@@ -134,10 +134,10 @@ static int bli_compare(struct direntry *entry1, struct direntry *entry2)
if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
/* make sure "." and ".." are always first */
- if ( strcmp(entry1->relname, ".")==0 ) return (-1);
- if ( strcmp(entry2->relname, ".")==0 ) return (1);
- if ( strcmp(entry1->relname, "..")==0 ) return (-1);
- if ( strcmp(entry2->relname, "..")==0 ) return (1);
+ if (strcmp(entry1->relname, ".") == 0) return (-1);
+ if (strcmp(entry2->relname, ".") == 0) return (1);
+ if (strcmp(entry1->relname, "..") == 0) return (-1);
+ if (strcmp(entry2->relname, "..") == 0) return (1);
return (BLI_natstrcmp(entry1->relname, entry2->relname));
}
@@ -149,24 +149,24 @@ double BLI_dir_free_space(const char *dir)
DWORD sectorspc, bytesps, freec, clusters;
char tmp[4];
- tmp[0]='\\'; tmp[1]=0; /* Just a failsafe */
- if (dir[0]=='/' || dir[0]=='\\') {
- tmp[0]='\\';
- tmp[1]=0;
+ tmp[0] = '\\'; tmp[1] = 0; /* Just a failsafe */
+ if (dir[0] == '/' || dir[0] == '\\') {
+ tmp[0] = '\\';
+ tmp[1] = 0;
}
- else if (dir[1]==':') {
- tmp[0]=dir[0];
- tmp[1]=':';
- tmp[2]='\\';
- tmp[3]=0;
+ else if (dir[1] == ':') {
+ tmp[0] = dir[0];
+ tmp[1] = ':';
+ tmp[2] = '\\';
+ tmp[3] = 0;
}
GetDiskFreeSpace(tmp, &sectorspc, &bytesps, &freec, &clusters);
- return (double) (freec*bytesps*sectorspc);
+ return (double) (freec * bytesps * sectorspc);
#else
-#if defined (__sun__) || defined (__sun) || defined (__NetBSD__)
+#if defined(__sun__) || defined(__sun) || defined(__NetBSD__)
struct statvfs disk;
#else
struct statfs disk;
@@ -185,11 +185,11 @@ double BLI_dir_free_space(const char *dir)
}
else strcpy(name, "/");
-#if defined (__FreeBSD__) || defined (linux) || defined (__OpenBSD__) || defined (__APPLE__) || defined(__GNU__) || defined(__GLIBC__)
+#if defined(__FreeBSD__) || defined(linux) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__GNU__) || defined(__GLIBC__)
if (statfs(name, &disk)) return(-1);
#endif
-#if defined (__sun__) || defined (__sun) || defined (__NetBSD__)
+#if defined(__sun__) || defined(__sun) || defined(__NetBSD__)
if (statvfs(name, &disk)) return(-1);
#elif !defined(__FreeBSD__) && !defined(linux) && (defined(__sparc) || defined(__sparc__))
/* WARNING - This may not be supported by geeneric unix os's - Campbell */
@@ -209,10 +209,10 @@ static void bli_builddir(const char *dirname, const char *relname)
DIR *dir;
BLI_strncpy(buf, relname, sizeof(buf));
- rellen=strlen(relname);
+ rellen = strlen(relname);
if (rellen) {
- buf[rellen]='/';
+ buf[rellen] = '/';
rellen++;
}
#ifndef WIN32
@@ -231,7 +231,7 @@ static void bli_builddir(const char *dirname, const char *relname)
#endif
if ((dir = (DIR *)opendir("."))) {
- while ((fname = (struct dirent*) readdir(dir)) != NULL) {
+ while ((fname = (struct dirent *) readdir(dir)) != NULL) {
dlink = (struct dirlink *)malloc(sizeof(struct dirlink));
if (dlink) {
BLI_strncpy(buf + rellen, fname->d_name, sizeof(buf) - rellen);
@@ -244,7 +244,7 @@ static void bli_builddir(const char *dirname, const char *relname)
if (newnum) {
if (files) {
- void *tmp = realloc(files, (totnum+newnum) * sizeof(struct direntry));
+ void *tmp = realloc(files, (totnum + newnum) * sizeof(struct direntry));
if (tmp) {
files = (struct direntry *)tmp;
}
@@ -254,8 +254,8 @@ static void bli_builddir(const char *dirname, const char *relname)
}
}
- if (files==NULL)
- files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
+ if (files == NULL)
+ files = (struct direntry *)malloc(newnum * sizeof(struct direntry));
if (files) {
dlink = (struct dirlink *) dirbase->first;
@@ -266,18 +266,20 @@ static void bli_builddir(const char *dirname, const char *relname)
// use 64 bit file size, only needed for WIN32 and WIN64.
// Excluding other than current MSVC compiler until able to test
#ifdef WIN32
- {wchar_t * name_16 = alloc_utf16_from_8(dlink->name, 0);
-#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500)
- _wstat64(name_16, &files[actnum].s);
+ {
+ wchar_t *name_16 = alloc_utf16_from_8(dlink->name, 0);
+#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER >= 1500)
+ _wstat64(name_16, &files[actnum].s);
#elif defined(__MINGW32__)
- _stati64(dlink->name, &files[actnum].s);
+ _stati64(dlink->name, &files[actnum].s);
#endif
- free(name_16);};
+ free(name_16);
+ }
#else
stat(dlink->name, &files[actnum].s);
#endif
- files[actnum].type=files[actnum].s.st_mode;
+ files[actnum].type = files[actnum].s.st_mode;
files[actnum].flags = 0;
totnum++;
actnum++;
@@ -290,7 +292,7 @@ static void bli_builddir(const char *dirname, const char *relname)
}
BLI_freelist(dirbase);
- if (files) qsort(files, actnum, sizeof(struct direntry), (int (*)(const void *, const void*))bli_compare);
+ if (files) qsort(files, actnum, sizeof(struct direntry), (int (*)(const void *, const void *))bli_compare);
}
else {
printf("%s empty directory\n", dirname);
@@ -308,7 +310,7 @@ static void bli_adddirstrings(void)
char datum[100];
char buf[512];
char size[250];
- static const char * types[8] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"};
+ static const char *types[8] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"};
int num, mode;
#ifdef WIN32
__int64 st_size;
@@ -316,11 +318,11 @@ static void bli_adddirstrings(void)
off_t st_size;
#endif
- struct direntry * file;
+ struct direntry *file;
struct tm *tm;
- time_t zero= 0;
+ time_t zero = 0;
- for (num=0, file= files; num<actnum; num++, file++) {
+ for (num = 0, file = files; num < actnum; num++, file++) {
#ifdef WIN32
mode = 0;
BLI_strncpy(file->mode1, types[0], sizeof(file->mode1));
@@ -333,13 +335,13 @@ static void bli_adddirstrings(void)
BLI_strncpy(file->mode2, types[(mode & 0070) >> 3], sizeof(file->mode2));
BLI_strncpy(file->mode3, types[(mode & 0007)], sizeof(file->mode3));
- if (((mode & S_ISGID) == S_ISGID) && (file->mode2[2]=='-'))file->mode2[2]='l';
+ if (((mode & S_ISGID) == S_ISGID) && (file->mode2[2] == '-')) file->mode2[2] = 'l';
if (mode & (S_ISUID | S_ISGID)) {
- if (file->mode1[2]=='x') file->mode1[2]='s';
- else file->mode1[2]='S';
+ if (file->mode1[2] == 'x') file->mode1[2] = 's';
+ else file->mode1[2] = 'S';
- if (file->mode2[2]=='x')file->mode2[2]='s';
+ if (file->mode2[2] == 'x') file->mode2[2] = 's';
}
if (mode & S_ISVTX) {
@@ -354,7 +356,7 @@ static void bli_adddirstrings(void)
{
struct passwd *pwuser;
pwuser = getpwuid(file->s.st_uid);
- if ( pwuser ) {
+ if (pwuser) {
BLI_strncpy(file->owner, pwuser->pw_name, sizeof(file->owner));
}
else {
@@ -363,9 +365,9 @@ static void bli_adddirstrings(void)
}
#endif
- tm= localtime(&file->s.st_mtime);
+ tm = localtime(&file->s.st_mtime);
// prevent impossible dates in windows
- if (tm==NULL) tm= localtime(&zero);
+ if (tm == NULL) tm = localtime(&zero);
strftime(file->time, sizeof(file->time), "%H:%M", tm);
strftime(file->date, sizeof(file->date), "%d-%b-%y", tm);
@@ -374,16 +376,16 @@ static void bli_adddirstrings(void)
* will buy us some time until files get bigger than 4GB or until
* everyone starts using __USE_FILE_OFFSET64 or equivalent.
*/
- st_size= file->s.st_size;
+ st_size = file->s.st_size;
- if (st_size > 1024*1024*1024) {
- BLI_snprintf(file->size, sizeof(file->size), "%.2f GB", ((double)st_size)/(1024*1024*1024));
+ if (st_size > 1024 * 1024 * 1024) {
+ BLI_snprintf(file->size, sizeof(file->size), "%.2f GB", ((double)st_size) / (1024 * 1024 * 1024));
}
- else if (st_size > 1024*1024) {
- BLI_snprintf(file->size, sizeof(file->size), "%.1f MB", ((double)st_size)/(1024*1024));
+ else if (st_size > 1024 * 1024) {
+ BLI_snprintf(file->size, sizeof(file->size), "%.1f MB", ((double)st_size) / (1024 * 1024));
}
else if (st_size > 1024) {
- BLI_snprintf(file->size, sizeof(file->size), "%d KB", (int)(st_size/1024));
+ BLI_snprintf(file->size, sizeof(file->size), "%d KB", (int)(st_size / 1024));
}
else {
BLI_snprintf(file->size, sizeof(file->size), "%d B", (int)st_size);
@@ -401,7 +403,7 @@ static void bli_adddirstrings(void)
}
else if (st_size < 100 * 1000 * 1000) {
BLI_snprintf(size, sizeof(size), "%2d %03d %03d",
- (int) (st_size / (1000 * 1000)), (int) ((st_size / 1000) % 1000), (int) ( st_size % 1000));
+ (int) (st_size / (1000 * 1000)), (int) ((st_size / 1000) % 1000), (int) (st_size % 1000));
}
else {
/* XXX, whats going on here?. 2x calls - campbell */
@@ -447,13 +449,13 @@ size_t BLI_file_descriptor_size(int file)
struct stat buf;
if (file <= 0) return (-1);
- fstat(file, &buf);//CHANGE
+ fstat(file, &buf); /* CHANGE */
return (buf.st_size);
}
size_t BLI_file_size(const char *path)
{
- int size, file = BLI_open(path, O_BINARY|O_RDONLY, 0);
+ int size, file = BLI_open(path, O_BINARY | O_RDONLY, 0);
if (file == -1)
return -1;
@@ -475,10 +477,10 @@ int BLI_exists(const char *name)
/* in Windows stat doesn't recognize dir ending on a slash
* To not break code where the ending slash is expected we
* don't mess with the argument name directly here - elubie */
- wchar_t * tmp_16 = alloc_utf16_from_8(name, 0);
+ wchar_t *tmp_16 = alloc_utf16_from_8(name, 0);
int len, res;
len = wcslen(tmp_16);
- if (len > 3 && ( tmp_16[len-1]==L'\\' || tmp_16[len-1]==L'/') ) tmp_16[len-1] = '\0';
+ if (len > 3 && (tmp_16[len - 1] == L'\\' || tmp_16[len - 1] == L'/') ) tmp_16[len - 1] = '\0';
#ifndef __MINGW32__
res = _wstat(tmp_16, &st);
#else
@@ -499,7 +501,7 @@ int BLI_stat(const char *path, struct stat *buffer)
{
int r;
UTF16_ENCODE(path);
- r=_wstat(path_16,buffer);
+ r = _wstat(path_16, buffer);
UTF16_UN_ENCODE(path);
return r;
}
@@ -518,39 +520,39 @@ int BLI_is_dir(const char *file)
int BLI_is_file(const char *path)
{
- int mode= BLI_exists(path);
+ int mode = BLI_exists(path);
return (mode && !S_ISDIR(mode));
}
LinkNode *BLI_file_read_as_lines(const char *name)
{
- FILE *fp= BLI_fopen(name, "r");
- LinkNode *lines= NULL;
+ FILE *fp = BLI_fopen(name, "r");
+ LinkNode *lines = NULL;
char *buf;
size_t size;
if (!fp) return NULL;
fseek(fp, 0, SEEK_END);
- size= (size_t)ftell(fp);
+ size = (size_t)ftell(fp);
fseek(fp, 0, SEEK_SET);
- buf= MEM_mallocN(size, "file_as_lines");
+ buf = MEM_mallocN(size, "file_as_lines");
if (buf) {
- size_t i, last= 0;
+ size_t i, last = 0;
- /*
- * size = because on win32 reading
- * all the bytes in the file will return
- * less bytes because of crnl changes.
- */
- size= fread(buf, 1, size, fp);
- for (i=0; i<=size; i++) {
- if (i==size || buf[i]=='\n') {
- char *line= BLI_strdupn(&buf[last], i-last);
+ /*
+ * size = because on win32 reading
+ * all the bytes in the file will return
+ * less bytes because of crnl changes.
+ */
+ size = fread(buf, 1, size, fp);
+ for (i = 0; i <= size; i++) {
+ if (i == size || buf[i] == '\n') {
+ char *line = BLI_strdupn(&buf[last], i - last);
BLI_linklist_prepend(&lines, line);
- last= i+1;
+ last = i + 1;
}
}
@@ -565,7 +567,7 @@ LinkNode *BLI_file_read_as_lines(const char *name)
void BLI_file_free_lines(LinkNode *lines)
{
- BLI_linklist_free(lines, (void(*)(void*)) MEM_freeN);
+ BLI_linklist_free(lines, (void (*)(void *))MEM_freeN);
}
/** is file1 older then file2 */
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index d880b895ced..53531871aa6 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -43,9 +43,9 @@
char *BLI_strdupn(const char *str, const size_t len)
{
- char *n= MEM_mallocN(len+1, "strdup");
+ char *n = MEM_mallocN(len + 1, "strdup");
memcpy(n, str, len);
- n[len]= '\0';
+ n[len] = '\0';
return n;
}
@@ -59,8 +59,8 @@ char *BLI_strdupcat(const char *str1, const char *str2)
size_t len;
char *n;
- len= strlen(str1)+strlen(str2);
- n= MEM_mallocN(len+1, "strdupcat");
+ len = strlen(str1) + strlen(str2);
+ n = MEM_mallocN(len + 1, "strdupcat");
strcpy(n, str1);
strcat(n, str2);
@@ -69,11 +69,11 @@ char *BLI_strdupcat(const char *str1, const char *str2)
char *BLI_strncpy(char *dst, const char *src, const size_t maxncpy)
{
- size_t srclen= strlen(src);
- size_t cpylen= (srclen>(maxncpy-1))?(maxncpy-1):srclen;
+ size_t srclen = strlen(src);
+ size_t cpylen = (srclen > (maxncpy - 1)) ? (maxncpy - 1) : srclen;
memcpy(dst, src, cpylen);
- dst[cpylen]= '\0';
+ dst[cpylen] = '\0';
return dst;
}
@@ -90,7 +90,7 @@ size_t BLI_snprintf(char *buffer, size_t count, const char *format, ...)
buffer[n] = '\0';
}
else {
- buffer[count-1] = '\0';
+ buffer[count - 1] = '\0';
}
va_end(arg);
@@ -105,9 +105,9 @@ char *BLI_sprintfN(const char *format, ...)
va_start(arg, format);
- ds= BLI_dynstr_new();
+ ds = BLI_dynstr_new();
BLI_dynstr_vappendf(ds, format, arg);
- n= BLI_dynstr_get_cstring(ds);
+ n = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
va_end(arg);
@@ -123,7 +123,7 @@ char *BLI_sprintfN(const char *format, ...)
* which is a useful reference. */
size_t BLI_strescape(char *dst, const char *src, const size_t maxlen)
{
- size_t len= 0;
+ size_t len = 0;
while (len < maxlen) {
switch (*src) {
case '\0':
@@ -131,7 +131,7 @@ size_t BLI_strescape(char *dst, const char *src, const size_t maxlen)
case '\\':
case '"':
- /* less common but should also be support */
+ /* less common but should also be support */
case '\t':
case '\n':
case '\r':
@@ -143,7 +143,7 @@ size_t BLI_strescape(char *dst, const char *src, const size_t maxlen)
/* not enough space to escape */
break;
}
- /* intentionally pass through */
+ /* intentionally pass through */
default:
*dst = *src;
}
@@ -154,7 +154,7 @@ size_t BLI_strescape(char *dst, const char *src, const size_t maxlen)
escape_finish:
- *dst= '\0';
+ *dst = '\0';
return len;
}
@@ -163,25 +163,25 @@ escape_finish:
/* Makes a copy of the text within the "" that appear after some text 'blahblah'
* i.e. for string 'pose["apples"]' with prefix 'pose[', it should grab "apples"
*
- * - str: is the entire string to chop
+ * - str: is the entire string to chop
* - prefix: is the part of the string to leave out
*
* Assume that the strings returned must be freed afterwards, and that the inputs will contain
* data we want...
*/
-char *BLI_getQuotedStr (const char *str, const char *prefix)
+char *BLI_getQuotedStr(const char *str, const char *prefix)
{
size_t prefixLen = strlen(prefix);
char *startMatch, *endMatch;
/* get the starting point (i.e. where prefix starts, and add prefixLen+1 to it to get be after the first " */
- startMatch= strstr(str, prefix) + prefixLen + 1;
+ startMatch = strstr(str, prefix) + prefixLen + 1;
/* get the end point (i.e. where the next occurance of " is after the starting point) */
- endMatch= strchr(startMatch, '"'); // " NOTE: this comment here is just so that my text editor still shows the functions ok...
+ endMatch = strchr(startMatch, '"'); // " NOTE: this comment here is just so that my text editor still shows the functions ok...
/* return the slice indicated */
- return BLI_strdupn(startMatch, (size_t)(endMatch-startMatch));
+ return BLI_strdupn(startMatch, (size_t)(endMatch - startMatch));
}
/* Replaces all occurrences of oldText with newText in str, returning a new string that doesn't
@@ -191,14 +191,14 @@ char *BLI_getQuotedStr (const char *str, const char *prefix)
// Feel free to replace this with an even safe + nicer alternative
char *BLI_replacestr(char *str, const char *oldText, const char *newText)
{
- DynStr *ds= NULL;
- size_t lenOld= strlen(oldText);
+ DynStr *ds = NULL;
+ size_t lenOld = strlen(oldText);
char *match;
/* sanity checks */
- if ((str == NULL) || (str[0]==0))
+ if ((str == NULL) || (str[0] == 0))
return NULL;
- else if ((oldText == NULL) || (newText == NULL) || (oldText[0]==0))
+ else if ((oldText == NULL) || (newText == NULL) || (oldText[0] == 0))
return BLI_strdup(str);
/* while we can still find a match for the old substring that we're searching for,
@@ -207,7 +207,7 @@ char *BLI_replacestr(char *str, const char *oldText, const char *newText)
while ( (match = strstr(str, oldText)) ) {
/* the assembly buffer only gets created when we actually need to rebuild the string */
if (ds == NULL)
- ds= BLI_dynstr_new();
+ ds = BLI_dynstr_new();
/* if the match position does not match the current position in the string,
* copy the text up to this position and advance the current position in the string
@@ -216,12 +216,12 @@ char *BLI_replacestr(char *str, const char *oldText, const char *newText)
/* replace the token at the 'match' position with \0 so that the copied string will be ok,
* add the segment of the string from str to match to the buffer, then restore the value at match
*/
- match[0]= 0;
+ match[0] = 0;
BLI_dynstr_append(ds, str);
- match[0]= oldText[0];
+ match[0] = oldText[0];
/* now our current position should be set on the start of the match */
- str= match;
+ str = match;
}
/* add the replacement text to the accumulation buffer */
@@ -242,7 +242,7 @@ char *BLI_replacestr(char *str, const char *oldText, const char *newText)
BLI_dynstr_append(ds, str);
/* convert to new c-string (MEM_malloc'd), and free the buffer */
- newStr= BLI_dynstr_get_cstring(ds);
+ newStr = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
return newStr;
@@ -257,7 +257,7 @@ char *BLI_replacestr(char *str, const char *oldText, const char *newText)
int BLI_strcaseeq(const char *a, const char *b)
{
- return (BLI_strcasecmp(a, b)==0);
+ return (BLI_strcasecmp(a, b) == 0);
}
/* strcasestr not available in MSVC */
@@ -267,13 +267,13 @@ char *BLI_strcasestr(const char *s, const char *find)
register size_t len;
if ((c = *find++) != 0) {
- c= tolower(c);
+ c = tolower(c);
len = strlen(find);
do {
do {
if ((sc = *s++) == 0)
return (NULL);
- sc= tolower(sc);
+ sc = tolower(sc);
} while (sc != c);
} while (BLI_strncasecmp(s, find, len) != 0);
s--;
@@ -286,17 +286,17 @@ int BLI_strcasecmp(const char *s1, const char *s2)
{
int i;
- for (i=0; ; i++) {
+ for (i = 0;; i++) {
char c1 = tolower(s1[i]);
char c2 = tolower(s2[i]);
- if (c1<c2) {
+ if (c1 < c2) {
return -1;
}
- else if (c1>c2) {
+ else if (c1 > c2) {
return 1;
}
- else if (c1==0) {
+ else if (c1 == 0) {
break;
}
}
@@ -308,17 +308,17 @@ int BLI_strncasecmp(const char *s1, const char *s2, size_t len)
{
int i;
- for (i=0; i<len; i++) {
+ for (i = 0; i < len; i++) {
char c1 = tolower(s1[i]);
char c2 = tolower(s2[i]);
- if (c1<c2) {
+ if (c1 < c2) {
return -1;
}
- else if (c1>c2) {
+ else if (c1 > c2) {
return 1;
}
- else if (c1==0) {
+ else if (c1 == 0) {
break;
}
}
@@ -329,7 +329,7 @@ int BLI_strncasecmp(const char *s1, const char *s2, size_t len)
/* natural string compare, keeping numbers in order */
int BLI_natstrcmp(const char *s1, const char *s2)
{
- int d1= 0, d2= 0;
+ int d1 = 0, d2 = 0;
/* if both chars are numeric, to a strtol().
* then increase string deltas as long they are
@@ -339,23 +339,23 @@ int BLI_natstrcmp(const char *s1, const char *s2)
char c1 = tolower(s1[d1]);
char c2 = tolower(s2[d2]);
- if ( isdigit(c1) && isdigit(c2) ) {
+ if (isdigit(c1) && isdigit(c2) ) {
int val1, val2;
- val1= (int)strtol(s1+d1, (char **)NULL, 10);
- val2= (int)strtol(s2+d2, (char **)NULL, 10);
+ val1 = (int)strtol(s1 + d1, (char **)NULL, 10);
+ val2 = (int)strtol(s2 + d2, (char **)NULL, 10);
- if (val1<val2) {
+ if (val1 < val2) {
return -1;
}
- else if (val1>val2) {
+ else if (val1 > val2) {
return 1;
}
d1++;
- while ( isdigit(s1[d1]) )
+ while (isdigit(s1[d1]) )
d1++;
d2++;
- while ( isdigit(s2[d2]) )
+ while (isdigit(s2[d2]) )
d2++;
c1 = tolower(s1[d1]);
@@ -363,17 +363,17 @@ int BLI_natstrcmp(const char *s1, const char *s2)
}
/* first check for '.' so "foo.bar" comes before "foo 1.bar" */
- if (c1=='.' && c2!='.')
+ if (c1 == '.' && c2 != '.')
return -1;
- if (c1!='.' && c2=='.')
+ if (c1 != '.' && c2 == '.')
return 1;
- else if (c1<c2) {
+ else if (c1 < c2) {
return -1;
}
- else if (c1>c2) {
+ else if (c1 > c2) {
return 1;
}
- else if (c1==0) {
+ else if (c1 == 0) {
break;
}
d1++;
@@ -385,10 +385,10 @@ int BLI_natstrcmp(const char *s1, const char *s2)
void BLI_timestr(double _time, char *str)
{
/* format 00:00:00.00 (hr:min:sec) string has to be 12 long */
- int hr= ( (int) _time) / (60*60);
- int min= (((int) _time) / 60 ) % 60;
- int sec= ( (int) (_time)) % 60;
- int hun= ( (int) (_time * 100.0)) % 100;
+ int hr = ( (int) _time) / (60*60);
+ int min = (((int) _time) / 60 ) % 60;
+ int sec = ( (int) (_time)) % 60;
+ int hun = ( (int) (_time * 100.0)) % 100;
if (hr) {
sprintf(str, "%.2d:%.2d:%.2d.%.2d", hr, min, sec, hun);
@@ -397,7 +397,7 @@ void BLI_timestr(double _time, char *str)
sprintf(str, "%.2d:%.2d.%.2d", min, sec, hun);
}
- str[11]=0;
+ str[11] = 0;
}
/* determine the length of a fixed-size string */
@@ -411,7 +411,7 @@ void BLI_ascii_strtolower(char *str, int len)
{
int i;
- for (i=0; i<len; i++)
+ for (i = 0; i < len; i++)
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] += 'a' - 'A';
}
@@ -420,7 +420,7 @@ void BLI_ascii_strtoupper(char *str, int len)
{
int i;
- for (i=0; i<len; i++)
+ for (i = 0; i < len; i++)
if (str[i] >= 'a' && str[i] <= 'z')
str[i] -= 'a' - 'A';
}
diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c
index 448f1c1b408..4f5ea0b23bd 100644
--- a/source/blender/blenlib/intern/threads.c
+++ b/source/blender/blenlib/intern/threads.c
@@ -114,7 +114,7 @@ static pthread_mutex_t _opengl_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t _nodes_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t _movieclip_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_t mainid;
-static int thread_levels= 0; /* threads can be invoked inside threads */
+static int thread_levels = 0; /* threads can be invoked inside threads */
/* just a max for security reasons */
#define RE_MAX_THREAD BLENDER_MAX_THREADS
@@ -151,16 +151,16 @@ void BLI_init_threads(ListBase *threadbase, void *(*do_thread)(void *), int tot)
int a;
if (threadbase != NULL && tot > 0) {
- threadbase->first= threadbase->last= NULL;
+ threadbase->first = threadbase->last = NULL;
- if (tot>RE_MAX_THREAD) tot= RE_MAX_THREAD;
- else if (tot<1) tot= 1;
+ if (tot > RE_MAX_THREAD) tot = RE_MAX_THREAD;
+ else if (tot < 1) tot = 1;
- for (a=0; a<tot; a++) {
- ThreadSlot *tslot= MEM_callocN(sizeof(ThreadSlot), "threadslot");
+ for (a = 0; a < tot; a++) {
+ ThreadSlot *tslot = MEM_callocN(sizeof(ThreadSlot), "threadslot");
BLI_addtail(threadbase, tslot);
- tslot->do_thread= do_thread;
- tslot->avail= 1;
+ tslot->do_thread = do_thread;
+ tslot->avail = 1;
}
}
@@ -182,9 +182,9 @@ void BLI_init_threads(ListBase *threadbase, void *(*do_thread)(void *), int tot)
int BLI_available_threads(ListBase *threadbase)
{
ThreadSlot *tslot;
- int counter=0;
+ int counter = 0;
- for (tslot= threadbase->first; tslot; tslot= tslot->next) {
+ for (tslot = threadbase->first; tslot; tslot = tslot->next) {
if (tslot->avail)
counter++;
}
@@ -195,9 +195,9 @@ int BLI_available_threads(ListBase *threadbase)
int BLI_available_thread_index(ListBase *threadbase)
{
ThreadSlot *tslot;
- int counter=0;
+ int counter = 0;
- for (tslot= threadbase->first; tslot; tslot= tslot->next, counter++) {
+ for (tslot = threadbase->first; tslot; tslot = tslot->next, counter++) {
if (tslot->avail)
return counter;
}
@@ -206,12 +206,12 @@ int BLI_available_thread_index(ListBase *threadbase)
static void *tslot_thread_start(void *tslot_p)
{
- ThreadSlot *tslot= (ThreadSlot*)tslot_p;
+ ThreadSlot *tslot = (ThreadSlot *)tslot_p;
#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
/* workaround for Apple gcc 4.2.1 omp vs background thread bug,
* set gomp thread local storage pointer which was copied beforehand */
- pthread_setspecific (gomp_tls_key, thread_tls_data);
+ pthread_setspecific(gomp_tls_key, thread_tls_data);
#endif
return tslot->do_thread(tslot->callerdata);
@@ -226,10 +226,10 @@ void BLI_insert_thread(ListBase *threadbase, void *callerdata)
{
ThreadSlot *tslot;
- for (tslot= threadbase->first; tslot; tslot= tslot->next) {
+ for (tslot = threadbase->first; tslot; tslot = tslot->next) {
if (tslot->avail) {
- tslot->avail= 0;
- tslot->callerdata= callerdata;
+ tslot->avail = 0;
+ tslot->callerdata = callerdata;
pthread_create(&tslot->pthread, NULL, tslot_thread_start, tslot);
return;
}
@@ -241,11 +241,11 @@ void BLI_remove_thread(ListBase *threadbase, void *callerdata)
{
ThreadSlot *tslot;
- for (tslot= threadbase->first; tslot; tslot= tslot->next) {
- if (tslot->callerdata==callerdata) {
+ for (tslot = threadbase->first; tslot; tslot = tslot->next) {
+ if (tslot->callerdata == callerdata) {
pthread_join(tslot->pthread, NULL);
- tslot->callerdata= NULL;
- tslot->avail= 1;
+ tslot->callerdata = NULL;
+ tslot->avail = 1;
}
}
}
@@ -253,7 +253,7 @@ void BLI_remove_thread(ListBase *threadbase, void *callerdata)
void BLI_remove_thread_index(ListBase *threadbase, int index)
{
ThreadSlot *tslot;
- int counter=0;
+ int counter = 0;
for (tslot = threadbase->first; tslot; tslot = tslot->next, counter++) {
if (counter == index && tslot->avail == 0) {
@@ -286,8 +286,8 @@ void BLI_end_threads(ListBase *threadbase)
* this way we don't end up decrementing thread_levels on an empty threadbase
* */
if (threadbase && threadbase->first != NULL) {
- for (tslot= threadbase->first; tslot; tslot= tslot->next) {
- if (tslot->avail==0) {
+ for (tslot = threadbase->first; tslot; tslot = tslot->next) {
+ if (tslot->avail == 0) {
pthread_join(tslot->pthread, NULL);
}
}
@@ -295,7 +295,7 @@ void BLI_end_threads(ListBase *threadbase)
}
thread_levels--;
- if (thread_levels==0)
+ if (thread_levels == 0)
MEM_set_lock_callback(NULL, NULL);
}
@@ -310,7 +310,7 @@ int BLI_system_thread_count(void)
GetSystemInfo(&info);
t = (int) info.dwNumberOfProcessors;
#else
-# ifdef __APPLE__
+# ifdef __APPLE__
int mib[2];
size_t len;
@@ -318,14 +318,14 @@ int BLI_system_thread_count(void)
mib[1] = HW_NCPU;
len = sizeof(t);
sysctl(mib, 2, &t, &len, NULL, 0);
-# else
+# else
t = (int)sysconf(_SC_NPROCESSORS_ONLN);
-# endif
+# endif
#endif
- if (t>RE_MAX_THREAD)
+ if (t > RE_MAX_THREAD)
return RE_MAX_THREAD;
- if (t<1)
+ if (t < 1)
return 1;
return t;
@@ -335,41 +335,41 @@ int BLI_system_thread_count(void)
void BLI_lock_thread(int type)
{
- if (type==LOCK_IMAGE)
+ if (type == LOCK_IMAGE)
pthread_mutex_lock(&_image_lock);
- else if (type==LOCK_PREVIEW)
+ else if (type == LOCK_PREVIEW)
pthread_mutex_lock(&_preview_lock);
- else if (type==LOCK_VIEWER)
+ else if (type == LOCK_VIEWER)
pthread_mutex_lock(&_viewer_lock);
- else if (type==LOCK_CUSTOM1)
+ else if (type == LOCK_CUSTOM1)
pthread_mutex_lock(&_custom1_lock);
- else if (type==LOCK_RCACHE)
+ else if (type == LOCK_RCACHE)
pthread_mutex_lock(&_rcache_lock);
- else if (type==LOCK_OPENGL)
+ else if (type == LOCK_OPENGL)
pthread_mutex_lock(&_opengl_lock);
- else if (type==LOCK_NODES)
+ else if (type == LOCK_NODES)
pthread_mutex_lock(&_nodes_lock);
- else if (type==LOCK_MOVIECLIP)
+ else if (type == LOCK_MOVIECLIP)
pthread_mutex_lock(&_movieclip_lock);
}
void BLI_unlock_thread(int type)
{
- if (type==LOCK_IMAGE)
+ if (type == LOCK_IMAGE)
pthread_mutex_unlock(&_image_lock);
- else if (type==LOCK_PREVIEW)
+ else if (type == LOCK_PREVIEW)
pthread_mutex_unlock(&_preview_lock);
- else if (type==LOCK_VIEWER)
+ else if (type == LOCK_VIEWER)
pthread_mutex_unlock(&_viewer_lock);
- else if (type==LOCK_CUSTOM1)
+ else if (type == LOCK_CUSTOM1)
pthread_mutex_unlock(&_custom1_lock);
- else if (type==LOCK_RCACHE)
+ else if (type == LOCK_RCACHE)
pthread_mutex_unlock(&_rcache_lock);
- else if (type==LOCK_OPENGL)
+ else if (type == LOCK_OPENGL)
pthread_mutex_unlock(&_opengl_lock);
- else if (type==LOCK_NODES)
+ else if (type == LOCK_NODES)
pthread_mutex_unlock(&_nodes_lock);
- else if (type==LOCK_MOVIECLIP)
+ else if (type == LOCK_MOVIECLIP)
pthread_mutex_unlock(&_movieclip_lock);
}
@@ -425,20 +425,20 @@ void BLI_rw_mutex_end(ThreadRWMutex *mutex)
typedef struct ThreadedWorker {
ListBase threadbase;
void *(*work_fnct)(void *);
- char busy[RE_MAX_THREAD];
- int total;
- int sleep_time;
+ char busy[RE_MAX_THREAD];
+ int total;
+ int sleep_time;
} ThreadedWorker;
typedef struct WorkParam {
ThreadedWorker *worker;
void *param;
- int index;
+ int index;
} WorkParam;
static void *exec_work_fnct(void *v_param)
{
- WorkParam *p = (WorkParam*)v_param;
+ WorkParam *p = (WorkParam *)v_param;
void *value;
value = p->worker->work_fnct(p->param);
@@ -461,7 +461,7 @@ ThreadedWorker *BLI_create_worker(void *(*do_thread)(void *), int tot, int sleep
tot = RE_MAX_THREAD;
}
else if (tot < 1) {
- tot= 1;
+ tot = 1;
}
worker->total = tot;
@@ -528,8 +528,8 @@ ThreadQueue *BLI_thread_queue_init(void)
{
ThreadQueue *queue;
- queue= MEM_callocN(sizeof(ThreadQueue), "ThreadQueue");
- queue->queue= BLI_gsqueue_new(sizeof(void*));
+ queue = MEM_callocN(sizeof(ThreadQueue), "ThreadQueue");
+ queue->queue = BLI_gsqueue_new(sizeof(void *));
pthread_mutex_init(&queue->mutex, NULL);
pthread_cond_init(&queue->cond, NULL);
@@ -560,7 +560,7 @@ void BLI_thread_queue_push(ThreadQueue *queue, void *work)
void *BLI_thread_queue_pop(ThreadQueue *queue)
{
- void *work= NULL;
+ void *work = NULL;
/* wait until there is work */
pthread_mutex_lock(&queue->mutex);
@@ -586,7 +586,7 @@ static void wait_timeout(struct timespec *timeout, int ms)
struct _timeb now;
_ftime(&now);
sec = now.time;
- usec = now.millitm*1000; /* microsecond precision would be better */
+ usec = now.millitm * 1000; /* microsecond precision would be better */
}
#else
{
@@ -601,23 +601,23 @@ static void wait_timeout(struct timespec *timeout, int ms)
div_result = ldiv(ms, 1000);
timeout->tv_sec = sec + div_result.quot;
- x = usec + (div_result.rem*1000);
+ x = usec + (div_result.rem * 1000);
if (x >= 1000000) {
timeout->tv_sec++;
x -= 1000000;
}
- timeout->tv_nsec = x*1000;
+ timeout->tv_nsec = x * 1000;
}
void *BLI_thread_queue_pop_timeout(ThreadQueue *queue, int ms)
{
double t;
- void *work= NULL;
+ void *work = NULL;
struct timespec timeout;
- t= PIL_check_seconds_timer();
+ t = PIL_check_seconds_timer();
wait_timeout(&timeout, ms);
/* wait until there is work */
@@ -625,7 +625,7 @@ void *BLI_thread_queue_pop_timeout(ThreadQueue *queue, int ms)
while (BLI_gsqueue_is_empty(queue->queue) && !queue->nowait) {
if (pthread_cond_timedwait(&queue->cond, &queue->mutex, &timeout) == ETIMEDOUT)
break;
- else if (PIL_check_seconds_timer() - t >= ms*0.001)
+ else if (PIL_check_seconds_timer() - t >= ms * 0.001)
break;
}
@@ -643,7 +643,7 @@ int BLI_thread_queue_size(ThreadQueue *queue)
int size;
pthread_mutex_lock(&queue->mutex);
- size= BLI_gsqueue_size(queue->queue);
+ size = BLI_gsqueue_size(queue->queue);
pthread_mutex_unlock(&queue->mutex);
return size;
@@ -653,7 +653,7 @@ void BLI_thread_queue_nowait(ThreadQueue *queue)
{
pthread_mutex_lock(&queue->mutex);
- queue->nowait= 1;
+ queue->nowait = 1;
/* signal threads waiting to pop */
pthread_cond_signal(&queue->cond);
@@ -671,6 +671,6 @@ void BLI_begin_threaded_malloc(void)
void BLI_end_threaded_malloc(void)
{
thread_levels--;
- if (thread_levels==0)
+ if (thread_levels == 0)
MEM_set_lock_callback(NULL, NULL);
}
diff --git a/source/blender/blenlib/intern/time.c b/source/blender/blenlib/intern/time.c
index 2f53aa38e77..64f007513ed 100644
--- a/source/blender/blenlib/intern/time.c
+++ b/source/blender/blenlib/intern/time.c
@@ -37,35 +37,35 @@
double PIL_check_seconds_timer(void)
{
- static int hasperfcounter= -1; /* -1==unknown */
+ static int hasperfcounter = -1; /* -1==unknown */
static double perffreq;
- if (hasperfcounter==-1) {
+ if (hasperfcounter == -1) {
__int64 ifreq;
- hasperfcounter= QueryPerformanceFrequency((LARGE_INTEGER*) &ifreq);
- perffreq= (double) ifreq;
+ hasperfcounter = QueryPerformanceFrequency((LARGE_INTEGER *) &ifreq);
+ perffreq = (double) ifreq;
}
if (hasperfcounter) {
__int64 count;
- QueryPerformanceCounter((LARGE_INTEGER*) &count);
+ QueryPerformanceCounter((LARGE_INTEGER *) &count);
- return count/perffreq;
+ return count / perffreq;
}
else {
- static double accum= 0.0;
- static int ltick= 0;
- int ntick= GetTickCount();
+ static double accum = 0.0;
+ static int ltick = 0;
+ int ntick = GetTickCount();
- if (ntick<ltick) {
- accum+= (0xFFFFFFFF-ltick+ntick)/1000.0;
+ if (ntick < ltick) {
+ accum += (0xFFFFFFFF - ltick + ntick) / 1000.0;
}
else {
- accum+= (ntick-ltick)/1000.0;
+ accum += (ntick - ltick) / 1000.0;
}
- ltick= ntick;
+ ltick = ntick;
return accum;
}
}
@@ -87,17 +87,17 @@ double PIL_check_seconds_timer(void)
gettimeofday(&tv, &tz);
- return ((double) tv.tv_sec + tv.tv_usec/1000000.0);
+ return ((double) tv.tv_sec + tv.tv_usec / 1000000.0);
}
void PIL_sleep_ms(int ms)
{
- if (ms>=1000) {
- sleep(ms/1000);
- ms= (ms%1000);
+ if (ms >= 1000) {
+ sleep(ms / 1000);
+ ms = (ms % 1000);
}
- usleep(ms*1000);
+ usleep(ms * 1000);
}
#endif
diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c
index a630084e79d..18c69bd2ba8 100644
--- a/source/blender/blenlib/intern/uvproject.c
+++ b/source/blender/blenlib/intern/uvproject.c
@@ -72,7 +72,7 @@ void BLI_uvproject_from_camera(float target[2], float source[3], ProjCameraInfo
}
else {
if (pv4[2] == 0.0f)
- pv4[2] = 0.00001f; /* don't allow div by 0 */
+ pv4[2] = 0.00001f; /* don't allow div by 0 */
if (uci->do_persp == 0) {
target[0] = (pv4[0] / uci->camsize);
diff --git a/source/blender/blenlib/intern/voxel.c b/source/blender/blenlib/intern/voxel.c
index 3ad9edd14a3..10eb4e82912 100644
--- a/source/blender/blenlib/intern/voxel.c
+++ b/source/blender/blenlib/intern/voxel.c
@@ -40,7 +40,7 @@ BLI_INLINE float D(float *data, const int res[3], int x, int y, int z)
CLAMP(x, 0, res[0] - 1);
CLAMP(y, 0, res[1] - 1);
CLAMP(z, 0, res[2] - 1);
- return data[ BLI_VOXEL_INDEX(x, y, z, res) ];
+ return data[BLI_VOXEL_INDEX(x, y, z, res)];
}
/* *** nearest neighbor *** */
@@ -128,7 +128,7 @@ float BLI_voxel_sample_triquadratic(float *data, const int res[3], const float c
+ v[1] * ( u[0] * data[xc[0] + yc[1] + zc[2]] + u[1] * data[xc[1] + yc[1] + zc[2]] + u[2] * data[xc[2] + yc[1] + zc[2]] )
+ v[2] * ( u[0] * data[xc[0] + yc[2] + zc[2]] + u[1] * data[xc[1] + yc[2] + zc[2]] + u[2] * data[xc[2] + yc[2] + zc[2]] ) );
-}
+ }
return 0.f;
}
diff --git a/source/blender/blenlib/intern/winstuff.c b/source/blender/blenlib/intern/winstuff.c
index d853e398adc..efb5ca98185 100644
--- a/source/blender/blenlib/intern/winstuff.c
+++ b/source/blender/blenlib/intern/winstuff.c
@@ -44,16 +44,16 @@
#include "BKE_utildefines.h"
#include "BKE_global.h"
-#define WIN32_SKIP_HKEY_PROTECTION // need to use HKEY
+#define WIN32_SKIP_HKEY_PROTECTION // need to use HKEY
#include "BLI_winstuff.h"
#include "BLI_utildefines.h"
#include "utf_winfunc.h"
#include "utfconv.h"
- /* FILE_MAXDIR + FILE_MAXFILE */
+/* FILE_MAXDIR + FILE_MAXFILE */
-int BLI_getInstallationDir(char * str)
+int BLI_getInstallationDir(char *str)
{
char dir[FILE_MAXDIR];
int a;
@@ -61,7 +61,7 @@ int BLI_getInstallationDir(char * str)
GetModuleFileName(NULL, str, FILE_MAX);
BLI_split_dir_part(str, dir, sizeof(dir)); /* shouldn't be relative */
a = strlen(dir);
- if (dir[a-1] == '\\') dir[a-1]=0;
+ if (dir[a - 1] == '\\') dir[a - 1] = 0;
strcpy(str, dir);
@@ -74,7 +74,7 @@ void RegisterBlendExtension_Fail(HKEY root)
if (root)
RegCloseKey(root);
if (!G.background)
- MessageBox(0, "Could not register file extension.", "Blender error", MB_OK|MB_ICONERROR);
+ MessageBox(0, "Could not register file extension.", "Blender error", MB_OK | MB_ICONERROR);
TerminateProcess(GetCurrentProcess(), 1);
}
@@ -91,7 +91,7 @@ void RegisterBlendExtension(void)
char InstallDir[FILE_MAXDIR];
char SysDir[FILE_MAXDIR];
const char *ThumbHandlerDLL;
- char RegCmd[MAX_PATH*2];
+ char RegCmd[MAX_PATH * 2];
char MBox[256];
BOOL IsWOW64;
@@ -109,40 +109,40 @@ void RegisterBlendExtension(void)
}
lresult = RegCreateKeyEx(root, "blendfile", 0,
- NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
+ NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
if (lresult == ERROR_SUCCESS) {
strcpy(buffer, "Blender File");
- lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE*)buffer, strlen(buffer) + 1);
+ lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE *)buffer, strlen(buffer) + 1);
RegCloseKey(hkey);
}
if (lresult != ERROR_SUCCESS)
RegisterBlendExtension_Fail(root);
lresult = RegCreateKeyEx(root, "blendfile\\shell\\open\\command", 0,
- NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
+ NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
if (lresult == ERROR_SUCCESS) {
sprintf(buffer, "\"%s\" \"%%1\"", BlPath);
- lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE*)buffer, strlen(buffer) + 1);
+ lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE *)buffer, strlen(buffer) + 1);
RegCloseKey(hkey);
}
if (lresult != ERROR_SUCCESS)
RegisterBlendExtension_Fail(root);
lresult = RegCreateKeyEx(root, "blendfile\\DefaultIcon", 0,
- NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
+ NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
if (lresult == ERROR_SUCCESS) {
sprintf(buffer, "\"%s\", 1", BlPath);
- lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE*)buffer, strlen(buffer) + 1);
+ lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE *)buffer, strlen(buffer) + 1);
RegCloseKey(hkey);
}
if (lresult != ERROR_SUCCESS)
RegisterBlendExtension_Fail(root);
lresult = RegCreateKeyEx(root, ".blend", 0,
- NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
+ NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwd);
if (lresult == ERROR_SUCCESS) {
sprintf(buffer, "%s", "blendfile");
- lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE*)buffer, strlen(buffer) + 1);
+ lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE *)buffer, strlen(buffer) + 1);
RegCloseKey(hkey);
}
if (lresult != ERROR_SUCCESS)
@@ -159,32 +159,32 @@ void RegisterBlendExtension(void)
else
ThumbHandlerDLL = "BlendThumb.dll";
#endif
- snprintf(RegCmd, MAX_PATH*2, "%s\\regsvr32 /s \"%s\\%s\"", SysDir, InstallDir, ThumbHandlerDLL);
+ snprintf(RegCmd, MAX_PATH * 2, "%s\\regsvr32 /s \"%s\\%s\"", SysDir, InstallDir, ThumbHandlerDLL);
system(RegCmd);
RegCloseKey(root);
printf("success (%s)\n", usr_mode ? "user" : "system");
if (!G.background) {
sprintf(MBox, "File extension registered for %s.", usr_mode ? "the current user. To register for all users, run as an administrator" : "all users");
- MessageBox(0, MBox, "Blender", MB_OK|MB_ICONINFORMATION);
+ MessageBox(0, MBox, "Blender", MB_OK | MB_ICONINFORMATION);
}
TerminateProcess(GetCurrentProcess(), 0);
}
-DIR *opendir (const char *path)
+DIR *opendir(const char *path)
{
wchar_t *path_16 = alloc_utf16_from_8(path, 0);
if (GetFileAttributesW(path_16) & FILE_ATTRIBUTE_DIRECTORY) {
- DIR *newd= MEM_mallocN(sizeof(DIR), "opendir");
+ DIR *newd = MEM_mallocN(sizeof(DIR), "opendir");
newd->handle = INVALID_HANDLE_VALUE;
sprintf(newd->path, "%s\\*", path);
- newd->direntry.d_ino= 0;
- newd->direntry.d_off= 0;
- newd->direntry.d_reclen= 0;
- newd->direntry.d_name= NULL;
+ newd->direntry.d_ino = 0;
+ newd->direntry.d_off = 0;
+ newd->direntry.d_reclen = 0;
+ newd->direntry.d_name = NULL;
free(path_16);
return newd;
@@ -200,17 +200,17 @@ static char *BLI_alloc_utf_8_from_16(wchar_t *in16, size_t add)
size_t bsize = count_utf_8_from_16(in16);
char *out8 = NULL;
if (!bsize) return NULL;
- out8 = (char*)MEM_mallocN(sizeof(char) * (bsize + add), "UTF-8 String");
+ out8 = (char *)MEM_mallocN(sizeof(char) * (bsize + add), "UTF-8 String");
conv_utf_16_to_8(in16, out8, bsize);
return out8;
}
-static wchar_t *UNUSED_FUNCTION(BLI_alloc_utf16_from_8)(char *in8, size_t add)
+static wchar_t *UNUSED_FUNCTION(BLI_alloc_utf16_from_8) (char *in8, size_t add)
{
size_t bsize = count_utf_16_from_8(in8);
wchar_t *out16 = NULL;
if (!bsize) return NULL;
- out16 =(wchar_t*) MEM_mallocN(sizeof(wchar_t) * (bsize + add), "UTF-16 String");
+ out16 = (wchar_t *) MEM_mallocN(sizeof(wchar_t) * (bsize + add), "UTF-16 String");
conv_utf_8_to_16(in8, out16, bsize);
return out16;
}
@@ -221,22 +221,22 @@ struct dirent *readdir(DIR *dp)
{
if (dp->direntry.d_name) {
MEM_freeN(dp->direntry.d_name);
- dp->direntry.d_name= NULL;
+ dp->direntry.d_name = NULL;
}
- if (dp->handle==INVALID_HANDLE_VALUE) {
- wchar_t *path_16 = alloc_utf16_from_8(dp->path, 0);
- dp->handle= FindFirstFileW(path_16, &(dp->data));
+ if (dp->handle == INVALID_HANDLE_VALUE) {
+ wchar_t *path_16 = alloc_utf16_from_8(dp->path, 0);
+ dp->handle = FindFirstFileW(path_16, &(dp->data));
free(path_16);
- if (dp->handle==INVALID_HANDLE_VALUE)
+ if (dp->handle == INVALID_HANDLE_VALUE)
return NULL;
- dp->direntry.d_name= BLI_alloc_utf_8_from_16(dp->data.cFileName, 0);
+ dp->direntry.d_name = BLI_alloc_utf_8_from_16(dp->data.cFileName, 0);
return &dp->direntry;
}
- else if (FindNextFileW (dp->handle, &(dp->data))) {
- dp->direntry.d_name= BLI_alloc_utf_8_from_16(dp->data.cFileName, 0);
+ else if (FindNextFileW(dp->handle, &(dp->data))) {
+ dp->direntry.d_name = BLI_alloc_utf_8_from_16(dp->data.cFileName, 0);
return &dp->direntry;
}
@@ -248,7 +248,7 @@ struct dirent *readdir(DIR *dp)
int closedir(DIR *dp)
{
if (dp->direntry.d_name) MEM_freeN(dp->direntry.d_name);
- if (dp->handle!=INVALID_HANDLE_VALUE) FindClose(dp->handle);
+ if (dp->handle != INVALID_HANDLE_VALUE) FindClose(dp->handle);
MEM_freeN(dp);
@@ -257,12 +257,12 @@ int closedir(DIR *dp)
void get_default_root(char *root)
{
- char str[MAX_PATH+1];
+ char str[MAX_PATH + 1];
/* the default drive to resolve a directory without a specified drive
* should be the Windows installation drive, since this was what the OS
* assumes. */
- if (GetWindowsDirectory(str, MAX_PATH+1)) {
+ if (GetWindowsDirectory(str, MAX_PATH + 1)) {
root[0] = str[0];
root[1] = ':';
root[2] = '\\';
@@ -271,7 +271,7 @@ void get_default_root(char *root)
else {
/* if GetWindowsDirectory fails, something has probably gone wrong,
* we are trying the blender install dir though */
- if (GetModuleFileName(NULL, str, MAX_PATH+1)) {
+ if (GetModuleFileName(NULL, str, MAX_PATH + 1)) {
printf("Error! Could not get the Windows Directory - Defaulting to Blender installation Dir!");
root[0] = str[0];
root[1] = ':';
@@ -284,10 +284,10 @@ void get_default_root(char *root)
int rc = 0;
/* now something has gone really wrong - still trying our best guess */
printf("Error! Could not get the Windows Directory - Defaulting to first valid drive! Path might be invalid!");
- tmp= GetLogicalDrives();
- for (i=2; i < 26; i++) {
- if ((tmp>>i) & 1) {
- root[0] = 'a'+i;
+ tmp = GetLogicalDrives();
+ for (i = 2; i < 26; i++) {
+ if ((tmp >> i) & 1) {
+ root[0] = 'a' + i;
root[1] = ':';
root[2] = '\\';
root[3] = '\0';
@@ -338,20 +338,20 @@ int check_file_chars(char *filename)
const char *dirname(char *path)
{
char *p;
- if ( path == NULL || *path == '\0' )
+ if (path == NULL || *path == '\0')
return ".";
p = path + strlen(path) - 1;
- while ( *p == '/' ) {
- if ( p == path )
+ while (*p == '/') {
+ if (p == path)
return path;
*p-- = '\0';
}
- while ( p >= path && *p != '/' )
+ while (p >= path && *p != '/')
p--;
return
- p < path ? "." :
- p == path ? "/" :
- (*p = '\0', path);
+ p < path ? "." :
+ p == path ? "/" :
+ (*p = '\0', path);
}
/* End of copied part */
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index bddaa5f67d6..f0bf7e99758 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -49,54 +49,54 @@ struct bContext;
struct BHead;
struct FileData;
-typedef struct BlendHandle BlendHandle;
+typedef struct BlendHandle BlendHandle;
typedef enum BlenFileType {
- BLENFILETYPE_BLEND= 1,
- BLENFILETYPE_PUB= 2,
- BLENFILETYPE_RUNTIME= 3
+ BLENFILETYPE_BLEND = 1,
+ BLENFILETYPE_PUB = 2,
+ BLENFILETYPE_RUNTIME = 3
} BlenFileType;
typedef struct BlendFileData {
- struct Main* main;
- struct UserDef* user;
+ struct Main *main;
+ struct UserDef *user;
int winpos;
int fileflags;
int displaymode;
int globalf;
- char filename[1024]; /* 1024 = FILE_MAX */
+ char filename[1024]; /* 1024 = FILE_MAX */
- struct bScreen* curscreen;
- struct Scene* curscene;
+ struct bScreen *curscreen;
+ struct Scene *curscene;
- BlenFileType type;
+ BlenFileType type;
} BlendFileData;
- /**
- * Open a blender file from a pathname. The function
- * returns NULL and sets a report in the list if
- * it cannot open the file.
- *
- * \param filepath The path of the file to open.
- * \param reports If the return value is NULL, errors
- * indicating the cause of the failure.
- * \return The data of the file.
- */
-BlendFileData* BLO_read_from_file(const char *filepath, struct ReportList *reports);
-
- /**
- * Open a blender file from memory. The function
- * returns NULL and sets a report in the list if
- * it cannot open the file.
- *
- * \param mem The file data.
- * \param memsize The length of \a mem.
- * \param reports If the return value is NULL, errors
- * indicating the cause of the failure.
- * \return The data of the file.
- */
-BlendFileData* BLO_read_from_memory(void *mem, int memsize, struct ReportList *reports);
+/**
+ * Open a blender file from a pathname. The function
+ * returns NULL and sets a report in the list if
+ * it cannot open the file.
+ *
+ * \param filepath The path of the file to open.
+ * \param reports If the return value is NULL, errors
+ * indicating the cause of the failure.
+ * \return The data of the file.
+ */
+BlendFileData *BLO_read_from_file(const char *filepath, struct ReportList *reports);
+
+/**
+ * Open a blender file from memory. The function
+ * returns NULL and sets a report in the list if
+ * it cannot open the file.
+ *
+ * \param mem The file data.
+ * \param memsize The length of \a mem.
+ * \param reports If the return value is NULL, errors
+ * indicating the cause of the failure.
+ * \return The data of the file.
+ */
+BlendFileData *BLO_read_from_memory(void *mem, int memsize, struct ReportList *reports);
/**
* oldmain is old main, from which we will keep libraries, images, ..
@@ -111,9 +111,8 @@ BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename,
*
* \param bfd The structure to free.
*/
- void
-BLO_blendfiledata_free(
- BlendFileData *bfd);
+void
+BLO_blendfiledata_free(BlendFileData *bfd);
/**
* Open a blendhandle from a file path.
@@ -122,10 +121,9 @@ BLO_blendfiledata_free(
* \param reports Report errors in opening the file (can be NULL).
* \return A handle on success, or NULL on failure.
*/
- BlendHandle*
-BLO_blendhandle_from_file(
- char *file,
- struct ReportList *reports);
+BlendHandle *
+BLO_blendhandle_from_file(char *file,
+ struct ReportList *reports);
/**
* Open a blendhandle from memory.
@@ -135,10 +133,9 @@ BLO_blendhandle_from_file(
* \return A handle on success, or NULL on failure.
*/
- BlendHandle*
-BLO_blendhandle_from_memory(
- void *mem,
- int memsize);
+BlendHandle *
+BLO_blendhandle_from_memory(void *mem,
+ int memsize);
/**
* Gets the names of all the datablocks in a file
@@ -151,11 +148,10 @@ BLO_blendhandle_from_memory(
* \return A BLI_linklist of strings. The string links
* should be freed with malloc.
*/
- struct LinkNode*
-BLO_blendhandle_get_datablock_names(
- BlendHandle *bh,
- int ofblocktype,
- int *tot_names);
+struct LinkNode *
+BLO_blendhandle_get_datablock_names(BlendHandle *bh,
+ int ofblocktype,
+ int *tot_names);
/**
* Gets the previews of all the datablocks in a file
@@ -168,11 +164,10 @@ BLO_blendhandle_get_datablock_names(
* \return A BLI_linklist of PreviewImage. The PreviewImage links
* should be freed with malloc.
*/
- struct LinkNode*
-BLO_blendhandle_get_previews(
- BlendHandle *bh,
- int ofblocktype,
- int *tot_prev);
+struct LinkNode *
+BLO_blendhandle_get_previews(BlendHandle *bh,
+ int ofblocktype,
+ int *tot_prev);
/**
* Gets the names of all the datablock groups in a
@@ -183,9 +178,8 @@ BLO_blendhandle_get_previews(
* \return A BLI_linklist of strings. The string links
* should be freed with malloc.
*/
- struct LinkNode*
-BLO_blendhandle_get_linkable_groups(
- BlendHandle *bh);
+struct LinkNode *
+BLO_blendhandle_get_linkable_groups(BlendHandle *bh);
/**
* Close and free a blendhandle. The handle
@@ -193,11 +187,10 @@ BLO_blendhandle_get_linkable_groups(
*
* \param bh The handle to close.
*/
- void
-BLO_blendhandle_close(
- BlendHandle *bh);
+void
+BLO_blendhandle_close(BlendHandle *bh);
- /***/
+/***/
#define GROUP_MAX 32
@@ -217,7 +210,7 @@ int BLO_is_a_library(const char *path, char *dir, char *group);
* \param filepath Used for relative linking, copied to the lib->name
* \return the library Main, to be passed to BLO_library_append_named_part as mainl.
*/
-struct Main* BLO_library_append_begin(struct Main *mainvar, BlendHandle** bh, const char *filepath);
+struct Main *BLO_library_append_begin(struct Main *mainvar, BlendHandle **bh, const char *filepath);
/**
@@ -229,7 +222,7 @@ struct Main* BLO_library_append_begin(struct Main *mainvar, BlendHandle** bh, co
* \param idcode The kind of datablock to link.
* \return the appended ID when found.
*/
-struct ID *BLO_library_append_named_part(struct Main *mainl, BlendHandle** bh, const char *idname, const int idcode);
+struct ID *BLO_library_append_named_part(struct Main *mainl, BlendHandle **bh, const char *idname, const int idcode);
/**
* Link/Append a named datablock from an external blend file.
@@ -243,13 +236,13 @@ struct ID *BLO_library_append_named_part(struct Main *mainl, BlendHandle** bh, c
* \param flag Options for linking, used for instancing.
* \return the appended ID when found.
*/
-struct ID *BLO_library_append_named_part_ex(const struct bContext *C, struct Main *mainl, BlendHandle** bh, const char *idname, const int idcode, const short flag);
+struct ID *BLO_library_append_named_part_ex(const struct bContext *C, struct Main *mainl, BlendHandle **bh, const char *idname, const int idcode, const short flag);
-void BLO_library_append_end(const struct bContext *C, struct Main *mainl, BlendHandle** bh, int idcode, short flag);
+void BLO_library_append_end(const struct bContext *C, struct Main *mainl, BlendHandle **bh, int idcode, short flag);
void *BLO_library_read_struct(struct FileData *fd, struct BHead *bh, const char *blockname);
-BlendFileData* blo_read_blendafterruntime(int file, const char *name, int actualsize, struct ReportList *reports);
+BlendFileData *blo_read_blendafterruntime(int file, const char *name, int actualsize, struct ReportList *reports);
#ifdef __cplusplus
}
diff --git a/source/blender/blenloader/BLO_sys_types.h b/source/blender/blenloader/BLO_sys_types.h
index 41e33eb2a05..4e76481c394 100644
--- a/source/blender/blenloader/BLO_sys_types.h
+++ b/source/blender/blenloader/BLO_sys_types.h
@@ -53,12 +53,12 @@ extern "C" {
* need to include anything else here. */
-typedef signed __int8 int8_t;
+typedef signed __int8 int8_t;
typedef signed __int16 int16_t;
typedef signed __int32 int32_t;
typedef signed __int64 int64_t;
-typedef unsigned __int8 uint8_t;
+typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
@@ -83,19 +83,19 @@ typedef unsigned long uintptr_t;
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
- /* Linux-i386, Linux-Alpha, Linux-ppc */
+/* Linux-i386, Linux-Alpha, Linux-ppc */
#include <stdint.h>
/* XXX */
#ifndef UINT64_MAX
-# define UINT64_MAX 18446744073709551615
-typedef uint8_t u_int8_t;
-typedef uint16_t u_int16_t;
-typedef uint32_t u_int32_t;
-typedef uint64_t u_int64_t;
+# define UINT64_MAX 18446744073709551615
+typedef uint8_t u_int8_t;
+typedef uint16_t u_int16_t;
+typedef uint32_t u_int32_t;
+typedef uint64_t u_int64_t;
#endif
-#elif defined (__APPLE__)
+#elif defined(__APPLE__)
#include <inttypes.h>
@@ -108,7 +108,7 @@ unsigned long __attribute__((__stdcall__)) htonl(unsigned long);
#else
- /* FreeBSD, Solaris */
+/* FreeBSD, Solaris */
#include <sys/types.h>
#endif /* ifdef platform for types */
@@ -123,9 +123,9 @@ unsigned long __attribute__((__stdcall__)) htonl(unsigned long);
#define ntohl(x) correctByteOrder(x)
#endif
#endif
-#elif defined (__FreeBSD__) || defined (__OpenBSD__)
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
#include <sys/param.h>
-#elif defined (__APPLE__)
+#elif defined(__APPLE__)
#include <sys/types.h>
#else /* sun linux */
#include <netinet/in.h>
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 8f3131c733a..eb12a7bd837 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -71,13 +71,13 @@
/* local prototypes --------------------- */
void BLO_blendhandle_print_sizes(BlendHandle *, void *);
- /* Access routines used by filesel. */
+/* Access routines used by filesel. */
BlendHandle *BLO_blendhandle_from_file(char *file, ReportList *reports)
{
BlendHandle *bh;
- bh= (BlendHandle*)blo_openblenderfile(file, reports);
+ bh = (BlendHandle *)blo_openblenderfile(file, reports);
return bh;
}
@@ -86,36 +86,36 @@ BlendHandle *BLO_blendhandle_from_memory(void *mem, int memsize)
{
BlendHandle *bh;
- bh= (BlendHandle*)blo_openblendermemory(mem, memsize, NULL);
+ bh = (BlendHandle *)blo_openblendermemory(mem, memsize, NULL);
return bh;
}
void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
{
- FileData *fd= (FileData*) bh;
+ FileData *fd = (FileData *) bh;
BHead *bhead;
fprintf(fp, "[\n");
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==ENDB)
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead)) {
+ if (bhead->code == ENDB)
break;
else {
- short *sp= fd->filesdna->structs[bhead->SDNAnr];
- char *name= fd->filesdna->types[ sp[0] ];
+ short *sp = fd->filesdna->structs[bhead->SDNAnr];
+ char *name = fd->filesdna->types[sp[0]];
char buf[4];
- buf[0]= (bhead->code>>24)&0xFF;
- buf[1]= (bhead->code>>16)&0xFF;
- buf[2]= (bhead->code>>8)&0xFF;
- buf[3]= (bhead->code>>0)&0xFF;
+ buf[0] = (bhead->code >> 24) & 0xFF;
+ buf[1] = (bhead->code >> 16) & 0xFF;
+ buf[2] = (bhead->code >> 8) & 0xFF;
+ buf[3] = (bhead->code >> 0) & 0xFF;
+
+ buf[0] = buf[0] ? buf[0] : ' ';
+ buf[1] = buf[1] ? buf[1] : ' ';
+ buf[2] = buf[2] ? buf[2] : ' ';
+ buf[3] = buf[3] ? buf[3] : ' ';
- buf[0]= buf[0]?buf[0]:' ';
- buf[1]= buf[1]?buf[1]:' ';
- buf[2]= buf[2]?buf[2]:' ';
- buf[3]= buf[3]?buf[3]:' ';
-
- fprintf(fp, "['%.4s', '%s', %d, %ld ],\n", buf, name, bhead->nr, (long int)(bhead->len+sizeof(BHead)));
+ fprintf(fp, "['%.4s', '%s', %d, %ld ],\n", buf, name, bhead->nr, (long int)(bhead->len + sizeof(BHead)));
}
}
fprintf(fp, "]\n");
@@ -123,39 +123,39 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype, int *tot_names)
{
- FileData *fd= (FileData*) bh;
- LinkNode *names= NULL;
+ FileData *fd = (FileData *) bh;
+ LinkNode *names = NULL;
BHead *bhead;
- int tot= 0;
+ int tot = 0;
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==ofblocktype) {
- char *idname= bhead_id_name(fd, bhead);
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead)) {
+ if (bhead->code == ofblocktype) {
+ char *idname = bhead_id_name(fd, bhead);
- BLI_linklist_prepend(&names, strdup(idname+2));
+ BLI_linklist_prepend(&names, strdup(idname + 2));
tot++;
}
- else if (bhead->code==ENDB)
+ else if (bhead->code == ENDB)
break;
}
- *tot_names= tot;
+ *tot_names = tot;
return names;
}
LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *tot_prev)
{
- FileData *fd= (FileData*) bh;
- LinkNode *previews= NULL;
+ FileData *fd = (FileData *) bh;
+ LinkNode *previews = NULL;
BHead *bhead;
- int looking=0;
- PreviewImage* prv = NULL;
- PreviewImage* new_prv = NULL;
- int tot= 0;
-
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==ofblocktype) {
- char *idname= bhead_id_name(fd, bhead);
+ int looking = 0;
+ PreviewImage *prv = NULL;
+ PreviewImage *new_prv = NULL;
+ int tot = 0;
+
+ 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)) {
case ID_MA: /* fall through */
case ID_TE: /* fall through */
@@ -171,7 +171,7 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
break;
}
}
- else if (bhead->code==DATA) {
+ else if (bhead->code == DATA) {
if (looking) {
if (bhead->SDNAnr == DNA_struct_find_nr(fd->filesdna, "PreviewImage") ) {
prv = BLO_library_read_struct(fd, bhead, "PreviewImage");
@@ -179,9 +179,9 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
memcpy(new_prv, prv, sizeof(PreviewImage));
if (prv->rect[0]) {
unsigned int *rect = NULL;
- new_prv->rect[0] = MEM_callocN(new_prv->w[0]*new_prv->h[0]*sizeof(unsigned int), "prvrect");
- bhead= blo_nextbhead(fd, bhead);
- rect = (unsigned int*)(bhead+1);
+ new_prv->rect[0] = MEM_callocN(new_prv->w[0] * new_prv->h[0] * sizeof(unsigned int), "prvrect");
+ bhead = blo_nextbhead(fd, bhead);
+ rect = (unsigned int *)(bhead + 1);
memcpy(new_prv->rect[0], rect, bhead->len);
}
else {
@@ -190,9 +190,9 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
if (prv->rect[1]) {
unsigned int *rect = NULL;
- new_prv->rect[1] = MEM_callocN(new_prv->w[1]*new_prv->h[1]*sizeof(unsigned int), "prvrect");
- bhead= blo_nextbhead(fd, bhead);
- rect = (unsigned int*)(bhead+1);
+ new_prv->rect[1] = MEM_callocN(new_prv->w[1] * new_prv->h[1] * sizeof(unsigned int), "prvrect");
+ bhead = blo_nextbhead(fd, bhead);
+ rect = (unsigned int *)(bhead + 1);
memcpy(new_prv->rect[1], rect, bhead->len);
}
else {
@@ -203,7 +203,7 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
}
}
}
- else if (bhead->code==ENDB) {
+ else if (bhead->code == ENDB) {
break;
}
else {
@@ -214,24 +214,24 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
}
- *tot_prev= tot;
+ *tot_prev = tot;
return previews;
}
LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
{
- FileData *fd= (FileData*) bh;
- GHash *gathered= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "linkable_groups gh");
- LinkNode *names= NULL;
+ FileData *fd = (FileData *) bh;
+ GHash *gathered = BLI_ghash_ptr_new("linkable_groups gh");
+ LinkNode *names = NULL;
BHead *bhead;
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==ENDB) {
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead)) {
+ if (bhead->code == ENDB) {
break;
}
else if (BKE_idcode_is_valid(bhead->code)) {
if (BKE_idcode_is_linkable(bhead->code)) {
- const char *str= BKE_idcode_to_name(bhead->code);
+ const char *str = BKE_idcode_to_name(bhead->code);
if (!BLI_ghash_haskey(gathered, (void *)str)) {
BLI_linklist_prepend(&names, strdup(str));
@@ -248,12 +248,12 @@ LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
void BLO_blendhandle_close(BlendHandle *bh)
{
- FileData *fd= (FileData*) bh;
+ FileData *fd = (FileData *) bh;
blo_freefiledata(fd);
}
- /**********/
+/**********/
BlendFileData *BLO_read_from_file(const char *filepath, ReportList *reports)
{
@@ -262,8 +262,8 @@ BlendFileData *BLO_read_from_file(const char *filepath, ReportList *reports)
fd = blo_openblenderfile(filepath, reports);
if (fd) {
- fd->reports= reports;
- bfd= blo_read_file_internal(fd, filepath);
+ fd->reports = reports;
+ bfd = blo_read_file_internal(fd, filepath);
blo_freefiledata(fd);
}
@@ -277,8 +277,8 @@ BlendFileData *BLO_read_from_memory(void *mem, int memsize, ReportList *reports)
fd = blo_openblendermemory(mem, memsize, reports);
if (fd) {
- fd->reports= reports;
- bfd= blo_read_file_internal(fd, "");
+ fd->reports = reports;
+ bfd = blo_read_file_internal(fd, "");
blo_freefiledata(fd);
}
@@ -293,7 +293,7 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFil
fd = blo_openblendermemfile(memfile, reports);
if (fd) {
- fd->reports= reports;
+ fd->reports = reports;
BLI_strncpy(fd->relabase, filename, sizeof(fd->relabase));
/* clear ob->proxy_from pointers in old main */
@@ -310,7 +310,7 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFil
/* makes lookup of existing video clips in old main */
blo_make_movieclip_pointer_map(fd, oldmain);
- bfd= blo_read_file_internal(fd, filename);
+ bfd = blo_read_file_internal(fd, filename);
/* ensures relinked images are not freed */
blo_end_image_pointer_map(fd, oldmain);
@@ -319,11 +319,11 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFil
blo_end_movieclip_pointer_map(fd, oldmain);
/* move libraries from old main to new main */
- if (bfd && mainlist.first!=mainlist.last) {
+ if (bfd && mainlist.first != mainlist.last) {
/* Library structs themselves */
- bfd->main->library= oldmain->library;
- oldmain->library.first= oldmain->library.last= NULL;
+ bfd->main->library = oldmain->library;
+ oldmain->library.first = oldmain->library.last = NULL;
/* add the Library mainlist to the new main */
BLI_remlink(&mainlist, oldmain);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 1b0658be08a..95d3f56f9b3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -148,9 +148,6 @@
#include "NOD_socket.h"
-//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes
-//XXX #include "BIF_filelist.h" // badlevel too, where to move this? - elubie
-//XXX #include "BIF_previewrender.h" // bedlelvel, for struct RenderInfo
#include "BLO_readfile.h"
#include "BLO_undofile.h"
@@ -232,7 +229,8 @@ READ
s_i=p_i[0]; p_i[0]=p_i[7]; p_i[7]=s_i; \
s_i=p_i[1]; p_i[1]=p_i[6]; p_i[6]=s_i; \
s_i=p_i[2]; p_i[2]=p_i[5]; p_i[5]=s_i; \
- s_i=p_i[3]; p_i[3]=p_i[4]; p_i[4]=s_i; }
+ s_i=p_i[3]; p_i[3]=p_i[4]; p_i[4]=s_i; \
+} (void)0
/***/
@@ -263,18 +261,18 @@ static void convert_tface_mt(FileData *fd, Main *main);
static void BKE_reportf_wrap(ReportList *reports, ReportType type, const char *format, ...)
{
char fixed_buf[1024]; /* should be long enough */
-
+
va_list args;
-
+
va_start(args, format);
vsnprintf(fixed_buf, sizeof(fixed_buf), format, args);
va_end(args);
-
+
fixed_buf[sizeof(fixed_buf) - 1] = '\0';
-
+
BKE_report(reports, type, fixed_buf);
-
- if (G.background==0) {
+
+ if (G.background == 0) {
printf("%s\n", fixed_buf);
}
}
@@ -283,8 +281,8 @@ static OldNewMap *oldnewmap_new(void)
{
OldNewMap *onm= MEM_callocN(sizeof(*onm), "OldNewMap");
- onm->entriessize= 1024;
- onm->entries= MEM_mallocN(sizeof(*onm->entries)*onm->entriessize, "OldNewMap.entries");
+ onm->entriessize = 1024;
+ onm->entries = MEM_mallocN(sizeof(*onm->entries)*onm->entriessize, "OldNewMap.entries");
return onm;
}
@@ -293,8 +291,8 @@ static int verg_oldnewmap(const void *v1, const void *v2)
{
const struct OldNew *x1=v1, *x2=v2;
- if ( x1->old > x2->old) return 1;
- else if ( x1->old < x2->old) return -1;
+ if (x1->old > x2->old) return 1;
+ else if (x1->old < x2->old) return -1;
return 0;
}
@@ -302,31 +300,31 @@ static int verg_oldnewmap(const void *v1, const void *v2)
static void oldnewmap_sort(FileData *fd)
{
qsort(fd->libmap->entries, fd->libmap->nentries, sizeof(OldNew), verg_oldnewmap);
- fd->libmap->sorted= 1;
+ fd->libmap->sorted = 1;
}
/* nr is zero for data, and ID code for libdata */
static void oldnewmap_insert(OldNewMap *onm, void *oldaddr, void *newaddr, int nr)
{
OldNew *entry;
-
+
if (oldaddr==NULL || newaddr==NULL) return;
- if (onm->nentries==onm->entriessize) {
- int osize= onm->entriessize;
- OldNew *oentries= onm->entries;
-
- onm->entriessize*= 2;
- onm->entries= MEM_mallocN(sizeof(*onm->entries)*onm->entriessize, "OldNewMap.entries");
-
+ if (onm->nentries == onm->entriessize) {
+ int osize = onm->entriessize;
+ OldNew *oentries = onm->entries;
+
+ onm->entriessize *= 2;
+ onm->entries = MEM_mallocN(sizeof(*onm->entries)*onm->entriessize, "OldNewMap.entries");
+
memcpy(onm->entries, oentries, sizeof(*oentries)*osize);
MEM_freeN(oentries);
}
- entry= &onm->entries[onm->nentries++];
- entry->old= oldaddr;
- entry->newp= newaddr;
- entry->nr= nr;
+ entry = &onm->entries[onm->nentries++];
+ entry->old = oldaddr;
+ entry->newp = newaddr;
+ entry->nr = nr;
}
void blo_do_versions_oldnewmap_insert(OldNewMap *onm, void *oldaddr, void *newaddr, int nr)
@@ -337,29 +335,29 @@ void blo_do_versions_oldnewmap_insert(OldNewMap *onm, void *oldaddr, void *newad
static void *oldnewmap_lookup_and_inc(OldNewMap *onm, void *addr)
{
int i;
-
- if (addr==NULL) return NULL;
-
- if (onm->lasthit<onm->nentries-1) {
- OldNew *entry= &onm->entries[++onm->lasthit];
-
- if (entry->old==addr) {
+
+ if (addr == NULL) return NULL;
+
+ if (onm->lasthit < onm->nentries-1) {
+ OldNew *entry = &onm->entries[++onm->lasthit];
+
+ if (entry->old == addr) {
entry->nr++;
return entry->newp;
}
}
-
- for (i=0; i<onm->nentries; i++) {
- OldNew *entry= &onm->entries[i];
-
- if (entry->old==addr) {
- onm->lasthit= i;
-
+
+ for (i = 0; i < onm->nentries; i++) {
+ OldNew *entry = &onm->entries[i];
+
+ if (entry->old == addr) {
+ onm->lasthit = i;
+
entry->nr++;
return entry->newp;
}
}
-
+
return NULL;
}
@@ -368,17 +366,17 @@ static void *oldnewmap_liblookup(OldNewMap *onm, void *addr, void *lib)
{
int i;
- if (addr==NULL) return NULL;
+ if (addr == NULL) return NULL;
/* lasthit works fine for non-libdata, linking there is done in same sequence as writing */
if (onm->sorted) {
OldNew entry_s, *entry;
- entry_s.old= addr;
+ entry_s.old = addr;
- entry= bsearch(&entry_s, onm->entries, onm->nentries, sizeof(OldNew), verg_oldnewmap);
+ entry = bsearch(&entry_s, onm->entries, onm->nentries, sizeof(OldNew), verg_oldnewmap);
if (entry) {
- ID *id= entry->newp;
+ ID *id = entry->newp;
if (id && (!lib || id->lib)) {
return entry->newp;
@@ -386,12 +384,12 @@ static void *oldnewmap_liblookup(OldNewMap *onm, void *addr, void *lib)
}
}
- for (i=0; i<onm->nentries; i++) {
- OldNew *entry= &onm->entries[i];
-
- if (entry->old==addr) {
- ID *id= entry->newp;
-
+ for (i = 0; i < onm->nentries; i++) {
+ OldNew *entry = &onm->entries[i];
+
+ if (entry->old == addr) {
+ ID *id = entry->newp;
+
if (id && (!lib || id->lib)) {
return entry->newp;
}
@@ -405,19 +403,19 @@ static void oldnewmap_free_unused(OldNewMap *onm)
{
int i;
- for (i=0; i<onm->nentries; i++) {
- OldNew *entry= &onm->entries[i];
- if (entry->nr==0) {
+ for (i = 0; i < onm->nentries; i++) {
+ OldNew *entry = &onm->entries[i];
+ if (entry->nr == 0) {
MEM_freeN(entry->newp);
- entry->newp= NULL;
+ entry->newp = NULL;
}
}
}
static void oldnewmap_clear(OldNewMap *onm)
{
- onm->nentries= 0;
- onm->lasthit= 0;
+ onm->nentries = 0;
+ onm->lasthit = 0;
}
static void oldnewmap_free(OldNewMap *onm)
@@ -436,9 +434,9 @@ static void add_main_to_main(Main *mainvar, Main *from)
{
ListBase *lbarray[MAX_LIBARRAY], *fromarray[MAX_LIBARRAY];
int a;
-
+
set_listbasepointers(mainvar, lbarray);
- a= set_listbasepointers(from, fromarray);
+ a = set_listbasepointers(from, fromarray);
while (a--) {
BLI_movelisttolist(lbarray[a], fromarray[a]);
}
@@ -448,9 +446,8 @@ void blo_join_main(ListBase *mainlist)
{
Main *tojoin, *mainl;
-
- mainl= mainlist->first;
- while ((tojoin= mainl->next)) {
+ mainl = mainlist->first;
+ while ((tojoin = mainl->next)) {
add_main_to_main(mainl, tojoin);
BLI_remlink(mainlist, tojoin);
MEM_freeN(tojoin);
@@ -462,24 +459,24 @@ static void split_libdata(ListBase *lb, Main *first)
ListBase *lbn;
ID *id, *idnext;
Main *mainvar;
-
- id= lb->first;
+
+ id = lb->first;
while (id) {
- idnext= id->next;
+ idnext = id->next;
if (id->lib) {
- mainvar= first;
+ mainvar = first;
while (mainvar) {
- if (mainvar->curlib==id->lib) {
+ if (mainvar->curlib == id->lib) {
lbn= which_libbase(mainvar, GS(id->name));
BLI_remlink(lb, id);
BLI_addtail(lbn, id);
break;
}
- mainvar= mainvar->next;
+ mainvar = mainvar->next;
}
- if (mainvar==NULL) printf("error split_libdata\n");
+ if (mainvar == NULL) printf("error split_libdata\n");
}
- id= idnext;
+ id = idnext;
}
}
@@ -488,20 +485,20 @@ void blo_split_main(ListBase *mainlist, Main *main)
ListBase *lbarray[MAX_LIBARRAY];
Library *lib;
int i;
-
- mainlist->first= mainlist->last= main;
- main->next= NULL;
-
- if (main->library.first==NULL)
+
+ mainlist->first = mainlist->last = main;
+ main->next = NULL;
+
+ if (main->library.first == NULL)
return;
- for (lib= main->library.first; lib; lib= lib->id.next) {
- Main *libmain= MEM_callocN(sizeof(Main), "libmain");
- libmain->curlib= lib;
+ for (lib = main->library.first; lib; lib = lib->id.next) {
+ Main *libmain = MEM_callocN(sizeof(Main), "libmain");
+ libmain->curlib = lib;
BLI_addtail(mainlist, libmain);
}
-
- i= set_listbasepointers(main, lbarray);
+
+ i = set_listbasepointers(main, lbarray);
while (i--)
split_libdata(lbarray[i], main->next);
}
@@ -521,7 +518,7 @@ static void read_file_version(FileData *fd, Main *main)
BHead *bhead;
for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==GLOB) {
+ if (bhead->code == GLOB) {
FileGlobal *fg= read_struct(fd, bhead, "Global");
if (fg) {
main->subversionfile= fg->subversion;
@@ -529,7 +526,7 @@ static void read_file_version(FileData *fd, Main *main)
main->minsubversionfile= fg->minsubversion;
MEM_freeN(fg);
}
- else if (bhead->code==ENDB)
+ else if (bhead->code == ENDB)
break;
}
}
@@ -546,24 +543,24 @@ static Main *blo_find_main(FileData *fd, ListBase *mainlist, const char *filepat
cleanup_path(relabase, name1);
// printf("blo_find_main: original in %s\n", name);
// printf("blo_find_main: converted to %s\n", name1);
-
- for (m= mainlist->first; m; m= m->next) {
- char *libname= (m->curlib)?m->curlib->filepath:m->name;
+
+ for (m = mainlist->first; m; m = m->next) {
+ char *libname = (m->curlib) ? m->curlib->filepath : m->name;
if (BLI_path_cmp(name1, libname) == 0) {
if (G.debug & G_DEBUG) printf("blo_find_main: found library %s\n", libname);
return m;
}
}
-
- m= MEM_callocN(sizeof(Main), "find_main");
+
+ m = MEM_callocN(sizeof(Main), "find_main");
BLI_addtail(mainlist, m);
-
- lib= BKE_libblock_alloc(&m->library, ID_LI, "lib");
+
+ lib = BKE_libblock_alloc(&m->library, ID_LI, "lib");
BLI_strncpy(lib->name, filepath, sizeof(lib->name));
BLI_strncpy(lib->filepath, name1, sizeof(lib->filepath));
- m->curlib= lib;
+ m->curlib = lib;
read_file_version(fd, m);
@@ -577,8 +574,8 @@ static Main *blo_find_main(FileData *fd, ListBase *mainlist, const char *filepat
static void switch_endian_bh4(BHead4 *bhead)
{
/* the ID_.. codes */
- if ((bhead->code & 0xFFFF)==0) bhead->code >>=16;
-
+ if ((bhead->code & 0xFFFF)==0) bhead->code >>= 16;
+
if (bhead->code != ENDB) {
SWITCH_INT(bhead->len);
SWITCH_INT(bhead->SDNAnr);
@@ -589,8 +586,8 @@ static void switch_endian_bh4(BHead4 *bhead)
static void switch_endian_bh8(BHead8 *bhead)
{
/* the ID_.. codes */
- if ((bhead->code & 0xFFFF)==0) bhead->code >>=16;
-
+ if ((bhead->code & 0xFFFF)==0) bhead->code >>= 16;
+
if (bhead->code != ENDB) {
SWITCH_INT(bhead->len);
SWITCH_INT(bhead->SDNAnr);
@@ -607,37 +604,37 @@ static void bh4_from_bh8(BHead *bhead, BHead8 *bhead8, int do_endian_swap)
long long old;
#endif
- bhead4->code= bhead8->code;
- bhead4->len= bhead8->len;
+ bhead4->code = bhead8->code;
+ bhead4->len = bhead8->len;
if (bhead4->code != ENDB) {
-
- //perform a endian swap on 64bit pointers, otherwise the pointer might map to zero
- //0x0000000000000000000012345678 would become 0x12345678000000000000000000000000
+ /* perform a endian swap on 64bit pointers, otherwise the pointer might map to zero
+ * 0x0000000000000000000012345678 would become 0x12345678000000000000000000000000
+ */
if (do_endian_swap) {
SWITCH_LONGINT(bhead8->old);
}
-
+
/* this patch is to avoid a long long being read from not-eight aligned positions
* is necessary on any modern 64bit architecture) */
memcpy(&old, &bhead8->old, 8);
bhead4->old = (int) (old >> 3);
-
- bhead4->SDNAnr= bhead8->SDNAnr;
- bhead4->nr= bhead8->nr;
+
+ bhead4->SDNAnr = bhead8->SDNAnr;
+ bhead4->nr = bhead8->nr;
}
}
static void bh8_from_bh4(BHead *bhead, BHead4 *bhead4)
{
BHead8 *bhead8 = (BHead8 *) bhead;
-
- bhead8->code= bhead4->code;
- bhead8->len= bhead4->len;
-
+
+ bhead8->code = bhead4->code;
+ bhead8->len = bhead4->len;
+
if (bhead8->code != ENDB) {
- bhead8->old= bhead4->old;
- bhead8->SDNAnr= bhead4->SDNAnr;
+ bhead8->old = bhead4->old;
+ bhead8->SDNAnr = bhead4->SDNAnr;
bhead8->nr= bhead4->nr;
}
}
@@ -648,29 +645,29 @@ static BHeadN *get_bhead(FileData *fd)
int readsize;
if (fd) {
- if ( ! fd->eof) {
+ if (!fd->eof) {
/* initializing to zero isn't strictly needed but shuts valgrind up
* since uninitialized memory gets compared */
- BHead8 bhead8= {0};
- BHead4 bhead4= {0};
- BHead bhead= {0};
+ BHead8 bhead8 = {0};
+ BHead4 bhead4 = {0};
+ BHead bhead = {0};
- // First read the bhead structure.
- // Depending on the platform the file was written on this can
- // be a big or little endian BHead4 or BHead8 structure.
-
- // As usual 'ENDB' (the last *partial* bhead of the file)
- // needs some special handling. We don't want to EOF just yet.
-
+ /* First read the bhead structure.
+ * Depending on the platform the file was written on this can
+ * be a big or little endian BHead4 or BHead8 structure.
+ *
+ * As usual 'ENDB' (the last *partial* bhead of the file)
+ * needs some special handling. We don't want to EOF just yet.
+ */
if (fd->flags & FD_FLAGS_FILE_POINTSIZE_IS_4) {
bhead4.code = DATA;
readsize = fd->read(fd, &bhead4, sizeof(bhead4));
-
+
if (readsize == sizeof(bhead4) || bhead4.code == ENDB) {
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
switch_endian_bh4(&bhead4);
}
-
+
if (fd->flags & FD_FLAGS_POINTSIZE_DIFFERS) {
bh8_from_bh4(&bhead, &bhead4);
}
@@ -686,12 +683,12 @@ static BHeadN *get_bhead(FileData *fd)
else {
bhead8.code = DATA;
readsize = fd->read(fd, &bhead8, sizeof(bhead8));
-
+
if (readsize == sizeof(bhead8) || bhead8.code == ENDB) {
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
switch_endian_bh8(&bhead8);
}
-
+
if (fd->flags & FD_FLAGS_POINTSIZE_DIFFERS) {
bh4_from_bh8(&bhead, &bhead8, (fd->flags & FD_FLAGS_SWITCH_ENDIAN));
}
@@ -704,21 +701,21 @@ static BHeadN *get_bhead(FileData *fd)
bhead.len= 0;
}
}
-
+
/* make sure people are not trying to pass bad blend files */
if (bhead.len < 0) fd->eof = 1;
-
- // bhead now contains the (converted) bhead structure. Now read
- // the associated data and put everything in a BHeadN (creative naming !)
-
- if ( ! fd->eof) {
+
+ /* bhead now contains the (converted) bhead structure. Now read
+ * the associated data and put everything in a BHeadN (creative naming !)
+ */
+ if (!fd->eof) {
new_bhead = MEM_mallocN(sizeof(BHeadN) + bhead.len, "new_bhead");
if (new_bhead) {
new_bhead->next = new_bhead->prev = NULL;
new_bhead->bhead = bhead;
-
+
readsize = fd->read(fd, new_bhead + 1, bhead.len);
-
+
if (readsize != bhead.len) {
fd->eof = 1;
MEM_freeN(new_bhead);
@@ -732,13 +729,13 @@ static BHeadN *get_bhead(FileData *fd)
}
}
- // We've read a new block. Now add it to the list
- // of blocks.
-
+ /* We've read a new block. Now add it to the list
+ * of blocks.
+ */
if (new_bhead) {
BLI_addtail(&fd->listbase, new_bhead);
}
-
+
return(new_bhead);
}
@@ -746,53 +743,53 @@ BHead *blo_firstbhead(FileData *fd)
{
BHeadN *new_bhead;
BHead *bhead = NULL;
-
- // Rewind the file
- // Read in a new block if necessary
-
+
+ /* Rewind the file
+ * Read in a new block if necessary
+ */
new_bhead = fd->listbase.first;
if (new_bhead == NULL) {
new_bhead = get_bhead(fd);
}
-
+
if (new_bhead) {
bhead = &new_bhead->bhead;
}
-
+
return(bhead);
}
BHead *blo_prevbhead(FileData *UNUSED(fd), BHead *thisblock)
{
- BHeadN *bheadn= (BHeadN *) (((char *) thisblock) - GET_INT_FROM_POINTER( &((BHeadN*)0)->bhead) );
- BHeadN *prev= bheadn->prev;
-
- return prev?&prev->bhead:NULL;
+ BHeadN *bheadn = (BHeadN *) (((char *) thisblock) - GET_INT_FROM_POINTER( &((BHeadN*)0)->bhead) );
+ BHeadN *prev = bheadn->prev;
+
+ return (prev) ? &prev->bhead : NULL;
}
BHead *blo_nextbhead(FileData *fd, BHead *thisblock)
{
BHeadN *new_bhead = NULL;
BHead *bhead = NULL;
-
+
if (thisblock) {
// bhead is actually a sub part of BHeadN
// We calculate the BHeadN pointer from the BHead pointer below
new_bhead = (BHeadN *) (((char *) thisblock) - GET_INT_FROM_POINTER( &((BHeadN*)0)->bhead) );
-
+
// get the next BHeadN. If it doesn't exist we read in the next one
new_bhead = new_bhead->next;
if (new_bhead == NULL) {
new_bhead = get_bhead(fd);
}
}
-
+
if (new_bhead) {
// here we do the reverse:
// go from the BHeadN pointer to the BHead pointer
bhead = &new_bhead->bhead;
}
-
+
return(bhead);
}
@@ -800,17 +797,17 @@ static void decode_blender_header(FileData *fd)
{
char header[SIZEOFBLENDERHEADER], num[4];
int readsize;
-
- // read in the header data
+
+ /* read in the header data */
readsize = fd->read(fd, header, sizeof(header));
-
+
if (readsize == sizeof(header)) {
if (strncmp(header, "BLENDER", 7) == 0) {
- int remove_this_endian_test= 1;
-
+ int remove_this_endian_test = 1;
+
fd->flags |= FD_FLAGS_FILE_OK;
-
- // what size are pointers in the file ?
+
+ /* what size are pointers in the file ? */
if (header[7]=='_') {
fd->flags |= FD_FLAGS_FILE_POINTSIZE_IS_4;
if (sizeof(void *) != 4) {
@@ -822,16 +819,16 @@ static void decode_blender_header(FileData *fd)
fd->flags |= FD_FLAGS_POINTSIZE_DIFFERS;
}
}
-
- // is the file saved in a different endian
- // than we need ?
+
+ /* is the file saved in a different endian
+ * than we need ?
+ */
if (((((char*)&remove_this_endian_test)[0]==1)?L_ENDIAN:B_ENDIAN) != ((header[8]=='v')?L_ENDIAN:B_ENDIAN)) {
fd->flags |= FD_FLAGS_SWITCH_ENDIAN;
}
-
- // get the version number
-
- memcpy(num, header+9, 3);
+
+ /* get the version number */
+ memcpy(num, header + 9, 3);
num[3] = 0;
fd->fileversion = atoi(num);
}
@@ -841,115 +838,114 @@ static void decode_blender_header(FileData *fd)
static int read_file_dna(FileData *fd)
{
BHead *bhead;
-
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==DNA1) {
- int do_endian_swap= (fd->flags&FD_FLAGS_SWITCH_ENDIAN)?1:0;
-
- fd->filesdna= DNA_sdna_from_data(&bhead[1], bhead->len, do_endian_swap);
+
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead)) {
+ if (bhead->code == DNA1) {
+ int do_endian_swap = (fd->flags & FD_FLAGS_SWITCH_ENDIAN) ? 1 : 0;
+
+ fd->filesdna = DNA_sdna_from_data(&bhead[1], bhead->len, do_endian_swap);
if (fd->filesdna) {
-
- fd->compflags= DNA_struct_get_compareflags(fd->filesdna, fd->memsdna);
+ fd->compflags = DNA_struct_get_compareflags(fd->filesdna, fd->memsdna);
/* used to retrieve ID names from (bhead+1) */
- fd->id_name_offs= DNA_elem_offset(fd->filesdna, "ID", "char", "name[]");
+ fd->id_name_offs = DNA_elem_offset(fd->filesdna, "ID", "char", "name[]");
}
-
+
return 1;
}
- else if (bhead->code==ENDB)
+ else if (bhead->code == ENDB)
break;
}
-
+
return 0;
}
static int fd_read_from_file(FileData *filedata, void *buffer, unsigned int size)
{
int readsize = read(filedata->filedes, buffer, size);
-
+
if (readsize < 0) {
readsize = EOF;
}
else {
filedata->seek += readsize;
}
-
- return (readsize);
+
+ return readsize;
}
static int fd_read_gzip_from_file(FileData *filedata, void *buffer, unsigned int size)
{
int readsize = gzread(filedata->gzfiledes, buffer, size);
-
+
if (readsize < 0) {
readsize = EOF;
}
else {
filedata->seek += readsize;
}
-
+
return (readsize);
}
static int fd_read_from_memory(FileData *filedata, void *buffer, unsigned int size)
{
- // don't read more bytes then there are available in the buffer
+ /* don't read more bytes then there are available in the buffer */
int readsize = (int)MIN2(size, (unsigned int)(filedata->buffersize - filedata->seek));
-
+
memcpy(buffer, filedata->buffer + filedata->seek, readsize);
filedata->seek += readsize;
-
+
return (readsize);
}
static int fd_read_from_memfile(FileData *filedata, void *buffer, unsigned int size)
{
- static unsigned int seek= 1<<30; /* the current position */
- static unsigned int offset= 0; /* size of previous chunks */
- static MemFileChunk *chunk=NULL;
+ static unsigned int seek = (1<<30); /* the current position */
+ static unsigned int offset = 0; /* size of previous chunks */
+ static MemFileChunk *chunk = NULL;
unsigned int chunkoffset, readsize, totread;
- if (size==0) return 0;
+ if (size == 0) return 0;
if (seek != (unsigned int)filedata->seek) {
- chunk= filedata->memfile->chunks.first;
- seek= 0;
+ chunk = filedata->memfile->chunks.first;
+ seek = 0;
while (chunk) {
if (seek + chunk->size > (unsigned) filedata->seek) break;
- seek+= chunk->size;
- chunk= chunk->next;
+ seek += chunk->size;
+ chunk = chunk->next;
}
- offset= seek;
- seek= filedata->seek;
+ offset = seek;
+ seek = filedata->seek;
}
if (chunk) {
- totread= 0;
-
+ totread = 0;
+
do {
/* first check if it's on the end if current chunk */
if (seek-offset == chunk->size) {
- offset+= chunk->size;
- chunk= chunk->next;
+ offset += chunk->size;
+ chunk = chunk->next;
}
-
+
/* debug, should never happen */
- if (chunk==NULL) {
+ if (chunk == NULL) {
printf("illegal read, chunk zero\n");
return 0;
}
-
- chunkoffset= seek-offset;
- readsize= size-totread;
-
+
+ chunkoffset = seek-offset;
+ readsize = size-totread;
+
/* data can be spread over multiple chunks, so clamp size
* to within this chunk, and then it will read further in
* the next chunk */
if (chunkoffset+readsize > chunk->size)
readsize= chunk->size-chunkoffset;
-
- memcpy((char*)buffer+totread, chunk->buf+chunkoffset, readsize);
+
+ memcpy((char*)buffer + totread, chunk->buf + chunkoffset, readsize);
totread += readsize;
filedata->seek += readsize;
seek += readsize;
@@ -957,47 +953,47 @@ static int fd_read_from_memfile(FileData *filedata, void *buffer, unsigned int s
return totread;
}
-
+
return 0;
}
static FileData *filedata_new(void)
{
FileData *fd = MEM_callocN(sizeof(FileData), "FileData");
-
+
fd->filedes = -1;
fd->gzfiledes = NULL;
-
+
/* XXX, this doesn't need to be done all the time,
* but it keeps us re-entrant, remove once we have
* a lib that provides a nice lock. - zr
*/
fd->memsdna = DNA_sdna_from_data(DNAstr, DNAlen, 0);
-
+
fd->datamap = oldnewmap_new();
fd->globmap = oldnewmap_new();
fd->libmap = oldnewmap_new();
-
+
return fd;
}
static FileData *blo_decode_and_check(FileData *fd, ReportList *reports)
{
decode_blender_header(fd);
-
+
if (fd->flags & FD_FLAGS_FILE_OK) {
if (!read_file_dna(fd)) {
BKE_reportf(reports, RPT_ERROR, "Failed to read blend file: \"%s\", incomplete", fd->relabase);
blo_freefiledata(fd);
- fd= NULL;
+ fd = NULL;
}
}
else {
BKE_reportf(reports, RPT_ERROR, "Failed to read blend file: \"%s\", not a blend file", fd->relabase);
blo_freefiledata(fd);
- fd= NULL;
+ fd = NULL;
}
-
+
return fd;
}
@@ -1006,9 +1002,9 @@ static FileData *blo_decode_and_check(FileData *fd, ReportList *reports)
FileData *blo_openblenderfile(const char *filepath, ReportList *reports)
{
gzFile gzfile;
- errno= 0;
- gzfile= BLI_gzopen(filepath, "rb");
-
+ errno = 0;
+ gzfile = BLI_gzopen(filepath, "rb");
+
if (gzfile == (gzFile)Z_NULL) {
BKE_reportf(reports, RPT_ERROR, "Unable to open \"%s\": %s.", filepath, errno ? strerror(errno) : "Unknown error reading file");
return NULL;
@@ -1017,10 +1013,10 @@ FileData *blo_openblenderfile(const char *filepath, ReportList *reports)
FileData *fd = filedata_new();
fd->gzfiledes = gzfile;
fd->read = fd_read_gzip_from_file;
-
+
/* needed for library_append and read_libraries */
BLI_strncpy(fd->relabase, filepath, sizeof(fd->relabase));
-
+
return blo_decode_and_check(fd, reports);
}
}
@@ -1032,12 +1028,12 @@ FileData *blo_openblendermemory(void *mem, int memsize, ReportList *reports)
return NULL;
}
else {
- FileData *fd= filedata_new();
- fd->buffer= mem;
- fd->buffersize= memsize;
- fd->read= fd_read_from_memory;
- fd->flags|= FD_FLAGS_NOT_MY_BUFFER;
-
+ FileData *fd = filedata_new();
+ fd->buffer = mem;
+ fd->buffersize = memsize;
+ fd->read = fd_read_from_memory;
+ fd->flags |= FD_FLAGS_NOT_MY_BUFFER;
+
return blo_decode_and_check(fd, reports);
}
}
@@ -1049,12 +1045,12 @@ FileData *blo_openblendermemfile(MemFile *memfile, ReportList *reports)
return NULL;
}
else {
- FileData *fd= filedata_new();
- fd->memfile= memfile;
-
- fd->read= fd_read_from_memfile;
- fd->flags|= FD_FLAGS_NOT_MY_BUFFER;
-
+ FileData *fd = filedata_new();
+ fd->memfile = memfile;
+
+ fd->read = fd_read_from_memfile;
+ fd->flags |= FD_FLAGS_NOT_MY_BUFFER;
+
return blo_decode_and_check(fd, reports);
}
}
@@ -1063,30 +1059,29 @@ FileData *blo_openblendermemfile(MemFile *memfile, ReportList *reports)
void blo_freefiledata(FileData *fd)
{
if (fd) {
-
if (fd->filedes != -1) {
close(fd->filedes);
}
-
+
if (fd->gzfiledes != NULL) {
gzclose(fd->gzfiledes);
}
-
+
if (fd->buffer && !(fd->flags & FD_FLAGS_NOT_MY_BUFFER)) {
MEM_freeN(fd->buffer);
fd->buffer = NULL;
}
-
+
// Free all BHeadN data blocks
BLI_freelistN(&fd->listbase);
-
+
if (fd->memsdna)
DNA_sdna_free(fd->memsdna);
if (fd->filesdna)
DNA_sdna_free(fd->filesdna);
if (fd->compflags)
MEM_freeN(fd->compflags);
-
+
if (fd->datamap)
oldnewmap_free(fd->datamap);
if (fd->globmap)
@@ -1108,7 +1103,9 @@ void blo_freefiledata(FileData *fd)
int BLO_has_bfile_extension(const char *str)
{
- return (BLI_testextensie(str, ".ble") || BLI_testextensie(str, ".blend") || BLI_testextensie(str, ".blend.gz"));
+ return (BLI_testextensie(str, ".ble") ||
+ BLI_testextensie(str, ".blend") ||
+ BLI_testextensie(str, ".blend.gz"));
}
int BLO_is_a_library(const char *path, char *dir, char *group)
@@ -1120,32 +1117,32 @@ int BLO_is_a_library(const char *path, char *dir, char *group)
char *fd;
strcpy(dir, path);
- len= strlen(dir);
- if (len<7) return 0;
- if ( dir[len-1] != '/' && dir[len-1] != '\\') return 0;
+ len = strlen(dir);
+ if (len < 7) return 0;
+ if ((dir[len - 1] != '/') && (dir[len - 1] != '\\')) return 0;
- group[0]= 0;
- dir[len-1]= 0;
+ group[0] = '\0';
+ dir[len - 1] = '\0';
/* Find the last slash */
- fd= BLI_last_slash(dir);
+ fd = BLI_last_slash(dir);
- if (fd==NULL) return 0;
- *fd= 0;
+ if (fd == NULL) return 0;
+ *fd = 0;
if (BLO_has_bfile_extension(fd+1)) {
/* the last part of the dir is a .blend file, no group follows */
- *fd= '/'; /* put back the removed slash separating the dir and the .blend file name */
+ *fd = '/'; /* put back the removed slash separating the dir and the .blend file name */
}
else {
- char *gp = fd+1; // in case we have a .blend file, gp points to the group
-
+ char *gp = fd + 1; // in case we have a .blend file, gp points to the group
+
/* Find the last slash */
- fd= BLI_last_slash(dir);
+ fd = BLI_last_slash(dir);
if (!fd || !BLO_has_bfile_extension(fd+1)) return 0;
-
+
/* now we know that we are in a blend file and it is safe to
* assume that gp actually points to a group */
- if (strcmp("Screen", gp)!=0)
+ if (strcmp("Screen", gp) != 0)
BLI_strncpy(group, gp, GROUP_MAX);
}
return 1;
@@ -1190,11 +1187,11 @@ void *blo_do_versions_newlibadr(FileData *fd, void *lib, void *adr) /* only lib
static void *newlibadr_us(FileData *fd, void *lib, void *adr) /* increases user number */
{
- ID *id= newlibadr(fd, lib, adr);
-
+ ID *id = newlibadr(fd, lib, adr);
+
if (id)
id->us++;
-
+
return id;
}
@@ -1207,12 +1204,12 @@ static void change_idid_adr_fd(FileData *fd, void *old, void *new)
{
int i;
- for (i=0; i<fd->libmap->nentries; i++) {
- OldNew *entry= &fd->libmap->entries[i];
+ for (i = 0; i < fd->libmap->nentries; i++) {
+ OldNew *entry = &fd->libmap->entries[i];
if (old==entry->newp && entry->nr==ID_ID) {
- entry->newp= new;
- if (new) entry->nr= GS( ((ID *)new)->name );
+ entry->newp = new;
+ if (new) entry->nr = GS( ((ID *)new)->name );
break;
}
}
@@ -1222,11 +1219,13 @@ static void change_idid_adr(ListBase *mainlist, FileData *basefd, void *old, voi
{
Main *mainptr;
- for (mainptr= mainlist->first; mainptr; mainptr= mainptr->next) {
+ for (mainptr = mainlist->first; mainptr; mainptr = mainptr->next) {
FileData *fd;
- if (mainptr->curlib) fd= mainptr->curlib->filedata;
- else fd= basefd;
+ if (mainptr->curlib)
+ fd = mainptr->curlib->filedata;
+ else
+ fd = basefd;
if (fd) {
change_idid_adr_fd(fd, old, new);
@@ -1240,35 +1239,36 @@ static void change_idid_adr(ListBase *mainlist, FileData *basefd, void *old, voi
* if the local object still exists */
void blo_clear_proxy_pointers_from_lib(Main *oldmain)
{
- Object *ob= oldmain->object.first;
+ Object *ob = oldmain->object.first;
- for (;ob; ob= ob->id.next)
+ for (; ob; ob= ob->id.next) {
if (ob->id.lib)
- ob->proxy_from= NULL;
+ ob->proxy_from = NULL;
+ }
}
void blo_make_image_pointer_map(FileData *fd, Main *oldmain)
{
- Image *ima= oldmain->image.first;
- Scene *sce= oldmain->scene.first;
+ Image *ima = oldmain->image.first;
+ Scene *sce = oldmain->scene.first;
int a;
- fd->imamap= oldnewmap_new();
+ fd->imamap = oldnewmap_new();
- for (;ima; ima= ima->id.next) {
- Link *ibuf= ima->ibufs.first;
+ for (;ima; ima = ima->id.next) {
+ Link *ibuf = ima->ibufs.first;
for (; ibuf; ibuf= ibuf->next)
oldnewmap_insert(fd->imamap, ibuf, ibuf, 0);
if (ima->gputexture)
oldnewmap_insert(fd->imamap, ima->gputexture, ima->gputexture, 0);
- for (a=0; a<IMA_MAX_RENDER_SLOT; a++)
+ for (a=0; a < IMA_MAX_RENDER_SLOT; a++)
if (ima->renders[a])
oldnewmap_insert(fd->imamap, ima->renders[a], ima->renders[a], 0);
}
for (; sce; sce= sce->id.next) {
if (sce->nodetree) {
bNode *node;
- for (node= sce->nodetree->nodes.first; node; node= node->next)
+ for (node = sce->nodetree->nodes.first; node; node = node->next)
oldnewmap_insert(fd->imamap, node->preview, node->preview, 0);
}
}
@@ -1278,63 +1278,63 @@ void blo_make_image_pointer_map(FileData *fd, Main *oldmain)
/* this works because freeing old main only happens after this call */
void blo_end_image_pointer_map(FileData *fd, Main *oldmain)
{
- OldNew *entry= fd->imamap->entries;
- Image *ima= oldmain->image.first;
- Scene *sce= oldmain->scene.first;
+ OldNew *entry = fd->imamap->entries;
+ Image *ima = oldmain->image.first;
+ Scene *sce = oldmain->scene.first;
int i;
/* used entries were restored, so we put them to zero */
- for (i=0; i<fd->imamap->nentries; i++, entry++) {
- if (entry->nr>0)
- entry->newp= NULL;
+ for ( i= 0; i < fd->imamap->nentries; i++, entry++) {
+ if (entry->nr > 0)
+ entry->newp = NULL;
}
- for (;ima; ima= ima->id.next) {
+ for (; ima; ima= ima->id.next) {
Link *ibuf, *next;
/* this mirrors direct_link_image */
- for (ibuf= ima->ibufs.first; ibuf; ibuf= next) {
- next= ibuf->next;
- if (NULL==newimaadr(fd, ibuf)) { /* so was restored */
+ for (ibuf = ima->ibufs.first; ibuf; ibuf = next) {
+ next = ibuf->next;
+ if (NULL == newimaadr(fd, ibuf)) { /* so was restored */
BLI_remlink(&ima->ibufs, ibuf);
- ima->bindcode= 0;
- ima->gputexture= NULL;
+ ima->bindcode = 0;
+ ima->gputexture = NULL;
}
}
- for (i=0; i<IMA_MAX_RENDER_SLOT; i++)
- ima->renders[i]= newimaadr(fd, ima->renders[i]);
-
- ima->gputexture= newimaadr(fd, ima->gputexture);
+ for (i = 0; i < IMA_MAX_RENDER_SLOT; i++)
+ ima->renders[i] = newimaadr(fd, ima->renders[i]);
+
+ ima->gputexture = newimaadr(fd, ima->gputexture);
}
- for (; sce; sce= sce->id.next) {
+ for (; sce; sce = sce->id.next) {
if (sce->nodetree) {
bNode *node;
- for (node= sce->nodetree->nodes.first; node; node= node->next)
- node->preview= newimaadr(fd, node->preview);
+ for (node = sce->nodetree->nodes.first; node; node = node->next)
+ node->preview = newimaadr(fd, node->preview);
}
}
}
void blo_make_movieclip_pointer_map(FileData *fd, Main *oldmain)
{
- MovieClip *clip= oldmain->movieclip.first;
- Scene *sce= oldmain->scene.first;
-
- fd->movieclipmap= oldnewmap_new();
-
+ MovieClip *clip = oldmain->movieclip.first;
+ Scene *sce = oldmain->scene.first;
+
+ fd->movieclipmap = oldnewmap_new();
+
for (;clip; clip= clip->id.next) {
if (clip->cache)
oldnewmap_insert(fd->movieclipmap, clip->cache, clip->cache, 0);
-
+
if (clip->tracking.camera.intrinsics)
oldnewmap_insert(fd->movieclipmap, clip->tracking.camera.intrinsics, clip->tracking.camera.intrinsics, 0);
}
-
- for (; sce; sce= sce->id.next) {
+
+ for (; sce; sce = sce->id.next) {
if (sce->nodetree) {
bNode *node;
- for (node= sce->nodetree->nodes.first; node; node= node->next)
- if (node->type==CMP_NODE_MOVIEDISTORTION)
+ for (node = sce->nodetree->nodes.first; node; node= node->next)
+ if (node->type == CMP_NODE_MOVIEDISTORTION)
oldnewmap_insert(fd->movieclipmap, node->storage, node->storage, 0);
}
}
@@ -1344,28 +1344,28 @@ void blo_make_movieclip_pointer_map(FileData *fd, Main *oldmain)
/* this works because freeing old main only happens after this call */
void blo_end_movieclip_pointer_map(FileData *fd, Main *oldmain)
{
- OldNew *entry= fd->movieclipmap->entries;
- MovieClip *clip= oldmain->movieclip.first;
- Scene *sce= oldmain->scene.first;
+ OldNew *entry = fd->movieclipmap->entries;
+ MovieClip *clip = oldmain->movieclip.first;
+ Scene *sce = oldmain->scene.first;
int i;
-
+
/* used entries were restored, so we put them to zero */
- for (i=0; i<fd->movieclipmap->nentries; i++, entry++) {
- if (entry->nr>0)
- entry->newp= NULL;
+ for (i=0; i < fd->movieclipmap->nentries; i++, entry++) {
+ if (entry->nr > 0)
+ entry->newp = NULL;
}
-
- for (;clip; clip= clip->id.next) {
- clip->cache= newmclipadr(fd, clip->cache);
- clip->tracking.camera.intrinsics= newmclipadr(fd, clip->tracking.camera.intrinsics);
+
+ for (; clip; clip = clip->id.next) {
+ clip->cache = newmclipadr(fd, clip->cache);
+ clip->tracking.camera.intrinsics = newmclipadr(fd, clip->tracking.camera.intrinsics);
}
-
- for (; sce; sce= sce->id.next) {
+
+ for (; sce; sce = sce->id.next) {
if (sce->nodetree) {
bNode *node;
- for (node= sce->nodetree->nodes.first; node; node= node->next)
- if (node->type==CMP_NODE_MOVIEDISTORTION)
- node->storage= newmclipadr(fd, node->storage);
+ for (node = sce->nodetree->nodes.first; node; node = node->next)
+ if (node->type == CMP_NODE_MOVIEDISTORTION)
+ node->storage = newmclipadr(fd, node->storage);
}
}
}
@@ -1374,19 +1374,19 @@ void blo_end_movieclip_pointer_map(FileData *fd, Main *oldmain)
/* undo file support: add all library pointers in lookup */
void blo_add_library_pointer_map(ListBase *mainlist, FileData *fd)
{
- Main *ptr= mainlist->first;
+ Main *ptr = mainlist->first;
ListBase *lbarray[MAX_LIBARRAY];
- for (ptr= ptr->next; ptr; ptr= ptr->next) {
- int i= set_listbasepointers(ptr, lbarray);
+ for (ptr = ptr->next; ptr; ptr = ptr->next) {
+ int i = set_listbasepointers(ptr, lbarray);
while (i--) {
ID *id;
- for (id= lbarray[i]->first; id; id= id->next)
+ for (id = lbarray[i]->first; id; id = id->next)
oldnewmap_insert(fd->libmap, id, id, GS(id->name));
}
}
}
-
+
/* ********** END OLD POINTERS ****************** */
/* ********** READ FILE ****************** */
@@ -1395,33 +1395,33 @@ static void switch_endian_structs(struct SDNA *filesdna, BHead *bhead)
{
int blocksize, nblocks;
char *data;
-
- data= (char *)(bhead+1);
- blocksize= filesdna->typelens[ filesdna->structs[bhead->SDNAnr][0] ];
-
- nblocks= bhead->nr;
+
+ data = (char *)(bhead+1);
+ blocksize = filesdna->typelens[ filesdna->structs[bhead->SDNAnr][0] ];
+
+ nblocks = bhead->nr;
while (nblocks--) {
DNA_struct_switch_endian(filesdna, bhead->SDNAnr, data);
-
- data+= blocksize;
+
+ data += blocksize;
}
}
static void *read_struct(FileData *fd, BHead *bh, const char *blockname)
{
- void *temp= NULL;
-
+ void *temp = NULL;
+
if (bh->len) {
/* switch is based on file dna */
if (bh->SDNAnr && (fd->flags & FD_FLAGS_SWITCH_ENDIAN))
switch_endian_structs(fd->filesdna, bh);
-
+
if (fd->compflags[bh->SDNAnr]) { /* flag==0: doesn't exist anymore */
- if (fd->compflags[bh->SDNAnr]==2) {
- temp= DNA_struct_reconstruct(fd->memsdna, fd->filesdna, fd->compflags, bh->SDNAnr, bh->nr, (bh+1));
+ if (fd->compflags[bh->SDNAnr] == 2) {
+ temp = DNA_struct_reconstruct(fd->memsdna, fd->filesdna, fd->compflags, bh->SDNAnr, bh->nr, (bh+1));
}
else {
- temp= MEM_mallocN(bh->len, blockname);
+ temp = MEM_mallocN(bh->len, blockname);
memcpy(temp, (bh+1), bh->len);
}
}
@@ -1433,19 +1433,19 @@ static void *read_struct(FileData *fd, BHead *bh, const char *blockname)
static void link_list(FileData *fd, ListBase *lb) /* only direct data */
{
Link *ln, *prev;
-
- if (lb->first==NULL) return;
-
- lb->first= newdataadr(fd, lb->first);
- ln= lb->first;
- prev= NULL;
+
+ if (lb->first == NULL) return;
+
+ lb->first = newdataadr(fd, lb->first);
+ ln = lb->first;
+ prev = NULL;
while (ln) {
- ln->next= newdataadr(fd, ln->next);
- ln->prev= prev;
- prev= ln;
- ln= ln->next;
+ ln->next = newdataadr(fd, ln->next);
+ ln->prev = prev;
+ prev = ln;
+ ln = ln->next;
}
- lb->last= prev;
+ lb->last = prev;
}
static void link_glob_list(FileData *fd, ListBase *lb) /* for glob data */
@@ -1453,26 +1453,26 @@ static void link_glob_list(FileData *fd, ListBase *lb) /* for glob data */
Link *ln, *prev;
void *poin;
- if (lb->first==NULL) return;
- poin= newdataadr(fd, lb->first);
+ if (lb->first == NULL) return;
+ poin = newdataadr(fd, lb->first);
if (lb->first) {
oldnewmap_insert(fd->globmap, lb->first, poin, 0);
}
- lb->first= poin;
-
- ln= lb->first;
- prev= NULL;
+ lb->first = poin;
+
+ ln = lb->first;
+ prev = NULL;
while (ln) {
- poin= newdataadr(fd, ln->next);
+ poin = newdataadr(fd, ln->next);
if (ln->next) {
oldnewmap_insert(fd->globmap, ln->next, poin, 0);
}
- ln->next= poin;
- ln->prev= prev;
- prev= ln;
- ln= ln->next;
+ ln->next = poin;
+ ln->prev = prev;
+ prev = ln;
+ ln = ln->next;
}
- lb->last= prev;
+ lb->last = prev;
}
static void test_pointer_array(FileData *fd, void **mat)
@@ -1490,29 +1490,29 @@ static void test_pointer_array(FileData *fd, void **mat)
* the new dna format.
*/
if (*mat) {
- len= MEM_allocN_len(*mat)/fd->filesdna->pointerlen;
-
+ len = MEM_allocN_len(*mat)/fd->filesdna->pointerlen;
+
if (fd->filesdna->pointerlen==8 && fd->memsdna->pointerlen==4) {
- ipoin=imat= MEM_mallocN(len*4, "newmatar");
+ ipoin=imat= MEM_mallocN(len * 4, "newmatar");
lpoin= *mat;
-
+
while (len-- > 0) {
if ((fd->flags & FD_FLAGS_SWITCH_ENDIAN))
SWITCH_LONGINT(*lpoin);
- *ipoin= (int) ((*lpoin) >> 3);
+ *ipoin = (int)((*lpoin) >> 3);
ipoin++;
lpoin++;
}
MEM_freeN(*mat);
- *mat= imat;
+ *mat = imat;
}
-
+
if (fd->filesdna->pointerlen==4 && fd->memsdna->pointerlen==8) {
- lpoin=lmat= MEM_mallocN(len*8, "newmatar");
- ipoin= *mat;
-
+ lpoin = lmat = MEM_mallocN(len * 8, "newmatar");
+ ipoin = *mat;
+
while (len-- > 0) {
- *lpoin= *ipoin;
+ *lpoin = *ipoin;
ipoin++;
lpoin++;
}
@@ -1531,8 +1531,8 @@ static void IDP_DirectLinkIDPArray(IDProperty *prop, int switch_endian, FileData
{
IDProperty *array;
int i;
-
- /*since we didn't save the extra buffer, set totallen to len.*/
+
+ /* since we didn't save the extra buffer, set totallen to len */
prop->totallen = prop->len;
prop->data.pointer = newdataadr(fd, prop->data.pointer);
@@ -1540,13 +1540,13 @@ static void IDP_DirectLinkIDPArray(IDProperty *prop, int switch_endian, FileData
/* note!, idp-arrays didn't exist in 2.4x, so the pointer will be cleared
* theres not really anything we can do to correct this, at least don't crash */
- if (array==NULL) {
- prop->len= 0;
- prop->totallen= 0;
+ if (array == NULL) {
+ prop->len = 0;
+ prop->totallen = 0;
}
-
- for (i=0; i<prop->len; i++)
+
+ for (i = 0; i < prop->len; i++)
IDP_DirectLinkProperty(&array[i], switch_endian, fd);
}
@@ -1554,29 +1554,29 @@ static void IDP_DirectLinkArray(IDProperty *prop, int switch_endian, FileData *f
{
IDProperty **array;
int i;
-
- /*since we didn't save the extra buffer, set totallen to len.*/
+
+ /* since we didn't save the extra buffer, set totallen to len */
prop->totallen = prop->len;
prop->data.pointer = newdataadr(fd, prop->data.pointer);
-
+
if (prop->subtype == IDP_GROUP) {
test_pointer_array(fd, prop->data.pointer);
- array= prop->data.pointer;
-
- for (i=0; i<prop->len; i++)
+ array = prop->data.pointer;
+
+ for (i = 0; i < prop->len; i++)
IDP_DirectLinkProperty(array[i], switch_endian, fd);
}
else if (prop->subtype == IDP_DOUBLE) {
if (switch_endian) {
- for (i=0; i<prop->len; i++) {
- SWITCH_LONGINT(((double*)prop->data.pointer)[i]);
+ for (i = 0; i < prop->len; i++) {
+ SWITCH_LONGINT(((double *)prop->data.pointer)[i]);
}
}
}
else {
if (switch_endian) {
- for (i=0; i<prop->len; i++) {
- SWITCH_INT(((int*)prop->data.pointer)[i]);
+ for (i = 0; i < prop->len; i++) {
+ SWITCH_INT(((int *)prop->data.pointer)[i]);
}
}
}
@@ -1593,9 +1593,9 @@ static void IDP_DirectLinkGroup(IDProperty *prop, int switch_endian, FileData *f
{
ListBase *lb = &prop->data.group;
IDProperty *loop;
-
+
link_list(fd, lb);
-
+
/*Link child id properties now*/
for (loop=prop->data.group.first; loop; loop=loop->next) {
IDP_DirectLinkProperty(loop, switch_endian, fd);
@@ -1638,7 +1638,7 @@ static void IDP_DirectLinkProperty(IDProperty *prop, int switch_endian, FileData
}
}
-/*stub function*/
+/* stub function */
static void IDP_LibLinkProperty(IDProperty *UNUSED(prop), int UNUSED(switch_endian), FileData *UNUSED(fd))
{
}
@@ -1654,9 +1654,9 @@ static void direct_link_curvemapping(FileData *fd, CurveMapping *cumap)
cumap->flag &= ~CUMA_PREMULLED;
for (a=0; a<CM_TOT; a++) {
- cumap->cm[a].curve= newdataadr(fd, cumap->cm[a].curve);
- cumap->cm[a].table= NULL;
- cumap->cm[a].premultable= NULL;
+ cumap->cm[a].curve = newdataadr(fd, cumap->cm[a].curve);
+ cumap->cm[a].table = NULL;
+ cumap->cm[a].premultable = NULL;
}
}
@@ -1670,9 +1670,9 @@ static void lib_link_brush(FileData *fd, Main *main)
for (brush= main->brush.first; brush; brush= brush->id.next) {
if (brush->id.flag & LIB_NEEDLINK) {
brush->id.flag -= LIB_NEEDLINK;
-
- brush->mtex.tex= newlibadr_us(fd, brush->id.lib, brush->mtex.tex);
- brush->clone.image= newlibadr_us(fd, brush->id.lib, brush->clone.image);
+
+ brush->mtex.tex = newlibadr_us(fd, brush->id.lib, brush->mtex.tex);
+ brush->clone.image = newlibadr_us(fd, brush->id.lib, brush->clone.image);
}
}
}
@@ -1682,14 +1682,14 @@ static void direct_link_brush(FileData *fd, Brush *brush)
/* brush itself has been read */
/* fallof curve */
- brush->curve= newdataadr(fd, brush->curve);
+ brush->curve = newdataadr(fd, brush->curve);
if (brush->curve)
direct_link_curvemapping(fd, brush->curve);
else
BKE_brush_curve_preset(brush, CURVE_PRESET_SHARP);
- brush->preview= NULL;
- brush->icon_imbuf= NULL;
+ brush->preview = NULL;
+ brush->icon_imbuf = NULL;
}
static void direct_link_script(FileData *UNUSED(fd), Script *script)
@@ -1703,12 +1703,12 @@ static void direct_link_script(FileData *UNUSED(fd), Script *script)
static PackedFile *direct_link_packedfile(FileData *fd, PackedFile *oldpf)
{
- PackedFile *pf= newdataadr(fd, oldpf);
-
+ PackedFile *pf = newdataadr(fd, oldpf);
+
if (pf) {
- pf->data= newdataadr(fd, pf->data);
+ pf->data = newdataadr(fd, pf->data);
}
-
+
return pf;
}
@@ -1716,17 +1716,17 @@ static PackedFile *direct_link_packedfile(FileData *fd, PackedFile *oldpf)
static PreviewImage *direct_link_preview_image(FileData *fd, PreviewImage *old_prv)
{
- PreviewImage *prv= newdataadr(fd, old_prv);
-
+ PreviewImage *prv = newdataadr(fd, old_prv);
+
if (prv) {
int i;
- for (i=0; i < NUM_ICON_SIZES; ++i) {
+ for (i = 0; i < NUM_ICON_SIZES; ++i) {
if (prv->rect[i]) {
prv->rect[i] = newdataadr(fd, prv->rect[i]);
}
}
}
-
+
return prv;
}
@@ -1738,18 +1738,18 @@ static PreviewImage *direct_link_preview_image(FileData *fd, PreviewImage *old_p
static void lib_link_ipo(FileData *fd, Main *main)
{
Ipo *ipo;
-
- ipo= main->ipo.first;
+
+ ipo = main->ipo.first;
while (ipo) {
if (ipo->id.flag & LIB_NEEDLINK) {
IpoCurve *icu;
- for (icu= ipo->curve.first; icu; icu= icu->next) {
+ for (icu = ipo->curve.first; icu; icu = icu->next) {
if (icu->driver)
- icu->driver->ob= newlibadr(fd, ipo->id.lib, icu->driver->ob);
+ icu->driver->ob = newlibadr(fd, ipo->id.lib, icu->driver->ob);
}
ipo->id.flag -= LIB_NEEDLINK;
}
- ipo= ipo->id.next;
+ ipo = ipo->id.next;
}
}
@@ -1759,12 +1759,12 @@ static void direct_link_ipo(FileData *fd, Ipo *ipo)
IpoCurve *icu;
link_list(fd, &(ipo->curve));
- icu= ipo->curve.first;
+ icu = ipo->curve.first;
while (icu) {
- icu->bezt= newdataadr(fd, icu->bezt);
- icu->bp= newdataadr(fd, icu->bp);
- icu->driver= newdataadr(fd, icu->driver);
- icu= icu->next;
+ icu->bezt = newdataadr(fd, icu->bezt);
+ icu->bp = newdataadr(fd, icu->bp);
+ icu->driver = newdataadr(fd, icu->driver);
+ icu = icu->next;
}
}
@@ -1779,7 +1779,7 @@ static void lib_link_nlastrips(FileData *fd, ID *id, ListBase *striplist)
strip->act = newlibadr_us(fd, id->lib, strip->act);
strip->ipo = newlibadr(fd, id->lib, strip->ipo);
for (amod= strip->modifiers.first; amod; amod= amod->next)
- amod->ob= newlibadr(fd, id->lib, amod->ob);
+ amod->ob = newlibadr(fd, id->lib, amod->ob);
}
}
@@ -1810,12 +1810,12 @@ static void lib_link_fmodifiers(FileData *fd, ID *id, ListBase *list)
{
FModifier *fcm;
- for (fcm= list->first; fcm; fcm= fcm->next) {
+ for (fcm = list->first; fcm; fcm = fcm->next) {
/* data for specific modifiers */
switch (fcm->type) {
case FMODIFIER_TYPE_PYTHON:
{
- FMod_Python *data= (FMod_Python *)fcm->data;
+ FMod_Python *data = (FMod_Python *)fcm->data;
data->script = newlibadr(fd, id->lib, data->script);
}
break;
@@ -1831,10 +1831,10 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list)
return;
/* relink ID-block references... */
- for (fcu= list->first; fcu; fcu= fcu->next) {
+ for (fcu = list->first; fcu; fcu = fcu->next) {
/* driver data */
if (fcu->driver) {
- ChannelDriver *driver= fcu->driver;
+ ChannelDriver *driver = fcu->driver;
DriverVar *dvar;
for (dvar= driver->variables.first; dvar; dvar= dvar->next) {
@@ -1842,9 +1842,9 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list)
{
/* only relink if still used */
if (tarIndex < dvar->num_targets)
- dtar->id= newlibadr(fd, id->lib, dtar->id);
+ dtar->id = newlibadr(fd, id->lib, dtar->id);
else
- dtar->id= NULL;
+ dtar->id = NULL;
}
DRIVER_TARGETS_LOOPER_END
}
@@ -1861,19 +1861,19 @@ static void direct_link_fmodifiers(FileData *fd, ListBase *list)
{
FModifier *fcm;
- for (fcm= list->first; fcm; fcm= fcm->next) {
+ for (fcm = list->first; fcm; fcm = fcm->next) {
/* relink general data */
- fcm->data = newdataadr(fd, fcm->data);
- fcm->edata= NULL;
+ fcm->data = newdataadr(fd, fcm->data);
+ fcm->edata = NULL;
/* do relinking of data for specific types */
switch (fcm->type) {
case FMODIFIER_TYPE_GENERATOR:
{
- FMod_Generator *data= (FMod_Generator *)fcm->data;
+ FMod_Generator *data = (FMod_Generator *)fcm->data;
+
+ data->coefficients = newdataadr(fd, data->coefficients);
- data->coefficients= newdataadr(fd, data->coefficients);
-
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
unsigned int a;
for (a = 0; a < data->arraysize; a++)
@@ -1883,14 +1883,14 @@ static void direct_link_fmodifiers(FileData *fd, ListBase *list)
break;
case FMODIFIER_TYPE_ENVELOPE:
{
- FMod_Envelope *data= (FMod_Envelope *)fcm->data;
+ FMod_Envelope *data= (FMod_Envelope *)fcm->data;
data->data= newdataadr(fd, data->data);
}
break;
case FMODIFIER_TYPE_PYTHON:
{
- FMod_Python *data= (FMod_Python *)fcm->data;
+ FMod_Python *data = (FMod_Python *)fcm->data;
data->prop = newdataadr(fd, data->prop);
IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
@@ -1906,24 +1906,24 @@ static void direct_link_fcurves(FileData *fd, ListBase *list)
FCurve *fcu;
/* link F-Curve data to F-Curve again (non ID-libs) */
- for (fcu= list->first; fcu; fcu= fcu->next) {
+ for (fcu = list->first; fcu; fcu = fcu->next) {
/* curve data */
- fcu->bezt= newdataadr(fd, fcu->bezt);
- fcu->fpt= newdataadr(fd, fcu->fpt);
+ fcu->bezt = newdataadr(fd, fcu->bezt);
+ fcu->fpt = newdataadr(fd, fcu->fpt);
/* rna path */
- fcu->rna_path= newdataadr(fd, fcu->rna_path);
+ fcu->rna_path = newdataadr(fd, fcu->rna_path);
/* group */
- fcu->grp= newdataadr(fd, fcu->grp);
+ fcu->grp = newdataadr(fd, fcu->grp);
/* driver */
fcu->driver= newdataadr(fd, fcu->driver);
if (fcu->driver) {
ChannelDriver *driver= fcu->driver;
DriverVar *dvar;
-
- driver->expr_comp= NULL;
+
+ driver->expr_comp = NULL;
/* relink variables, targets and their paths */
link_list(fd, &driver->variables);
@@ -1932,9 +1932,9 @@ static void direct_link_fcurves(FileData *fd, ListBase *list)
{
/* only relink the targets being used */
if (tarIndex < dvar->num_targets)
- dtar->rna_path= newdataadr(fd, dtar->rna_path);
+ dtar->rna_path = newdataadr(fd, dtar->rna_path);
else
- dtar->rna_path= NULL;
+ dtar->rna_path = NULL;
}
DRIVER_TARGETS_LOOPER_END
}
@@ -1958,7 +1958,7 @@ static void lib_link_action(FileData *fd, Main *main)
// XXX depreceated - old animation system <<<
for (chan=act->chanbase.first; chan; chan=chan->next) {
- chan->ipo= newlibadr_us(fd, act->id.lib, chan->ipo);
+ chan->ipo = newlibadr_us(fd, act->id.lib, chan->ipo);
lib_link_constraint_channels(fd, &act->id, &chan->constraintChannels);
}
// >>> XXX depreceated - old animation system
@@ -1980,7 +1980,7 @@ static void direct_link_action(FileData *fd, bAction *act)
// XXX depreceated - old animation system <<<
for (achan = act->chanbase.first; achan; achan=achan->next) {
- achan->grp= newdataadr(fd, achan->grp);
+ achan->grp = newdataadr(fd, achan->grp);
link_list(fd, &achan->constraintChannels);
}
@@ -1998,7 +1998,7 @@ static void lib_link_nladata_strips(FileData *fd, ID *id, ListBase *list)
{
NlaStrip *strip;
- for (strip= list->first; strip; strip= strip->next) {
+ for (strip = list->first; strip; strip = strip->next) {
/* check strip's children */
lib_link_nladata_strips(fd, id, &strip->strips);
@@ -2019,7 +2019,7 @@ static void lib_link_nladata(FileData *fd, ID *id, ListBase *list)
NlaTrack *nlt;
/* we only care about the NLA strips inside the tracks */
- for (nlt= list->first; nlt; nlt= nlt->next) {
+ for (nlt = list->first; nlt; nlt = nlt->next) {
lib_link_nladata_strips(fd, id, &nlt->strips);
}
}
@@ -2031,7 +2031,7 @@ static void direct_link_nladata_strips(FileData *fd, ListBase *list)
{
NlaStrip *strip;
- for (strip= list->first; strip; strip= strip->next) {
+ for (strip = list->first; strip; strip = strip->next) {
/* strip's child strips */
link_list(fd, &strip->strips);
direct_link_nladata_strips(fd, &strip->strips);
@@ -2051,7 +2051,7 @@ static void direct_link_nladata(FileData *fd, ListBase *list)
{
NlaTrack *nlt;
- for (nlt= list->first; nlt; nlt= nlt->next) {
+ for (nlt = list->first; nlt; nlt = nlt->next) {
/* relink list of strips */
link_list(fd, &nlt->strips);
@@ -2068,8 +2068,8 @@ static void lib_link_keyingsets(FileData *fd, ID *id, ListBase *list)
KS_Path *ksp;
/* here, we're only interested in the ID pointer stored in some of the paths */
- for (ks= list->first; ks; ks= ks->next) {
- for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
+ for (ks = list->first; ks; ks = ks->next) {
+ for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
ksp->id= newlibadr(fd, id->lib, ksp->id);
}
}
@@ -2082,11 +2082,11 @@ static void direct_link_keyingsets(FileData *fd, ListBase *list)
KS_Path *ksp;
/* link KeyingSet data to KeyingSet again (non ID-libs) */
- for (ks= list->first; ks; ks= ks->next) {
+ for (ks = list->first; ks; ks = ks->next) {
/* paths */
link_list(fd, &ks->paths);
- for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
+ for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
/* rna path */
ksp->rna_path= newdataadr(fd, ksp->rna_path);
}
@@ -2142,7 +2142,7 @@ static void direct_link_animdata(FileData *fd, AnimData *adt)
*/
// TODO: it's not really nice that anyone should be able to save the file in this
// state, but it's going to be too hard to enforce this single case...
- adt->actstrip= newdataadr(fd, adt->actstrip);
+ adt->actstrip = newdataadr(fd, adt->actstrip);
}
/* ************ READ MOTION PATHS *************** */
@@ -2155,7 +2155,7 @@ static void direct_link_motionpath(FileData *fd, bMotionPath *mpath)
return;
/* relink points cache */
- mpath->points= newdataadr(fd, mpath->points);
+ mpath->points = newdataadr(fd, mpath->points);
}
/* ************ READ NODE TREE *************** */
@@ -2167,10 +2167,10 @@ static void lib_link_ntree(FileData *fd, ID *id, bNodeTree *ntree)
if (ntree->adt) lib_link_animdata(fd, &ntree->id, ntree->adt);
- ntree->gpd= newlibadr_us(fd, id->lib, ntree->gpd);
+ ntree->gpd = newlibadr_us(fd, id->lib, ntree->gpd);
for (node= ntree->nodes.first; node; node= node->next)
- node->id= newlibadr_us(fd, id->lib, node->id);
+ node->id = newlibadr_us(fd, id->lib, node->id);
}
/* library ntree linking after fileread */
@@ -2239,7 +2239,7 @@ static void lib_nodetree_init_types_cb(void *UNUSED(data), ID *UNUSED(id), bNode
bNode *node;
ntreeInitTypes(ntree);
-
+
/* need to do this here instead of in do_versions, otherwise next function can crash */
blo_do_versions_nodetree_default_value(ntree);
@@ -2253,7 +2253,7 @@ static void lib_nodetree_init_types_cb(void *UNUSED(data), ID *UNUSED(id), bNode
*/
static void lib_node_do_versions_group_indices(bNode *gnode)
{
- bNodeTree *ngroup= (bNodeTree*)gnode->id;
+ bNodeTree *ngroup = (bNodeTree*)gnode->id;
bNode *intnode;
bNodeSocket *sock, *gsock, *intsock;
int found;
@@ -2288,9 +2288,9 @@ static void lib_nodetree_do_versions_group_indices_cb(void *UNUSED(data), ID *UN
{
bNode *node;
- for (node=ntree->nodes.first; node; node=node->next) {
- if (node->type==NODE_GROUP) {
- bNodeTree *ngroup= (bNodeTree*)node->id;
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == NODE_GROUP) {
+ bNodeTree *ngroup = (bNodeTree*)node->id;
if (ngroup && (ngroup->flag & NTREE_DO_VERSIONS_GROUP_EXPOSE))
lib_node_do_versions_group_indices(node);
}
@@ -2312,31 +2312,31 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open))
bNodeTree *ntree;
int i;
bNodeTreeType *ntreetype;
-
+
/* this crashes blender on undo/redo */
#if 0
- if (open==1) {
+ if (open == 1) {
reinit_nodesystem();
}
#endif
/* set node->typeinfo pointers */
- for (i=0; i < NUM_NTREE_TYPES; ++i) {
- ntreetype= ntreeGetType(i);
+ for (i = 0; i < NUM_NTREE_TYPES; ++i) {
+ ntreetype = ntreeGetType(i);
if (ntreetype && ntreetype->foreach_nodetree)
ntreetype->foreach_nodetree(main, NULL, lib_nodetree_init_types_cb);
}
- for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next)
lib_nodetree_init_types_cb(NULL, NULL, ntree);
{
- int has_old_groups=0;
+ int has_old_groups = 0;
/* XXX this should actually be part of do_versions, but since we need
* finished library linking, it is not possible there. Instead in do_versions
* we have set the NTREE_DO_VERSIONS flag, so at this point we can do the
* actual group node updates.
*/
- for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next) {
if (ntree->flag & NTREE_DO_VERSIONS_GROUP_EXPOSE) {
/* this adds copies and links from all unlinked internal sockets to group inputs/outputs. */
node_group_expose_all_sockets(ntree);
@@ -2345,8 +2345,8 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open))
}
if (has_old_groups) {
- for (i=0; i < NUM_NTREE_TYPES; ++i) {
- ntreetype= ntreeGetType(i);
+ for (i = 0; i < NUM_NTREE_TYPES; ++i) {
+ ntreetype = ntreeGetType(i);
if (ntreetype && ntreetype->foreach_nodetree)
ntreetype->foreach_nodetree(main, NULL, lib_nodetree_do_versions_group_indices_cb);
}
@@ -2355,20 +2355,20 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open))
for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
ntree->flag &= ~NTREE_DO_VERSIONS_GROUP_EXPOSE;
}
-
+
/* verify all group user nodes */
- for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next) {
ntreeVerifyNodes(main, &ntree->id);
}
/* make update calls where necessary */
{
- for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next)
if (ntree->update)
ntreeUpdateTree(ntree);
-
- for (i=0; i < NUM_NTREE_TYPES; ++i) {
- ntreetype= ntreeGetType(i);
+
+ for (i = 0; i < NUM_NTREE_TYPES; i++) {
+ ntreetype = ntreeGetType(i);
if (ntreetype && ntreetype->foreach_nodetree)
ntreetype->foreach_nodetree(main, NULL, lib_nodetree_do_versions_update_cb);
}
@@ -2377,10 +2377,10 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open))
static void direct_link_node_socket(FileData *fd, bNodeSocket *sock)
{
- sock->link= newdataadr(fd, sock->link);
- sock->storage= newdataadr(fd, sock->storage);
- sock->default_value= newdataadr(fd, sock->default_value);
- sock->cache= NULL;
+ sock->link = newdataadr(fd, sock->link);
+ sock->storage = newdataadr(fd, sock->storage);
+ sock->default_value = newdataadr(fd, sock->default_value);
+ sock->cache = NULL;
}
/* ntree itself has been read! */
@@ -2391,31 +2391,31 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
bNodeSocket *sock;
bNodeLink *link;
- ntree->init= 0; /* to set callbacks and force setting types */
- ntree->progress= NULL;
- ntree->execdata= NULL;
+ ntree->init = 0; /* to set callbacks and force setting types */
+ ntree->progress = NULL;
+ ntree->execdata = NULL;
- ntree->adt= newdataadr(fd, ntree->adt);
+ ntree->adt = newdataadr(fd, ntree->adt);
direct_link_animdata(fd, ntree->adt);
link_list(fd, &ntree->nodes);
- for (node= ntree->nodes.first; node; node= node->next) {
+ for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == NODE_DYNAMIC) {
- node->custom1= 0;
- node->custom1= BSET(node->custom1, NODE_DYNAMIC_LOADED);
+ node->custom1 = 0;
+ node->custom1 = BSET(node->custom1, NODE_DYNAMIC_LOADED);
}
-
- node->typeinfo= NULL;
+
+ node->typeinfo = NULL;
link_list(fd, &node->inputs);
link_list(fd, &node->outputs);
if (node->type == CMP_NODE_MOVIEDISTORTION) {
- node->storage= newmclipadr(fd, node->storage);
+ node->storage = newmclipadr(fd, node->storage);
}
else
- node->storage= newdataadr(fd, node->storage);
-
+ node->storage = newdataadr(fd, node->storage);
+
if (node->storage) {
/* could be handlerized at some point */
if (ntree->type==NTREE_SHADER && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB))
@@ -2424,13 +2424,13 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
if ( ELEM4(node->type, CMP_NODE_TIME, CMP_NODE_CURVE_VEC, CMP_NODE_CURVE_RGB, CMP_NODE_HUECORRECT))
direct_link_curvemapping(fd, node->storage);
else if (ELEM3(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))
- ((ImageUser *)node->storage)->ok= 1;
+ ((ImageUser *)node->storage)->ok = 1;
}
else if ( ntree->type==NTREE_TEXTURE) {
if (node->type==TEX_NODE_CURVE_RGB || node->type==TEX_NODE_CURVE_TIME)
direct_link_curvemapping(fd, node->storage);
else if (node->type==TEX_NODE_IMAGE)
- ((ImageUser *)node->storage)->ok= 1;
+ ((ImageUser *)node->storage)->ok = 1;
}
}
}
@@ -2441,26 +2441,26 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
link_list(fd, &ntree->outputs);
/* and we connect the rest */
- for (node= ntree->nodes.first; node; node= node->next) {
+ for (node = ntree->nodes.first; node; node = node->next) {
node->parent = newdataadr(fd, node->parent);
- node->preview= newimaadr(fd, node->preview);
- node->lasty= 0;
+ node->preview = newimaadr(fd, node->preview);
+ node->lasty = 0;
- for (sock= node->inputs.first; sock; sock= sock->next)
+ for (sock = node->inputs.first; sock; sock = sock->next)
direct_link_node_socket(fd, sock);
- for (sock= node->outputs.first; sock; sock= sock->next)
+ for (sock = node->outputs.first; sock; sock = sock->next)
direct_link_node_socket(fd, sock);
}
- for (sock= ntree->inputs.first; sock; sock= sock->next)
+ for (sock = ntree->inputs.first; sock; sock = sock->next)
direct_link_node_socket(fd, sock);
- for (sock= ntree->outputs.first; sock; sock= sock->next)
+ for (sock = ntree->outputs.first; sock; sock = sock->next)
direct_link_node_socket(fd, sock);
- for (link= ntree->links.first; link; link= link->next) {
- link->fromnode= newdataadr(fd, link->fromnode);
- link->tonode= newdataadr(fd, link->tonode);
- link->fromsock= newdataadr(fd, link->fromsock);
- link->tosock= newdataadr(fd, link->tosock);
+ for (link = ntree->links.first; link; link= link->next) {
+ link->fromnode = newdataadr(fd, link->fromnode);
+ link->tonode = newdataadr(fd, link->tonode);
+ link->fromsock = newdataadr(fd, link->fromsock);
+ link->tosock = newdataadr(fd, link->tosock);
}
/* type verification is in lib-link */
@@ -2498,16 +2498,16 @@ static void lib_link_constraints(FileData *fd, ID *id, ListBase *conlist)
for (con = conlist->first; con; con=con->next) {
/* patch for error introduced by changing constraints (dunno how) */
/* if con->data type changes, dna cannot resolve the pointer! (ton) */
- if (con->data==NULL) {
- con->type= CONSTRAINT_TYPE_NULL;
+ if (con->data == NULL) {
+ con->type = CONSTRAINT_TYPE_NULL;
}
/* own ipo, all constraints have it */
- con->ipo= newlibadr_us(fd, id->lib, con->ipo); // XXX depreceated - old animation system
+ con->ipo = newlibadr_us(fd, id->lib, con->ipo); // XXX depreceated - old animation system
}
/* relink all ID-blocks used by the constraints */
- cld.fd= fd;
- cld.id= id;
+ cld.fd = fd;
+ cld.id = id;
id_loop_constraints(conlist, lib_link_constraint_cb, &cld);
}
@@ -2515,7 +2515,7 @@ static void lib_link_constraints(FileData *fd, ID *id, ListBase *conlist)
static void direct_link_constraints(FileData *fd, ListBase *lb)
{
bConstraint *con;
-
+
link_list(fd, lb);
for (con=lb->first; con; con=con->next) {
con->data = newdataadr(fd, con->data);
@@ -2558,16 +2558,16 @@ static void direct_link_constraints(FileData *fd, ListBase *lb)
static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
{
bPoseChannel *pchan;
- bArmature *arm= ob->data;
+ bArmature *arm = ob->data;
int rebuild;
if (!pose || !arm)
return;
-
+
/* always rebuild to match proxy or lib changes */
rebuild= ob->proxy || (ob->id.lib==NULL && arm->id.lib);
-
+
if (ob->proxy) {
/* sync proxy layer */
if (pose->proxy_layer)
@@ -2580,15 +2580,15 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
arm->act_bone = bone;
}
}
-
+
for (pchan = pose->chanbase.first; pchan; pchan=pchan->next) {
lib_link_constraints(fd, (ID *)ob, &pchan->constraints);
/* hurms... loop in a loop, but yah... later... (ton) */
- pchan->bone= BKE_armature_find_bone_name(arm, pchan->name);
+ pchan->bone = BKE_armature_find_bone_name(arm, pchan->name);
- pchan->custom= newlibadr_us(fd, arm->id.lib, pchan->custom);
- if (pchan->bone==NULL)
+ pchan->custom = newlibadr_us(fd, arm->id.lib, pchan->custom);
+ if (pchan->bone == NULL)
rebuild= 1;
else if (ob->id.lib==NULL && arm->id.lib) {
/* local pose selection copied to armature, bit hackish */
@@ -2598,7 +2598,7 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
}
if (rebuild) {
- ob->recalc= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
+ ob->recalc = (OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
pose->flag |= POSE_RECALC;
}
}
@@ -2606,54 +2606,54 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
static void lib_link_armature(FileData *fd, Main *main)
{
bArmature *arm;
-
- arm= main->armature.first;
-
+
+ arm = main->armature.first;
+
while (arm) {
if (arm->id.flag & LIB_NEEDLINK) {
if (arm->adt) lib_link_animdata(fd, &arm->id, arm->adt);
arm->id.flag -= LIB_NEEDLINK;
}
- arm= arm->id.next;
+ arm = arm->id.next;
}
}
static void direct_link_bones(FileData *fd, Bone* bone)
{
- Bone *child;
-
- bone->parent= newdataadr(fd, bone->parent);
- bone->prop= newdataadr(fd, bone->prop);
+ Bone *child;
+
+ bone->parent = newdataadr(fd, bone->parent);
+ bone->prop = newdataadr(fd, bone->prop);
if (bone->prop)
IDP_DirectLinkProperty(bone->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
bone->flag &= ~BONE_DRAW_ACTIVE;
-
+
link_list(fd, &bone->childbase);
-
+
for (child=bone->childbase.first; child; child=child->next)
direct_link_bones(fd, child);
}
static void direct_link_armature(FileData *fd, bArmature *arm)
{
- Bone *bone;
-
+ Bone *bone;
+
link_list(fd, &arm->bonebase);
- arm->edbo= NULL;
+ arm->edbo = NULL;
arm->sketch = NULL;
- arm->adt= newdataadr(fd, arm->adt);
+ arm->adt = newdataadr(fd, arm->adt);
direct_link_animdata(fd, arm->adt);
- bone=arm->bonebase.first;
+ bone = arm->bonebase.first;
while (bone) {
direct_link_bones(fd, bone);
bone=bone->next;
}
-
- arm->act_bone= newdataadr(fd, arm->act_bone);
- arm->act_edbone= NULL;
+
+ arm->act_bone = newdataadr(fd, arm->act_bone);
+ arm->act_edbone = NULL;
}
/* ************ READ CAMERA ***************** */
@@ -2661,25 +2661,25 @@ static void direct_link_armature(FileData *fd, bArmature *arm)
static void lib_link_camera(FileData *fd, Main *main)
{
Camera *ca;
-
- ca= main->camera.first;
+
+ ca = main->camera.first;
while (ca) {
if (ca->id.flag & LIB_NEEDLINK) {
if (ca->adt) lib_link_animdata(fd, &ca->id, ca->adt);
- ca->ipo= newlibadr_us(fd, ca->id.lib, ca->ipo); // XXX depreceated - old animation system
+ ca->ipo = newlibadr_us(fd, ca->id.lib, ca->ipo); // XXX depreceated - old animation system
- ca->dof_ob= newlibadr_us(fd, ca->id.lib, ca->dof_ob);
+ ca->dof_ob = newlibadr_us(fd, ca->id.lib, ca->dof_ob);
ca->id.flag -= LIB_NEEDLINK;
}
- ca= ca->id.next;
+ ca = ca->id.next;
}
}
static void direct_link_camera(FileData *fd, Camera *ca)
{
- ca->adt= newdataadr(fd, ca->adt);
+ ca->adt = newdataadr(fd, ca->adt);
direct_link_animdata(fd, ca->adt);
}
@@ -2691,28 +2691,28 @@ static void lib_link_lamp(FileData *fd, Main *main)
Lamp *la;
MTex *mtex;
int a;
-
- la= main->lamp.first;
+
+ la = main->lamp.first;
while (la) {
if (la->id.flag & LIB_NEEDLINK) {
if (la->adt) lib_link_animdata(fd, &la->id, la->adt);
- for (a=0; a<MAX_MTEX; a++) {
- mtex= la->mtex[a];
+ for (a = 0; a < MAX_MTEX; a++) {
+ mtex = la->mtex[a];
if (mtex) {
- mtex->tex= newlibadr_us(fd, la->id.lib, mtex->tex);
- mtex->object= newlibadr(fd, la->id.lib, mtex->object);
+ mtex->tex = newlibadr_us(fd, la->id.lib, mtex->tex);
+ mtex->object = newlibadr(fd, la->id.lib, mtex->object);
}
}
- la->ipo= newlibadr_us(fd, la->id.lib, la->ipo); // XXX depreceated - old animation system
-
+ la->ipo = newlibadr_us(fd, la->id.lib, la->ipo); // XXX depreceated - old animation system
+
if (la->nodetree)
lib_link_ntree(fd, &la->id, la->nodetree);
la->id.flag -= LIB_NEEDLINK;
}
- la= la->id.next;
+ la = la->id.next;
}
}
@@ -2720,14 +2720,14 @@ static void direct_link_lamp(FileData *fd, Lamp *la)
{
int a;
- la->adt= newdataadr(fd, la->adt);
+ la->adt = newdataadr(fd, la->adt);
direct_link_animdata(fd, la->adt);
-
+
for (a=0; a<MAX_MTEX; a++) {
- la->mtex[a]= newdataadr(fd, la->mtex[a]);
+ la->mtex[a] = newdataadr(fd, la->mtex[a]);
}
- la->curfalloff= newdataadr(fd, la->curfalloff);
+ la->curfalloff = newdataadr(fd, la->curfalloff);
if (la->curfalloff)
direct_link_curvemapping(fd, la->curfalloff);
@@ -2743,28 +2743,28 @@ static void direct_link_lamp(FileData *fd, Lamp *la)
static void lib_link_key(FileData *fd, Main *main)
{
Key *key;
-
- key= main->key.first;
+
+ key = main->key.first;
while (key) {
/*check if we need to generate unique ids for the shapekeys*/
if (!key->uidgen) {
KeyBlock *block;
-
+
key->uidgen = 1;
for (block=key->block.first; block; block=block->next) {
block->uid = key->uidgen++;
}
}
-
+
if (key->id.flag & LIB_NEEDLINK) {
if (key->adt) lib_link_animdata(fd, &key->id, key->adt);
- key->ipo= newlibadr_us(fd, key->id.lib, key->ipo); // XXX depreceated - old animation system
- key->from= newlibadr(fd, key->id.lib, key->from);
-
+ key->ipo = newlibadr_us(fd, key->id.lib, key->ipo); // XXX depreceated - old animation system
+ key->from = newlibadr(fd, key->id.lib, key->from);
+
key->id.flag -= LIB_NEEDLINK;
}
- key= key->id.next;
+ key = key->id.next;
}
}
@@ -2772,31 +2772,29 @@ static void switch_endian_keyblock(Key *key, KeyBlock *kb)
{
int elemsize, a, b;
char *data, *poin, *cp;
-
- elemsize= key->elemsize;
- data= kb->data;
-
- for (a=0; a<kb->totelem; a++) {
-
- cp= key->elemstr;
- poin= data;
-
- while ( cp[0] ) { /* cp[0] == amount */
-
+
+ elemsize = key->elemsize;
+ data = kb->data;
+
+ for (a = 0; a < kb->totelem; a++) {
+ cp = key->elemstr;
+ poin = data;
+
+ while (cp[0]) { /* cp[0] == amount */
switch (cp[1]) { /* cp[1] = type */
- case IPO_FLOAT:
- case IPO_BPOINT:
- case IPO_BEZTRIPLE:
- b= cp[0];
- while (b--) {
- SWITCH_INT((*poin));
- poin+= 4;
- }
- break;
+ case IPO_FLOAT:
+ case IPO_BPOINT:
+ case IPO_BEZTRIPLE:
+ b = cp[0];
+
+ while (b--) {
+ SWITCH_INT((*poin));
+ poin += 4;
+ }
+ break;
}
-
- cp+= 2;
-
+
+ cp += 2;
}
data+= elemsize;
}
@@ -2805,23 +2803,22 @@ static void switch_endian_keyblock(Key *key, KeyBlock *kb)
static void direct_link_key(FileData *fd, Key *key)
{
KeyBlock *kb;
-
+
link_list(fd, &(key->block));
-
- key->adt= newdataadr(fd, key->adt);
- direct_link_animdata(fd, key->adt);
+ key->adt = newdataadr(fd, key->adt);
+ direct_link_animdata(fd, key->adt);
+
key->refkey= newdataadr(fd, key->refkey);
-
- kb= key->block.first;
+
+ kb = key->block.first;
while (kb) {
-
- kb->data= newdataadr(fd, kb->data);
+ kb->data = newdataadr(fd, kb->data);
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN)
switch_endian_keyblock(key, kb);
-
- kb= kb->next;
+
+ kb = kb->next;
}
}
@@ -2831,37 +2828,38 @@ static void lib_link_mball(FileData *fd, Main *main)
{
MetaBall *mb;
int a;
-
- mb= main->mball.first;
+
+ mb = main->mball.first;
while (mb) {
if (mb->id.flag & LIB_NEEDLINK) {
if (mb->adt) lib_link_animdata(fd, &mb->id, mb->adt);
- for (a=0; a<mb->totcol; a++) mb->mat[a]= newlibadr_us(fd, mb->id.lib, mb->mat[a]);
-
- mb->ipo= newlibadr_us(fd, mb->id.lib, mb->ipo); // XXX depreceated - old animation system
-
+ for (a = 0; a < mb->totcol; a++)
+ mb->mat[a]= newlibadr_us(fd, mb->id.lib, mb->mat[a]);
+
+ mb->ipo = newlibadr_us(fd, mb->id.lib, mb->ipo); // XXX depreceated - old animation system
+
mb->id.flag -= LIB_NEEDLINK;
}
- mb= mb->id.next;
+ mb = mb->id.next;
}
}
static void direct_link_mball(FileData *fd, MetaBall *mb)
{
- mb->adt= newdataadr(fd, mb->adt);
+ mb->adt = newdataadr(fd, mb->adt);
direct_link_animdata(fd, mb->adt);
- mb->mat= newdataadr(fd, mb->mat);
+ mb->mat = newdataadr(fd, mb->mat);
test_pointer_array(fd, (void **)&mb->mat);
-
+
link_list(fd, &(mb->elems));
-
- mb->disp.first= mb->disp.last= NULL;
- mb->editelems= NULL;
- mb->bb= NULL;
+
+ mb->disp.first = mb->disp.last = NULL;
+ mb->editelems = NULL;
+ mb->bb = NULL;
/* mb->edit_elems.first= mb->edit_elems.last= NULL;*/
- mb->lastelem= NULL;
+ mb->lastelem = NULL;
}
/* ************ READ WORLD ***************** */
@@ -2871,46 +2869,46 @@ static void lib_link_world(FileData *fd, Main *main)
World *wrld;
MTex *mtex;
int a;
-
- wrld= main->world.first;
+
+ wrld = main->world.first;
while (wrld) {
if (wrld->id.flag & LIB_NEEDLINK) {
if (wrld->adt) lib_link_animdata(fd, &wrld->id, wrld->adt);
- wrld->ipo= newlibadr_us(fd, wrld->id.lib, wrld->ipo); // XXX depreceated - old animation system
+ wrld->ipo = newlibadr_us(fd, wrld->id.lib, wrld->ipo); // XXX depreceated - old animation system
- for (a=0; a<MAX_MTEX; a++) {
- mtex= wrld->mtex[a];
+ for (a=0; a < MAX_MTEX; a++) {
+ mtex = wrld->mtex[a];
if (mtex) {
mtex->tex= newlibadr_us(fd, wrld->id.lib, mtex->tex);
mtex->object= newlibadr(fd, wrld->id.lib, mtex->object);
}
}
-
+
if (wrld->nodetree)
lib_link_ntree(fd, &wrld->id, wrld->nodetree);
wrld->id.flag -= LIB_NEEDLINK;
}
- wrld= wrld->id.next;
+ wrld = wrld->id.next;
}
}
static void direct_link_world(FileData *fd, World *wrld)
{
int a;
-
+
wrld->adt= newdataadr(fd, wrld->adt);
direct_link_animdata(fd, wrld->adt);
-
+
for (a=0; a<MAX_MTEX; a++) {
wrld->mtex[a]= newdataadr(fd, wrld->mtex[a]);
}
-
+
wrld->nodetree= newdataadr(fd, wrld->nodetree);
if (wrld->nodetree)
direct_link_nodetree(fd, wrld->nodetree);
-
+
wrld->preview = direct_link_preview_image(fd, wrld->preview);
}
@@ -2920,20 +2918,20 @@ static void direct_link_world(FileData *fd, World *wrld)
static void lib_link_vfont(FileData *UNUSED(fd), Main *main)
{
VFont *vf;
-
- vf= main->vfont.first;
+
+ vf = main->vfont.first;
while (vf) {
if (vf->id.flag & LIB_NEEDLINK) {
vf->id.flag -= LIB_NEEDLINK;
}
- vf= vf->id.next;
+ vf = vf->id.next;
}
}
static void direct_link_vfont(FileData *fd, VFont *vf)
{
- vf->data= NULL;
- vf->packedfile= direct_link_packedfile(fd, vf->packedfile);
+ vf->data = NULL;
+ vf->packedfile = direct_link_packedfile(fd, vf->packedfile);
}
/* ************ READ TEXT ****************** */
@@ -2941,57 +2939,57 @@ static void direct_link_vfont(FileData *fd, VFont *vf)
static void lib_link_text(FileData *UNUSED(fd), Main *main)
{
Text *text;
-
- text= main->text.first;
+
+ text = main->text.first;
while (text) {
if (text->id.flag & LIB_NEEDLINK) {
text->id.flag -= LIB_NEEDLINK;
}
- text= text->id.next;
+ text = text->id.next;
}
}
static void direct_link_text(FileData *fd, Text *text)
{
TextLine *ln;
-
- text->name= newdataadr(fd, text->name);
-
- text->undo_pos= -1;
- text->undo_len= TXT_INIT_UNDO;
- text->undo_buf= MEM_mallocN(text->undo_len, "undo buf");
-
- text->compiled= NULL;
-
+
+ text->name = newdataadr(fd, text->name);
+
+ text->undo_pos = -1;
+ text->undo_len = TXT_INIT_UNDO;
+ text->undo_buf = MEM_mallocN(text->undo_len, "undo buf");
+
+ text->compiled = NULL;
+
#if 0
if (text->flags & TXT_ISEXT) {
BKE_text_reload(text);
}
else {
#endif
-
+
link_list(fd, &text->lines);
link_list(fd, &text->markers);
-
- text->curl= newdataadr(fd, text->curl);
- text->sell= newdataadr(fd, text->sell);
-
- ln= text->lines.first;
+
+ text->curl = newdataadr(fd, text->curl);
+ text->sell = newdataadr(fd, text->sell);
+
+ ln = text->lines.first;
while (ln) {
- ln->line= newdataadr(fd, ln->line);
- ln->format= NULL;
+ ln->line = newdataadr(fd, ln->line);
+ ln->format = NULL;
if (ln->len != (int) strlen(ln->line)) {
printf("Error loading text, line lengths differ\n");
ln->len = strlen(ln->line);
}
-
- ln= ln->next;
+
+ ln = ln->next;
}
-
+
text->flags = (text->flags) & ~TXT_ISEXT;
-
- text->id.us= 1;
+
+ text->id.us = 1;
}
/* ************ READ IMAGE ***************** */
@@ -2999,15 +2997,15 @@ static void direct_link_text(FileData *fd, Text *text)
static void lib_link_image(FileData *fd, Main *main)
{
Image *ima;
-
- ima= main->image.first;
+
+ ima = main->image.first;
while (ima) {
if (ima->id.flag & LIB_NEEDLINK) {
if (ima->id.properties) IDP_LibLinkProperty(ima->id.properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
-
+
ima->id.flag -= LIB_NEEDLINK;
}
- ima= ima->id.next;
+ ima = ima->id.next;
}
}
@@ -3015,18 +3013,18 @@ static void link_ibuf_list(FileData *fd, ListBase *lb)
{
Link *ln, *prev;
- if (lb->first==NULL) return;
+ if (lb->first == NULL) return;
- lb->first= newimaadr(fd, lb->first);
- ln= lb->first;
- prev= NULL;
+ lb->first = newimaadr(fd, lb->first);
+ ln = lb->first;
+ prev = NULL;
while (ln) {
- ln->next= newimaadr(fd, ln->next);
- ln->prev= prev;
- prev= ln;
- ln= ln->next;
+ ln->next = newimaadr(fd, ln->next);
+ ln->prev = prev;
+ prev = ln;
+ ln = ln->next;
}
- lb->last= prev;
+ lb->last = prev;
}
static void direct_link_image(FileData *fd, Image *ima)
@@ -3035,33 +3033,33 @@ static void direct_link_image(FileData *fd, Image *ima)
if (fd->imamap)
link_ibuf_list(fd, &ima->ibufs);
else
- ima->ibufs.first= ima->ibufs.last= NULL;
+ ima->ibufs.first = ima->ibufs.last = NULL;
/* if not restored, we keep the binded opengl index */
- if (ima->ibufs.first==NULL) {
- ima->bindcode= 0;
- ima->gputexture= NULL;
+ if (ima->ibufs.first == NULL) {
+ ima->bindcode = 0;
+ ima->gputexture = NULL;
}
- ima->anim= NULL;
- ima->rr= NULL;
- ima->repbind= NULL;
+ ima->anim = NULL;
+ ima->rr = NULL;
+ ima->repbind = NULL;
/* undo system, try to restore render buffers */
if (fd->imamap) {
int a;
- for (a=0; a<IMA_MAX_RENDER_SLOT; a++)
- ima->renders[a]= newimaadr(fd, ima->renders[a]);
+ for (a =0; a < IMA_MAX_RENDER_SLOT; a++)
+ ima->renders[a] = newimaadr(fd, ima->renders[a]);
}
else {
memset(ima->renders, 0, sizeof(ima->renders));
- ima->last_render_slot= ima->render_slot;
+ ima->last_render_slot = ima->render_slot;
}
ima->packedfile = direct_link_packedfile(fd, ima->packedfile);
ima->preview = direct_link_preview_image(fd, ima->preview);
- ima->ok= 1;
+ ima->ok = 1;
}
@@ -3071,28 +3069,29 @@ static void lib_link_curve(FileData *fd, Main *main)
{
Curve *cu;
int a;
-
- cu= main->curve.first;
+
+ cu = main->curve.first;
while (cu) {
if (cu->id.flag & LIB_NEEDLINK) {
if (cu->adt) lib_link_animdata(fd, &cu->id, cu->adt);
-
- for (a=0; a<cu->totcol; a++) cu->mat[a]= newlibadr_us(fd, cu->id.lib, cu->mat[a]);
-
- cu->bevobj= newlibadr(fd, cu->id.lib, cu->bevobj);
- cu->taperobj= newlibadr(fd, cu->id.lib, cu->taperobj);
- cu->textoncurve= newlibadr(fd, cu->id.lib, cu->textoncurve);
- cu->vfont= newlibadr_us(fd, cu->id.lib, cu->vfont);
- cu->vfontb= newlibadr_us(fd, cu->id.lib, cu->vfontb);
- cu->vfonti= newlibadr_us(fd, cu->id.lib, cu->vfonti);
- cu->vfontbi= newlibadr_us(fd, cu->id.lib, cu->vfontbi);
-
- cu->ipo= newlibadr_us(fd, cu->id.lib, cu->ipo); // XXX depreceated - old animation system
- cu->key= newlibadr_us(fd, cu->id.lib, cu->key);
-
+
+ for (a = 0; a < cu->totcol; a++)
+ cu->mat[a] = newlibadr_us(fd, cu->id.lib, cu->mat[a]);
+
+ cu->bevobj = newlibadr(fd, cu->id.lib, cu->bevobj);
+ cu->taperobj = newlibadr(fd, cu->id.lib, cu->taperobj);
+ cu->textoncurve = newlibadr(fd, cu->id.lib, cu->textoncurve);
+ cu->vfont = newlibadr_us(fd, cu->id.lib, cu->vfont);
+ cu->vfontb = newlibadr_us(fd, cu->id.lib, cu->vfontb);
+ cu->vfonti = newlibadr_us(fd, cu->id.lib, cu->vfonti);
+ cu->vfontbi = newlibadr_us(fd, cu->id.lib, cu->vfontbi);
+
+ cu->ipo = newlibadr_us(fd, cu->id.lib, cu->ipo); // XXX depreceated - old animation system
+ cu->key = newlibadr_us(fd, cu->id.lib, cu->key);
+
cu->id.flag -= LIB_NEEDLINK;
}
- cu= cu->id.next;
+ cu = cu->id.next;
}
}
@@ -3100,7 +3099,7 @@ static void lib_link_curve(FileData *fd, Main *main)
static void switch_endian_knots(Nurb *nu)
{
int len;
-
+
if (nu->knotsu) {
len= KNOTSU(nu);
while (len--) {
@@ -3123,21 +3122,21 @@ static void direct_link_curve(FileData *fd, Curve *cu)
cu->adt= newdataadr(fd, cu->adt);
direct_link_animdata(fd, cu->adt);
- cu->mat= newdataadr(fd, cu->mat);
+ cu->mat = newdataadr(fd, cu->mat);
test_pointer_array(fd, (void **)&cu->mat);
- cu->str= newdataadr(fd, cu->str);
+ cu->str = newdataadr(fd, cu->str);
cu->strinfo= newdataadr(fd, cu->strinfo);
- cu->tb= newdataadr(fd, cu->tb);
+ cu->tb = newdataadr(fd, cu->tb);
if (cu->vfont == NULL) link_list(fd, &(cu->nurb));
else {
cu->nurb.first=cu->nurb.last= NULL;
-
- tb= MEM_callocN(MAXTEXTBOX*sizeof(TextBox), "TextBoxread");
+
+ tb = MEM_callocN(MAXTEXTBOX*sizeof(TextBox), "TextBoxread");
if (cu->tb) {
memcpy(tb, cu->tb, cu->totbox*sizeof(TextBox));
MEM_freeN(cu->tb);
- cu->tb= tb;
+ cu->tb = tb;
}
else {
cu->totbox = 1;
@@ -3148,28 +3147,28 @@ static void direct_link_curve(FileData *fd, Curve *cu)
if (cu->wordspace == 0.0f) cu->wordspace = 1.0f;
}
- cu->bev.first=cu->bev.last= NULL;
- cu->disp.first=cu->disp.last= NULL;
- cu->editnurb= NULL;
- cu->lastsel= NULL;
- cu->path= NULL;
- cu->editfont= NULL;
+ cu->bev.first = cu->bev.last = NULL;
+ cu->disp.first = cu->disp.last = NULL;
+ cu->editnurb = NULL;
+ cu->lastsel = NULL;
+ cu->path = NULL;
+ cu->editfont = NULL;
- nu= cu->nurb.first;
+ nu = cu->nurb.first;
while (nu) {
- nu->bezt= newdataadr(fd, nu->bezt);
- nu->bp= newdataadr(fd, nu->bp);
- nu->knotsu= newdataadr(fd, nu->knotsu);
- nu->knotsv= newdataadr(fd, nu->knotsv);
+ nu->bezt = newdataadr(fd, nu->bezt);
+ nu->bp = newdataadr(fd, nu->bp);
+ nu->knotsu = newdataadr(fd, nu->knotsu);
+ nu->knotsv = newdataadr(fd, nu->knotsv);
if (cu->vfont == NULL) nu->charidx= nu->mat_nr;
-
+
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
switch_endian_knots(nu);
}
-
- nu= nu->next;
+
+ nu = nu->next;
}
- cu->bb= NULL;
+ cu->bb = NULL;
}
/* ************ READ TEX ***************** */
@@ -3177,21 +3176,23 @@ static void direct_link_curve(FileData *fd, Curve *cu)
static void lib_link_texture(FileData *fd, Main *main)
{
Tex *tex;
-
- tex= main->tex.first;
+
+ tex = main->tex.first;
while (tex) {
if (tex->id.flag & LIB_NEEDLINK) {
if (tex->adt) lib_link_animdata(fd, &tex->id, tex->adt);
-
- tex->ima= newlibadr_us(fd, tex->id.lib, tex->ima);
- tex->ipo= newlibadr_us(fd, tex->id.lib, tex->ipo);
- if (tex->env) tex->env->object= newlibadr(fd, tex->id.lib, tex->env->object);
+
+ tex->ima = newlibadr_us(fd, tex->id.lib, tex->ima);
+ tex->ipo = newlibadr_us(fd, tex->id.lib, tex->ipo);
+ if (tex->env)
+ tex->env->object = newlibadr(fd, tex->id.lib, tex->env->object);
if (tex->pd)
tex->pd->object= newlibadr(fd, tex->id.lib, tex->pd->object);
- if (tex->vd) tex->vd->object= newlibadr(fd, tex->id.lib, tex->vd->object);
- if (tex->ot) tex->ot->object= newlibadr(fd, tex->id.lib, tex->ot->object);
-
-
+ if (tex->vd)
+ tex->vd->object = newlibadr(fd, tex->id.lib, tex->vd->object);
+ if (tex->ot)
+ tex->ot->object = newlibadr(fd, tex->id.lib, tex->ot->object);
+
if (tex->nodetree)
lib_link_ntree(fd, &tex->id, tex->nodetree);
@@ -3203,54 +3204,54 @@ static void lib_link_texture(FileData *fd, Main *main)
static void direct_link_texture(FileData *fd, Tex *tex)
{
- tex->adt= newdataadr(fd, tex->adt);
+ tex->adt = newdataadr(fd, tex->adt);
direct_link_animdata(fd, tex->adt);
- tex->plugin= newdataadr(fd, tex->plugin);
+ tex->plugin = newdataadr(fd, tex->plugin);
if (tex->plugin) {
- tex->plugin->handle= NULL;
+ tex->plugin->handle = NULL;
open_plugin_tex(tex->plugin);
/* initialize data for this instance, if an initialization
* function exists.
*/
if (tex->plugin->instance_init)
- tex->plugin->instance_init((void *) tex->plugin->data);
+ tex->plugin->instance_init((void *)tex->plugin->data);
}
- tex->coba= newdataadr(fd, tex->coba);
- tex->env= newdataadr(fd, tex->env);
+ tex->coba = newdataadr(fd, tex->coba);
+ tex->env = newdataadr(fd, tex->env);
if (tex->env) {
- tex->env->ima= NULL;
+ tex->env->ima = NULL;
memset(tex->env->cube, 0, 6*sizeof(void *));
tex->env->ok= 0;
}
tex->pd= newdataadr(fd, tex->pd);
if (tex->pd) {
tex->pd->point_tree = NULL;
- tex->pd->coba= newdataadr(fd, tex->pd->coba);
- tex->pd->falloff_curve= newdataadr(fd, tex->pd->falloff_curve);
+ tex->pd->coba = newdataadr(fd, tex->pd->coba);
+ tex->pd->falloff_curve = newdataadr(fd, tex->pd->falloff_curve);
if (tex->pd->falloff_curve) {
direct_link_curvemapping(fd, tex->pd->falloff_curve);
}
}
- tex->vd= newdataadr(fd, tex->vd);
+ tex->vd = newdataadr(fd, tex->vd);
if (tex->vd) {
tex->vd->dataset = NULL;
tex->vd->ok = 0;
}
else {
if (tex->type == TEX_VOXELDATA)
- tex->vd= MEM_callocN(sizeof(VoxelData), "direct_link_texture VoxelData");
+ tex->vd = MEM_callocN(sizeof(VoxelData), "direct_link_texture VoxelData");
}
- tex->ot= newdataadr(fd, tex->ot);
+ tex->ot = newdataadr(fd, tex->ot);
tex->nodetree= newdataadr(fd, tex->nodetree);
if (tex->nodetree)
direct_link_nodetree(fd, tex->nodetree);
tex->preview = direct_link_preview_image(fd, tex->preview);
-
+
tex->iuser.ok= 1;
}
@@ -3263,24 +3264,24 @@ static void lib_link_material(FileData *fd, Main *main)
Material *ma;
MTex *mtex;
int a;
-
- ma= main->mat.first;
+
+ ma = main->mat.first;
while (ma) {
if (ma->id.flag & LIB_NEEDLINK) {
if (ma->adt) lib_link_animdata(fd, &ma->id, ma->adt);
-
+
/* Link ID Properties -- and copy this comment EXACTLY for easy finding
* of library blocks that implement this.*/
if (ma->id.properties) IDP_LibLinkProperty(ma->id.properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
-
- ma->ipo= newlibadr_us(fd, ma->id.lib, ma->ipo);
- ma->group= newlibadr_us(fd, ma->id.lib, ma->group);
- for (a=0; a<MAX_MTEX; a++) {
- mtex= ma->mtex[a];
+ ma->ipo = newlibadr_us(fd, ma->id.lib, ma->ipo);
+ ma->group = newlibadr_us(fd, ma->id.lib, ma->group);
+
+ for (a=0; a < MAX_MTEX; a++) {
+ mtex = ma->mtex[a];
if (mtex) {
- mtex->tex= newlibadr_us(fd, ma->id.lib, mtex->tex);
- mtex->object= newlibadr(fd, ma->id.lib, mtex->object);
+ mtex->tex = newlibadr_us(fd, ma->id.lib, mtex->tex);
+ mtex->object = newlibadr(fd, ma->id.lib, mtex->object);
}
}
@@ -3289,28 +3290,28 @@ static void lib_link_material(FileData *fd, Main *main)
ma->id.flag -= LIB_NEEDLINK;
}
- ma= ma->id.next;
+ ma = ma->id.next;
}
}
static void direct_link_material(FileData *fd, Material *ma)
{
int a;
-
- ma->adt= newdataadr(fd, ma->adt);
+
+ ma->adt = newdataadr(fd, ma->adt);
direct_link_animdata(fd, ma->adt);
- for (a=0; a<MAX_MTEX; a++) {
- ma->mtex[a]= newdataadr(fd, ma->mtex[a]);
+ for (a = 0; a < MAX_MTEX; a++) {
+ ma->mtex[a] = newdataadr(fd, ma->mtex[a]);
}
-
- ma->ramp_col= newdataadr(fd, ma->ramp_col);
- ma->ramp_spec= newdataadr(fd, ma->ramp_spec);
- ma->nodetree= newdataadr(fd, ma->nodetree);
+ ma->ramp_col = newdataadr(fd, ma->ramp_col);
+ ma->ramp_spec = newdataadr(fd, ma->ramp_spec);
+
+ ma->nodetree = newdataadr(fd, ma->nodetree);
if (ma->nodetree)
direct_link_nodetree(fd, ma->nodetree);
-
+
ma->preview = direct_link_preview_image(fd, ma->preview);
ma->gpumaterial.first = ma->gpumaterial.last = NULL;
}
@@ -3333,39 +3334,39 @@ static void direct_link_pointcache(FileData *fd, PointCache *cache)
PTCacheMem *pm;
PTCacheExtra *extra;
int i;
-
+
link_list(fd, &cache->mem_cache);
-
+
pm = cache->mem_cache.first;
-
+
for (; pm; pm=pm->next) {
for (i=0; i<BPHYS_TOT_DATA; i++) {
pm->data[i] = newdataadr(fd, pm->data[i]);
/* the cache saves non-struct data without DNA */
if (pm->data[i] && ptcache_data_struct[i][0]=='\0' && (fd->flags & FD_FLAGS_SWITCH_ENDIAN)) {
- int j, tot= (BKE_ptcache_data_size (i) * pm->totpoint)/4; /* data_size returns bytes */
- int *poin= pm->data[i];
+ int j, tot = (BKE_ptcache_data_size (i) * pm->totpoint)/4; /* data_size returns bytes */
+ int *poin = pm->data[i];
- for (j= 0; j<tot; j++)
+ for (j = 0; j < tot; j++)
SWITCH_INT(poin[j]);
}
}
link_list(fd, &pm->extradata);
-
+
for (extra=pm->extradata.first; extra; extra=extra->next)
extra->data = newdataadr(fd, extra->data);
}
}
else
cache->mem_cache.first = cache->mem_cache.last = NULL;
-
+
cache->flag &= ~PTCACHE_SIMULATION_VALID;
- cache->simframe= 0;
- cache->edit= NULL;
- cache->free_edit= NULL;
- cache->cached_frames= NULL;
+ cache->simframe = 0;
+ cache->edit = NULL;
+ cache->free_edit = NULL;
+ cache->cached_frames = NULL;
}
static void direct_link_pointcache_list(FileData *fd, ListBase *ptcaches, PointCache **ocache, int force_disk)
@@ -3380,7 +3381,7 @@ static void direct_link_pointcache_list(FileData *fd, ListBase *ptcaches, PointC
cache->step = 1;
}
}
-
+
*ocache = newdataadr(fd, *ocache);
}
else if (*ocache) {
@@ -3391,7 +3392,7 @@ static void direct_link_pointcache_list(FileData *fd, ListBase *ptcaches, PointC
(*ocache)->flag |= PTCACHE_DISK_CACHE;
(*ocache)->step = 1;
}
-
+
ptcaches->first = ptcaches->last = *ocache;
}
}
@@ -3399,7 +3400,7 @@ static void direct_link_pointcache_list(FileData *fd, ListBase *ptcaches, PointC
static void lib_link_partdeflect(FileData *fd, ID *id, PartDeflect *pd)
{
if (pd && pd->tex)
- pd->tex=newlibadr_us(fd, id->lib, pd->tex);
+ pd->tex = newlibadr_us(fd, id->lib, pd->tex);
}
static void lib_link_particlesettings(FileData *fd, Main *main)
@@ -3413,19 +3414,19 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
while (part) {
if (part->id.flag & LIB_NEEDLINK) {
if (part->adt) lib_link_animdata(fd, &part->id, part->adt);
- part->ipo= newlibadr_us(fd, part->id.lib, part->ipo); // XXX depreceated - old animation system
+ part->ipo = newlibadr_us(fd, part->id.lib, part->ipo); // XXX depreceated - old animation system
part->dup_ob = newlibadr(fd, part->id.lib, part->dup_ob);
part->dup_group = newlibadr(fd, part->id.lib, part->dup_group);
part->eff_group = newlibadr(fd, part->id.lib, part->eff_group);
part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob);
-
+
lib_link_partdeflect(fd, &part->id, part->pd);
lib_link_partdeflect(fd, &part->id, part->pd2);
-
+
if (part->effector_weights)
part->effector_weights->group = newlibadr(fd, part->id.lib, part->effector_weights->group);
-
+
if (part->dupliweights.first && part->dup_group) {
int index_ok = 0;
/* check for old files without indices (all indexes 0) */
@@ -3442,7 +3443,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
}
}
}
-
+
if (index_ok) {
/* if we have indexes, let's use them */
dw = part->dupliweights.first;
@@ -3460,7 +3461,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
else {
part->dupliweights.first = part->dupliweights.last = NULL;
}
-
+
if (part->boids) {
BoidState *state = part->boids->states.first;
BoidRule *rule;
@@ -3485,14 +3486,14 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
}
}
- for (a=0; a<MAX_MTEX; a++) {
+ for (a = 0; a < MAX_MTEX; a++) {
mtex= part->mtex[a];
if (mtex) {
mtex->tex = newlibadr_us(fd, part->id.lib, mtex->tex);
mtex->object = newlibadr(fd, part->id.lib, mtex->object);
}
}
-
+
part->id.flag -= LIB_NEEDLINK;
}
part= part->id.next;
@@ -3501,15 +3502,15 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
static void direct_link_partdeflect(PartDeflect *pd)
{
- if (pd) pd->rng=NULL;
+ if (pd) pd->rng = NULL;
}
static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
{
int a;
- part->adt= newdataadr(fd, part->adt);
- part->pd= newdataadr(fd, part->pd);
- part->pd2= newdataadr(fd, part->pd2);
+ part->adt = newdataadr(fd, part->adt);
+ part->pd = newdataadr(fd, part->pd);
+ part->pd2 = newdataadr(fd, part->pd2);
direct_link_animdata(fd, part->adt);
direct_link_partdeflect(part->pd);
@@ -3521,8 +3522,8 @@ static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
link_list(fd, &part->dupliweights);
- part->boids= newdataadr(fd, part->boids);
- part->fluid= newdataadr(fd, part->fluid);
+ part->boids = newdataadr(fd, part->boids);
+ part->fluid = newdataadr(fd, part->fluid);
if (part->boids) {
BoidState *state;
@@ -3534,8 +3535,8 @@ static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
link_list(fd, &state->actions);
}
}
- for (a=0; a<MAX_MTEX; a++) {
- part->mtex[a]= newdataadr(fd, part->mtex[a]);
+ for (a = 0; a < MAX_MTEX; a++) {
+ part->mtex[a] = newdataadr(fd, part->mtex[a]);
}
}
@@ -3544,32 +3545,32 @@ static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase
ParticleSystem *psys, *psysnext;
for (psys=particles->first; psys; psys=psysnext) {
- psysnext= psys->next;
+ psysnext = psys->next;
psys->part = newlibadr_us(fd, id->lib, psys->part);
if (psys->part) {
ParticleTarget *pt = psys->targets.first;
-
+
for (; pt; pt=pt->next)
pt->ob=newlibadr(fd, id->lib, pt->ob);
-
- psys->parent= newlibadr_us(fd, id->lib, psys->parent);
+
+ psys->parent = newlibadr_us(fd, id->lib, psys->parent);
psys->target_ob = newlibadr(fd, id->lib, psys->target_ob);
-
+
if (psys->clmd) {
/* XXX - from reading existing code this seems correct but intended usage of
* pointcache should /w cloth should be added in 'ParticleSystem' - campbell */
- psys->clmd->point_cache= psys->pointcache;
- psys->clmd->ptcaches.first= psys->clmd->ptcaches.last= NULL;
- psys->clmd->coll_parms->group= newlibadr(fd, id->lib, psys->clmd->coll_parms->group);
+ psys->clmd->point_cache = psys->pointcache;
+ psys->clmd->ptcaches.first = psys->clmd->ptcaches.last= NULL;
+ psys->clmd->coll_parms->group = newlibadr(fd, id->lib, psys->clmd->coll_parms->group);
}
}
else {
/* particle modifier must be removed before particle system */
- ParticleSystemModifierData *psmd= psys_get_modifier(ob, psys);
+ ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
BLI_remlink(&ob->modifiers, psmd);
modifier_free((ModifierData *)psmd);
-
+
BLI_remlink(particles, psys);
MEM_freeN(psys);
}
@@ -3580,7 +3581,7 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
ParticleSystem *psys;
ParticleData *pa;
int a;
-
+
for (psys=particles->first; psys; psys=psys->next) {
psys->particles=newdataadr(fd, psys->particles);
@@ -3594,10 +3595,10 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
pa->keys= NULL;
pa->totkey= 0;
}
-
+
psys->flag &= ~PSYS_KEYED;
}
-
+
if (psys->particles && psys->particles->boid) {
pa = psys->particles;
pa->boid = newdataadr(fd, pa->boid);
@@ -3608,14 +3609,14 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
for (a=0, pa=psys->particles; a<psys->totpart; a++, pa++)
pa->boid = NULL;
}
-
+
psys->fluid_springs = newdataadr(fd, psys->fluid_springs);
-
+
psys->child = newdataadr(fd, psys->child);
psys->effectors = NULL;
-
+
link_list(fd, &psys->targets);
-
+
psys->edit = NULL;
psys->free_edit = NULL;
psys->pathcache = NULL;
@@ -3627,7 +3628,7 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
psys->renderdata = NULL;
direct_link_pointcache_list(fd, &psys->ptcaches, &psys->pointcache, 0);
-
+
if (psys->clmd) {
psys->clmd = newdataadr(fd, psys->clmd);
psys->clmd->clothObject = NULL;
@@ -3640,12 +3641,12 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
if (psys->clmd->sim_parms->presets > 10)
psys->clmd->sim_parms->presets = 0;
}
-
+
psys->hair_in_dm = psys->hair_out_dm = NULL;
-
+
psys->clmd->point_cache = psys->pointcache;
}
-
+
psys->tree = NULL;
psys->bvhtree = NULL;
}
@@ -3658,11 +3659,11 @@ static void lib_link_mtface(FileData *fd, Mesh *me, MTFace *mtface, int totface)
{
MTFace *tf= mtface;
int i;
-
+
/* Add pseudo-references (not fake users!) to images used by texface. A
* little bogus; it would be better if each mesh consistently added one ref
* to each image it used. - z0r */
- for (i=0; i<totface; i++, tf++) {
+ for (i = 0; i < totface; i++, tf++) {
tf->tpage= newlibadr(fd, me->id.lib, tf->tpage);
if (tf->tpage && tf->tpage->id.us==0)
tf->tpage->id.us= 1;
@@ -3672,7 +3673,7 @@ static void lib_link_mtface(FileData *fd, Mesh *me, MTFace *mtface, int totface)
static void lib_link_customdata_mtface(FileData *fd, Mesh *me, CustomData *fdata, int totface)
{
int i;
- for (i=0; i<fdata->totlayer; i++) {
+ for (i = 0; i < fdata->totlayer; i++) {
CustomDataLayer *layer = &fdata->layers[i];
if (layer->type == CD_MTFACE)
@@ -3691,11 +3692,11 @@ static void lib_link_customdata_mtpoly(FileData *fd, Mesh *me, CustomData *pdata
if (layer->type == CD_MTEXPOLY) {
MTexPoly *tf= layer->data;
int i;
-
- for (i=0; i<totface; i++, tf++) {
- tf->tpage= newlibadr(fd, me->id.lib, tf->tpage);
+
+ for (i = 0; i < totface; i++, tf++) {
+ tf->tpage = newlibadr(fd, me->id.lib, tf->tpage);
if (tf->tpage && tf->tpage->id.us==0)
- tf->tpage->id.us= 1;
+ tf->tpage->id.us = 1;
}
}
}
@@ -3704,35 +3705,35 @@ static void lib_link_customdata_mtpoly(FileData *fd, Mesh *me, CustomData *pdata
static void lib_link_mesh(FileData *fd, Main *main)
{
Mesh *me;
-
- me= main->mesh.first;
+
+ me = main->mesh.first;
while (me) {
if (me->id.flag & LIB_NEEDLINK) {
int i;
-
+
/* Link ID Properties -- and copy this comment EXACTLY for easy finding
* of library blocks that implement this.*/
if (me->id.properties) IDP_LibLinkProperty(me->id.properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
if (me->adt) lib_link_animdata(fd, &me->id, me->adt);
-
+
/* this check added for python created meshes */
if (me->mat) {
for (i=0; i<me->totcol; i++) {
- me->mat[i]= newlibadr_us(fd, me->id.lib, me->mat[i]);
+ me->mat[i] = newlibadr_us(fd, me->id.lib, me->mat[i]);
}
}
- else me->totcol= 0;
-
- me->ipo= newlibadr_us(fd, me->id.lib, me->ipo);
- me->key= newlibadr_us(fd, me->id.lib, me->key);
- me->texcomesh= newlibadr_us(fd, me->id.lib, me->texcomesh);
-
+ else me->totcol = 0;
+
+ me->ipo = newlibadr_us(fd, me->id.lib, me->ipo);
+ me->key = newlibadr_us(fd, me->id.lib, me->key);
+ me->texcomesh = newlibadr_us(fd, me->id.lib, me->texcomesh);
+
lib_link_customdata_mtface(fd, me, &me->fdata, me->totface);
lib_link_customdata_mtpoly(fd, me, &me->pdata, me->totpoly);
if (me->mr && me->mr->levels.first)
lib_link_customdata_mtface(fd, me, &me->mr->fdata,
((MultiresLevel*)me->mr->levels.first)->totface);
-
+
/*check if we need to convert mfaces to mpolys*/
if (me->totface && !me->totpoly) {
/* temporarily switch main so that reading from
@@ -3741,7 +3742,7 @@ static void lib_link_mesh(FileData *fd, Main *main)
G.main = main;
BKE_mesh_convert_mfaces_to_mpolys(me);
-
+
G.main = gmain;
}
@@ -3760,12 +3761,12 @@ static void lib_link_mesh(FileData *fd, Main *main)
#else
BKE_mesh_tessface_clear(me);
#endif
-
+
me->id.flag -= LIB_NEEDLINK;
}
- me= me->id.next;
+ me = me->id.next;
}
-
+
/* convert texface options to material */
convert_tface_mt(fd, main);
}
@@ -3773,24 +3774,24 @@ static void lib_link_mesh(FileData *fd, Main *main)
static void direct_link_dverts(FileData *fd, int count, MDeformVert *mdverts)
{
int i;
-
+
if (mdverts == NULL) {
return;
}
-
- for (i= count; i > 0; i--, mdverts++) {
+
+ for (i = count; i > 0; i--, mdverts++) {
/*convert to vgroup allocation system*/
MDeformWeight *dw;
- if (mdverts->dw && (dw= newdataadr(fd, mdverts->dw))) {
- const ssize_t dw_len= mdverts->totweight * sizeof(MDeformWeight);
- void *dw_tmp= MEM_mallocN(dw_len, "direct_link_dverts");
+ if (mdverts->dw && (dw = newdataadr(fd, mdverts->dw))) {
+ const ssize_t dw_len = mdverts->totweight * sizeof(MDeformWeight);
+ void *dw_tmp = MEM_mallocN(dw_len, "direct_link_dverts");
memcpy(dw_tmp, dw, dw_len);
- mdverts->dw= dw_tmp;
+ mdverts->dw = dw_tmp;
MEM_freeN(dw);
}
else {
- mdverts->dw= NULL;
- mdverts->totweight= 0;
+ mdverts->dw = NULL;
+ mdverts->totweight = 0;
}
}
}
@@ -3799,11 +3800,11 @@ static void direct_link_mdisps(FileData *fd, int count, MDisps *mdisps, int exte
{
if (mdisps) {
int i;
-
+
for (i = 0; i < count; ++i) {
mdisps[i].disps = newdataadr(fd, mdisps[i].disps);
mdisps[i].hidden = newdataadr(fd, mdisps[i].hidden);
-
+
if (mdisps[i].totdisp && !mdisps[i].level) {
/* this calculation is only correct for loop mdisps;
* if loading pre-BMesh face mdisps this will be
@@ -3812,13 +3813,13 @@ static void direct_link_mdisps(FileData *fd, int count, MDisps *mdisps, int exte
float gridsize = sqrtf(mdisps[i].totdisp);
mdisps[i].level = (int)(logf(gridsize - 1.0f) / (float)M_LN2) + 1;
}
-
- if ( (fd->flags & FD_FLAGS_SWITCH_ENDIAN) && (mdisps[i].disps) ) {
+
+ if ((fd->flags & FD_FLAGS_SWITCH_ENDIAN) && (mdisps[i].disps)) {
/* DNA_struct_switch_endian doesn't do endian swap for (*disps)[] */
/* this does swap for data written at write_mdisps() - readfile.c */
int x;
- float *tmpdisps= *mdisps[i].disps;
- for (x=0;x<mdisps[i].totdisp*3;x++) {
+ float *tmpdisps = *mdisps[i].disps;
+ for (x = 0; x < mdisps[i].totdisp * 3; x++) {
SWITCH_INT(*tmpdisps);
tmpdisps++;
}
@@ -3831,12 +3832,12 @@ static void direct_link_mdisps(FileData *fd, int count, MDisps *mdisps, int exte
static void direct_link_grid_paint_mask(FileData *fd, int count, GridPaintMask *grid_paint_mask)
{
- if(grid_paint_mask) {
+ if (grid_paint_mask) {
int i;
-
- for(i = 0; i < count; ++i) {
+
+ for (i = 0; i < count; ++i) {
GridPaintMask *gpm = &grid_paint_mask[i];
- if(gpm->data)
+ if (gpm->data)
gpm->data = newdataadr(fd, gpm->data);
}
}
@@ -3846,24 +3847,24 @@ static void direct_link_grid_paint_mask(FileData *fd, int count, GridPaintMask *
static void direct_link_customdata(FileData *fd, CustomData *data, int count)
{
int i = 0;
-
- data->layers= newdataadr(fd, data->layers);
-
+
+ data->layers = newdataadr(fd, data->layers);
+
/* annoying workaround for bug [#31079] loading legacy files with
* no polygons _but_ have stale customdata */
if (UNLIKELY(count == 0 && data->layers == NULL && data->totlayer != 0)) {
memset(data, 0, sizeof(*data));
return;
}
-
- data->external= newdataadr(fd, data->external);
-
+
+ data->external = newdataadr(fd, data->external);
+
while (i < data->totlayer) {
CustomDataLayer *layer = &data->layers[i];
-
+
if (layer->flag & CD_FLAG_EXTERNAL)
layer->flag &= ~CD_FLAG_IN_MEMORY;
-
+
if (CustomData_verify_versions(data, i)) {
layer->data = newdataadr(fd, layer->data);
if (layer->type == CD_MDISPS)
@@ -3873,7 +3874,7 @@ static void direct_link_customdata(FileData *fd, CustomData *data, int count)
i++;
}
}
-
+
CustomData_update_typemap(data);
}
@@ -3881,68 +3882,67 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
{
mesh->mat= newdataadr(fd, mesh->mat);
test_pointer_array(fd, (void **)&mesh->mat);
-
- mesh->mvert= newdataadr(fd, mesh->mvert);
- mesh->medge= newdataadr(fd, mesh->medge);
- mesh->mface= newdataadr(fd, mesh->mface);
- mesh->mloop= newdataadr(fd, mesh->mloop);
- mesh->mpoly= newdataadr(fd, mesh->mpoly);
- mesh->tface= newdataadr(fd, mesh->tface);
- mesh->mtface= newdataadr(fd, mesh->mtface);
- mesh->mcol= newdataadr(fd, mesh->mcol);
- mesh->msticky= newdataadr(fd, mesh->msticky);
- mesh->dvert= newdataadr(fd, mesh->dvert);
- mesh->mloopcol= newdataadr(fd, mesh->mloopcol);
- mesh->mloopuv= newdataadr(fd, mesh->mloopuv);
- mesh->mtpoly= newdataadr(fd, mesh->mtpoly);
+
+ mesh->mvert = newdataadr(fd, mesh->mvert);
+ mesh->medge = newdataadr(fd, mesh->medge);
+ mesh->mface = newdataadr(fd, mesh->mface);
+ mesh->mloop = newdataadr(fd, mesh->mloop);
+ mesh->mpoly = newdataadr(fd, mesh->mpoly);
+ mesh->tface = newdataadr(fd, mesh->tface);
+ mesh->mtface = newdataadr(fd, mesh->mtface);
+ mesh->mcol = newdataadr(fd, mesh->mcol);
+ mesh->msticky = newdataadr(fd, mesh->msticky);
+ mesh->dvert = newdataadr(fd, mesh->dvert);
+ mesh->mloopcol = newdataadr(fd, mesh->mloopcol);
+ mesh->mloopuv = newdataadr(fd, mesh->mloopuv);
+ mesh->mtpoly = newdataadr(fd, mesh->mtpoly);
mesh->mselect = newdataadr(fd, mesh->mselect);
-
+
/* animdata */
- mesh->adt= newdataadr(fd, mesh->adt);
+ mesh->adt = newdataadr(fd, mesh->adt);
direct_link_animdata(fd, mesh->adt);
-
+
/* normally direct_link_dverts should be called in direct_link_customdata,
* but for backwards compat in do_versions to work we do it here */
direct_link_dverts(fd, mesh->totvert, mesh->dvert);
-
+
direct_link_customdata(fd, &mesh->vdata, mesh->totvert);
direct_link_customdata(fd, &mesh->edata, mesh->totedge);
direct_link_customdata(fd, &mesh->fdata, mesh->totface);
direct_link_customdata(fd, &mesh->ldata, mesh->totloop);
direct_link_customdata(fd, &mesh->pdata, mesh->totpoly);
-
+
#ifdef USE_BMESH_FORWARD_COMPAT
/* NEVER ENABLE THIS CODE INTO BMESH!
* THIS IS FOR LOADING BMESH INTO OLDER FILES ONLY */
- mesh->mpoly= newdataadr(fd, mesh->mpoly);
- mesh->mloop= newdataadr(fd, mesh->mloop);
+ mesh->mpoly = newdataadr(fd, mesh->mpoly);
+ mesh->mloop = newdataadr(fd, mesh->mloop);
direct_link_customdata(fd, &mesh->pdata, mesh->totpoly);
direct_link_customdata(fd, &mesh->ldata, mesh->totloop);
if (mesh->mpoly) {
/* be clever and load polygons as mfaces */
-
mesh->totface= BKE_mesh_mpoly_to_mface(&mesh->fdata, &mesh->ldata, &mesh->pdata,
mesh->totface, mesh->totloop, mesh->totpoly);
-
+
CustomData_free(&mesh->pdata, mesh->totpoly);
memset(&mesh->pdata, 0, sizeof(CustomData));
mesh->totpoly = 0;
-
+
CustomData_free(&mesh->ldata, mesh->totloop);
memset(&mesh->ldata, 0, sizeof(CustomData));
mesh->totloop = 0;
-
+
mesh_update_customdata_pointers(mesh);
}
#endif
-
-
- mesh->bb= NULL;
- mesh->edit_btmesh= NULL;
+
+
+ mesh->bb = NULL;
+ mesh->edit_btmesh = NULL;
/* Multires data */
mesh->mr= newdataadr(fd, mesh->mr);
@@ -3950,15 +3950,15 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
MultiresLevel *lvl;
link_list(fd, &mesh->mr->levels);
- lvl= mesh->mr->levels.first;
+ lvl = mesh->mr->levels.first;
direct_link_customdata(fd, &mesh->mr->vdata, lvl->totvert);
direct_link_dverts(fd, lvl->totvert, CustomData_get(&mesh->mr->vdata, 0, CD_MDEFORMVERT));
direct_link_customdata(fd, &mesh->mr->fdata, lvl->totface);
- mesh->mr->edge_flags= newdataadr(fd, mesh->mr->edge_flags);
- mesh->mr->edge_creases= newdataadr(fd, mesh->mr->edge_creases);
-
+ mesh->mr->edge_flags = newdataadr(fd, mesh->mr->edge_flags);
+ mesh->mr->edge_creases = newdataadr(fd, mesh->mr->edge_creases);
+
mesh->mr->verts = newdataadr(fd, mesh->mr->verts);
/* If mesh has the same number of vertices as the
@@ -3991,7 +3991,7 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
if ((fd->flags & FD_FLAGS_SWITCH_ENDIAN) && mesh->tface) {
TFace *tf= mesh->tface;
int i;
-
+
for (i=0; i< (mesh->totface); i++, tf++) {
SWITCH_INT(tf->col[0]);
SWITCH_INT(tf->col[1]);
@@ -4007,13 +4007,13 @@ static void lib_link_latt(FileData *fd, Main *main)
{
Lattice *lt;
- lt= main->latt.first;
+ lt = main->latt.first;
while (lt) {
if (lt->id.flag & LIB_NEEDLINK) {
if (lt->adt) lib_link_animdata(fd, &lt->id, lt->adt);
- lt->ipo= newlibadr_us(fd, lt->id.lib, lt->ipo); // XXX depreceated - old animation system
- lt->key= newlibadr_us(fd, lt->id.lib, lt->key);
+ lt->ipo = newlibadr_us(fd, lt->id.lib, lt->ipo); // XXX depreceated - old animation system
+ lt->key = newlibadr_us(fd, lt->id.lib, lt->key);
lt->id.flag -= LIB_NEEDLINK;
}
@@ -4023,12 +4023,12 @@ static void lib_link_latt(FileData *fd, Main *main)
static void direct_link_latt(FileData *fd, Lattice *lt)
{
- lt->def= newdataadr(fd, lt->def);
+ lt->def = newdataadr(fd, lt->def);
- lt->dvert= newdataadr(fd, lt->dvert);
+ lt->dvert = newdataadr(fd, lt->dvert);
direct_link_dverts(fd, lt->pntsu*lt->pntsv*lt->pntsw, lt->dvert);
- lt->editlatt= NULL;
+ lt->editlatt = NULL;
lt->adt = newdataadr(fd, lt->adt);
direct_link_animdata(fd, lt->adt);
@@ -4061,29 +4061,29 @@ static void lib_link_object(FileData *fd, Main *main)
bActuator *act;
void *poin;
int warn=0, a;
-
- ob= main->object.first;
+
+ ob = main->object.first;
while (ob) {
if (ob->id.flag & LIB_NEEDLINK) {
if (ob->id.properties) IDP_LibLinkProperty(ob->id.properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
if (ob->adt) lib_link_animdata(fd, &ob->id, ob->adt);
// XXX depreceated - old animation system <<<
- ob->ipo= newlibadr_us(fd, ob->id.lib, ob->ipo);
+ ob->ipo = newlibadr_us(fd, ob->id.lib, ob->ipo);
ob->action = newlibadr_us(fd, ob->id.lib, ob->action);
// >>> XXX depreceated - old animation system
- ob->parent= newlibadr(fd, ob->id.lib, ob->parent);
- ob->track= newlibadr(fd, ob->id.lib, ob->track);
- ob->poselib= newlibadr_us(fd, ob->id.lib, ob->poselib);
- ob->dup_group= newlibadr_us(fd, ob->id.lib, ob->dup_group);
+ ob->parent = newlibadr(fd, ob->id.lib, ob->parent);
+ ob->track = newlibadr(fd, ob->id.lib, ob->track);
+ ob->poselib = newlibadr_us(fd, ob->id.lib, ob->poselib);
+ ob->dup_group = newlibadr_us(fd, ob->id.lib, ob->dup_group);
- ob->proxy= newlibadr_us(fd, ob->id.lib, ob->proxy);
+ ob->proxy = newlibadr_us(fd, ob->id.lib, ob->proxy);
if (ob->proxy) {
/* paranoia check, actually a proxy_from pointer should never be written... */
- if (ob->proxy->id.lib==NULL) {
- ob->proxy->proxy_from= NULL;
- ob->proxy= NULL;
+ if (ob->proxy->id.lib == NULL) {
+ ob->proxy->proxy_from = NULL;
+ ob->proxy = NULL;
if (ob->id.lib)
printf("Proxy lost from object %s lib %s\n", ob->id.name+2, ob->id.lib->name);
@@ -4092,47 +4092,48 @@ static void lib_link_object(FileData *fd, Main *main)
}
else {
/* this triggers object_update to always use a copy */
- ob->proxy->proxy_from= ob;
+ ob->proxy->proxy_from = ob;
/* force proxy updates after load/undo, a bit weak */
- ob->recalc= ob->proxy->recalc= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
+ ob->recalc = ob->proxy->recalc = (OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
}
- ob->proxy_group= newlibadr(fd, ob->id.lib, ob->proxy_group);
+ ob->proxy_group = newlibadr(fd, ob->id.lib, ob->proxy_group);
+
+ poin = ob->data;
+ ob->data = newlibadr_us(fd, ob->id.lib, ob->data);
- poin= ob->data;
- ob->data= newlibadr_us(fd, ob->id.lib, ob->data);
-
if (ob->data==NULL && poin!=NULL) {
if (ob->id.lib)
printf("Can't find obdata of %s lib %s\n", ob->id.name+2, ob->id.lib->name);
else
printf("Object %s lost data.\n", ob->id.name+2);
-
- ob->type= OB_EMPTY;
- warn= 1;
-
+
+ ob->type = OB_EMPTY;
+ warn = 1;
+
if (ob->pose) {
BKE_pose_free(ob->pose);
ob->pose= NULL;
ob->mode &= ~OB_MODE_POSE;
}
}
- for (a=0; a<ob->totcol; a++) ob->mat[a]= newlibadr_us(fd, ob->id.lib, ob->mat[a]);
+ for (a=0; a < ob->totcol; a++)
+ ob->mat[a] = newlibadr_us(fd, ob->id.lib, ob->mat[a]);
/* When the object is local and the data is library its possible
* the material list size gets out of sync. [#22663] */
if (ob->data && ob->id.lib != ((ID *)ob->data)->lib) {
- short *totcol_data= give_totcolp(ob);
+ short *totcol_data = give_totcolp(ob);
/* Only expand so as not to loose any object materials that might be set. */
- if (totcol_data && *totcol_data > ob->totcol) {
+ if (totcol_data && (*totcol_data > ob->totcol)) {
/* printf("'%s' %d -> %d\n", ob->id.name, ob->totcol, *totcol_data); */
resize_object_material(ob, *totcol_data);
}
}
-
- ob->gpd= newlibadr_us(fd, ob->id.lib, ob->gpd);
- ob->duplilist= NULL;
-
+
+ ob->gpd = newlibadr_us(fd, ob->id.lib, ob->gpd);
+ ob->duplilist = NULL;
+
ob->id.flag -= LIB_NEEDLINK;
/* if id.us==0 a new base will be created later on */
@@ -4144,75 +4145,70 @@ static void lib_link_object(FileData *fd, Main *main)
lib_link_constraint_channels(fd, &ob->id, &ob->constraintChannels);
lib_link_nlastrips(fd, &ob->id, &ob->nlastrips);
// >>> XXX depreceated - old animation system
-
+
for (paf= ob->effect.first; paf; paf= paf->next) {
- if (paf->type==EFF_PARTICLE) {
- paf->group= newlibadr_us(fd, ob->id.lib, paf->group);
+ if (paf->type == EFF_PARTICLE) {
+ paf->group = newlibadr_us(fd, ob->id.lib, paf->group);
}
}
-
- sens= ob->sensors.first;
- while (sens) {
+
+ for (sens = ob->sensors.first; sens; sens = sens->next) {
for (a=0; a<sens->totlinks; a++)
- sens->links[a]= newglobadr(fd, sens->links[a]);
-
+ sens->links[a] = newglobadr(fd, sens->links[a]);
+
if (sens->type==SENS_TOUCH) {
- bTouchSensor *ts= sens->data;
+ bTouchSensor *ts = sens->data;
ts->ma= newlibadr(fd, ob->id.lib, ts->ma);
}
else if (sens->type==SENS_MESSAGE) {
bMessageSensor *ms= sens->data;
- ms->fromObject=
+ ms->fromObject =
newlibadr(fd, ob->id.lib, ms->fromObject);
}
- sens= sens->next;
}
-
- cont= ob->controllers.first;
- while (cont) {
+
+ for (cont = ob->controllers.first; cont; cont = cont->next) {
for (a=0; a<cont->totlinks; a++)
- cont->links[a]= newglobadr(fd, cont->links[a]);
-
- if (cont->type==CONT_PYTHON) {
- bPythonCont *pc= cont->data;
- pc->text= newlibadr(fd, ob->id.lib, pc->text);
+ cont->links[a] = newglobadr(fd, cont->links[a]);
+
+ if (cont->type == CONT_PYTHON) {
+ bPythonCont *pc = cont->data;
+ pc->text = newlibadr(fd, ob->id.lib, pc->text);
}
- cont->slinks= NULL;
- cont->totslinks= 0;
-
- cont= cont->next;
+ cont->slinks = NULL;
+ cont->totslinks = 0;
}
-
+
act= ob->actuators.first;
while (act) {
- if (act->type==ACT_SOUND) {
- bSoundActuator *sa= act->data;
+ if (act->type == ACT_SOUND) {
+ bSoundActuator *sa = act->data;
sa->sound= newlibadr_us(fd, ob->id.lib, sa->sound);
}
- else if (act->type==ACT_GAME) {
+ else if (act->type == ACT_GAME) {
/* bGameActuator *ga= act->data; */
}
- else if (act->type==ACT_CAMERA) {
- bCameraActuator *ca= act->data;
+ else if (act->type == ACT_CAMERA) {
+ bCameraActuator *ca = act->data;
ca->ob= newlibadr(fd, ob->id.lib, ca->ob);
}
/* leave this one, it's obsolete but necessary to read for conversion */
- else if (act->type==ACT_ADD_OBJECT) {
- bAddObjectActuator *eoa= act->data;
+ else if (act->type == ACT_ADD_OBJECT) {
+ bAddObjectActuator *eoa = act->data;
if (eoa) eoa->ob= newlibadr(fd, ob->id.lib, eoa->ob);
}
- else if (act->type==ACT_OBJECT) {
- bObjectActuator *oa= act->data;
- if (oa==NULL) {
+ else if (act->type == ACT_OBJECT) {
+ bObjectActuator *oa = act->data;
+ if (oa == NULL) {
init_actuator(act);
}
else {
- oa->reference= newlibadr(fd, ob->id.lib, oa->reference);
+ oa->reference = newlibadr(fd, ob->id.lib, oa->reference);
}
}
- else if (act->type==ACT_EDIT_OBJECT) {
- bEditObjectActuator *eoa= act->data;
- if (eoa==NULL) {
+ else if (act->type == ACT_EDIT_OBJECT) {
+ bEditObjectActuator *eoa = act->data;
+ if (eoa == NULL) {
init_actuator(act);
}
else {
@@ -4220,44 +4216,44 @@ static void lib_link_object(FileData *fd, Main *main)
eoa->me= newlibadr(fd, ob->id.lib, eoa->me);
}
}
- else if (act->type==ACT_SCENE) {
- bSceneActuator *sa= act->data;
+ else if (act->type == ACT_SCENE) {
+ bSceneActuator *sa = act->data;
sa->camera= newlibadr(fd, ob->id.lib, sa->camera);
sa->scene= newlibadr(fd, ob->id.lib, sa->scene);
}
- else if (act->type==ACT_ACTION) {
- bActionActuator *aa= act->data;
+ else if (act->type == ACT_ACTION) {
+ bActionActuator *aa = act->data;
aa->act= newlibadr(fd, ob->id.lib, aa->act);
}
- else if (act->type==ACT_SHAPEACTION) {
- bActionActuator *aa= act->data;
+ else if (act->type == ACT_SHAPEACTION) {
+ bActionActuator *aa = act->data;
aa->act= newlibadr(fd, ob->id.lib, aa->act);
}
- else if (act->type==ACT_PROPERTY) {
- bPropertyActuator *pa= act->data;
+ else if (act->type == ACT_PROPERTY) {
+ bPropertyActuator *pa = act->data;
pa->ob= newlibadr(fd, ob->id.lib, pa->ob);
}
- else if (act->type==ACT_MESSAGE) {
- bMessageActuator *ma= act->data;
+ else if (act->type == ACT_MESSAGE) {
+ bMessageActuator *ma = act->data;
ma->toObject= newlibadr(fd, ob->id.lib, ma->toObject);
}
- else if (act->type==ACT_2DFILTER) {
+ else if (act->type == ACT_2DFILTER) {
bTwoDFilterActuator *_2dfa = act->data;
_2dfa->text= newlibadr(fd, ob->id.lib, _2dfa->text);
}
- else if (act->type==ACT_PARENT) {
+ else if (act->type == ACT_PARENT) {
bParentActuator *parenta = act->data;
parenta->ob = newlibadr(fd, ob->id.lib, parenta->ob);
}
- else if (act->type==ACT_STATE) {
+ else if (act->type == ACT_STATE) {
/* bStateActuator *statea = act->data; */
}
- else if (act->type==ACT_ARMATURE) {
+ else if (act->type == ACT_ARMATURE) {
bArmatureActuator *arma= act->data;
arma->target= newlibadr(fd, ob->id.lib, arma->target);
arma->subtarget= newlibadr(fd, ob->id.lib, arma->subtarget);
}
- else if (act->type==ACT_STEERING) {
+ else if (act->type == ACT_STEERING) {
bSteeringActuator *steeringa = act->data;
steeringa->target = newlibadr(fd, ob->id.lib, steeringa->target);
steeringa->navmesh = newlibadr(fd, ob->id.lib, steeringa->navmesh);
@@ -4271,28 +4267,28 @@ static void lib_link_object(FileData *fd, Main *main)
if (fluidmd && fluidmd->fss)
fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, fluidmd->fss->ipo);
}
-
+
{
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 */
}
}
-
+
/* texture field */
if (ob->pd)
lib_link_partdeflect(fd, &ob->id, ob->pd);
-
+
if (ob->soft)
ob->soft->effector_weights->group = newlibadr(fd, ob->id.lib, ob->soft->effector_weights->group);
-
+
lib_link_particlesystems(fd, ob, &ob->id, &ob->particlesystem);
lib_link_modifiers(fd, ob);
}
- ob= ob->id.next;
+ ob = ob->id.next;
}
-
+
if (warn) {
BKE_report(fd->reports, RPT_WARNING, "Warning in console");
}
@@ -4309,13 +4305,13 @@ static void direct_link_pose(FileData *fd, bPose *pose)
link_list(fd, &pose->chanbase);
link_list(fd, &pose->agroups);
- pose->chanhash= NULL;
+ pose->chanhash = NULL;
for (pchan = pose->chanbase.first; pchan; pchan=pchan->next) {
- pchan->bone= NULL;
- pchan->parent= newdataadr(fd, pchan->parent);
- pchan->child= newdataadr(fd, pchan->child);
- pchan->custom_tx= newdataadr(fd, pchan->custom_tx);
+ pchan->bone = NULL;
+ pchan->parent = newdataadr(fd, pchan->parent);
+ pchan->child = newdataadr(fd, pchan->child);
+ pchan->custom_tx = newdataadr(fd, pchan->custom_tx);
direct_link_constraints(fd, &pchan->constraints);
@@ -4323,12 +4319,12 @@ static void direct_link_pose(FileData *fd, bPose *pose)
if (pchan->prop)
IDP_DirectLinkProperty(pchan->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
- pchan->mpath= newdataadr(fd, pchan->mpath);
+ pchan->mpath = newdataadr(fd, pchan->mpath);
if (pchan->mpath)
direct_link_motionpath(fd, pchan->mpath);
- pchan->iktree.first= pchan->iktree.last= NULL;
- pchan->siktree.first= pchan->siktree.last= NULL;
+ pchan->iktree.first = pchan->iktree.last = NULL;
+ pchan->siktree.first = pchan->siktree.last = NULL;
/* in case this value changes in future, clamp else we get undefined behavior */
CLAMP(pchan->rotmode, ROT_MODE_MIN, ROT_MODE_MAX);
@@ -4342,68 +4338,68 @@ static void direct_link_pose(FileData *fd, bPose *pose)
static void direct_link_modifiers(FileData *fd, ListBase *lb)
{
ModifierData *md;
-
+
link_list(fd, lb);
-
+
for (md=lb->first; md; md=md->next) {
md->error = NULL;
md->scene = NULL;
/* if modifiers disappear, or for upward compatibility */
- if (NULL==modifierType_getInfo(md->type))
- md->type= eModifierType_None;
+ if (NULL == modifierType_getInfo(md->type))
+ md->type = eModifierType_None;
+
+ if (md->type == eModifierType_Subsurf) {
+ SubsurfModifierData *smd = (SubsurfModifierData *)md;
- if (md->type==eModifierType_Subsurf) {
- SubsurfModifierData *smd = (SubsurfModifierData*) md;
-
smd->emCache = smd->mCache = NULL;
}
- else if (md->type==eModifierType_Armature) {
- ArmatureModifierData *amd = (ArmatureModifierData*) md;
+ else if (md->type == eModifierType_Armature) {
+ ArmatureModifierData *amd = (ArmatureModifierData *)md;
- amd->prevCos= NULL;
+ amd->prevCos = NULL;
}
- else if (md->type==eModifierType_Cloth) {
- ClothModifierData *clmd = (ClothModifierData*) md;
+ else if (md->type == eModifierType_Cloth) {
+ ClothModifierData *clmd = (ClothModifierData *)md;
clmd->clothObject = NULL;
clmd->sim_parms= newdataadr(fd, clmd->sim_parms);
clmd->coll_parms= newdataadr(fd, clmd->coll_parms);
-
+
direct_link_pointcache_list(fd, &clmd->ptcaches, &clmd->point_cache, 0);
if (clmd->sim_parms) {
if (clmd->sim_parms->presets > 10)
clmd->sim_parms->presets = 0;
-
+
clmd->sim_parms->reset = 0;
-
+
clmd->sim_parms->effector_weights = newdataadr(fd, clmd->sim_parms->effector_weights);
-
+
if (!clmd->sim_parms->effector_weights) {
clmd->sim_parms->effector_weights = BKE_add_effector_weights(NULL);
}
}
}
- else if (md->type==eModifierType_Fluidsim) {
- FluidsimModifierData *fluidmd = (FluidsimModifierData*) md;
+ else if (md->type == eModifierType_Fluidsim) {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)md;
- fluidmd->fss= newdataadr(fd, fluidmd->fss);
+ fluidmd->fss = newdataadr(fd, fluidmd->fss);
if (fluidmd->fss) {
- fluidmd->fss->fmd= fluidmd;
+ fluidmd->fss->fmd = fluidmd;
fluidmd->fss->meshVelocities = NULL;
}
}
- else if (md->type==eModifierType_Smoke) {
- SmokeModifierData *smd = (SmokeModifierData*) md;
-
- if (smd->type==MOD_SMOKE_TYPE_DOMAIN) {
+ else if (md->type == eModifierType_Smoke) {
+ SmokeModifierData *smd = (SmokeModifierData *)md;
+
+ if (smd->type == MOD_SMOKE_TYPE_DOMAIN) {
smd->flow = NULL;
smd->coll = NULL;
smd->domain = newdataadr(fd, smd->domain);
smd->domain->smd = smd;
-
+
smd->domain->fluid = NULL;
smd->domain->wt = NULL;
smd->domain->shadow = NULL;
@@ -4414,9 +4410,9 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
smd->domain->effector_weights = newdataadr(fd, smd->domain->effector_weights);
if (!smd->domain->effector_weights)
smd->domain->effector_weights = BKE_add_effector_weights(NULL);
-
+
direct_link_pointcache_list(fd, &(smd->domain->ptcaches[0]), &(smd->domain->point_cache[0]), 1);
-
+
/* Smoke uses only one cache from now on, so store pointer convert */
if (smd->domain->ptcaches[1].first || smd->domain->point_cache[1]) {
if (smd->domain->point_cache[1]) {
@@ -4432,14 +4428,14 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
smd->domain->point_cache[1] = NULL;
}
}
- else if (smd->type==MOD_SMOKE_TYPE_FLOW) {
+ else if (smd->type == MOD_SMOKE_TYPE_FLOW) {
smd->domain = NULL;
smd->coll = NULL;
smd->flow = newdataadr(fd, smd->flow);
smd->flow->smd = smd;
smd->flow->psys = newdataadr(fd, smd->flow->psys);
}
- else if (smd->type==MOD_SMOKE_TYPE_COLL) {
+ else if (smd->type == MOD_SMOKE_TYPE_COLL) {
smd->flow = NULL;
smd->domain = NULL;
smd->coll = newdataadr(fd, smd->coll);
@@ -4449,27 +4445,26 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
}
else
smd->type = 0;
-
}
}
- else if (md->type==eModifierType_DynamicPaint) {
- DynamicPaintModifierData *pmd = (DynamicPaintModifierData*) md;
-
+ else if (md->type == eModifierType_DynamicPaint) {
+ DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
+
if (pmd->canvas) {
pmd->canvas = newdataadr(fd, pmd->canvas);
pmd->canvas->pmd = pmd;
pmd->canvas->dm = NULL;
pmd->canvas->flags &= ~MOD_DPAINT_BAKING; /* just in case */
-
+
if (pmd->canvas->surfaces.first) {
DynamicPaintSurface *surface;
link_list(fd, &pmd->canvas->surfaces);
-
+
for (surface=pmd->canvas->surfaces.first; surface; surface=surface->next) {
surface->canvas = pmd->canvas;
surface->data = NULL;
direct_link_pointcache_list(fd, &(surface->ptcaches), &(surface->pointcache), 1);
-
+
if (!(surface->effector_weights = newdataadr(fd, surface->effector_weights)))
surface->effector_weights = BKE_add_effector_weights(NULL);
}
@@ -4484,9 +4479,8 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
pmd->brush->dm = NULL;
}
}
- else if (md->type==eModifierType_Collision) {
-
- CollisionModifierData *collmd = (CollisionModifierData*) md;
+ else if (md->type == eModifierType_Collision) {
+ CollisionModifierData *collmd = (CollisionModifierData *)md;
/*
// TODO: CollisionModifier should use pointcache
// + have proper reset events before enabling this
@@ -4510,55 +4504,55 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
collmd->mfaces = NULL;
}
- else if (md->type==eModifierType_Surface) {
- SurfaceModifierData *surmd = (SurfaceModifierData*) md;
-
+ else if (md->type == eModifierType_Surface) {
+ SurfaceModifierData *surmd = (SurfaceModifierData *)md;
+
surmd->dm = NULL;
surmd->bvhtree = NULL;
surmd->x = NULL;
surmd->v = NULL;
surmd->numverts = 0;
}
- else if (md->type==eModifierType_Hook) {
- HookModifierData *hmd = (HookModifierData*) md;
-
- hmd->indexar= newdataadr(fd, hmd->indexar);
+ else if (md->type == eModifierType_Hook) {
+ HookModifierData *hmd = (HookModifierData *)md;
+
+ hmd->indexar = newdataadr(fd, hmd->indexar);
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
int a;
- for (a=0; a<hmd->totindex; a++) {
+ for (a = 0; a < hmd->totindex; a++) {
SWITCH_INT(hmd->indexar[a]);
}
}
}
- else if (md->type==eModifierType_ParticleSystem) {
- ParticleSystemModifierData *psmd = (ParticleSystemModifierData*) md;
-
+ else if (md->type == eModifierType_ParticleSystem) {
+ ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md;
+
psmd->dm= NULL;
psmd->psys= newdataadr(fd, psmd->psys);
psmd->flag &= ~eParticleSystemFlag_psys_updated;
psmd->flag |= eParticleSystemFlag_file_loaded;
}
- else if (md->type==eModifierType_Explode) {
- ExplodeModifierData *psmd = (ExplodeModifierData*) md;
-
- psmd->facepa=NULL;
+ else if (md->type == eModifierType_Explode) {
+ ExplodeModifierData *psmd = (ExplodeModifierData *)md;
+
+ psmd->facepa = NULL;
}
- else if (md->type==eModifierType_MeshDeform) {
- MeshDeformModifierData *mmd = (MeshDeformModifierData*) md;
-
- mmd->bindinfluences= newdataadr(fd, mmd->bindinfluences);
- mmd->bindoffsets= newdataadr(fd, mmd->bindoffsets);
- mmd->bindcagecos= newdataadr(fd, mmd->bindcagecos);
- mmd->dyngrid= newdataadr(fd, mmd->dyngrid);
- mmd->dyninfluences= newdataadr(fd, mmd->dyninfluences);
- mmd->dynverts= newdataadr(fd, mmd->dynverts);
-
- mmd->bindweights= newdataadr(fd, mmd->bindweights);
- mmd->bindcos= newdataadr(fd, mmd->bindcos);
-
+ else if (md->type == eModifierType_MeshDeform) {
+ MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
+
+ mmd->bindinfluences = newdataadr(fd, mmd->bindinfluences);
+ mmd->bindoffsets = newdataadr(fd, mmd->bindoffsets);
+ mmd->bindcagecos = newdataadr(fd, mmd->bindcagecos);
+ mmd->dyngrid = newdataadr(fd, mmd->dyngrid);
+ mmd->dyninfluences = newdataadr(fd, mmd->dyninfluences);
+ mmd->dynverts = newdataadr(fd, mmd->dynverts);
+
+ mmd->bindweights = newdataadr(fd, mmd->bindweights);
+ mmd->bindcos = newdataadr(fd, mmd->bindcos);
+
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
int a;
-
+
if (mmd->bindoffsets)
for (a=0; a<mmd->totvert+1; a++)
SWITCH_INT(mmd->bindoffsets[a]);
@@ -4568,7 +4562,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
if (mmd->dynverts)
for (a=0; a<mmd->totvert; a++)
SWITCH_INT(mmd->dynverts[a]);
-
+
if (mmd->bindweights)
for (a=0; a<mmd->totcagevert*mmd->totvert; a++)
SWITCH_INT(mmd->bindweights[a]);
@@ -4577,22 +4571,22 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
SWITCH_INT(mmd->bindcos[a]);
}
}
- else if (md->type==eModifierType_Ocean) {
- OceanModifierData *omd = (OceanModifierData*) md;
+ else if (md->type == eModifierType_Ocean) {
+ OceanModifierData *omd = (OceanModifierData *)md;
omd->oceancache = NULL;
omd->ocean = NULL;
omd->refresh = (MOD_OCEAN_REFRESH_ADD|MOD_OCEAN_REFRESH_RESET|MOD_OCEAN_REFRESH_SIM);
}
- else if (md->type==eModifierType_Warp) {
- WarpModifierData *tmd = (WarpModifierData *) md;
-
+ else if (md->type == eModifierType_Warp) {
+ WarpModifierData *tmd = (WarpModifierData *)md;
+
tmd->curfalloff= newdataadr(fd, tmd->curfalloff);
if (tmd->curfalloff)
direct_link_curvemapping(fd, tmd->curfalloff);
}
- else if (md->type==eModifierType_WeightVGEdit) {
- WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
-
+ else if (md->type == eModifierType_WeightVGEdit) {
+ WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
+
wmd->cmap_curve = newdataadr(fd, wmd->cmap_curve);
if (wmd->cmap_curve)
direct_link_curvemapping(fd, wmd->cmap_curve);
@@ -4610,30 +4604,30 @@ static void direct_link_object(FileData *fd, Object *ob)
/* weak weak... this was only meant as draw flag, now is used in give_base_to_objects too */
ob->flag &= ~OB_FROMGROUP;
-
+
/* loading saved files with editmode enabled works, but for undo we like
* to stay in object mode during undo presses so keep editmode disabled */
if (fd->memfile)
- ob->mode &= ~(OB_MODE_EDIT|OB_MODE_PARTICLE_EDIT);
+ ob->mode &= ~(OB_MODE_EDIT | OB_MODE_PARTICLE_EDIT);
- ob->disp.first=ob->disp.last= NULL;
+ ob->disp.first = ob->disp.last = NULL;
- ob->adt= newdataadr(fd, ob->adt);
+ ob->adt = newdataadr(fd, ob->adt);
direct_link_animdata(fd, ob->adt);
- ob->pose= newdataadr(fd, ob->pose);
+ ob->pose = newdataadr(fd, ob->pose);
direct_link_pose(fd, ob->pose);
- ob->mpath= newdataadr(fd, ob->mpath);
+ ob->mpath = newdataadr(fd, ob->mpath);
if (ob->mpath)
direct_link_motionpath(fd, ob->mpath);
-
+
link_list(fd, &ob->defbase);
// XXX depreceated - old animation system <<<
direct_link_nlastrips(fd, &ob->nlastrips);
link_list(fd, &ob->constraintChannels);
// >>> XXX depreceated - old animation system
-
+
ob->mat= newdataadr(fd, ob->mat);
test_pointer_array(fd, (void **)&ob->mat);
ob->matbits= newdataadr(fd, ob->matbits);
@@ -4644,14 +4638,14 @@ static void direct_link_object(FileData *fd, Object *ob)
link_list(fd, &ob->effect);
paf= ob->effect.first;
while (paf) {
- if (paf->type==EFF_PARTICLE) {
- paf->keys= NULL;
+ if (paf->type == EFF_PARTICLE) {
+ paf->keys = NULL;
}
- if (paf->type==EFF_WAVE) {
+ if (paf->type == EFF_WAVE) {
WaveEff *wav = (WaveEff*) paf;
PartEff *next = paf->next;
WaveModifierData *wmd = (WaveModifierData*) modifier_new(eModifierType_Wave);
-
+
wmd->damp = wav->damp;
wmd->flag = wav->flag;
wmd->height = wav->height;
@@ -4662,48 +4656,48 @@ static void direct_link_object(FileData *fd, Object *ob)
wmd->starty = wav->startx;
wmd->timeoffs = wav->timeoffs;
wmd->width = wav->width;
-
+
BLI_addtail(&ob->modifiers, wmd);
-
+
BLI_remlink(&ob->effect, paf);
MEM_freeN(paf);
-
+
paf = next;
continue;
}
- if (paf->type==EFF_BUILD) {
+ if (paf->type == EFF_BUILD) {
BuildEff *baf = (BuildEff*) paf;
PartEff *next = paf->next;
BuildModifierData *bmd = (BuildModifierData*) modifier_new(eModifierType_Build);
-
+
bmd->start = baf->sfra;
bmd->length = baf->len;
bmd->randomize = 0;
bmd->seed = 1;
-
+
BLI_addtail(&ob->modifiers, bmd);
-
+
BLI_remlink(&ob->effect, paf);
MEM_freeN(paf);
-
+
paf = next;
continue;
}
- paf= paf->next;
+ paf = paf->next;
}
-
+
ob->pd= newdataadr(fd, ob->pd);
direct_link_partdeflect(ob->pd);
ob->soft= newdataadr(fd, ob->soft);
if (ob->soft) {
- SoftBody *sb= ob->soft;
+ SoftBody *sb = ob->soft;
- sb->bpoint= NULL; // init pointers so it gets rebuilt nicely
- sb->bspring= NULL;
- sb->scratch= NULL;
+ sb->bpoint = NULL; // init pointers so it gets rebuilt nicely
+ sb->bspring = NULL;
+ sb->scratch = NULL;
/* although not used anymore */
/* still have to be loaded to be compatible with old files */
- sb->keys= newdataadr(fd, sb->keys);
+ sb->keys = newdataadr(fd, sb->keys);
test_pointer_array(fd, (void **)&sb->keys);
if (sb->keys) {
int a;
@@ -4711,34 +4705,31 @@ static void direct_link_object(FileData *fd, Object *ob)
sb->keys[a]= newdataadr(fd, sb->keys[a]);
}
}
-
+
sb->effector_weights = newdataadr(fd, sb->effector_weights);
if (!sb->effector_weights)
sb->effector_weights = BKE_add_effector_weights(NULL);
-
+
direct_link_pointcache_list(fd, &sb->ptcaches, &sb->pointcache, 0);
}
- ob->bsoft= newdataadr(fd, ob->bsoft);
+ ob->bsoft = newdataadr(fd, ob->bsoft);
ob->fluidsimSettings= newdataadr(fd, ob->fluidsimSettings); /* NT */
link_list(fd, &ob->particlesystem);
direct_link_particlesystems(fd, &ob->particlesystem);
link_list(fd, &ob->prop);
- prop= ob->prop.first;
- while (prop) {
- prop->poin= newdataadr(fd, prop->poin);
- if (prop->poin==NULL) prop->poin= &prop->data;
- prop= prop->next;
+ for (prop = ob->prop.first; prop; prop = prop->next) {
+ prop->poin = newdataadr(fd, prop->poin);
+ if (prop->poin == NULL)
+ prop->poin = &prop->data;
}
link_list(fd, &ob->sensors);
- sens= ob->sensors.first;
- while (sens) {
- sens->data= newdataadr(fd, sens->data);
- sens->links= newdataadr(fd, sens->links);
+ for (sens = ob->sensors.first; sens; sens = sens->next) {
+ sens->data = newdataadr(fd, sens->data);
+ sens->links = newdataadr(fd, sens->links);
test_pointer_array(fd, (void **)&sens->links);
- sens= sens->next;
}
direct_link_constraints(fd, &ob->constraints);
@@ -4751,28 +4742,24 @@ static void direct_link_object(FileData *fd, Object *ob)
else if (!ob->state) {
ob->state = 1;
}
- cont= ob->controllers.first;
- while (cont) {
- cont->data= newdataadr(fd, cont->data);
- cont->links= newdataadr(fd, cont->links);
+ for (cont = ob->controllers.first; cont; cont = cont->next) {
+ cont->data = newdataadr(fd, cont->data);
+ cont->links = newdataadr(fd, cont->links);
test_pointer_array(fd, (void **)&cont->links);
if (cont->state_mask == 0)
cont->state_mask = 1;
- cont= cont->next;
}
link_glob_list(fd, &ob->actuators);
- act= ob->actuators.first;
- while (act) {
- act->data= newdataadr(fd, act->data);
- act= act->next;
+ for (act = ob->actuators.first; act; act = act->next) {
+ act->data = newdataadr(fd, act->data);
}
link_list(fd, &ob->hooks);
while (ob->hooks.first) {
ObHook *hook = ob->hooks.first;
- HookModifierData *hmd = (HookModifierData*) modifier_new(eModifierType_Hook);
-
+ HookModifierData *hmd = (HookModifierData *)modifier_new(eModifierType_Hook);
+
hook->indexar= newdataadr(fd, hook->indexar);
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
int a;
@@ -4780,11 +4767,11 @@ static void direct_link_object(FileData *fd, Object *ob)
SWITCH_INT(hook->indexar[a]);
}
}
-
- /* Do conversion here because if we have loaded
- * a hook we need to make sure it gets converted
- * and freed, regardless of version.
- */
+
+ /* Do conversion here because if we have loaded
+ * a hook we need to make sure it gets converted
+ * and freed, regardless of version.
+ */
copy_v3_v3(hmd->cent, hook->cent);
hmd->falloff = hook->falloff;
hmd->force = hook->force;
@@ -4792,27 +4779,27 @@ static void direct_link_object(FileData *fd, Object *ob)
hmd->object = hook->parent;
memcpy(hmd->parentinv, hook->parentinv, sizeof(hmd->parentinv));
hmd->totindex = hook->totindex;
-
+
BLI_addhead(&ob->modifiers, hmd);
BLI_remlink(&ob->hooks, hook);
modifier_unique_name(&ob->modifiers, (ModifierData*)hmd);
-
+
MEM_freeN(hook);
}
- ob->customdata_mask= 0;
- ob->bb= NULL;
- ob->derivedDeform= NULL;
- ob->derivedFinal= NULL;
- ob->gpulamp.first= ob->gpulamp.last= NULL;
+ ob->customdata_mask = 0;
+ ob->bb = NULL;
+ ob->derivedDeform = NULL;
+ ob->derivedFinal = NULL;
+ ob->gpulamp.first= ob->gpulamp.last = NULL;
link_list(fd, &ob->pc_ids);
/* in case this value changes in future, clamp else we get undefined behavior */
CLAMP(ob->rotmode, ROT_MODE_MIN, ROT_MODE_MAX);
if (ob->sculpt) {
- ob->sculpt= MEM_callocN(sizeof(SculptSession), "reload sculpt session");
+ ob->sculpt = MEM_callocN(sizeof(SculptSession), "reload sculpt session");
}
}
@@ -4823,16 +4810,17 @@ static void composite_patch(bNodeTree *ntree, Scene *scene)
{
bNode *node;
- for (node= ntree->nodes.first; node; node= node->next)
+ for (node= ntree->nodes.first; node; node= node->next) {
if (node->id==NULL && ELEM4(node->type, CMP_NODE_R_LAYERS, CMP_NODE_COMPOSITE, CMP_NODE_DEFOCUS, CMP_NODE_OUTPUT_FILE))
- node->id= &scene->id;
+ node->id = &scene->id;
+ }
}
static void link_paint(FileData *fd, Scene *sce, Paint *p)
{
if (p) {
- p->brush= newlibadr_us(fd, sce->id.lib, p->brush);
- p->paint_cursor= NULL;
+ p->brush = newlibadr_us(fd, sce->id.lib, p->brush);
+ p->paint_cursor = NULL;
}
}
@@ -4845,7 +4833,7 @@ static void lib_link_scene(FileData *fd, Main *main)
FreestyleLineSet *fls;
TimeMarker *marker;
- sce= main->scene.first;
+ sce = main->scene.first;
while (sce) {
if (sce->id.flag & LIB_NEEDLINK) {
/* Link ID Properties -- and copy this comment EXACTLY for easy finding
@@ -4855,10 +4843,10 @@ static void lib_link_scene(FileData *fd, Main *main)
lib_link_keyingsets(fd, &sce->id, &sce->keyingsets);
- sce->camera= newlibadr(fd, sce->id.lib, sce->camera);
- sce->world= newlibadr_us(fd, sce->id.lib, sce->world);
- sce->set= newlibadr(fd, sce->id.lib, sce->set);
- sce->gpd= newlibadr_us(fd, sce->id.lib, sce->gpd);
+ sce->camera = newlibadr(fd, sce->id.lib, sce->camera);
+ sce->world = newlibadr_us(fd, sce->id.lib, sce->world);
+ sce->set = newlibadr(fd, sce->id.lib, sce->set);
+ sce->gpd = newlibadr_us(fd, sce->id.lib, sce->gpd);
link_paint(fd, sce, &sce->toolsettings->sculpt->paint);
link_paint(fd, sce, &sce->toolsettings->vpaint->paint);
@@ -4866,29 +4854,29 @@ static void lib_link_scene(FileData *fd, Main *main)
link_paint(fd, sce, &sce->toolsettings->imapaint.paint);
link_paint(fd, sce, &sce->toolsettings->uvsculpt->paint);
sce->toolsettings->skgen_template = newlibadr(fd, sce->id.lib, sce->toolsettings->skgen_template);
-
- for (base= sce->base.first; base; base= next) {
- next= base->next;
-
+
+ for (base = sce->base.first; base; base = next) {
+ next = base->next;
+
/* base->object= newlibadr_us(fd, sce->id.lib, base->object); */
- base->object= newlibadr_us(fd, sce->id.lib, base->object);
+ base->object = newlibadr_us(fd, sce->id.lib, base->object);
- if (base->object==NULL) {
+ if (base->object == NULL) {
BKE_reportf_wrap(fd->reports, RPT_ERROR,
- "LIB ERROR: Object lost from scene:'%s\'\n",
- sce->id.name+2);
+ "LIB ERROR: Object lost from scene:'%s\'",
+ sce->id.name + 2);
BLI_remlink(&sce->base, base);
- if (base==sce->basact) sce->basact= NULL;
+ if (base == sce->basact) sce->basact = NULL;
MEM_freeN(base);
}
}
-
+
SEQ_BEGIN (sce->ed, seq)
{
- if (seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo);
+ if (seq->ipo) seq->ipo = newlibadr_us(fd, sce->id.lib, seq->ipo);
seq->scene_sound = NULL;
if (seq->scene) {
- seq->scene= newlibadr(fd, sce->id.lib, seq->scene);
+ seq->scene = newlibadr(fd, sce->id.lib, seq->scene);
if (seq->scene) {
seq->scene_sound = sound_scene_add_scene_sound_defaults(sce, seq);
}
@@ -4897,32 +4885,32 @@ static void lib_link_scene(FileData *fd, Main *main)
seq->clip = newlibadr(fd, sce->id.lib, seq->clip);
seq->clip->id.us++;
}
- if (seq->scene_camera) seq->scene_camera= newlibadr(fd, sce->id.lib, seq->scene_camera);
+ if (seq->scene_camera) seq->scene_camera = newlibadr(fd, sce->id.lib, seq->scene_camera);
if (seq->sound) {
seq->scene_sound = NULL;
if (seq->type == SEQ_HD_SOUND)
seq->type = SEQ_SOUND;
else
- seq->sound= newlibadr(fd, sce->id.lib, seq->sound);
+ seq->sound = newlibadr(fd, sce->id.lib, seq->sound);
if (seq->sound) {
seq->sound->id.us++;
seq->scene_sound = sound_add_scene_sound_defaults(sce, seq);
}
}
- seq->anim= NULL;
+ seq->anim = NULL;
}
SEQ_END
#ifdef DURIAN_CAMERA_SWITCH
- for (marker= sce->markers.first; marker; marker= marker->next) {
+ for (marker = sce->markers.first; marker; marker = marker->next) {
if (marker->camera) {
- marker->camera= newlibadr(fd, sce->id.lib, marker->camera);
+ marker->camera = newlibadr(fd, sce->id.lib, marker->camera);
}
}
#else
(void)marker;
#endif
-
+
seq_update_muting(sce->ed);
seq_update_sound_bounds_all(sce);
@@ -4932,41 +4920,42 @@ static void lib_link_scene(FileData *fd, Main *main)
}
for (srl= sce->r.layers.first; srl; srl= srl->next) {
- srl->mat_override= newlibadr_us(fd, sce->id.lib, srl->mat_override);
- srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override);
+ srl->mat_override = newlibadr_us(fd, sce->id.lib, srl->mat_override);
+ srl->light_override = newlibadr_us(fd, sce->id.lib, srl->light_override);
for(fls=srl->freestyleConfig.linesets.first; fls; fls= fls->next) {
fls->linestyle= newlibadr_us(fd, sce->id.lib, fls->linestyle);
fls->group= newlibadr_us(fd, sce->id.lib, fls->group);
}
}
/*Game Settings: Dome Warp Text*/
- sce->gm.dome.warptext= newlibadr(fd, sce->id.lib, sce->gm.dome.warptext);
-
+ sce->gm.dome.warptext = newlibadr(fd, sce->id.lib, sce->gm.dome.warptext);
+
/* Motion Tracking */
- sce->clip= newlibadr_us(fd, sce->id.lib, sce->clip);
-
+ sce->clip = newlibadr_us(fd, sce->id.lib, sce->clip);
+
sce->id.flag -= LIB_NEEDLINK;
}
-
- sce= sce->id.next;
+
+ sce = sce->id.next;
}
}
static void link_recurs_seq(FileData *fd, ListBase *lb)
{
Sequence *seq;
-
+
link_list(fd, lb);
-
- for (seq=lb->first; seq; seq=seq->next)
+
+ for (seq = lb->first; seq; seq = seq->next) {
if (seq->seqbase.first)
link_recurs_seq(fd, &seq->seqbase);
+ }
}
static void direct_link_paint(FileData *fd, Paint **paint)
{
/* TODO. is this needed */
- (*paint)= newdataadr(fd, (*paint));
+ (*paint) = newdataadr(fd, (*paint));
}
static void direct_link_scene(FileData *fd, Scene *sce)
@@ -4975,29 +4964,29 @@ static void direct_link_scene(FileData *fd, Scene *sce)
Sequence *seq;
MetaStack *ms;
SceneRenderLayer *srl;
-
+
sce->theDag = NULL;
sce->dagisvalid = 0;
- sce->obedit= NULL;
- sce->stats= NULL;
- sce->fps_info= NULL;
- sce->customdata_mask_modal= 0;
+ sce->obedit = NULL;
+ sce->stats = NULL;
+ sce->fps_info = NULL;
+ sce->customdata_mask_modal = 0;
sce->lay_updated = 0;
-
+
sound_create_scene(sce);
-
+
/* set users to one by default, not in lib-link, this will increase it for compo nodes */
- sce->id.us= 1;
-
+ sce->id.us = 1;
+
link_list(fd, &(sce->base));
- sce->adt= newdataadr(fd, sce->adt);
+ sce->adt = newdataadr(fd, sce->adt);
direct_link_animdata(fd, sce->adt);
link_list(fd, &sce->keyingsets);
direct_link_keyingsets(fd, &sce->keyingsets);
- sce->basact= newdataadr(fd, sce->basact);
+ sce->basact = newdataadr(fd, sce->basact);
sce->toolsettings= newdataadr(fd, sce->toolsettings);
if (sce->toolsettings) {
@@ -5005,44 +4994,44 @@ static void direct_link_scene(FileData *fd, Scene *sce)
direct_link_paint(fd, (Paint**)&sce->toolsettings->vpaint);
direct_link_paint(fd, (Paint**)&sce->toolsettings->wpaint);
direct_link_paint(fd, (Paint**)&sce->toolsettings->uvsculpt);
-
- sce->toolsettings->imapaint.paintcursor= NULL;
- sce->toolsettings->particle.paintcursor= NULL;
+
+ sce->toolsettings->imapaint.paintcursor = NULL;
+ sce->toolsettings->particle.paintcursor = NULL;
}
if (sce->ed) {
ListBase *old_seqbasep= &((Editing *)sce->ed)->seqbase;
- ed= sce->ed= newdataadr(fd, sce->ed);
-
- ed->act_seq= newdataadr(fd, ed->act_seq);
-
+ ed= sce->ed = newdataadr(fd, sce->ed);
+
+ ed->act_seq = newdataadr(fd, ed->act_seq);
+
/* recursive link sequences, lb will be correctly initialized */
link_recurs_seq(fd, &ed->seqbase);
-
+
SEQ_BEGIN (ed, seq)
{
seq->seq1= newdataadr(fd, seq->seq1);
seq->seq2= newdataadr(fd, seq->seq2);
seq->seq3= newdataadr(fd, seq->seq3);
/* a patch: after introduction of effects with 3 input strips */
- if (seq->seq3==NULL) seq->seq3= seq->seq2;
-
- seq->plugin= newdataadr(fd, seq->plugin);
- seq->effectdata= newdataadr(fd, seq->effectdata);
+ if (seq->seq3 == NULL) seq->seq3 = seq->seq2;
+
+ seq->plugin = newdataadr(fd, seq->plugin);
+ seq->effectdata = newdataadr(fd, seq->effectdata);
if (seq->type & SEQ_EFFECT)
seq->flag |= SEQ_EFFECT_NOT_LOADED;
-
+
if (seq->type == SEQ_SPEED) {
- SpeedControlVars *s= seq->effectdata;
- s->frameMap= NULL;
+ SpeedControlVars *s = seq->effectdata;
+ s->frameMap = NULL;
}
-
- seq->strip= newdataadr(fd, seq->strip);
+
+ seq->strip = newdataadr(fd, seq->strip);
if (seq->strip && seq->strip->done==0) {
- seq->strip->done= 1;
-
+ seq->strip->done = 1;
+
if (seq->type == SEQ_IMAGE ||
seq->type == SEQ_MOVIE ||
seq->type == SEQ_RAM_SOUND ||
@@ -5095,35 +5084,38 @@ static void direct_link_scene(FileData *fd, Scene *sce)
char *poin;
intptr_t offset;
- offset= ((intptr_t)&(temp.seqbase)) - ((intptr_t)&temp);
+ offset = ((intptr_t)&(temp.seqbase)) - ((intptr_t)&temp);
/* root pointer */
if (ed->seqbasep == old_seqbasep) {
- ed->seqbasep= &ed->seqbase;
+ ed->seqbasep = &ed->seqbase;
}
else {
-
- poin= (char *)ed->seqbasep;
+ poin = (char *)ed->seqbasep;
poin -= offset;
- poin= newdataadr(fd, poin);
- if (poin) ed->seqbasep= (ListBase *)(poin+offset);
- else ed->seqbasep= &ed->seqbase;
+ poin = newdataadr(fd, poin);
+ if (poin)
+ ed->seqbasep = (ListBase *)(poin+offset);
+ else
+ ed->seqbasep = &ed->seqbase;
}
/* stack */
link_list(fd, &(ed->metastack));
- for (ms= ed->metastack.first; ms; ms= ms->next) {
- ms->parseq= newdataadr(fd, ms->parseq);
+ for (ms = ed->metastack.first; ms; ms= ms->next) {
+ ms->parseq = newdataadr(fd, ms->parseq);
if (ms->oldbasep == old_seqbasep)
ms->oldbasep= &ed->seqbase;
else {
- poin= (char *)ms->oldbasep;
+ poin = (char *)ms->oldbasep;
poin -= offset;
- poin= newdataadr(fd, poin);
- if (poin) ms->oldbasep= (ListBase *)(poin+offset);
- else ms->oldbasep= &ed->seqbase;
+ poin = newdataadr(fd, poin);
+ if (poin)
+ ms->oldbasep = (ListBase *)(poin+offset);
+ else
+ ms->oldbasep = &ed->seqbase;
}
}
}
@@ -5140,27 +5132,25 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->r.qtcodecdata->cdParms = newdataadr(fd, sce->r.qtcodecdata->cdParms);
}
if (sce->r.ffcodecdata.properties) {
- sce->r.ffcodecdata.properties = newdataadr(
- fd, sce->r.ffcodecdata.properties);
+ sce->r.ffcodecdata.properties = newdataadr(fd, sce->r.ffcodecdata.properties);
if (sce->r.ffcodecdata.properties) {
- IDP_DirectLinkProperty(
- sce->r.ffcodecdata.properties,
+ IDP_DirectLinkProperty(sce->r.ffcodecdata.properties,
(fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
}
}
-
+
link_list(fd, &(sce->markers));
link_list(fd, &(sce->transform_spaces));
link_list(fd, &(sce->r.layers));
- for(srl= sce->r.layers.first; srl; srl= srl->next) {
+ for(srl = sce->r.layers.first; srl; srl = srl->next) {
link_list(fd, &(srl->freestyleConfig.modules));
}
- for(srl= sce->r.layers.first; srl; srl= srl->next) {
+ for(srl = sce->r.layers.first; srl; srl = srl->next) {
link_list(fd, &(srl->freestyleConfig.linesets));
}
- sce->nodetree= newdataadr(fd, sce->nodetree);
+ sce->nodetree = newdataadr(fd, sce->nodetree);
if (sce->nodetree)
direct_link_nodetree(fd, sce->nodetree);
}
@@ -5171,44 +5161,44 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
{
wmWindow *win;
- wm->id.us= 1;
- link_list(fd, &(wm->windows));
+ wm->id.us = 1;
+ link_list(fd, &wm->windows);
- for (win= wm->windows.first; win; win= win->next) {
- win->ghostwin= NULL;
- win->eventstate= NULL;
- win->curswin= NULL;
- win->tweak= NULL;
-
- win->queue.first= win->queue.last= NULL;
- win->handlers.first= win->handlers.last= NULL;
- win->modalhandlers.first= win->modalhandlers.last= NULL;
- win->subwindows.first= win->subwindows.last= NULL;
- win->gesture.first= win->gesture.last= NULL;
-
- win->drawdata= NULL;
- win->drawmethod= -1;
- win->drawfail= 0;
+ for (win = wm->windows.first; win; win = win->next) {
+ win->ghostwin = NULL;
+ win->eventstate = NULL;
+ win->curswin = NULL;
+ win->tweak = NULL;
+
+ win->queue.first = win->queue.last = NULL;
+ win->handlers.first = win->handlers.last = NULL;
+ win->modalhandlers.first = win->modalhandlers.last = NULL;
+ win->subwindows.first = win->subwindows.last = NULL;
+ win->gesture.first = win->gesture.last = NULL;
+
+ win->drawdata = NULL;
+ win->drawmethod = -1;
+ win->drawfail = 0;
}
- wm->timers.first= wm->timers.last= NULL;
- wm->operators.first= wm->operators.last= NULL;
- wm->paintcursors.first= wm->paintcursors.last= NULL;
- wm->queue.first= wm->queue.last= NULL;
+ wm->timers.first = wm->timers.last = NULL;
+ wm->operators.first = wm->operators.last = NULL;
+ wm->paintcursors.first = wm->paintcursors.last = NULL;
+ wm->queue.first = wm->queue.last = NULL;
BKE_reports_init(&wm->reports, RPT_STORE);
-
- wm->keyconfigs.first= wm->keyconfigs.last= NULL;
- wm->defaultconf= NULL;
- wm->addonconf= NULL;
- wm->userconf= NULL;
-
- wm->jobs.first= wm->jobs.last= NULL;
- wm->drags.first= wm->drags.last= NULL;
- wm->windrawable= NULL;
- wm->winactive= NULL;
- wm->initialized= 0;
- wm->op_undo_depth= 0;
+ wm->keyconfigs.first = wm->keyconfigs.last = NULL;
+ wm->defaultconf = NULL;
+ wm->addonconf = NULL;
+ wm->userconf = NULL;
+
+ wm->jobs.first = wm->jobs.last = NULL;
+ wm->drags.first = wm->drags.last = NULL;
+
+ wm->windrawable = NULL;
+ wm->winactive = NULL;
+ wm->initialized = 0;
+ wm->op_undo_depth = 0;
}
static void lib_link_windowmanager(FileData *fd, Main *main)
@@ -5216,11 +5206,11 @@ static void lib_link_windowmanager(FileData *fd, Main *main)
wmWindowManager *wm;
wmWindow *win;
- for (wm= main->wm.first; wm; wm= wm->id.next) {
+ for (wm = main->wm.first; wm; wm = wm->id.next) {
if (wm->id.flag & LIB_NEEDLINK) {
- for (win= wm->windows.first; win; win= win->next)
- win->screen= newlibadr(fd, NULL, win->screen);
-
+ for (win = wm->windows.first; win; win = win->next)
+ win->screen = newlibadr(fd, NULL, win->screen);
+
wm->id.flag -= LIB_NEEDLINK;
}
}
@@ -5242,17 +5232,17 @@ static void direct_link_gpencil(FileData *fd, bGPdata *gpd)
/* relink layers */
link_list(fd, &gpd->layers);
- for (gpl= gpd->layers.first; gpl; gpl= gpl->next) {
+ for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
/* relink frames */
link_list(fd, &gpl->frames);
- gpl->actframe= newdataadr(fd, gpl->actframe);
+ gpl->actframe = newdataadr(fd, gpl->actframe);
- for (gpf= gpl->frames.first; gpf; gpf= gpf->next) {
+ for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
/* relink strokes (and their points) */
link_list(fd, &gpf->strokes);
- for (gps= gpf->strokes.first; gps; gps= gps->next) {
- gps->points= newdataadr(fd, gps->points);
+ for (gps = gpf->strokes.first; gps; gps = gps->next) {
+ gps->points = newdataadr(fd, gps->points);
}
}
}
@@ -5266,19 +5256,19 @@ static void butspace_version_132(SpaceButs *buts)
buts->v2d.tot.ymin = 0.0f;
buts->v2d.tot.xmax = 1279.0f;
buts->v2d.tot.ymax = 228.0f;
-
- buts->v2d.min[0]= 256.0f;
- buts->v2d.min[1]= 42.0f;
-
- buts->v2d.max[0]= 2048.0f;
- buts->v2d.max[1]= 450.0f;
-
- buts->v2d.minzoom= 0.5f;
- buts->v2d.maxzoom= 1.21f;
-
- buts->v2d.scroll= 0;
- buts->v2d.keepzoom= 1;
- buts->v2d.keeptot= 1;
+
+ buts->v2d.min[0] = 256.0f;
+ buts->v2d.min[1] = 42.0f;
+
+ buts->v2d.max[0] = 2048.0f;
+ buts->v2d.max[1] = 450.0f;
+
+ buts->v2d.minzoom = 0.5f;
+ buts->v2d.maxzoom = 1.21f;
+
+ buts->v2d.scroll = 0;
+ buts->v2d.keepzoom = 1;
+ buts->v2d.keeptot = 1;
}
/* note: file read without screens option G_FILE_NO_UI;
@@ -5287,22 +5277,22 @@ static void lib_link_screen(FileData *fd, Main *main)
{
bScreen *sc;
ScrArea *sa;
-
- for (sc= main->screen.first; sc; sc= sc->id.next) {
+
+ for (sc = main->screen.first; sc; sc = sc->id.next) {
if (sc->id.flag & LIB_NEEDLINK) {
- sc->id.us= 1;
+ sc->id.us = 1;
sc->scene= newlibadr(fd, sc->id.lib, sc->scene);
- sc->animtimer= NULL; /* saved in rare cases */
+ sc->animtimer = NULL; /* saved in rare cases */
sa= sc->areabase.first;
while (sa) {
SpaceLink *sl;
- sa->full= newlibadr(fd, sc->id.lib, sa->full);
+ sa->full = newlibadr(fd, sc->id.lib, sa->full);
- for (sl= sa->spacedata.first; sl; sl= sl->next) {
- if (sl->spacetype==SPACE_VIEW3D) {
- View3D *v3d= (View3D*) sl;
+ for (sl = sa->spacedata.first; sl; sl= sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D*) sl;
BGpic *bgpic = NULL;
v3d->camera= newlibadr(fd, sc->id.lib, v3d->camera);
@@ -5310,140 +5300,138 @@ static void lib_link_screen(FileData *fd, Main *main)
/* should be do_versions but not easy adding into the listbase */
if (v3d->bgpic) {
- v3d->bgpic= newlibadr(fd, sc->id.lib, v3d->bgpic);
+ v3d->bgpic = newlibadr(fd, sc->id.lib, v3d->bgpic);
BLI_addtail(&v3d->bgpicbase, bgpic);
- v3d->bgpic= NULL;
+ v3d->bgpic = NULL;
}
-
- for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) {
- bgpic->ima= newlibadr_us(fd, sc->id.lib, bgpic->ima);
- bgpic->clip= newlibadr_us(fd, sc->id.lib, bgpic->clip);
+
+ for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
+ bgpic->ima = newlibadr_us(fd, sc->id.lib, bgpic->ima);
+ bgpic->clip = newlibadr_us(fd, sc->id.lib, bgpic->clip);
}
if (v3d->localvd) {
- v3d->localvd->camera= newlibadr(fd, sc->id.lib, v3d->localvd->camera);
+ v3d->localvd->camera = newlibadr(fd, sc->id.lib, v3d->localvd->camera);
}
}
- else if (sl->spacetype==SPACE_IPO) {
- SpaceIpo *sipo= (SpaceIpo *)sl;
- bDopeSheet *ads= sipo->ads;
+ else if (sl->spacetype == SPACE_IPO) {
+ SpaceIpo *sipo = (SpaceIpo *)sl;
+ bDopeSheet *ads = sipo->ads;
if (ads) {
- ads->source= newlibadr(fd, sc->id.lib, ads->source);
- ads->filter_grp= newlibadr(fd, sc->id.lib, ads->filter_grp);
+ ads->source = newlibadr(fd, sc->id.lib, ads->source);
+ ads->filter_grp = newlibadr(fd, sc->id.lib, ads->filter_grp);
}
}
- else if (sl->spacetype==SPACE_BUTS) {
- SpaceButs *sbuts= (SpaceButs *)sl;
- sbuts->pinid= newlibadr(fd, sc->id.lib, sbuts->pinid);
- sbuts->mainbo= sbuts->mainb;
- sbuts->mainbuser= sbuts->mainb;
- if (main->versionfile<132)
+ else if (sl->spacetype == SPACE_BUTS) {
+ SpaceButs *sbuts = (SpaceButs *)sl;
+ sbuts->pinid = newlibadr(fd, sc->id.lib, sbuts->pinid);
+ sbuts->mainbo = sbuts->mainb;
+ sbuts->mainbuser = sbuts->mainb;
+ if (main->versionfile < 132)
butspace_version_132(sbuts);
}
- else if (sl->spacetype==SPACE_FILE) {
- SpaceFile *sfile= (SpaceFile *)sl;
- sfile->files= NULL;
- sfile->op= NULL;
- sfile->layout= NULL;
- sfile->folders_prev= NULL;
- sfile->folders_next= NULL;
+ else if (sl->spacetype == SPACE_FILE) {
+ SpaceFile *sfile = (SpaceFile *)sl;
+ sfile->files = NULL;
+ sfile->op = NULL;
+ sfile->layout = NULL;
+ sfile->folders_prev = NULL;
+ sfile->folders_next = NULL;
}
- else if (sl->spacetype==SPACE_ACTION) {
- SpaceAction *saction= (SpaceAction *)sl;
- bDopeSheet *ads= &saction->ads;
+ else if (sl->spacetype == SPACE_ACTION) {
+ SpaceAction *saction = (SpaceAction *)sl;
+ bDopeSheet *ads = &saction->ads;
if (ads) {
- ads->source= newlibadr(fd, sc->id.lib, ads->source);
- ads->filter_grp= newlibadr(fd, sc->id.lib, ads->filter_grp);
+ ads->source = newlibadr(fd, sc->id.lib, ads->source);
+ ads->filter_grp = newlibadr(fd, sc->id.lib, ads->filter_grp);
}
saction->action = newlibadr(fd, sc->id.lib, saction->action);
}
- else if (sl->spacetype==SPACE_IMAGE) {
- SpaceImage *sima= (SpaceImage *)sl;
-
- sima->image= newlibadr_us(fd, sc->id.lib, sima->image);
+ else if (sl->spacetype == SPACE_IMAGE) {
+ SpaceImage *sima = (SpaceImage *)sl;
+
+ sima->image = newlibadr_us(fd, sc->id.lib, sima->image);
/* NOTE: pre-2.5, this was local data not lib data, but now we need this as lib data
* so fingers crossed this works fine!
*/
- sima->gpd= newlibadr_us(fd, sc->id.lib, sima->gpd);
+ sima->gpd = newlibadr_us(fd, sc->id.lib, sima->gpd);
}
- else if (sl->spacetype==SPACE_NLA) {
+ else if (sl->spacetype == SPACE_NLA) {
SpaceNla *snla= (SpaceNla *)sl;
bDopeSheet *ads= snla->ads;
if (ads) {
- ads->source= newlibadr(fd, sc->id.lib, ads->source);
- ads->filter_grp= newlibadr(fd, sc->id.lib, ads->filter_grp);
+ ads->source = newlibadr(fd, sc->id.lib, ads->source);
+ ads->filter_grp = newlibadr(fd, sc->id.lib, ads->filter_grp);
}
}
- else if (sl->spacetype==SPACE_TEXT) {
+ else if (sl->spacetype == SPACE_TEXT) {
SpaceText *st= (SpaceText *)sl;
-
+
st->text= newlibadr(fd, sc->id.lib, st->text);
st->drawcache= NULL;
-
}
- else if (sl->spacetype==SPACE_SCRIPT) {
-
- SpaceScript *scpt= (SpaceScript *)sl;
+ else if (sl->spacetype == SPACE_SCRIPT) {
+ SpaceScript *scpt = (SpaceScript *)sl;
/*scpt->script = NULL; - 2.45 set to null, better re-run the script */
if (scpt->script) {
- scpt->script= newlibadr(fd, sc->id.lib, scpt->script);
+ scpt->script = newlibadr(fd, sc->id.lib, scpt->script);
if (scpt->script) {
SCRIPT_SET_NULL(scpt->script);
}
}
}
- else if (sl->spacetype==SPACE_OUTLINER) {
+ else if (sl->spacetype == SPACE_OUTLINER) {
SpaceOops *so= (SpaceOops *)sl;
TreeStoreElem *tselem;
int a;
-
- so->tree.first= so->tree.last= NULL;
- so->search_tse.id= newlibadr(fd, NULL, so->search_tse.id);
+
+ so->tree.first = so->tree.last= NULL;
+ so->search_tse.id = newlibadr(fd, NULL, so->search_tse.id);
if (so->treestore) {
- tselem= so->treestore->data;
- for (a=0; a<so->treestore->usedelem; a++, tselem++) {
- tselem->id= newlibadr(fd, NULL, tselem->id);
+ tselem = so->treestore->data;
+ for (a=0; a < so->treestore->usedelem; a++, tselem++) {
+ tselem->id = newlibadr(fd, NULL, tselem->id);
}
}
}
- else if (sl->spacetype==SPACE_NODE) {
- SpaceNode *snode= (SpaceNode *)sl;
+ else if (sl->spacetype == SPACE_NODE) {
+ SpaceNode *snode = (SpaceNode *)sl;
- snode->id= newlibadr(fd, sc->id.lib, snode->id);
- snode->edittree= NULL;
+ snode->id = newlibadr(fd, sc->id.lib, snode->id);
+ snode->edittree = NULL;
if (ELEM3(snode->treetype, NTREE_COMPOSIT, NTREE_SHADER, NTREE_TEXTURE)) {
/* internal data, a bit patchy */
- snode->nodetree= NULL;
+ snode->nodetree = NULL;
if (snode->id) {
if (GS(snode->id->name)==ID_MA)
- snode->nodetree= ((Material *)snode->id)->nodetree;
+ snode->nodetree = ((Material *)snode->id)->nodetree;
else if (GS(snode->id->name)==ID_WO)
- snode->nodetree= ((World *)snode->id)->nodetree;
+ snode->nodetree = ((World *)snode->id)->nodetree;
else if (GS(snode->id->name)==ID_LA)
- snode->nodetree= ((Lamp *)snode->id)->nodetree;
+ snode->nodetree = ((Lamp *)snode->id)->nodetree;
else if (GS(snode->id->name)==ID_SCE)
- snode->nodetree= ((Scene *)snode->id)->nodetree;
+ snode->nodetree = ((Scene *)snode->id)->nodetree;
else if (GS(snode->id->name)==ID_TE)
- snode->nodetree= ((Tex *)snode->id)->nodetree;
+ snode->nodetree = ((Tex *)snode->id)->nodetree;
}
}
else {
- snode->nodetree= newlibadr_us(fd, sc->id.lib, snode->nodetree);
+ snode->nodetree = newlibadr_us(fd, sc->id.lib, snode->nodetree);
}
snode->linkdrag.first = snode->linkdrag.last = NULL;
}
- else if (sl->spacetype==SPACE_CLIP) {
- SpaceClip *sclip= (SpaceClip *)sl;
-
- sclip->clip= newlibadr_us(fd, sc->id.lib, sclip->clip);
-
+ else if (sl->spacetype == SPACE_CLIP) {
+ SpaceClip *sclip = (SpaceClip *)sl;
+
+ sclip->clip = newlibadr_us(fd, sc->id.lib, sclip->clip);
+
sclip->scopes.track_preview = NULL;
sclip->draw_context = NULL;
sclip->scopes.ok = 0;
@@ -5459,22 +5447,21 @@ static void lib_link_screen(FileData *fd, Main *main)
/* Only for undo files, or to restore a screen after reading without UI... */
static void *restore_pointer_by_name(Main *mainp, ID *id, int user)
{
-
if (id) {
- ListBase *lb= which_libbase(mainp, GS(id->name));
+ ListBase *lb = which_libbase(mainp, GS(id->name));
if (lb) { // there's still risk of checking corrupt mem (freed Ids in oops)
- ID *idn= lb->first;
- char *name= id->name+2;
+ ID *idn = lb->first;
+ char *name = id->name + 2;
while (idn) {
- if (idn->name[2]==name[0] && strcmp(idn->name+2, name)==0) {
- if (idn->lib==id->lib) {
- if (user && idn->us==0) idn->us++;
+ if (idn->name[2] == name[0] && strcmp(idn->name+2, name) == 0) {
+ if (idn->lib == id->lib) {
+ if (user && idn->us == 0) idn->us++;
break;
}
}
- idn= idn->next;
+ idn = idn->next;
}
return idn;
}
@@ -5485,18 +5472,18 @@ static void *restore_pointer_by_name(Main *mainp, ID *id, int user)
static int lib_link_seq_clipboard_cb(Sequence *seq, void *arg_pt)
{
Main *newmain = (Main *)arg_pt;
-
+
if (seq->sound) {
seq->sound = restore_pointer_by_name(newmain, (ID *)seq->sound, 0);
seq->sound->id.us++;
}
-
+
if (seq->scene)
seq->scene = restore_pointer_by_name(newmain, (ID *)seq->scene, 1);
-
+
if (seq->scene_camera)
seq->scene_camera = restore_pointer_by_name(newmain, (ID *)seq->scene_camera, 1);
-
+
return 1;
}
@@ -5515,56 +5502,56 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
wmWindowManager *wm;
bScreen *sc;
ScrArea *sa;
-
+
/* first windowmanager */
- for (wm= newmain->wm.first; wm; wm= wm->id.next) {
+ for (wm = newmain->wm.first; wm; wm = wm->id.next) {
for (win= wm->windows.first; win; win= win->next) {
- win->screen= restore_pointer_by_name(newmain, (ID *)win->screen, 1);
+ win->screen = restore_pointer_by_name(newmain, (ID *)win->screen, 1);
- if (win->screen==NULL)
- win->screen= curscreen;
-
- win->screen->winid= win->winid;
+ if (win->screen == NULL)
+ win->screen = curscreen;
+
+ win->screen->winid = win->winid;
}
}
- for (sc= newmain->screen.first; sc; sc= sc->id.next) {
- Scene *oldscene= sc->scene;
-
+ for (sc = newmain->screen.first; sc; sc = sc->id.next) {
+ Scene *oldscene = sc->scene;
+
sc->scene= restore_pointer_by_name(newmain, (ID *)sc->scene, 1);
- if (sc->scene==NULL)
- sc->scene= curscene;
-
+ if (sc->scene == NULL)
+ sc->scene = curscene;
+
/* keep cursor location through undo */
copy_v3_v3(sc->scene->cursor, oldscene->cursor);
-
- sa= sc->areabase.first;
+
+ sa = sc->areabase.first;
while (sa) {
SpaceLink *sl;
-
- for (sl= sa->spacedata.first; sl; sl= sl->next) {
- if (sl->spacetype==SPACE_VIEW3D) {
- View3D *v3d= (View3D*) sl;
+
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
BGpic *bgpic;
ARegion *ar;
if (v3d->scenelock)
- v3d->camera= NULL; /* always get from scene */
+ v3d->camera = NULL; /* always get from scene */
else
- v3d->camera= restore_pointer_by_name(newmain, (ID *)v3d->camera, 1);
- if (v3d->camera==NULL)
- v3d->camera= sc->scene->camera;
- v3d->ob_centre= restore_pointer_by_name(newmain, (ID *)v3d->ob_centre, 1);
+ v3d->camera = restore_pointer_by_name(newmain, (ID *)v3d->camera, 1);
+ if (v3d->camera == NULL)
+ v3d->camera = sc->scene->camera;
+ v3d->ob_centre = restore_pointer_by_name(newmain, (ID *)v3d->ob_centre, 1);
for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) {
- bgpic->ima= restore_pointer_by_name(newmain, (ID *)bgpic->ima, 1);
- bgpic->clip= restore_pointer_by_name(newmain, (ID *)bgpic->clip, 1);
+ bgpic->ima = restore_pointer_by_name(newmain, (ID *)bgpic->ima, 1);
+ bgpic->clip = restore_pointer_by_name(newmain, (ID *)bgpic->clip, 1);
}
if (v3d->localvd) {
/*Base *base;*/
-
- v3d->localvd->camera= sc->scene->camera;
+
+ v3d->localvd->camera = sc->scene->camera;
/* localview can become invalid during undo/redo steps, so we exit it when no could be found */
/* XXX regionlocalview ?
@@ -5579,60 +5566,59 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
}
*/
}
- else if (v3d->scenelock) v3d->lay= sc->scene->lay;
-
+ else if (v3d->scenelock) v3d->lay = sc->scene->lay;
+
/* not very nice, but could help */
- if ((v3d->layact & v3d->lay)==0) v3d->layact= v3d->lay;
+ if ((v3d->layact & v3d->lay) == 0) v3d->layact = v3d->lay;
/* free render engines for now */
- for (ar= sa->regionbase.first; ar; ar= ar->next) {
+ for (ar = sa->regionbase.first; ar; ar = ar->next) {
RegionView3D *rv3d= ar->regiondata;
-
+
if (rv3d && rv3d->render_engine) {
RE_engine_free(rv3d->render_engine);
- rv3d->render_engine= NULL;
+ rv3d->render_engine = NULL;
}
}
}
- else if (sl->spacetype==SPACE_IPO) {
- SpaceIpo *sipo= (SpaceIpo *)sl;
- bDopeSheet *ads= sipo->ads;
+ else if (sl->spacetype == SPACE_IPO) {
+ SpaceIpo *sipo = (SpaceIpo *)sl;
+ bDopeSheet *ads = sipo->ads;
if (ads) {
- ads->source= restore_pointer_by_name(newmain, (ID *)ads->source, 1);
+ ads->source = restore_pointer_by_name(newmain, (ID *)ads->source, 1);
if (ads->filter_grp)
- ads->filter_grp= restore_pointer_by_name(newmain, (ID *)ads->filter_grp, 0);
+ ads->filter_grp = restore_pointer_by_name(newmain, (ID *)ads->filter_grp, 0);
}
}
- else if (sl->spacetype==SPACE_BUTS) {
- SpaceButs *sbuts= (SpaceButs *)sl;
+ else if (sl->spacetype == SPACE_BUTS) {
+ SpaceButs *sbuts = (SpaceButs *)sl;
sbuts->pinid = restore_pointer_by_name(newmain, sbuts->pinid, 0);
//XXX if (sbuts->ri) sbuts->ri->curtile = 0;
}
- else if (sl->spacetype==SPACE_FILE) {
-
- SpaceFile *sfile= (SpaceFile *)sl;
- sfile->op= NULL;
+ else if (sl->spacetype == SPACE_FILE) {
+ SpaceFile *sfile = (SpaceFile *)sl;
+ sfile->op = NULL;
}
- else if (sl->spacetype==SPACE_ACTION) {
- SpaceAction *saction= (SpaceAction *)sl;
+ else if (sl->spacetype == SPACE_ACTION) {
+ SpaceAction *saction = (SpaceAction *)sl;
saction->action = restore_pointer_by_name(newmain, (ID *)saction->action, 1);
saction->ads.source= restore_pointer_by_name(newmain, (ID *)saction->ads.source, 1);
-
+
if (saction->ads.filter_grp)
saction->ads.filter_grp= restore_pointer_by_name(newmain, (ID *)saction->ads.filter_grp, 0);
}
- else if (sl->spacetype==SPACE_IMAGE) {
- SpaceImage *sima= (SpaceImage *)sl;
-
- sima->image= restore_pointer_by_name(newmain, (ID *)sima->image, 1);
-
+ else if (sl->spacetype == SPACE_IMAGE) {
+ SpaceImage *sima = (SpaceImage *)sl;
+
+ sima->image = restore_pointer_by_name(newmain, (ID *)sima->image, 1);
+
/* this will be freed, not worth attempting to find same scene,
* since it gets initialized later */
sima->iuser.scene = NULL;
-
+
sima->scopes.waveform_1 = NULL;
sima->scopes.waveform_2 = NULL;
sima->scopes.waveform_3 = NULL;
@@ -5642,75 +5628,75 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
/* NOTE: pre-2.5, this was local data not lib data, but now we need this as lib data
* so assume that here we're doing for undo only...
*/
- sima->gpd= restore_pointer_by_name(newmain, (ID *)sima->gpd, 1);
+ sima->gpd = restore_pointer_by_name(newmain, (ID *)sima->gpd, 1);
}
- else if (sl->spacetype==SPACE_NLA) {
- SpaceNla *snla= (SpaceNla *)sl;
- bDopeSheet *ads= snla->ads;
+ else if (sl->spacetype == SPACE_NLA) {
+ SpaceNla *snla = (SpaceNla *)sl;
+ bDopeSheet *ads = snla->ads;
if (ads) {
- ads->source= restore_pointer_by_name(newmain, (ID *)ads->source, 1);
+ ads->source = restore_pointer_by_name(newmain, (ID *)ads->source, 1);
if (ads->filter_grp)
- ads->filter_grp= restore_pointer_by_name(newmain, (ID *)ads->filter_grp, 0);
+ ads->filter_grp = restore_pointer_by_name(newmain, (ID *)ads->filter_grp, 0);
}
}
- else if (sl->spacetype==SPACE_TEXT) {
- SpaceText *st= (SpaceText *)sl;
+ else if (sl->spacetype == SPACE_TEXT) {
+ SpaceText *st = (SpaceText *)sl;
- st->text= restore_pointer_by_name(newmain, (ID *)st->text, 1);
- if (st->text==NULL) st->text= newmain->text.first;
+ st->text = restore_pointer_by_name(newmain, (ID *)st->text, 1);
+ if (st->text == NULL) st->text = newmain->text.first;
}
- else if (sl->spacetype==SPACE_SCRIPT) {
- SpaceScript *scpt= (SpaceScript *)sl;
+ else if (sl->spacetype == SPACE_SCRIPT) {
+ SpaceScript *scpt = (SpaceScript *)sl;
- scpt->script= restore_pointer_by_name(newmain, (ID *)scpt->script, 1);
+ scpt->script = restore_pointer_by_name(newmain, (ID *)scpt->script, 1);
/*sc->script = NULL; - 2.45 set to null, better re-run the script */
if (scpt->script) {
SCRIPT_SET_NULL(scpt->script);
}
}
- else if (sl->spacetype==SPACE_OUTLINER) {
+ else if (sl->spacetype == SPACE_OUTLINER) {
SpaceOops *so= (SpaceOops *)sl;
int a;
- so->search_tse.id= restore_pointer_by_name(newmain, so->search_tse.id, 0);
+ so->search_tse.id = restore_pointer_by_name(newmain, so->search_tse.id, 0);
if (so->treestore) {
- TreeStore *ts= so->treestore;
- TreeStoreElem *tselem=ts->data;
- for (a=0; a<ts->usedelem; a++, tselem++) {
- tselem->id= restore_pointer_by_name(newmain, tselem->id, 0);
+ TreeStore *ts = so->treestore;
+ TreeStoreElem *tselem = ts->data;
+ for (a = 0; a < ts->usedelem; a++, tselem++) {
+ tselem->id = restore_pointer_by_name(newmain, tselem->id, 0);
}
}
}
- else if (sl->spacetype==SPACE_NODE) {
+ else if (sl->spacetype == SPACE_NODE) {
SpaceNode *snode= (SpaceNode *)sl;
- snode->id= restore_pointer_by_name(newmain, snode->id, 1);
- snode->edittree= NULL;
+ snode->id = restore_pointer_by_name(newmain, snode->id, 1);
+ snode->edittree = NULL;
if (ELEM3(snode->treetype, NTREE_COMPOSIT, NTREE_SHADER, NTREE_TEXTURE)) {
- snode->nodetree= NULL;
+ snode->nodetree = NULL;
if (snode->id) {
if (GS(snode->id->name)==ID_MA)
- snode->nodetree= ((Material *)snode->id)->nodetree;
+ snode->nodetree = ((Material *)snode->id)->nodetree;
else if (GS(snode->id->name)==ID_SCE)
- snode->nodetree= ((Scene *)snode->id)->nodetree;
+ snode->nodetree = ((Scene *)snode->id)->nodetree;
else if (GS(snode->id->name)==ID_TE)
- snode->nodetree= ((Tex *)snode->id)->nodetree;
+ snode->nodetree = ((Tex *)snode->id)->nodetree;
}
}
else {
snode->nodetree= restore_pointer_by_name(newmain, &snode->nodetree->id, 1);
}
}
- else if (sl->spacetype==SPACE_CLIP) {
- SpaceClip *sclip= (SpaceClip *)sl;
-
- sclip->clip= restore_pointer_by_name(newmain, (ID *)sclip->clip, 1);
-
+ else if (sl->spacetype == SPACE_CLIP) {
+ SpaceClip *sclip = (SpaceClip *)sl;
+
+ sclip->clip = restore_pointer_by_name(newmain, (ID *)sclip->clip, 1);
+
sclip->scopes.ok = 0;
}
}
@@ -5726,41 +5712,41 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
{
Panel *pa;
- link_list(fd, &(ar->panels));
+ link_list(fd, &ar->panels);
- for (pa= ar->panels.first; pa; pa=pa->next) {
- pa->paneltab= newdataadr(fd, pa->paneltab);
- pa->runtime_flag= 0;
- pa->activedata= NULL;
- pa->type= NULL;
+ for (pa = ar->panels.first; pa; pa = pa->next) {
+ pa->paneltab = newdataadr(fd, pa->paneltab);
+ pa->runtime_flag = 0;
+ pa->activedata = NULL;
+ pa->type = NULL;
}
- ar->regiondata= newdataadr(fd, ar->regiondata);
+ ar->regiondata = newdataadr(fd, ar->regiondata);
if (ar->regiondata) {
- if (spacetype==SPACE_VIEW3D) {
- RegionView3D *rv3d= ar->regiondata;
-
- rv3d->localvd= newdataadr(fd, rv3d->localvd);
- rv3d->clipbb= newdataadr(fd, rv3d->clipbb);
-
- rv3d->depths= NULL;
- rv3d->ri= NULL;
- rv3d->render_engine= NULL;
- rv3d->sms= NULL;
- rv3d->smooth_timer= NULL;
- }
- }
-
- ar->v2d.tab_offset= NULL;
- ar->v2d.tab_num= 0;
- ar->v2d.tab_cur= 0;
- ar->handlers.first= ar->handlers.last= NULL;
- ar->uiblocks.first= ar->uiblocks.last= NULL;
- ar->headerstr= NULL;
- ar->swinid= 0;
- ar->type= NULL;
- ar->swap= 0;
- ar->do_draw= 0;
+ if (spacetype == SPACE_VIEW3D) {
+ RegionView3D *rv3d = ar->regiondata;
+
+ rv3d->localvd = newdataadr(fd, rv3d->localvd);
+ rv3d->clipbb = newdataadr(fd, rv3d->clipbb);
+
+ rv3d->depths = NULL;
+ rv3d->ri = NULL;
+ rv3d->render_engine = NULL;
+ rv3d->sms = NULL;
+ rv3d->smooth_timer = NULL;
+ }
+ }
+
+ ar->v2d.tab_offset = NULL;
+ ar->v2d.tab_num = 0;
+ ar->v2d.tab_cur = 0;
+ ar->handlers.first = ar->handlers.last = NULL;
+ ar->uiblocks.first = ar->uiblocks.last = NULL;
+ ar->headerstr = NULL;
+ ar->swinid = 0;
+ ar->type = NULL;
+ ar->swap = 0;
+ ar->do_draw = 0;
memset(&ar->drawrct, 0, sizeof(ar->drawrct));
}
@@ -5770,22 +5756,22 @@ void blo_do_versions_view3d_split_250(View3D *v3d, ListBase *regions)
{
ARegion *ar;
- for (ar= regions->first; ar; ar= ar->next) {
+ for (ar = regions->first; ar; ar = ar->next) {
if (ar->regiontype==RGN_TYPE_WINDOW && ar->regiondata==NULL) {
RegionView3D *rv3d;
- rv3d= ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region v3d patch");
- rv3d->persp= (char)v3d->persp;
- rv3d->view= (char)v3d->view;
- rv3d->dist= v3d->dist;
+ rv3d = ar->regiondata = MEM_callocN(sizeof(RegionView3D), "region v3d patch");
+ rv3d->persp = (char)v3d->persp;
+ rv3d->view = (char)v3d->view;
+ rv3d->dist = v3d->dist;
copy_v3_v3(rv3d->ofs, v3d->ofs);
copy_qt_qt(rv3d->viewquat, v3d->viewquat);
}
}
-
+
/* this was not initialized correct always */
if (v3d->twtype == 0)
- v3d->twtype= V3D_MANIP_TRANSLATE;
+ v3d->twtype = V3D_MANIP_TRANSLATE;
}
static void direct_link_screen(FileData *fd, bScreen *sc)
@@ -5798,49 +5784,49 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
link_list(fd, &(sc->vertbase));
link_list(fd, &(sc->edgebase));
link_list(fd, &(sc->areabase));
- sc->regionbase.first= sc->regionbase.last= NULL;
- sc->context= NULL;
-
- sc->mainwin= sc->subwinactive= 0; /* indices */
- sc->swap= 0;
+ sc->regionbase.first = sc->regionbase.last= NULL;
+ sc->context = NULL;
+
+ sc->mainwin = sc->subwinactive= 0; /* indices */
+ sc->swap = 0;
/* hacky patch... but people have been saving files with the verse-blender,
* causing the handler to keep running for ever, with no means to disable it */
- for (a=0; a<SCREEN_MAXHANDLER; a+=2) {
- if ( sc->handler[a]==SCREEN_HANDLER_VERSE) {
- sc->handler[a]= 0;
+ for (a = 0; a < SCREEN_MAXHANDLER; a+=2) {
+ if (sc->handler[a] == SCREEN_HANDLER_VERSE) {
+ sc->handler[a] = 0;
break;
}
}
/* edges */
- for (se= sc->edgebase.first; se; se= se->next) {
- se->v1= newdataadr(fd, se->v1);
- se->v2= newdataadr(fd, se->v2);
- if ( (intptr_t)se->v1 > (intptr_t)se->v2) {
- sv= se->v1;
- se->v1= se->v2;
- se->v2= sv;
+ for (se = sc->edgebase.first; se; se = se->next) {
+ se->v1 = newdataadr(fd, se->v1);
+ se->v2 = newdataadr(fd, se->v2);
+ if ((intptr_t)se->v1 > (intptr_t)se->v2) {
+ sv = se->v1;
+ se->v1 = se->v2;
+ se->v2 = sv;
}
-
- if (se->v1==NULL) {
+
+ if (se->v1 == NULL) {
printf("error reading screen... file corrupt\n");
- se->v1= se->v2;
+ se->v1 = se->v2;
}
}
-
+
/* areas */
- for (sa= sc->areabase.first; sa; sa= sa->next) {
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
SpaceLink *sl;
ARegion *ar;
-
+
link_list(fd, &(sa->spacedata));
link_list(fd, &(sa->regionbase));
-
- sa->handlers.first= sa->handlers.last= NULL;
- sa->type= NULL; /* spacetype callbacks */
- for (ar= sa->regionbase.first; ar; ar= ar->next)
+ sa->handlers.first = sa->handlers.last = NULL;
+ sa->type = NULL; /* spacetype callbacks */
+
+ for (ar = sa->regionbase.first; ar; ar = ar->next)
direct_link_region(fd, ar, sa->spacetype);
/* accident can happen when read/save new file with older version */
@@ -5851,80 +5837,80 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
BLI_addtail(&sa->spacedata, sinfo);
}
/* add local view3d too */
- else if (sa->spacetype==SPACE_VIEW3D)
+ else if (sa->spacetype == SPACE_VIEW3D)
blo_do_versions_view3d_split_250(sa->spacedata.first, &sa->regionbase);
- for (sl= sa->spacedata.first; sl; sl= sl->next) {
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
link_list(fd, &(sl->regionbase));
-
- for (ar= sl->regionbase.first; ar; ar= ar->next)
+
+ for (ar = sl->regionbase.first; ar; ar = ar->next)
direct_link_region(fd, ar, sl->spacetype);
-
- if (sl->spacetype==SPACE_VIEW3D) {
+
+ if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d= (View3D*) sl;
BGpic *bgpic;
-
+
v3d->flag |= V3D_INVALID_BACKBUF;
-
- link_list(fd, &(v3d->bgpicbase));
-
+
+ link_list(fd, &v3d->bgpicbase);
+
/* should be do_versions except this doesnt fit well there */
if (v3d->bgpic) {
- bgpic= newdataadr(fd, v3d->bgpic);
+ bgpic = newdataadr(fd, v3d->bgpic);
BLI_addtail(&v3d->bgpicbase, bgpic);
- v3d->bgpic= NULL;
+ v3d->bgpic = NULL;
}
-
- for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next)
- bgpic->iuser.ok= 1;
-
+
+ for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next)
+ bgpic->iuser.ok = 1;
+
if (v3d->gpd) {
- v3d->gpd= newdataadr(fd, v3d->gpd);
+ v3d->gpd = newdataadr(fd, v3d->gpd);
direct_link_gpencil(fd, v3d->gpd);
}
- v3d->localvd= newdataadr(fd, v3d->localvd);
- v3d->afterdraw_transp.first= v3d->afterdraw_transp.last= NULL;
- v3d->afterdraw_xray.first= v3d->afterdraw_xray.last= NULL;
- v3d->afterdraw_xraytransp.first= v3d->afterdraw_xraytransp.last= NULL;
- v3d->properties_storage= NULL;
-
+ v3d->localvd = newdataadr(fd, v3d->localvd);
+ v3d->afterdraw_transp.first = v3d->afterdraw_transp.last = NULL;
+ v3d->afterdraw_xray.first = v3d->afterdraw_xray.last = NULL;
+ v3d->afterdraw_xraytransp.first = v3d->afterdraw_xraytransp.last = NULL;
+ v3d->properties_storage = NULL;
+
/* render can be quite heavy, set to wire on load */
if (v3d->drawtype == OB_RENDER)
v3d->drawtype = OB_WIRE;
blo_do_versions_view3d_split_250(v3d, &sl->regionbase);
}
- else if (sl->spacetype==SPACE_IPO) {
- SpaceIpo *sipo= (SpaceIpo*)sl;
+ else if (sl->spacetype == SPACE_IPO) {
+ SpaceIpo *sipo = (SpaceIpo *)sl;
- sipo->ads= newdataadr(fd, sipo->ads);
- sipo->ghostCurves.first= sipo->ghostCurves.last= NULL;
+ sipo->ads = newdataadr(fd, sipo->ads);
+ sipo->ghostCurves.first = sipo->ghostCurves.last = NULL;
}
- else if (sl->spacetype==SPACE_NLA) {
- SpaceNla *snla= (SpaceNla*)sl;
+ else if (sl->spacetype == SPACE_NLA) {
+ SpaceNla *snla = (SpaceNla *)sl;
- snla->ads= newdataadr(fd, snla->ads);
+ snla->ads = newdataadr(fd, snla->ads);
}
- else if (sl->spacetype==SPACE_OUTLINER) {
- SpaceOops *soops= (SpaceOops*) sl;
+ else if (sl->spacetype == SPACE_OUTLINER) {
+ SpaceOops *soops = (SpaceOops *) sl;
- soops->treestore= newdataadr(fd, soops->treestore);
+ soops->treestore = newdataadr(fd, soops->treestore);
if (soops->treestore) {
- soops->treestore->data= newdataadr(fd, soops->treestore->data);
+ soops->treestore->data = newdataadr(fd, soops->treestore->data);
/* we only saved what was used */
- soops->treestore->totelem= soops->treestore->usedelem;
+ soops->treestore->totelem = soops->treestore->usedelem;
soops->storeflag |= SO_TREESTORE_CLEANUP; // at first draw
}
}
- else if (sl->spacetype==SPACE_IMAGE) {
- SpaceImage *sima= (SpaceImage *)sl;
+ else if (sl->spacetype == SPACE_IMAGE) {
+ SpaceImage *sima = (SpaceImage *)sl;
- sima->cumap= newdataadr(fd, sima->cumap);
+ sima->cumap = newdataadr(fd, sima->cumap);
if (sima->cumap)
direct_link_curvemapping(fd, sima->cumap);
- sima->iuser.scene= NULL;
- sima->iuser.ok= 1;
+ sima->iuser.scene = NULL;
+ sima->iuser.ok = 1;
sima->scopes.waveform_1 = NULL;
sima->scopes.waveform_2 = NULL;
sima->scopes.waveform_3 = NULL;
@@ -5935,45 +5921,45 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
* so sacrifice a few old files for now to avoid crashes with new files!
* committed: r28002 */
#if 0
- sima->gpd= newdataadr(fd, sima->gpd);
+ sima->gpd = newdataadr(fd, sima->gpd);
if (sima->gpd)
direct_link_gpencil(fd, sima->gpd);
#endif
}
- else if (sl->spacetype==SPACE_NODE) {
- SpaceNode *snode= (SpaceNode *)sl;
+ else if (sl->spacetype == SPACE_NODE) {
+ SpaceNode *snode = (SpaceNode *)sl;
if (snode->gpd) {
- snode->gpd= newdataadr(fd, snode->gpd);
+ snode->gpd = newdataadr(fd, snode->gpd);
direct_link_gpencil(fd, snode->gpd);
}
}
- else if (sl->spacetype==SPACE_TIME) {
- SpaceTime *stime= (SpaceTime *)sl;
- stime->caches.first= stime->caches.last= NULL;
+ else if (sl->spacetype == SPACE_TIME) {
+ SpaceTime *stime = (SpaceTime *)sl;
+ stime->caches.first = stime->caches.last = NULL;
}
- else if (sl->spacetype==SPACE_LOGIC) {
- SpaceLogic *slogic= (SpaceLogic *)sl;
+ else if (sl->spacetype == SPACE_LOGIC) {
+ SpaceLogic *slogic = (SpaceLogic *)sl;
if (slogic->gpd) {
- slogic->gpd= newdataadr(fd, slogic->gpd);
+ slogic->gpd = newdataadr(fd, slogic->gpd);
direct_link_gpencil(fd, slogic->gpd);
}
}
- else if (sl->spacetype==SPACE_SEQ) {
- SpaceSeq *sseq= (SpaceSeq *)sl;
+ else if (sl->spacetype == SPACE_SEQ) {
+ SpaceSeq *sseq = (SpaceSeq *)sl;
if (sseq->gpd) {
- sseq->gpd= newdataadr(fd, sseq->gpd);
+ sseq->gpd = newdataadr(fd, sseq->gpd);
direct_link_gpencil(fd, sseq->gpd);
}
}
- else if (sl->spacetype==SPACE_BUTS) {
- SpaceButs *sbuts= (SpaceButs *)sl;
+ else if (sl->spacetype == SPACE_BUTS) {
+ SpaceButs *sbuts = (SpaceButs *)sl;
sbuts->path= NULL;
sbuts->texuser= NULL;
}
- else if (sl->spacetype==SPACE_CONSOLE) {
- SpaceConsole *sconsole= (SpaceConsole *)sl;
+ else if (sl->spacetype == SPACE_CONSOLE) {
+ SpaceConsole *sconsole = (SpaceConsole *)sl;
ConsoleLine *cl, *cl_next;
link_list(fd, &sconsole->scrollback);
@@ -5985,12 +5971,12 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
/* comma expressions, (e.g. expr1, expr2, expr3) evalutate each expression,
* from left to right. the right-most expression sets the result of the comma
* expression as a whole*/
- for (cl= sconsole->history.first; cl; cl= cl_next) {
- cl_next= cl->next;
- cl->line= newdataadr(fd, cl->line);
+ for (cl = sconsole->history.first; cl; cl = cl_next) {
+ cl_next = cl->next;
+ cl->line = newdataadr(fd, cl->line);
if (cl->line) {
/* the allocted length is not written, so reset here */
- cl->len_alloc= cl->len + 1;
+ cl->len_alloc = cl->len + 1;
}
else {
BLI_remlink(&sconsole->history, cl);
@@ -5998,26 +5984,26 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
}
}
}
- else if (sl->spacetype==SPACE_FILE) {
- SpaceFile *sfile= (SpaceFile *)sl;
+ else if (sl->spacetype == SPACE_FILE) {
+ SpaceFile *sfile = (SpaceFile *)sl;
/* this sort of info is probably irrelevant for reloading...
* plus, it isn't saved to files yet!
*/
- sfile->folders_prev= sfile->folders_next= NULL;
- sfile->files= NULL;
- sfile->layout= NULL;
- sfile->op= NULL;
- sfile->params= newdataadr(fd, sfile->params);
+ sfile->folders_prev = sfile->folders_next = NULL;
+ sfile->files = NULL;
+ sfile->layout = NULL;
+ sfile->op = NULL;
+ sfile->params = newdataadr(fd, sfile->params);
}
}
- sa->actionzones.first= sa->actionzones.last= NULL;
-
- sa->v1= newdataadr(fd, sa->v1);
- sa->v2= newdataadr(fd, sa->v2);
- sa->v3= newdataadr(fd, sa->v3);
- sa->v4= newdataadr(fd, sa->v4);
+ sa->actionzones.first = sa->actionzones.last = NULL;
+
+ sa->v1 = newdataadr(fd, sa->v1);
+ sa->v2 = newdataadr(fd, sa->v2);
+ sa->v3 = newdataadr(fd, sa->v3);
+ sa->v4 = newdataadr(fd, sa->v4);
}
}
@@ -6028,20 +6014,20 @@ static void direct_link_library(FileData *fd, Library *lib, Main *main)
{
Main *newmain;
- for (newmain= fd->mainlist.first; newmain; newmain= newmain->next) {
+ for (newmain = fd->mainlist.first; newmain; newmain = newmain->next) {
if (newmain->curlib) {
if (BLI_path_cmp(newmain->curlib->filepath, lib->filepath) == 0) {
BKE_reportf_wrap(fd->reports, RPT_WARNING,
"Library '%s', '%s' had multiple instances, save and reload!",
lib->name, lib->filepath);
-
+
change_idid_adr(&fd->mainlist, fd, lib, newmain->curlib);
// change_idid_adr_fd(fd, lib, newmain->curlib);
BLI_remlink(&main->library, lib);
MEM_freeN(lib);
-
-
+
+
return;
}
}
@@ -6056,16 +6042,16 @@ static void direct_link_library(FileData *fd, Library *lib, Main *main)
/* new main */
newmain= MEM_callocN(sizeof(Main), "directlink");
BLI_addtail(&fd->mainlist, newmain);
- newmain->curlib= lib;
-
- lib->parent= NULL;
+ newmain->curlib = lib;
+
+ lib->parent = NULL;
}
static void lib_link_library(FileData *UNUSED(fd), Main *main)
{
Library *lib;
- for (lib= main->library.first; lib; lib= lib->id.next) {
- lib->id.us= 1;
+ for (lib = main->library.first; lib; lib = lib->id.next) {
+ lib->id.us = 1;
}
}
@@ -6074,23 +6060,23 @@ static void fix_relpaths_library(const char *basepath, Main *main)
{
Library *lib;
/* BLO_read_from_memory uses a blank filename */
- if (basepath==NULL || basepath[0] == '\0') {
- for (lib= main->library.first; lib; lib= lib->id.next) {
+ if (basepath == NULL || basepath[0] == '\0') {
+ for (lib = main->library.first; lib; lib= lib->id.next) {
/* when loading a linked lib into a file which has not been saved,
* there is nothing we can be relative to, so instead we need to make
* it absolute. This can happen when appending an object with a relative
* link into an unsaved blend file. See [#27405].
* The remap relative option will make it relative again on save - campbell */
- if (strncmp(lib->name, "//", 2)==0) {
+ if (strncmp(lib->name, "//", 2) == 0) {
BLI_strncpy(lib->name, lib->filepath, sizeof(lib->name));
}
}
}
else {
- for (lib= main->library.first; lib; lib= lib->id.next) {
+ for (lib = main->library.first; lib; lib = lib->id.next) {
/* Libraries store both relative and abs paths, recreate relative paths,
* relative to the blend file since indirectly linked libs will be relative to their direct linked library */
- if (strncmp(lib->name, "//", 2)==0) { /* if this is relative to begin with? */
+ if (strncmp(lib->name, "//", 2) == 0) { /* if this is relative to begin with? */
BLI_strncpy(lib->name, lib->filepath, sizeof(lib->name));
BLI_path_rel(lib->name, basepath);
}
@@ -6103,30 +6089,30 @@ static void fix_relpaths_library(const char *basepath, Main *main)
static void lib_link_speaker(FileData *fd, Main *main)
{
Speaker *spk;
-
- spk= main->speaker.first;
+
+ spk = main->speaker.first;
while (spk) {
if (spk->id.flag & LIB_NEEDLINK) {
if (spk->adt) lib_link_animdata(fd, &spk->id, spk->adt);
-
+
spk->sound= newlibadr(fd, spk->id.lib, spk->sound);
if (spk->sound) {
spk->sound->id.us++;
}
-
+
spk->id.flag -= LIB_NEEDLINK;
}
- spk= spk->id.next;
+ spk = spk->id.next;
}
}
static void direct_link_speaker(FileData *fd, Speaker *spk)
{
- spk->adt= newdataadr(fd, spk->adt);
+ spk->adt = newdataadr(fd, spk->adt);
direct_link_animdata(fd, spk->adt);
#if 0
- spk->sound= newdataadr(fd, spk->sound);
+ spk->sound = newdataadr(fd, spk->sound);
direct_link_sound(fd, spk->sound);
#endif
}
@@ -6153,15 +6139,15 @@ static void lib_link_sound(FileData *fd, Main *main)
{
bSound *sound;
- sound= main->sound.first;
+ sound = main->sound.first;
while (sound) {
if (sound->id.flag & LIB_NEEDLINK) {
sound->id.flag -= LIB_NEEDLINK;
- sound->ipo= newlibadr_us(fd, sound->id.lib, sound->ipo); // XXX depreceated - old animation system
+ sound->ipo = newlibadr_us(fd, sound->id.lib, sound->ipo); // XXX depreceated - old animation system
sound_load(main, sound);
}
- sound= sound->id.next;
+ sound = sound->id.next;
}
}
/* ***************** READ GROUP *************** */
@@ -6181,24 +6167,24 @@ static void lib_link_group(FileData *fd, Main *main)
if (group->id.flag & LIB_NEEDLINK) {
group->id.flag -= LIB_NEEDLINK;
- add_us= 0;
+ add_us = 0;
- go= group->gobject.first;
+ go = group->gobject.first;
while (go) {
go->ob= newlibadr(fd, group->id.lib, go->ob);
if (go->ob) {
go->ob->flag |= OB_FROMGROUP;
/* if group has an object, it increments user... */
- add_us= 1;
- if (go->ob->id.us==0)
- go->ob->id.us= 1;
+ add_us = 1;
+ if (go->ob->id.us == 0)
+ go->ob->id.us = 1;
}
- go= go->next;
+ go = go->next;
}
if (add_us) group->id.us++;
rem_from_group(group, NULL, NULL, NULL); /* removes NULL entries */
}
- group= group->id.next;
+ group = group->id.next;
}
}
@@ -6206,60 +6192,60 @@ static void lib_link_group(FileData *fd, Main *main)
static void direct_link_movieReconstruction(FileData *fd, MovieTrackingReconstruction *reconstruction)
{
- reconstruction->cameras= newdataadr(fd, reconstruction->cameras);
+ reconstruction->cameras = newdataadr(fd, reconstruction->cameras);
}
static void direct_link_movieTracks(FileData *fd, ListBase *tracksbase)
{
MovieTrackingTrack *track;
-
+
link_list(fd, tracksbase);
-
- track= tracksbase->first;
+
+ track = tracksbase->first;
while (track) {
- track->markers= newdataadr(fd, track->markers);
-
- track= track->next;
+ track->markers = newdataadr(fd, track->markers);
+
+ track = track->next;
}
}
static void direct_link_movieclip(FileData *fd, MovieClip *clip)
{
- MovieTracking *tracking= &clip->tracking;
+ MovieTracking *tracking = &clip->tracking;
MovieTrackingObject *object;
clip->adt= newdataadr(fd, clip->adt);
- if (fd->movieclipmap) clip->cache= newmclipadr(fd, clip->cache);
- else clip->cache= NULL;
+ if (fd->movieclipmap) clip->cache = newmclipadr(fd, clip->cache);
+ else clip->cache = NULL;
- if (fd->movieclipmap) clip->tracking.camera.intrinsics= newmclipadr(fd, clip->tracking.camera.intrinsics);
- else clip->tracking.camera.intrinsics= NULL;
+ if (fd->movieclipmap) clip->tracking.camera.intrinsics = newmclipadr(fd, clip->tracking.camera.intrinsics);
+ else clip->tracking.camera.intrinsics = NULL;
direct_link_movieTracks(fd, &tracking->tracks);
direct_link_movieReconstruction(fd, &tracking->reconstruction);
- clip->tracking.act_track= newdataadr(fd, clip->tracking.act_track);
+ clip->tracking.act_track = newdataadr(fd, clip->tracking.act_track);
- clip->anim= NULL;
- clip->tracking_context= NULL;
- clip->tracking.stats= NULL;
+ clip->anim = NULL;
+ clip->tracking_context = NULL;
+ clip->tracking.stats = NULL;
- clip->tracking.stabilization.ok= 0;
- clip->tracking.stabilization.scaleibuf= NULL;
- clip->tracking.stabilization.rot_track= newdataadr(fd, clip->tracking.stabilization.rot_track);
+ clip->tracking.stabilization.ok = 0;
+ clip->tracking.stabilization.scaleibuf = NULL;
+ clip->tracking.stabilization.rot_track = newdataadr(fd, clip->tracking.stabilization.rot_track);
clip->tracking.dopesheet.ok = 0;
clip->tracking.dopesheet.channels.first = clip->tracking.dopesheet.channels.last = NULL;
link_list(fd, &tracking->objects);
-
- object= tracking->objects.first;
+
+ object = tracking->objects.first;
while (object) {
direct_link_movieTracks(fd, &object->tracks);
direct_link_movieReconstruction(fd, &object->reconstruction);
-
- object= object->next;
+
+ object = object->next;
}
}
@@ -6272,12 +6258,12 @@ static void lib_link_movieclip(FileData *fd, Main *main)
if (clip->id.flag & LIB_NEEDLINK) {
if (clip->adt)
lib_link_animdata(fd, &clip->id, clip->adt);
-
- clip->gpd= newlibadr_us(fd, clip->id.lib, clip->gpd);
-
+
+ clip->gpd = newlibadr_us(fd, clip->id.lib, clip->gpd);
+
clip->id.flag -= LIB_NEEDLINK;
}
- clip= clip->id.next;
+ clip = clip->id.next;
}
}
@@ -6495,27 +6481,27 @@ static const char *dataname(short id_code)
static BHead *read_data_into_oldnewmap(FileData *fd, BHead *bhead, const char *allocname)
{
bhead = blo_nextbhead(fd, bhead);
-
+
while (bhead && bhead->code==DATA) {
void *data;
#if 0
/* XXX DUMB DEBUGGING OPTION TO GIVE NAMES for guarded malloc errors */
- short *sp= fd->filesdna->structs[bhead->SDNAnr];
- char *tmp= malloc(100);
+ short *sp = fd->filesdna->structs[bhead->SDNAnr];
+ char *tmp = malloc(100);
allocname = fd->filesdna->types[ sp[0] ];
strcpy(tmp, allocname);
- data= read_struct(fd, bhead, tmp);
+ data = read_struct(fd, bhead, tmp);
#else
- data= read_struct(fd, bhead, allocname);
+ data = read_struct(fd, bhead, allocname);
#endif
if (data) {
oldnewmap_insert(fd->datamap, bhead->old, data, 0);
}
-
+
bhead = blo_nextbhead(fd, bhead);
}
-
+
return bhead;
}
@@ -6524,7 +6510,6 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
/* this routine reads a libblock and its direct data. Use link functions
* to connect it all
*/
-
ID *id;
ListBase *lb;
const char *allocname;
@@ -6532,41 +6517,41 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
/* read libblock */
id = read_struct(fd, bhead, "lib block");
if (id_r)
- *id_r= id;
+ *id_r = id;
if (!id)
return blo_nextbhead(fd, bhead);
oldnewmap_insert(fd->libmap, bhead->old, id, bhead->code); /* for ID_ID check */
/* do after read_struct, for dna reconstruct */
- if (bhead->code==ID_ID) {
- lb= which_libbase(main, GS(id->name));
+ if (bhead->code == ID_ID) {
+ lb = which_libbase(main, GS(id->name));
}
else {
- lb= which_libbase(main, bhead->code);
+ lb = which_libbase(main, bhead->code);
}
BLI_addtail(lb, id);
-
+
/* clear first 8 bits */
- id->flag= (id->flag & 0xFF00) | flag | LIB_NEEDLINK;
- id->lib= main->curlib;
+ id->flag = (id->flag & 0xFF00) | flag | LIB_NEEDLINK;
+ id->lib = main->curlib;
if (id->flag & LIB_FAKEUSER) id->us= 1;
- else id->us= 0;
+ else id->us = 0;
id->icon_id = 0;
id->flag &= ~(LIB_ID_RECALC|LIB_ID_RECALC_DATA);
-
+
/* this case cannot be direct_linked: it's just the ID part */
- if (bhead->code==ID_ID) {
+ if (bhead->code == ID_ID) {
return blo_nextbhead(fd, bhead);
}
-
+
/* need a name for the mallocN, just for debugging and sane prints on leaks */
- allocname= dataname(GS(id->name));
+ allocname = dataname(GS(id->name));
/* read all data into fd->datamap */
- bhead= read_data_into_oldnewmap(fd, bhead, allocname);
-
+ bhead = read_data_into_oldnewmap(fd, bhead, allocname);
+
/* init pointers direct data */
switch (GS(id->name)) {
case ID_WM:
@@ -6671,10 +6656,10 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
IDP_DirectLinkProperty(id->properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
}
}
-
+
oldnewmap_free_unused(fd->datamap);
oldnewmap_clear(fd->datamap);
-
+
return (bhead);
}
@@ -6682,30 +6667,30 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
/* also version info is written here */
static BHead *read_global(BlendFileData *bfd, FileData *fd, BHead *bhead)
{
- FileGlobal *fg= read_struct(fd, bhead, "Global");
+ FileGlobal *fg = read_struct(fd, bhead, "Global");
/* copy to bfd handle */
- bfd->main->subversionfile= fg->subversion;
- bfd->main->minversionfile= fg->minversion;
- bfd->main->minsubversionfile= fg->minsubversion;
- bfd->main->revision= fg->revision;
-
- bfd->winpos= fg->winpos;
- bfd->fileflags= fg->fileflags;
- bfd->displaymode= fg->displaymode;
- bfd->globalf= fg->globalf;
+ bfd->main->subversionfile = fg->subversion;
+ bfd->main->minversionfile = fg->minversion;
+ bfd->main->minsubversionfile = fg->minsubversion;
+ bfd->main->revision = fg->revision;
+
+ bfd->winpos = fg->winpos;
+ bfd->fileflags = fg->fileflags;
+ bfd->displaymode = fg->displaymode;
+ bfd->globalf = fg->globalf;
BLI_strncpy(bfd->filename, fg->filename, sizeof(bfd->filename));
if (G.fileflags & G_FILE_RECOVER)
BLI_strncpy(fd->relabase, fg->filename, sizeof(fd->relabase));
- bfd->curscreen= fg->curscreen;
- bfd->curscene= fg->curscene;
+ bfd->curscreen = fg->curscreen;
+ bfd->curscene = fg->curscene;
MEM_freeN(fg);
-
- fd->globalf= bfd->globalf;
- fd->fileflags= bfd->fileflags;
+
+ fd->globalf = bfd->globalf;
+ fd->fileflags = bfd->fileflags;
return blo_nextbhead(fd, bhead);
}
@@ -6714,11 +6699,11 @@ static BHead *read_global(BlendFileData *bfd, FileData *fd, BHead *bhead)
static void link_global(FileData *fd, BlendFileData *bfd)
{
- bfd->curscreen= newlibadr(fd, NULL, bfd->curscreen);
- bfd->curscene= newlibadr(fd, NULL, bfd->curscene);
+ bfd->curscreen = newlibadr(fd, NULL, bfd->curscreen);
+ bfd->curscene = newlibadr(fd, NULL, bfd->curscene);
// this happens in files older than 2.35
- if (bfd->curscene==NULL) {
- if (bfd->curscreen) bfd->curscene= bfd->curscreen->scene;
+ if (bfd->curscene == NULL) {
+ if (bfd->curscreen) bfd->curscene = bfd->curscreen->scene;
}
}
@@ -6726,19 +6711,18 @@ static void link_global(FileData *fd, BlendFileData *bfd)
void convert_tface_mt(FileData *fd, Main *main)
{
Main *gmain;
-
+
/* this is a delayed do_version (so it can create new materials) */
if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 3)) {
-
//XXX hack, material.c uses G.main all over the place, instead of main
// temporarily set G.main to the current main
gmain = G.main;
G.main = main;
-
+
if (!(do_version_tface(main, 1))) {
BKE_report(fd->reports, RPT_WARNING, "Texface conversion problem. Error in console");
}
-
+
//XXX hack, material.c uses G.main allover the place, instead of main
G.main = gmain;
}
@@ -6748,11 +6732,12 @@ static void do_versions_nodetree_image_default_alpha_output(bNodeTree *ntree)
{
bNode *node;
bNodeSocket *sock;
- for (node=ntree->nodes.first; node; node=node->next) {
+
+ for (node = ntree->nodes.first; node; node = node->next) {
if (ELEM(node->type, CMP_NODE_IMAGE, CMP_NODE_R_LAYERS)) {
/* default Image output value should have 0 alpha */
sock = node->outputs.first;
- ((bNodeSocketValueRGBA*)sock->default_value)->value[3] = 0.0f;
+ ((bNodeSocketValueRGBA *)(sock->default_value))->value[3] = 0.0f;
}
}
}
@@ -6761,10 +6746,10 @@ static void do_version_ntree_tex_mapping_260(void *UNUSED(data), ID *UNUSED(id),
{
bNode *node;
- for (node=ntree->nodes.first; node; node=node->next) {
+ for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == SH_NODE_MAPPING) {
TexMapping *tex_mapping;
-
+
tex_mapping= node->storage;
tex_mapping->projx= PROJ_X;
tex_mapping->projy= PROJ_Y;
@@ -6802,7 +6787,7 @@ static void do_versions_nodetree_convert_angle(bNodeTree *ntree)
}
else if (node->type == CMP_NODE_GLARE) {
/* Convert degrees to radians. */
- NodeGlare* ndg = node->storage;
+ NodeGlare *ndg = node->storage;
/* XXX DNA char to float conversion seems to map the char value into the [0.0f, 1.0f] range... */
ndg->angle_ofs = DEG2RADF(ndg->angle_ofs*255.0f);
}
@@ -6811,7 +6796,7 @@ static void do_versions_nodetree_convert_angle(bNodeTree *ntree)
*/
else if (node->type == SH_NODE_MAPPING) {
/* Convert degrees to radians. */
- TexMapping* tmap = node->storage;
+ TexMapping *tmap = node->storage;
tmap->rot[0] = DEG2RADF(tmap->rot[0]);
tmap->rot[1] = DEG2RADF(tmap->rot[1]);
tmap->rot[2] = DEG2RADF(tmap->rot[2]);
@@ -6823,24 +6808,24 @@ void do_versions_image_settings_2_60(Scene *sce)
{
/* note: rd->subimtype is moved into individual settings now and no longer
* exists */
- RenderData *rd= &sce->r;
- ImageFormatData *imf= &sce->r.im_format;
+ RenderData *rd = &sce->r;
+ ImageFormatData *imf = &sce->r.im_format;
/* we know no data loss happens here, the old values were in char range */
- imf->imtype= (char)rd->imtype;
- imf->planes= (char)rd->planes;
- imf->compress= (char)rd->quality;
- imf->quality= (char)rd->quality;
+ imf->imtype = (char)rd->imtype;
+ imf->planes = (char)rd->planes;
+ imf->compress = (char)rd->quality;
+ imf->quality = (char)rd->quality;
/* default, was stored in multiple places, may override later */
- imf->depth= R_IMF_CHAN_DEPTH_8;
+ imf->depth = R_IMF_CHAN_DEPTH_8;
/* openexr */
imf->exr_codec = rd->quality & 7; /* strange but true! 0-4 are valid values, OPENEXR_COMPRESS */
switch (imf->imtype) {
case R_IMF_IMTYPE_OPENEXR:
- imf->depth= (rd->subimtype & R_OPENEXR_HALF) ? R_IMF_CHAN_DEPTH_16 : R_IMF_CHAN_DEPTH_32;
+ imf->depth = (rd->subimtype & R_OPENEXR_HALF) ? R_IMF_CHAN_DEPTH_16 : R_IMF_CHAN_DEPTH_32;
if (rd->subimtype & R_PREVIEW_JPG) {
imf->flag |= R_IMF_FLAG_PREVIEW_JPG;
}
@@ -6888,18 +6873,18 @@ static void do_versions_nodetree_socket_use_flags_2_62(bNodeTree *ntree)
bNodeSocket *sock;
bNodeLink *link;
- for (node=ntree->nodes.first; node; node=node->next) {
- for (sock=node->inputs.first; sock; sock=sock->next)
+ for (node = ntree->nodes.first; node; node = node->next) {
+ for (sock = node->inputs.first; sock; sock = sock->next)
sock->flag &= ~SOCK_IN_USE;
- for (sock=node->outputs.first; sock; sock=sock->next)
+ for (sock = node->outputs.first; sock; sock = sock->next)
sock->flag &= ~SOCK_IN_USE;
}
- for (sock=ntree->inputs.first; sock; sock=sock->next)
+ for (sock = ntree->inputs.first; sock; sock = sock->next)
sock->flag &= ~SOCK_IN_USE;
- for (sock=ntree->outputs.first; sock; sock=sock->next)
+ for (sock = ntree->outputs.first; sock; sock = sock->next)
sock->flag &= ~SOCK_IN_USE;
- for (link=ntree->links.first; link; link=link->next) {
+ for (link = ntree->links.first; link; link = link->next) {
link->fromsock->flag |= SOCK_IN_USE;
link->tosock->flag |= SOCK_IN_USE;
}
@@ -6910,8 +6895,8 @@ static void do_versions_nodetree_multi_file_output_format_2_62_1(Scene *sce, bNo
bNode *node;
bNodeSocket *sock;
- for (node=ntree->nodes.first; node; node=node->next) {
- if (node->type==CMP_NODE_OUTPUT_FILE) {
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == CMP_NODE_OUTPUT_FILE) {
/* previous CMP_NODE_OUTPUT_FILE nodes get converted to multi-file outputs */
NodeImageFile *old_data = node->storage;
NodeImageMultiFile *nimf= MEM_callocN(sizeof(NodeImageMultiFile), "node image multi file");
@@ -6921,7 +6906,7 @@ static void do_versions_nodetree_multi_file_output_format_2_62_1(Scene *sce, bNo
char basepath[FILE_MAXDIR];
char filename[FILE_MAXFILE];
- node->storage= nimf;
+ node->storage = nimf;
/* split off filename from the old path, to be used as socket sub-path */
BLI_split_dirfile(old_data->name, basepath, filename, sizeof(basepath), sizeof(filename));
@@ -6999,10 +6984,10 @@ static void do_versions_mesh_mloopcol_swap_2_62_1(Mesh *me)
MLoopCol *mloopcol;
int a;
int i;
-
+
for (a = 0; a < me->ldata.totlayer; a++) {
layer = &me->ldata.layers[a];
-
+
if (layer->type == CD_MLOOPCOL) {
mloopcol = (MLoopCol *)layer->data;
for (i = 0; i < me->totloop; i++, mloopcol++) {
@@ -7017,9 +7002,9 @@ static void do_versions_nodetree_multi_file_output_path_2_64_0(bNodeTree *ntree)
bNode *node;
for (node=ntree->nodes.first; node; node=node->next) {
- if (node->type==CMP_NODE_OUTPUT_FILE) {
+ if (node->type == CMP_NODE_OUTPUT_FILE) {
bNodeSocket *sock;
- for (sock=node->inputs.first; sock; sock=sock->next) {
+ for (sock = node->inputs.first; sock; sock = sock->next) {
NodeImageMultiFileSocket *input = sock->storage;
/* input file path is stored in dedicated struct now instead socket name */
BLI_strncpy(input->path, sock->name, sizeof(input->path));
@@ -7034,7 +7019,7 @@ static void do_versions_nodetree_file_output_layers_2_64_5(bNodeTree *ntree)
bNode *node;
for (node=ntree->nodes.first; node; node=node->next) {
- if (node->type==CMP_NODE_OUTPUT_FILE) {
+ if (node->type == CMP_NODE_OUTPUT_FILE) {
bNodeSocket *sock;
for (sock=node->inputs.first; sock; sock=sock->next) {
NodeImageMultiFileSocket *input = sock->storage;
@@ -7056,15 +7041,12 @@ static void do_versions_nodetree_image_layer_2_64_5(bNodeTree *ntree)
{
bNode *node;
- for (node=ntree->nodes.first; node; node=node->next) {
- if (node->type==CMP_NODE_IMAGE) {
- ImageUser *iuser= (ImageUser *)node->storage;
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == CMP_NODE_IMAGE) {
bNodeSocket *sock;
- for (sock=node->outputs.first; sock; sock=sock->next) {
+ for (sock = node->outputs.first; sock; sock = sock->next) {
NodeImageLayer *output = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
- /* take layer index from image user (this is ignored from now on) */
- output->layer_index = iuser->layer;
/* take pass index both from current storage ptr (actually an int) */
output->pass_index = GET_INT_FROM_POINTER(sock->storage);
@@ -7078,70 +7060,70 @@ static void do_versions_nodetree_image_layer_2_64_5(bNodeTree *ntree)
static void do_versions(FileData *fd, Library *lib, Main *main)
{
/* WATCH IT!!!: pointers from libdata have not been converted */
-
+
if (G.debug & G_DEBUG)
printf("read file %s\n Version %d sub %d svn r%d\n", fd->relabase, main->versionfile, main->subversionfile, main->revision);
-
+
blo_do_versions_pre250(fd, lib, main);
blo_do_versions_250(fd, lib, main);
-
+
if (main->versionfile < 260) {
{
/* set default alpha value of Image outputs in image and render layer nodes to 0 */
Scene *sce;
bNodeTree *ntree;
- for (sce=main->scene.first; sce; sce=sce->id.next) {
+ for (sce = main->scene.first; sce; sce = sce->id.next) {
/* there are files with invalid audio_channels value, the real cause
* is unknown, but we fix it here anyway to avoid crashes */
if (sce->r.ffcodecdata.audio_channels == 0)
sce->r.ffcodecdata.audio_channels = 2;
-
+
if (sce->nodetree)
do_versions_nodetree_image_default_alpha_output(sce->nodetree);
}
- for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next)
do_versions_nodetree_image_default_alpha_output(ntree);
}
-
+
{
/* support old particle dupliobject rotation settings */
ParticleSettings *part;
-
+
for (part=main->particle.first; part; part=part->id.next) {
if (ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
part->draw |= PART_DRAW_ROTATE_OB;
-
+
if (part->rotmode == 0)
part->rotmode = PART_ROT_VEL;
}
}
}
}
-
+
if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 1)) {
Object *ob;
-
- for (ob= main->object.first; ob; ob= ob->id.next) {
+
+ for (ob = main->object.first; ob; ob = ob->id.next) {
ob->collision_boundtype= ob->boundtype;
}
-
+
{
Camera *cam;
- for (cam= main->camera.first; cam; cam= cam->id.next) {
+ for (cam = main->camera.first; cam; cam = cam->id.next) {
if (cam->sensor_x < 0.01f)
cam->sensor_x = DEFAULT_SENSOR_WIDTH;
-
+
if (cam->sensor_y < 0.01f)
cam->sensor_y = DEFAULT_SENSOR_HEIGHT;
}
}
}
-
+
if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 2)) {
- bNodeTreeType *ntreetype= ntreeGetType(NTREE_SHADER);
-
+ bNodeTreeType *ntreetype = ntreeGetType(NTREE_SHADER);
+
if (ntreetype && ntreetype->foreach_nodetree)
ntreetype->foreach_nodetree(main, NULL, do_version_ntree_tex_mapping_260);
}
@@ -7152,122 +7134,122 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Scene *sce;
Material *mat;
bNodeTree *ntree;
-
- for (sce=main->scene.first; sce; sce=sce->id.next) {
+
+ for (sce = main->scene.first; sce; sce = sce->id.next) {
if (sce->nodetree)
do_versions_nodetree_convert_angle(sce->nodetree);
}
-
- for (mat=main->mat.first; mat; mat=mat->id.next) {
+
+ for (mat = main->mat.first; mat; mat = mat->id.next) {
if (mat->nodetree)
do_versions_nodetree_convert_angle(mat->nodetree);
}
-
- for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next)
do_versions_nodetree_convert_angle(ntree);
}
-
+
{
/* Tomato compatibility code. */
bScreen *sc;
MovieClip *clip;
-
- for (sc= main->screen.first; sc; sc= sc->id.next) {
+
+ for (sc = main->screen.first; sc; sc = sc->id.next) {
ScrArea *sa;
- for (sa= sc->areabase.first; sa; sa= sa->next) {
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
SpaceLink *sl;
- for (sl= sa->spacedata.first; sl; sl= sl->next) {
- if (sl->spacetype==SPACE_VIEW3D) {
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d= (View3D *)sl;
- if (v3d->bundle_size==0.0f) {
- v3d->bundle_size= 0.2f;
+ if (v3d->bundle_size == 0.0f) {
+ v3d->bundle_size = 0.2f;
v3d->flag2 |= V3D_SHOW_RECONSTRUCTION;
}
-
- if (v3d->bundle_drawtype==0)
- v3d->bundle_drawtype= OB_PLAINAXES;
+
+ if (v3d->bundle_drawtype == 0)
+ v3d->bundle_drawtype = OB_PLAINAXES;
}
- else if (sl->spacetype==SPACE_CLIP) {
- SpaceClip *sc= (SpaceClip *)sl;
- if (sc->scopes.track_preview_height==0)
- sc->scopes.track_preview_height= 120;
+ else if (sl->spacetype == SPACE_CLIP) {
+ SpaceClip *sc = (SpaceClip *)sl;
+ if (sc->scopes.track_preview_height == 0)
+ sc->scopes.track_preview_height = 120;
}
}
}
}
-
- for (clip= main->movieclip.first; clip; clip= clip->id.next) {
+
+ for (clip = main->movieclip.first; clip; clip = clip->id.next) {
MovieTrackingTrack *track;
-
- if (clip->aspx<1.0f) {
- clip->aspx= 1.0f;
- clip->aspy= 1.0f;
+
+ if (clip->aspx < 1.0f) {
+ clip->aspx = 1.0f;
+ clip->aspy = 1.0f;
}
-
- clip->proxy.build_tc_flag= IMB_TC_RECORD_RUN |
- IMB_TC_FREE_RUN |
- IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN;
-
- if (clip->proxy.build_size_flag==0)
- clip->proxy.build_size_flag= IMB_PROXY_25;
-
- if (clip->proxy.quality==0)
- clip->proxy.quality= 90;
-
- if (clip->tracking.camera.pixel_aspect<0.01f)
- clip->tracking.camera.pixel_aspect= 1.f;
-
- track= clip->tracking.tracks.first;
+
+ clip->proxy.build_tc_flag = IMB_TC_RECORD_RUN |
+ IMB_TC_FREE_RUN |
+ IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN;
+
+ if (clip->proxy.build_size_flag == 0)
+ clip->proxy.build_size_flag = IMB_PROXY_25;
+
+ if (clip->proxy.quality == 0)
+ clip->proxy.quality = 90;
+
+ if (clip->tracking.camera.pixel_aspect < 0.01f)
+ clip->tracking.camera.pixel_aspect = 1.0f;
+
+ track = clip->tracking.tracks.first;
while (track) {
- if (track->pyramid_levels==0)
- track->pyramid_levels= 2;
-
- if (track->minimum_correlation==0.0f)
- track->minimum_correlation= 0.75f;
-
- track= track->next;
+ if (track->pyramid_levels == 0)
+ track->pyramid_levels = 2;
+
+ if (track->minimum_correlation == 0.0f)
+ track->minimum_correlation = 0.75f;
+
+ track = track->next;
}
}
}
}
-
+
if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 6)) {
Scene *sce;
MovieClip *clip;
bScreen *sc;
-
+
for (sce = main->scene.first; sce; sce = sce->id.next) {
do_versions_image_settings_2_60(sce);
}
-
+
for (clip= main->movieclip.first; clip; clip= clip->id.next) {
MovieTrackingSettings *settings= &clip->tracking.settings;
-
- if (settings->default_pyramid_levels==0) {
+
+ if (settings->default_pyramid_levels == 0) {
settings->default_tracker= TRACKER_KLT;
- settings->default_pyramid_levels= 2;
- settings->default_minimum_correlation= 0.75;
- settings->default_pattern_size= 11;
- settings->default_search_size= 51;
+ settings->default_pyramid_levels = 2;
+ settings->default_minimum_correlation = 0.75;
+ settings->default_pattern_size = 11;
+ settings->default_search_size = 51;
}
}
-
- for (sc= main->screen.first; sc; sc= sc->id.next) {
+
+ for (sc = main->screen.first; sc; sc = sc->id.next) {
ScrArea *sa;
- for (sa= sc->areabase.first; sa; sa= sa->next) {
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
SpaceLink *sl;
- for (sl= sa->spacedata.first; sl; sl= sl->next) {
- if (sl->spacetype==SPACE_VIEW3D) {
- View3D *v3d= (View3D *)sl;
- v3d->flag2&= ~V3D_RENDER_SHADOW;
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ v3d->flag2 &= ~V3D_RENDER_SHADOW;
}
}
}
}
-
+
{
Object *ob;
- for (ob= main->object.first; ob; ob= ob->id.next) {
+ for (ob = main->object.first; ob; ob = ob->id.next) {
/* convert delta addition into delta scale */
int i;
for (i= 0; i < 3; i++) {
@@ -7288,17 +7270,17 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
* at some point this could be removed. */
else if (main->versionfile == 260 && main->subversionfile == 6) {
Object *ob;
- for (ob = main->object.first; ob; ob= ob->id.next) {
+ for (ob = main->object.first; ob; ob = ob->id.next) {
if (is_zero_v3(ob->dscale)) {
fill_vn_fl(ob->dscale, 3, 1.0f);
}
}
}
-
+
if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 8)) {
Brush *brush;
-
- for (brush= main->brush.first; brush; brush= brush->id.next) {
+
+ for (brush = main->brush.first; brush; brush = brush->id.next) {
if (brush->sculpt_tool == SCULPT_TOOL_ROTATE)
brush->alpha= 1.0f;
}
@@ -7313,34 +7295,40 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Lamp *lamp;
World *world;
bNodeTree *ntree;
-
- for (sce=main->scene.first; sce; sce=sce->id.next)
+
+ for (sce = main->scene.first; sce; sce = sce->id.next) {
if (sce->nodetree)
do_versions_nodetree_socket_use_flags_2_62(sce->nodetree);
-
- for (mat=main->mat.first; mat; mat=mat->id.next)
+ }
+
+ for (mat = main->mat.first; mat; mat = mat->id.next) {
if (mat->nodetree)
do_versions_nodetree_socket_use_flags_2_62(mat->nodetree);
-
- for (tex=main->tex.first; tex; tex=tex->id.next)
+ }
+
+ for (tex = main->tex.first; tex; tex = tex->id.next) {
if (tex->nodetree)
do_versions_nodetree_socket_use_flags_2_62(tex->nodetree);
-
- for (lamp=main->lamp.first; lamp; lamp=lamp->id.next)
+ }
+
+ for (lamp = main->lamp.first; lamp; lamp = lamp->id.next) {
if (lamp->nodetree)
do_versions_nodetree_socket_use_flags_2_62(lamp->nodetree);
-
- for (world=main->world.first; world; world=world->id.next)
+ }
+
+ for (world = main->world.first; world; world = world->id.next) {
if (world->nodetree)
do_versions_nodetree_socket_use_flags_2_62(world->nodetree);
-
- for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+ }
+
+ for (ntree = main->nodetree.first; ntree; ntree = ntree->id.next) {
do_versions_nodetree_socket_use_flags_2_62(ntree);
+ }
}
{
/* Initialize BGE exit key to esc key */
Scene *scene;
- for (scene= main->scene.first; scene; scene= scene->id.next) {
+ for (scene = main->scene.first; scene; scene = scene->id.next) {
if (!scene->gm.exitkey)
scene->gm.exitkey = 218; // Blender key code for ESC
}
@@ -7348,39 +7336,39 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
{
MovieClip *clip;
Object *ob;
-
- for (clip= main->movieclip.first; clip; clip= clip->id.next) {
- MovieTracking *tracking= &clip->tracking;
- MovieTrackingObject *tracking_object= tracking->objects.first;
-
- clip->proxy.build_tc_flag|= IMB_TC_RECORD_RUN_NO_GAPS;
-
+
+ for (clip = main->movieclip.first; clip; clip = clip->id.next) {
+ MovieTracking *tracking = &clip->tracking;
+ MovieTrackingObject *tracking_object = tracking->objects.first;
+
+ clip->proxy.build_tc_flag |= IMB_TC_RECORD_RUN_NO_GAPS;
+
if (!tracking->settings.object_distance)
- tracking->settings.object_distance= 1.0f;
-
+ tracking->settings.object_distance = 1.0f;
+
if (tracking->objects.first == NULL)
BKE_tracking_new_object(tracking, "Camera");
-
+
while (tracking_object) {
if (!tracking_object->scale)
- tracking_object->scale= 1.0f;
-
- tracking_object= tracking_object->next;
+ tracking_object->scale = 1.0f;
+
+ tracking_object = tracking_object->next;
}
}
-
- for (ob= main->object.first; ob; ob= ob->id.next) {
+
+ for (ob = main->object.first; ob; ob = ob->id.next) {
bConstraint *con;
- for (con= ob->constraints.first; con; con=con->next) {
- bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
-
+ for (con = ob->constraints.first; con; con = con->next) {
+ bConstraintTypeInfo *cti = constraint_get_typeinfo(con);
+
if (!cti)
continue;
-
- if (cti->type==CONSTRAINT_TYPE_OBJECTSOLVER) {
- bObjectSolverConstraint *data= (bObjectSolverConstraint *)con->data;
-
- if (data->invmat[3][3]==0.0f)
+
+ if (cti->type == CONSTRAINT_TYPE_OBJECTSOLVER) {
+ bObjectSolverConstraint *data = (bObjectSolverConstraint *)con->data;
+
+ if (data->invmat[3][3] == 0.0f)
unit_m4(data->invmat);
}
}
@@ -7390,21 +7378,21 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* Warn the user if he is using ["Text"] properties for Font objects */
Object *ob;
bProperty *prop;
-
+
for (ob= main->object.first; ob; ob= ob->id.next) {
if (ob->type == OB_FONT) {
prop = get_ob_property(ob, "Text");
if (prop) {
BKE_reportf_wrap(fd->reports, RPT_WARNING,
"Game property name conflict in object: \"%s\".\nText objects reserve the "
- "[\"Text\"] game property to change their content through Logic Bricks.\n",
- ob->id.name+2);
+ "[\"Text\"] game property to change their content through Logic Bricks.",
+ ob->id.name + 2);
}
}
}
}
}
-
+
if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 2)) {
{
/* convert Camera Actuator values to defines */
@@ -7414,7 +7402,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
for (act= ob->actuators.first; act; act= act->next) {
if (act->type == ACT_CAMERA) {
bCameraActuator *ba= act->data;
-
+
if (ba->axis==(float) 'x') ba->axis=OB_POSX;
else if (ba->axis==(float)'y') ba->axis=OB_POSY;
/* don't do an if/else to avoid imediate subversion bump*/
@@ -7423,7 +7411,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
}
-
+
{
/* convert deprecated sculpt_paint_unified_* fields to
* UnifiedPaintSettings */
@@ -7484,7 +7472,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Object *ob;
for (ob=main->object.first; ob; ob= ob->id.next) {
ModifierData *md;
-
+
for (md=ob->modifiers.first; md; md=md->next) {
if (md->type==eModifierType_Cloth) {
ClothModifierData *clmd = (ClothModifierData*) md;
@@ -7499,7 +7487,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* 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;
-
+
for (ob = main->object.first; ob; ob = ob->id.next) {
ModifierData *md;
for (md = ob->modifiers.first; md; md = md->next) {
@@ -7517,9 +7505,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Scene *sce;
bNodeTree *ntree;
- for (sce=main->scene.first; sce; sce=sce->id.next)
+ for (sce=main->scene.first; sce; sce=sce->id.next) {
if (sce->nodetree)
do_versions_nodetree_multi_file_output_format_2_62_1(sce, sce->nodetree);
+ }
/* XXX can't associate with scene for group nodes, image format will stay uninitialized */
for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
@@ -7534,19 +7523,16 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
do_versions_mesh_mloopcol_swap_2_62_1(me);
}
}
-
}
if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 2)) {
- {
- /* Set new idname of keyingsets from their now "label-only" name. */
- Scene *scene;
- for (scene = main->scene.first; scene; scene = scene->id.next) {
- KeyingSet *ks;
- for (ks = scene->keyingsets.first; ks; ks = ks->next) {
- if (!ks->idname[0])
- BLI_strncpy(ks->idname, ks->name, sizeof(ks->idname));
- }
+ /* Set new idname of keyingsets from their now "label-only" name. */
+ Scene *scene;
+ for (scene = main->scene.first; scene; scene = scene->id.next) {
+ KeyingSet *ks;
+ for (ks = scene->keyingsets.first; ks; ks = ks->next) {
+ if (!ks->idname[0])
+ BLI_strncpy(ks->idname, ks->name, sizeof(ks->idname));
}
}
}
@@ -7554,9 +7540,9 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 3)) {
Object *ob;
ModifierData *md;
-
+
for (ob = main->object.first; ob; ob = ob->id.next) {
- for (md=ob->modifiers.first; md; md=md->next) {
+ for (md = ob->modifiers.first; md; md = md->next) {
if (md->type == eModifierType_Lattice) {
LatticeModifierData *lmd = (LatticeModifierData *)md;
lmd->strength = 1.0f;
@@ -7590,6 +7576,10 @@ 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;
+ for (part = main->particle.first; part; part = part->id.next)
+ part->flag |= PART_ROTATIONS;
{
/* Default for old files is to save particle rotations to pointcache */
ParticleSettings *part;
@@ -7607,15 +7597,18 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
for (ntree = main->nodetree.first; ntree; ntree=ntree->id.next)
do_versions_nodetree_multi_file_output_path_2_64_0(ntree);
}
+
+
+
}
if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 3)) {
Scene *scene;
Brush *brush;
-
+
/* For weight paint, each brush now gets its own weight;
- unified paint settings also have weight. Update unified
- paint settings and brushes with a default weight value. */
+ * unified paint settings also have weight. Update unified
+ * paint settings and brushes with a default weight value. */
for (scene = main->scene.first; scene; scene = scene->id.next) {
ToolSettings *ts = scene->toolsettings;
@@ -7624,38 +7617,38 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ts->unified_paint_settings.flag |= UNIFIED_PAINT_WEIGHT;
}
}
-
+
for (brush = main->brush.first; brush; brush = brush->id.next) {
brush->weight = 0.5;
}
}
-
+
if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 2)) {
bScreen *sc;
-
+
for (sc = main->screen.first; sc; sc = sc->id.next) {
ScrArea *sa;
for (sa = sc->areabase.first; sa; sa = sa->next) {
SpaceLink *sl;
-
+
for (sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_CLIP) {
SpaceClip *sclip = (SpaceClip *)sl;
ARegion *ar;
int hide = FALSE;
-
+
for (ar = sa->regionbase.first; ar; ar = ar->next) {
if (ar->regiontype == RGN_TYPE_PREVIEW) {
if (ar->alignment != RGN_ALIGN_NONE) {
ar->flag |= RGN_FLAG_HIDDEN;
ar->v2d.flag &= ~V2D_IS_INITIALISED;
ar->alignment = RGN_ALIGN_NONE;
-
+
hide = TRUE;
}
}
}
-
+
if (hide) {
sclip->view = SC_VIEW_CLIP;
}
@@ -7670,27 +7663,27 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Lamp *la;
Camera *cam;
Curve *cu;
-
- for (la= main->lamp.first; la; la= la->id.next) {
+
+ for (la = main->lamp.first; la; la = la->id.next) {
if (la->shadow_frustum_size == 0.0f)
la->shadow_frustum_size= 10.0f;
}
-
+
for (cam = main->camera.first; cam; cam = cam->id.next) {
if (cam->flag & CAM_PANORAMA) {
cam->type = CAM_PANO;
cam->flag &= ~CAM_PANORAMA;
}
}
-
- for(cu= main->curve.first; cu; cu= cu->id.next) {
- if(cu->bevfac2 == 0.0f) {
+
+ for(cu = main->curve.first; cu; cu = cu->id.next) {
+ if (cu->bevfac2 == 0.0f) {
cu->bevfac1 = 0.0f;
cu->bevfac2 = 1.0f;
}
}
}
-
+
if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 5))
{
{
@@ -7710,7 +7703,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
}
-
+
/* default values in Freestyle settings */
{
Scene *sce;
@@ -7743,7 +7736,18 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* 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! */
-
+ {
+ Scene *scene;
+ // composite redesign
+ for (scene=main->scene.first; scene; scene=scene->id.next) {
+ if (scene->nodetree) {
+ if (scene->nodetree->chunksize == 0) {
+ scene->nodetree->chunksize = 256;
+ }
+ }
+ }
+ }
+
/* don't forget to set version number in blender.c! */
}
@@ -7787,18 +7791,18 @@ static void lib_link_all(FileData *fd, Main *main)
lib_link_particlesettings(fd, main);
lib_link_movieclip(fd, main);
lib_link_linestyle(fd, main);
-
+
lib_link_mesh(fd, main); /* as last: tpage images with users at zero */
-
+
lib_link_library(fd, main); /* only init users */
}
static void direct_link_keymapitem(FileData *fd, wmKeyMapItem *kmi)
{
- kmi->properties= newdataadr(fd, kmi->properties);
+ kmi->properties = newdataadr(fd, kmi->properties);
if (kmi->properties)
IDP_DirectLinkProperty(kmi->properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
- kmi->ptr= NULL;
+ kmi->ptr = NULL;
kmi->flag &= ~KMI_UPDATE;
}
@@ -7808,68 +7812,68 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
wmKeyMap *keymap;
wmKeyMapItem *kmi;
wmKeyMapDiffItem *kmdi;
-
- bfd->user= user= read_struct(fd, bhead, "user def");
-
+
+ bfd->user = user= read_struct(fd, bhead, "user def");
+
/* read all data into fd->datamap */
- bhead= read_data_into_oldnewmap(fd, bhead, "user def");
-
+ bhead = read_data_into_oldnewmap(fd, bhead, "user def");
+
if (user->keymaps.first) {
/* backwards compatibility */
user->user_keymaps= user->keymaps;
user->keymaps.first= user->keymaps.last= NULL;
}
-
+
link_list(fd, &user->themes);
link_list(fd, &user->user_keymaps);
link_list(fd, &user->addons);
-
+
for (keymap=user->user_keymaps.first; keymap; keymap=keymap->next) {
keymap->modal_items= NULL;
keymap->poll = NULL;
keymap->flag &= ~KEYMAP_UPDATE;
-
+
link_list(fd, &keymap->diff_items);
link_list(fd, &keymap->items);
for (kmdi=keymap->diff_items.first; kmdi; kmdi=kmdi->next) {
kmdi->remove_item= newdataadr(fd, kmdi->remove_item);
kmdi->add_item= newdataadr(fd, kmdi->add_item);
-
+
if (kmdi->remove_item)
direct_link_keymapitem(fd, kmdi->remove_item);
if (kmdi->add_item)
direct_link_keymapitem(fd, kmdi->add_item);
}
-
+
for (kmi=keymap->items.first; kmi; kmi=kmi->next)
direct_link_keymapitem(fd, kmi);
}
-
+
// XXX
- user->uifonts.first= user->uifonts.last= NULL;
+ user->uifonts.first = user->uifonts.last= NULL;
link_list(fd, &user->uistyles);
-
+
/* free fd->datamap again */
oldnewmap_free_unused(fd->datamap);
oldnewmap_clear(fd->datamap);
-
+
return bhead;
}
BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
{
- BHead *bhead= blo_firstbhead(fd);
+ BHead *bhead = blo_firstbhead(fd);
BlendFileData *bfd;
-
- bfd= MEM_callocN(sizeof(BlendFileData), "blendfiledata");
- bfd->main= MEM_callocN(sizeof(Main), "readfile_Main");
+
+ bfd = MEM_callocN(sizeof(BlendFileData), "blendfiledata");
+ bfd->main = MEM_callocN(sizeof(Main), "readfile_Main");
BLI_addtail(&fd->mainlist, bfd->main);
-
- bfd->main->versionfile= fd->fileversion;
- bfd->type= BLENFILETYPE_BLEND;
+ bfd->main->versionfile = fd->fileversion;
+
+ bfd->type = BLENFILETYPE_BLEND;
BLI_strncpy(bfd->main->name, filepath, sizeof(bfd->main->name));
while (bhead) {
@@ -7881,15 +7885,15 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
bhead = blo_nextbhead(fd, bhead);
break;
case GLOB:
- bhead= read_global(bfd, fd, bhead);
+ bhead = read_global(bfd, fd, bhead);
break;
case USER:
- bhead= read_userdef(bfd, fd, bhead);
+ bhead = read_userdef(bfd, fd, bhead);
break;
case ENDB:
bhead = NULL;
break;
-
+
case ID_LI:
/* skip library datablocks in undo, this works together with
* BLO_read_from_memfile, where the old main->library is restored
@@ -7897,14 +7901,14 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
* it did not save ID_LI/ID_ID blocks in this case, but they are
* needed to make quit.blend recover them correctly. */
if (fd->memfile)
- bhead= blo_nextbhead(fd, bhead);
+ bhead = blo_nextbhead(fd, bhead);
else
- bhead= read_libblock(fd, bfd->main, bhead, LIB_LOCAL, NULL);
+ bhead = read_libblock(fd, bfd->main, bhead, LIB_LOCAL, NULL);
break;
case ID_ID:
/* same as above */
if (fd->memfile)
- bhead= blo_nextbhead(fd, bhead);
+ bhead = blo_nextbhead(fd, bhead);
else
/* always adds to the most recently loaded
* ID_LI block, see direct_link_library.
@@ -7914,21 +7918,21 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
/* in 2.50+ files, the file identifier for screens is patched, forward compatibility */
case ID_SCRN:
- bhead->code= ID_SCR;
+ bhead->code = ID_SCR;
/* deliberate pass on to default */
default:
bhead = read_libblock(fd, bfd->main, bhead, LIB_LOCAL, NULL);
}
}
-
+
/* do before read_libraries, but skip undo case */
// if (fd->memfile==NULL) (the mesh shuffle hacks don't work yet? ton)
do_versions(fd, NULL, bfd->main);
-
+
read_libraries(fd, &fd->mainlist);
blo_join_main(&fd->mainlist);
-
+
lib_link_all(fd, bfd->main);
//do_versions_after_linking(fd, NULL, bfd->main); // XXX: not here (or even in this function at all)! this causes crashes on many files - Aligorith (July 04, 2010)
lib_verify_nodetree(bfd->main, TRUE);
@@ -7950,8 +7954,8 @@ static int verg_bheadsort(const void *v1, const void *v2)
{
const struct bheadsort *x1=v1, *x2=v2;
- if ( x1->old > x2->old) return 1;
- else if ( x1->old < x2->old) return -1;
+ if (x1->old > x2->old) return 1;
+ else if (x1->old < x2->old) return -1;
return 0;
}
@@ -7959,23 +7963,22 @@ static void sort_bhead_old_map(FileData *fd)
{
BHead *bhead;
struct bheadsort *bhs;
- int tot= 0;
+ int tot = 0;
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead))
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead))
tot++;
- fd->tot_bheadmap= tot;
- if (tot==0) return;
+ fd->tot_bheadmap = tot;
+ if (tot == 0) return;
- bhs= fd->bheadmap= MEM_mallocN(tot*sizeof(struct bheadsort), "bheadsort");
+ bhs = fd->bheadmap= MEM_mallocN(tot*sizeof(struct bheadsort), "bheadsort");
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead), bhs++) {
- bhs->bhead= bhead;
- bhs->old= bhead->old;
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead), bhs++) {
+ bhs->bhead = bhead;
+ bhs->old = bhead->old;
}
qsort(fd->bheadmap, tot, sizeof(struct bheadsort), verg_bheadsort);
-
}
static BHead *find_previous_lib(FileData *fd, BHead *bhead)
@@ -7984,9 +7987,10 @@ static BHead *find_previous_lib(FileData *fd, BHead *bhead)
if (fd->memfile)
return NULL;
- for (; bhead; bhead= blo_prevbhead(fd, bhead))
- if (bhead->code==ID_LI)
+ for (; bhead; bhead = blo_prevbhead(fd, bhead)) {
+ if (bhead->code == ID_LI)
break;
+ }
return bhead;
}
@@ -8001,19 +8005,20 @@ static BHead *find_bhead(FileData *fd, void *old)
if (!old)
return NULL;
- if (fd->bheadmap==NULL)
+ if (fd->bheadmap == NULL)
sort_bhead_old_map(fd);
- bhs_s.old= old;
- bhs= bsearch(&bhs_s, fd->bheadmap, fd->tot_bheadmap, sizeof(struct bheadsort), verg_bheadsort);
+ bhs_s.old = old;
+ bhs = bsearch(&bhs_s, fd->bheadmap, fd->tot_bheadmap, sizeof(struct bheadsort), verg_bheadsort);
if (bhs)
return bhs->bhead;
#if 0
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead))
- if (bhead->old==old)
+ for (bhead = blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
+ if (bhead->old == old)
return bhead;
+ }
#endif
return NULL;
@@ -8035,26 +8040,26 @@ static void expand_doit(FileData *fd, Main *mainvar, void *old)
{
BHead *bhead;
ID *id;
-
- bhead= find_bhead(fd, old);
+
+ bhead = find_bhead(fd, old);
if (bhead) {
- /* from another library? */
- if (bhead->code==ID_ID) {
+ /* from another library? */
+ if (bhead->code == ID_ID) {
BHead *bheadlib= find_previous_lib(fd, bhead);
-
+
if (bheadlib) {
- Library *lib= read_struct(fd, bheadlib, "Library");
- Main *ptr= blo_find_main(fd, &fd->mainlist, lib->name, fd->relabase);
-
- id= is_yet_read(fd, ptr, bhead);
-
- if (id==NULL) {
+ Library *lib = read_struct(fd, bheadlib, "Library");
+ Main *ptr = blo_find_main(fd, &fd->mainlist, lib->name, fd->relabase);
+
+ id = is_yet_read(fd, ptr, bhead);
+
+ if (id == NULL) {
read_libblock(fd, ptr, bhead, LIB_READ+LIB_INDIRECT, NULL);
// commented because this can print way too much
// if (G.debug & G_DEBUG) printf("expand_doit: other lib %s\n", lib->name);
/* for outliner dependency only */
- ptr->curlib->parent= mainvar->curlib;
+ ptr->curlib->parent = mainvar->curlib;
}
else {
/* The line below was commented by Ton (I assume), when Hos did the merge from the orange branch. rev 6568
@@ -8078,8 +8083,8 @@ static void expand_doit(FileData *fd, Main *mainvar, void *old)
}
}
else {
- id= is_yet_read(fd, mainvar, bhead);
- if (id==NULL) {
+ id = is_yet_read(fd, mainvar, bhead);
+ if (id == NULL) {
read_libblock(fd, mainvar, bhead, LIB_TESTIND, NULL);
}
else {
@@ -8099,7 +8104,7 @@ static void expand_doit(FileData *fd, Main *mainvar, void *old)
static void expand_ipo(FileData *fd, Main *mainvar, Ipo *ipo)
{
IpoCurve *icu;
- for (icu= ipo->curve.first; icu; icu= icu->next) {
+ for (icu = ipo->curve.first; icu; icu = icu->next) {
if (icu->driver)
expand_doit(fd, mainvar, icu->driver->ob);
}
@@ -8109,7 +8114,7 @@ static void expand_ipo(FileData *fd, Main *mainvar, Ipo *ipo)
static void expand_constraint_channels(FileData *fd, Main *mainvar, ListBase *chanbase)
{
bConstraintChannel *chan;
- for (chan=chanbase->first; chan; chan=chan->next) {
+ for (chan = chanbase->first; chan; chan = chan->next) {
expand_doit(fd, mainvar, chan->ipo);
}
}
@@ -8118,12 +8123,12 @@ static void expand_fmodifiers(FileData *fd, Main *mainvar, ListBase *list)
{
FModifier *fcm;
- for (fcm= list->first; fcm; fcm= fcm->next) {
+ for (fcm = list->first; fcm; fcm = fcm->next) {
/* library data for specific F-Modifier types */
switch (fcm->type) {
case FMODIFIER_TYPE_PYTHON:
{
- FMod_Python *data= (FMod_Python *)fcm->data;
+ FMod_Python *data = (FMod_Python *)fcm->data;
expand_doit(fd, mainvar, data->script);
}
@@ -8136,13 +8141,13 @@ static void expand_fcurves(FileData *fd, Main *mainvar, ListBase *list)
{
FCurve *fcu;
- for (fcu= list->first; fcu; fcu= fcu->next) {
+ for (fcu = list->first; fcu; fcu = fcu->next) {
/* Driver targets if there is a driver */
if (fcu->driver) {
- ChannelDriver *driver= fcu->driver;
+ ChannelDriver *driver = fcu->driver;
DriverVar *dvar;
- for (dvar= driver->variables.first; dvar; dvar= dvar->next) {
+ for (dvar = driver->variables.first; dvar; dvar = dvar->next) {
DRIVER_TARGETS_LOOPER(dvar)
{
// TODO: only expand those that are going to get used?
@@ -8178,8 +8183,8 @@ static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list)
KS_Path *ksp;
/* expand the ID-pointers in KeyingSets's paths */
- for (ks= list->first; ks; ks= ks->next) {
- for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
+ for (ks = list->first; ks; ks = ks->next) {
+ for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
expand_doit(fd, mainvar, ksp->id);
}
}
@@ -8216,14 +8221,14 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
expand_fcurves(fd, mainvar, &adt->drivers);
/* nla-data - referenced actions */
- for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next)
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next)
expand_animdata_nlastrips(fd, mainvar, &nlt->strips);
}
static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSettings *part)
{
int a;
-
+
expand_doit(fd, mainvar, part->dup_ob);
expand_doit(fd, mainvar, part->dup_group);
expand_doit(fd, mainvar, part->eff_group);
@@ -8231,8 +8236,8 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting
if (part->adt)
expand_animdata(fd, mainvar, part->adt);
-
- for (a=0; a<MAX_MTEX; a++) {
+
+ for (a = 0; a < MAX_MTEX; a++) {
if (part->mtex[a]) {
expand_doit(fd, mainvar, part->mtex[a]->tex);
expand_doit(fd, mainvar, part->mtex[a]->object);
@@ -8244,7 +8249,7 @@ static void expand_group(FileData *fd, Main *mainvar, Group *group)
{
GroupObject *go;
- for (go= group->gobject.first; go; go= go->next) {
+ for (go = group->gobject.first; go; go = go->next) {
expand_doit(fd, mainvar, go->ob);
}
}
@@ -8267,9 +8272,10 @@ static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree)
if (ntree->gpd)
expand_doit(fd, mainvar, ntree->gpd);
- for (node= ntree->nodes.first; node; node= node->next)
- if (node->id && node->type!=CMP_NODE_R_LAYERS)
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->id && node->type != CMP_NODE_R_LAYERS)
expand_doit(fd, mainvar, node->id);
+ }
}
@@ -8294,8 +8300,8 @@ static void expand_brush(FileData *fd, Main *mainvar, Brush *brush)
static void expand_material(FileData *fd, Main *mainvar, Material *ma)
{
int a;
-
- for (a=0; a<MAX_MTEX; a++) {
+
+ for (a = 0; a < MAX_MTEX; a++) {
if (ma->mtex[a]) {
expand_doit(fd, mainvar, ma->mtex[a]->tex);
expand_doit(fd, mainvar, ma->mtex[a]->object);
@@ -8317,8 +8323,8 @@ static void expand_material(FileData *fd, Main *mainvar, Material *ma)
static void expand_lamp(FileData *fd, Main *mainvar, Lamp *la)
{
int a;
-
- for (a=0; a<MAX_MTEX; a++) {
+
+ for (a = 0; a < MAX_MTEX; a++) {
if (la->mtex[a]) {
expand_doit(fd, mainvar, la->mtex[a]->tex);
expand_doit(fd, mainvar, la->mtex[a]->object);
@@ -8329,7 +8335,7 @@ static void expand_lamp(FileData *fd, Main *mainvar, Lamp *la)
if (la->adt)
expand_animdata(fd, mainvar, la->adt);
-
+
if (la->nodetree)
expand_nodetree(fd, mainvar, la->nodetree);
}
@@ -8347,8 +8353,8 @@ static void expand_lattice(FileData *fd, Main *mainvar, Lattice *lt)
static void expand_world(FileData *fd, Main *mainvar, World *wrld)
{
int a;
-
- for (a=0; a<MAX_MTEX; a++) {
+
+ for (a = 0; a < MAX_MTEX; a++) {
if (wrld->mtex[a]) {
expand_doit(fd, mainvar, wrld->mtex[a]->tex);
expand_doit(fd, mainvar, wrld->mtex[a]->object);
@@ -8359,7 +8365,7 @@ static void expand_world(FileData *fd, Main *mainvar, World *wrld)
if (wrld->adt)
expand_animdata(fd, mainvar, wrld->adt);
-
+
if (wrld->nodetree)
expand_nodetree(fd, mainvar, wrld->nodetree);
}
@@ -8368,8 +8374,8 @@ static void expand_world(FileData *fd, Main *mainvar, World *wrld)
static void expand_mball(FileData *fd, Main *mainvar, MetaBall *mb)
{
int a;
-
- for (a=0; a<mb->totcol; a++) {
+
+ for (a = 0; a < mb->totcol; a++) {
expand_doit(fd, mainvar, mb->mat[a]);
}
@@ -8380,8 +8386,8 @@ static void expand_mball(FileData *fd, Main *mainvar, MetaBall *mb)
static void expand_curve(FileData *fd, Main *mainvar, Curve *cu)
{
int a;
-
- for (a=0; a<cu->totcol; a++) {
+
+ for (a = 0; a < cu->totcol; a++) {
expand_doit(fd, mainvar, cu->mat[a]);
}
@@ -8409,28 +8415,30 @@ static void expand_mesh(FileData *fd, Main *mainvar, Mesh *me)
if (me->adt)
expand_animdata(fd, mainvar, me->adt);
- for (a=0; a<me->totcol; a++) {
+ for (a = 0; a < me->totcol; a++) {
expand_doit(fd, mainvar, me->mat[a]);
}
-
+
expand_doit(fd, mainvar, me->key);
expand_doit(fd, mainvar, me->texcomesh);
-
+
if (me->tface) {
- tf= me->tface;
- for (i=0; i<me->totface; i++, tf++)
+ tf = me->tface;
+ for (i=0; i<me->totface; i++, tf++) {
if (tf->tpage)
expand_doit(fd, mainvar, tf->tpage);
+ }
}
- for (a=0; a<me->fdata.totlayer; a++) {
- layer= &me->fdata.layers[a];
-
+ for (a = 0; a < me->fdata.totlayer; a++) {
+ layer = &me->fdata.layers[a];
+
if (layer->type == CD_MTFACE) {
- mtf= (MTFace*)layer->data;
- for (i=0; i<me->totface; i++, mtf++)
+ mtf = (MTFace*)layer->data;
+ for (i = 0; i < me->totface; i++, mtf++) {
if (mtf->tpage)
expand_doit(fd, mainvar, mtf->tpage);
+ }
}
}
}
@@ -8443,7 +8451,7 @@ typedef struct tConstraintExpandData {
/* callback function used to expand constraint ID-links */
static void expand_constraint_cb(bConstraint *UNUSED(con), ID **idpoin, short UNUSED(isReference), void *userdata)
{
- tConstraintExpandData *ced= (tConstraintExpandData *)userdata;
+ tConstraintExpandData *ced = (tConstraintExpandData *)userdata;
expand_doit(ced->fd, ced->mainvar, *idpoin);
}
@@ -8453,13 +8461,13 @@ static void expand_constraints(FileData *fd, Main *mainvar, ListBase *lb)
bConstraint *curcon;
/* relink all ID-blocks used by the constraints */
- ced.fd= fd;
- ced.mainvar= mainvar;
+ ced.fd = fd;
+ ced.mainvar = mainvar;
id_loop_constraints(lb, expand_constraint_cb, &ced);
/* depreceated manual expansion stuff */
- for (curcon=lb->first; curcon; curcon=curcon->next) {
+ for (curcon = lb->first; curcon; curcon = curcon->next) {
if (curcon->ipo)
expand_doit(fd, mainvar, curcon->ipo); // XXX depreceated - old animation system
}
@@ -8468,21 +8476,20 @@ static void expand_constraints(FileData *fd, Main *mainvar, ListBase *lb)
static void expand_bones(FileData *fd, Main *mainvar, Bone *bone)
{
Bone *curBone;
-
+
for (curBone = bone->childbase.first; curBone; curBone=curBone->next) {
expand_bones(fd, mainvar, curBone);
}
-
}
static void expand_pose(FileData *fd, Main *mainvar, bPose *pose)
{
bPoseChannel *chan;
-
+
if (!pose)
return;
-
- for (chan = pose->chanbase.first; chan; chan=chan->next) {
+
+ for (chan = pose->chanbase.first; chan; chan = chan->next) {
expand_constraints(fd, mainvar, &chan->constraints);
expand_doit(fd, mainvar, chan->custom);
}
@@ -8491,10 +8498,10 @@ static void expand_pose(FileData *fd, Main *mainvar, bPose *pose)
static void expand_armature(FileData *fd, Main *mainvar, bArmature *arm)
{
Bone *curBone;
-
+
if (arm->adt)
expand_animdata(fd, mainvar, arm->adt);
-
+
for (curBone = arm->bonebase.first; curBone; curBone=curBone->next) {
expand_bones(fd, mainvar, curBone);
}
@@ -8504,10 +8511,10 @@ static void expand_object_expandModifiers(void *userData, Object *UNUSED(ob),
ID **idpoin)
{
struct { FileData *fd; Main *mainvar; } *data= userData;
-
- FileData *fd= data->fd;
- Main *mainvar= data->mainvar;
-
+
+ FileData *fd = data->fd;
+ Main *mainvar = data->mainvar;
+
expand_doit(fd, mainvar, *idpoin);
}
@@ -8520,18 +8527,18 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
bActionStrip *strip;
PartEff *paf;
int a;
-
+
expand_doit(fd, mainvar, ob->data);
-
+
/* expand_object_expandModifier() */
if (ob->modifiers.first) {
struct { FileData *fd; Main *mainvar; } data;
- data.fd= fd;
- data.mainvar= mainvar;
-
+ data.fd = fd;
+ data.mainvar = mainvar;
+
modifiers_foreachIDLink(ob, expand_object_expandModifiers, (void *)&data);
}
-
+
expand_pose(fd, mainvar, ob->pose);
expand_doit(fd, mainvar, ob->poselib);
expand_constraints(fd, mainvar, &ob->constraints);
@@ -8543,7 +8550,7 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
expand_doit(fd, mainvar, ob->action);
expand_constraint_channels(fd, mainvar, &ob->constraintChannels);
-
+
for (strip=ob->nlastrips.first; strip; strip=strip->next) {
expand_doit(fd, mainvar, strip->object);
expand_doit(fd, mainvar, strip->act);
@@ -8554,14 +8561,14 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
if (ob->adt)
expand_animdata(fd, mainvar, ob->adt);
- for (a=0; a<ob->totcol; a++) {
+ for (a = 0; a < ob->totcol; a++) {
expand_doit(fd, mainvar, ob->mat[a]);
}
paf = blo_do_version_give_parteff_245(ob);
if (paf && paf->group)
expand_doit(fd, mainvar, paf->group);
-
+
if (ob->dup_group)
expand_doit(fd, mainvar, ob->dup_group);
@@ -8569,98 +8576,92 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
expand_doit(fd, mainvar, ob->proxy);
if (ob->proxy_group)
expand_doit(fd, mainvar, ob->proxy_group);
-
- for (psys=ob->particlesystem.first; psys; psys=psys->next)
+
+ for (psys = ob->particlesystem.first; psys; psys = psys->next)
expand_doit(fd, mainvar, psys->part);
-
- sens= ob->sensors.first;
- while (sens) {
- if (sens->type==SENS_TOUCH) {
- bTouchSensor *ts= sens->data;
+
+ for (sens = ob->sensors.first; sens; sens = sens->next) {
+ if (sens->type == SENS_TOUCH) {
+ bTouchSensor *ts = sens->data;
expand_doit(fd, mainvar, ts->ma);
}
- else if (sens->type==SENS_MESSAGE) {
- bMessageSensor *ms= sens->data;
+ else if (sens->type == SENS_MESSAGE) {
+ bMessageSensor *ms = sens->data;
expand_doit(fd, mainvar, ms->fromObject);
}
- sens= sens->next;
}
-
- cont= ob->controllers.first;
- while (cont) {
- if (cont->type==CONT_PYTHON) {
- bPythonCont *pc= cont->data;
+
+ for (cont = ob->controllers.first; cont; cont = cont->next) {
+ if (cont->type == CONT_PYTHON) {
+ bPythonCont *pc = cont->data;
expand_doit(fd, mainvar, pc->text);
}
- cont= cont->next;
}
-
- act= ob->actuators.first;
- while (act) {
- if (act->type==ACT_SOUND) {
- bSoundActuator *sa= act->data;
+
+ for (act = ob->actuators.first; act; act = act->next) {
+ if (act->type == ACT_SOUND) {
+ bSoundActuator *sa = act->data;
expand_doit(fd, mainvar, sa->sound);
}
- else if (act->type==ACT_CAMERA) {
- bCameraActuator *ca= act->data;
+ else if (act->type == ACT_CAMERA) {
+ bCameraActuator *ca = act->data;
expand_doit(fd, mainvar, ca->ob);
}
- else if (act->type==ACT_EDIT_OBJECT) {
- bEditObjectActuator *eoa= act->data;
+ else if (act->type == ACT_EDIT_OBJECT) {
+ bEditObjectActuator *eoa = act->data;
if (eoa) {
expand_doit(fd, mainvar, eoa->ob);
expand_doit(fd, mainvar, eoa->me);
}
}
- else if (act->type==ACT_OBJECT) {
- bObjectActuator *oa= act->data;
+ else if (act->type == ACT_OBJECT) {
+ bObjectActuator *oa = act->data;
expand_doit(fd, mainvar, oa->reference);
}
- else if (act->type==ACT_ADD_OBJECT) {
- bAddObjectActuator *aoa= act->data;
+ else if (act->type == ACT_ADD_OBJECT) {
+ bAddObjectActuator *aoa = act->data;
expand_doit(fd, mainvar, aoa->ob);
}
- else if (act->type==ACT_SCENE) {
- bSceneActuator *sa= act->data;
+ else if (act->type == ACT_SCENE) {
+ bSceneActuator *sa = act->data;
expand_doit(fd, mainvar, sa->camera);
expand_doit(fd, mainvar, sa->scene);
}
- else if (act->type==ACT_2DFILTER) {
- bTwoDFilterActuator *tdfa= act->data;
+ else if (act->type == ACT_2DFILTER) {
+ bTwoDFilterActuator *tdfa = act->data;
expand_doit(fd, mainvar, tdfa->text);
}
- else if (act->type==ACT_ACTION) {
- bActionActuator *aa= act->data;
+ else if (act->type == ACT_ACTION) {
+ bActionActuator *aa = act->data;
expand_doit(fd, mainvar, aa->act);
}
- else if (act->type==ACT_SHAPEACTION) {
- bActionActuator *aa= act->data;
+ else if (act->type == ACT_SHAPEACTION) {
+ bActionActuator *aa = act->data;
expand_doit(fd, mainvar, aa->act);
}
- else if (act->type==ACT_PROPERTY) {
- bPropertyActuator *pa= act->data;
+ else if (act->type == ACT_PROPERTY) {
+ bPropertyActuator *pa = act->data;
expand_doit(fd, mainvar, pa->ob);
}
- else if (act->type==ACT_MESSAGE) {
- bMessageActuator *ma= act->data;
+ else if (act->type == ACT_MESSAGE) {
+ bMessageActuator *ma = act->data;
expand_doit(fd, mainvar, ma->toObject);
}
else if (act->type==ACT_PARENT) {
- bParentActuator *pa= act->data;
+ bParentActuator *pa = act->data;
expand_doit(fd, mainvar, pa->ob);
}
- else if (act->type==ACT_ARMATURE) {
- bArmatureActuator *arma= act->data;
+ else if (act->type == ACT_ARMATURE) {
+ bArmatureActuator *arma = act->data;
expand_doit(fd, mainvar, arma->target);
}
- else if (act->type==ACT_STEERING) {
- bSteeringActuator *sta= act->data;
+ else if (act->type == ACT_STEERING) {
+ bSteeringActuator *sta = act->data;
expand_doit(fd, mainvar, sta->target);
expand_doit(fd, mainvar, sta->navmesh);
}
- act= act->next;
}
-
+
if (ob->pd && ob->pd->tex)
expand_doit(fd, mainvar, ob->pd->tex);
@@ -8671,8 +8672,8 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
Base *base;
SceneRenderLayer *srl;
FreestyleLineSet *lineset;
-
- for (base= sce->base.first; base; base= base->next) {
+
+ for (base = sce->base.first; base; base = base->next) {
expand_doit(fd, mainvar, base->object);
}
expand_doit(fd, mainvar, sce->camera);
@@ -8688,26 +8689,26 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
if (sce->nodetree)
expand_nodetree(fd, mainvar, sce->nodetree);
- for (srl= sce->r.layers.first; srl; srl= srl->next) {
+ for (srl = sce->r.layers.first; srl; srl = srl->next) {
expand_doit(fd, mainvar, srl->mat_override);
expand_doit(fd, mainvar, srl->light_override);
- for (lineset= srl->freestyleConfig.linesets.first; lineset; lineset= lineset->next) {
+ for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) {
if (lineset->group)
expand_doit(fd, mainvar, lineset->group);
expand_doit(fd, mainvar, lineset->linestyle);
}
}
-
+
if (sce->r.dometext)
expand_doit(fd, mainvar, sce->gm.dome.warptext);
-
+
if (sce->gpd)
expand_doit(fd, mainvar, sce->gpd);
-
+
if (sce->ed) {
Sequence *seq;
-
+
SEQ_BEGIN (sce->ed, seq)
{
if (seq->scene) expand_doit(fd, mainvar, seq->scene);
@@ -8721,7 +8722,7 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
{
TimeMarker *marker;
- for (marker= sce->markers.first; marker; marker= marker->next) {
+ for (marker = sce->markers.first; marker; marker = marker->next) {
if (marker->camera) {
expand_doit(fd, mainvar, marker->camera);
}
@@ -8782,22 +8783,19 @@ static void expand_main(FileData *fd, Main *mainvar)
{
ListBase *lbarray[MAX_LIBARRAY];
ID *id;
- int a, doit= 1;
-
- if (fd==NULL) return;
-
+ int a, doit = 1;
+
+ if (fd == NULL) return;
+
while (doit) {
- doit= 0;
-
- a= set_listbasepointers(mainvar, lbarray);
+ doit = 0;
+
+ a = set_listbasepointers(mainvar, lbarray);
while (a--) {
id= lbarray[a]->first;
-
while (id) {
if (id->flag & LIB_TEST) {
-
switch (GS(id->name)) {
-
case ID_OB:
expand_object(fd, mainvar, (Object *)id);
break;
@@ -8868,12 +8866,12 @@ static void expand_main(FileData *fd, Main *mainvar)
expand_linestyle(fd, mainvar, (FreestyleLineStyle *)id);
break;
}
-
- doit= 1;
+
+ doit = 1;
id->flag -= LIB_TEST;
-
+
}
- id= id->next;
+ id = id->next;
}
}
}
@@ -8883,9 +8881,11 @@ static int object_in_any_scene(Main *mainvar, Object *ob)
{
Scene *sce;
- for (sce= mainvar->scene.first; sce; sce= sce->id.next)
+ for (sce= mainvar->scene.first; sce; sce= sce->id.next) {
if (BKE_scene_base_find(sce, ob))
return 1;
+ }
+
return 0;
}
@@ -8893,29 +8893,26 @@ static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, const
{
Object *ob;
Base *base;
- const short is_group_append= (is_link==FALSE && idcode==ID_GR);
+ const short is_group_append = (is_link==FALSE && idcode==ID_GR);
/* give all objects which are LIB_INDIRECT a base, or for a group when *lib has been set */
for (ob= mainvar->object.first; ob; ob= ob->id.next) {
-
if ( ob->id.flag & LIB_INDIRECT ) {
-
/* IF below is quite confusing!
* if we are appending, but this object wasnt just added along with a group,
* then this is already used indirectly in the scene somewhere else and we didnt just append it.
*
* (ob->id.flag & LIB_PRE_EXISTING)==0 means that this is a newly appended object - Campbell */
if (is_group_append==0 || (ob->id.flag & LIB_PRE_EXISTING)==0) {
-
int do_it= 0;
- if (ob->id.us==0) {
- do_it= 1;
+ if (ob->id.us == 0) {
+ do_it = 1;
}
else if (idcode==ID_GR) {
if (ob->id.us==1 && is_link==FALSE && ob->id.lib==lib) {
if ((ob->flag & OB_FROMGROUP) && object_in_any_scene(mainvar, ob)==0) {
- do_it= 1;
+ do_it = 1;
}
}
}
@@ -8923,25 +8920,23 @@ static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, const
/* when appending, make sure any indirectly loaded objects
* get a base else they cant be accessed at all [#27437] */
if (ob->id.us==1 && is_link==FALSE && ob->id.lib==lib) {
-
/* we may be appending from a scene where we already
* have a linked object which is not in any scene [#27616] */
if ((ob->id.flag & LIB_PRE_EXISTING)==0) {
-
if (object_in_any_scene(mainvar, ob)==0) {
- do_it= 1;
+ do_it = 1;
}
}
}
}
-
+
if (do_it) {
- base= MEM_callocN(sizeof(Base), "add_ext_base");
+ base = MEM_callocN(sizeof(Base), "add_ext_base");
BLI_addtail(&(sce->base), base);
- base->lay= ob->lay;
- base->object= ob;
- base->flag= ob->flag;
- ob->id.us= 1;
+ base->lay = ob->lay;
+ base->object = ob;
+ base->flag = ob->flag;
+ ob->id.us = 1;
ob->id.flag -= LIB_INDIRECT;
ob->id.flag |= LIB_EXTERN;
@@ -8954,26 +8949,26 @@ static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, const
static void give_base_to_groups(Main *mainvar, Scene *scene)
{
Group *group;
-
+
/* give all objects which are LIB_INDIRECT a base, or for a group when *lib has been set */
- for (group= mainvar->group.first; group; group= group->id.next) {
+ for (group = mainvar->group.first; group; group = group->id.next) {
if (((group->id.flag & LIB_INDIRECT)==0 && (group->id.flag & LIB_PRE_EXISTING)==0)) {
Base *base;
-
+
/* BKE_object_add(...) messes with the selection */
- Object *ob= BKE_object_add_only_object(OB_EMPTY, group->id.name+2);
- ob->type= OB_EMPTY;
- ob->lay= scene->lay;
-
+ Object *ob = BKE_object_add_only_object(OB_EMPTY, group->id.name+2);
+ ob->type = OB_EMPTY;
+ ob->lay = scene->lay;
+
/* assign the base */
- base= BKE_scene_base_add(scene, ob);
+ base = BKE_scene_base_add(scene, ob);
base->flag |= SELECT;
base->object->flag= base->flag;
ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
- scene->basact= base;
-
+ scene->basact = base;
+
/* assign the group */
- ob->dup_group= group;
+ ob->dup_group = group;
ob->transflag |= OB_DUPLIGROUP;
rename_id(&ob->id, group->id.name+2);
copy_v3_v3(ob->loc, scene->cursor);
@@ -8986,23 +8981,23 @@ static void give_base_to_groups(Main *mainvar, Scene *scene)
static ID *append_named_part(Main *mainl, FileData *fd, const char *idname, const short idcode)
{
BHead *bhead;
- ID *id= NULL;
- int found=0;
+ ID *id = NULL;
+ int found = 0;
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
- if (bhead->code==idcode) {
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead)) {
+ if (bhead->code == idcode) {
const char *idname_test= bhead_id_name(fd, bhead);
-
- if (strcmp(idname_test + 2, idname)==0) {
- found= 1;
- id= is_yet_read(fd, mainl, bhead);
- if (id==NULL) {
+
+ if (strcmp(idname_test + 2, idname) == 0) {
+ found = 1;
+ id = is_yet_read(fd, mainl, bhead);
+ if (id == NULL) {
/* not read yet */
read_libblock(fd, mainl, bhead, LIB_TESTEXT, &id);
-
+
if (id) {
/* sort by name in list */
- ListBase *lb= which_libbase(mainl, idcode);
+ ListBase *lb = which_libbase(mainl, idcode);
id_sort_by_name(lb, id);
}
}
@@ -9015,19 +9010,19 @@ static ID *append_named_part(Main *mainl, FileData *fd, const char *idname, cons
id->flag |= LIB_EXTERN;
}
}
-
+
break;
}
}
- else if (bhead->code==ENDB) {
+ else if (bhead->code == ENDB) {
break;
}
}
-
+
/* if we found the id but the id is NULL, this is really bad */
BLI_assert((found != 0) == (id != NULL));
-
- return found ? id : NULL;
+
+ return (found) ? id : NULL;
}
static ID *append_named_part_ex(const bContext *C, Main *mainl, FileData *fd, const char *idname, const int idcode, const int flag)
@@ -9035,27 +9030,27 @@ static ID *append_named_part_ex(const bContext *C, Main *mainl, FileData *fd, co
ID *id= append_named_part(mainl, fd, idname, idcode);
if (id && (GS(id->name) == ID_OB)) { /* loose object: give a base */
- Scene *scene= CTX_data_scene(C); /* can be NULL */
+ Scene *scene = CTX_data_scene(C); /* can be NULL */
if (scene) {
Base *base;
Object *ob;
-
+
base= MEM_callocN(sizeof(Base), "app_nam_part");
BLI_addtail(&scene->base, base);
-
- ob= (Object *)id;
-
+
+ ob = (Object *)id;
+
/* link at active layer (view3d->lay if in context, else scene->lay */
if ((flag & FILE_ACTIVELAY)) {
View3D *v3d = CTX_wm_view3d(C);
ob->lay = v3d ? v3d->layact : scene->lay;
}
-
- ob->mode= 0;
- base->lay= ob->lay;
- base->object= ob;
+
+ ob->mode = 0;
+ base->lay = ob->lay;
+ base->object = ob;
ob->id.us++;
-
+
if (flag & FILE_AUTOSELECT) {
base->flag |= SELECT;
base->object->flag = base->flag;
@@ -9063,35 +9058,35 @@ static ID *append_named_part_ex(const bContext *C, Main *mainl, FileData *fd, co
}
}
}
-
+
return id;
}
ID *BLO_library_append_named_part(Main *mainl, BlendHandle** bh, const char *idname, const int idcode)
{
- FileData *fd= (FileData*)(*bh);
+ FileData *fd = (FileData*)(*bh);
return append_named_part(mainl, fd, idname, idcode);
}
ID *BLO_library_append_named_part_ex(const bContext *C, Main *mainl, BlendHandle** bh, const char *idname, const int idcode, const short flag)
{
- FileData *fd= (FileData*)(*bh);
+ FileData *fd = (FileData*)(*bh);
return append_named_part_ex(C, mainl, fd, idname, idcode, flag);
}
static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **id_r)
{
BHead *bhead;
-
- for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
+
+ for (bhead = blo_firstbhead(fd); bhead; bhead = blo_nextbhead(fd, bhead)) {
if (bhead->code == GS(id->name)) {
-
+
if (strcmp(id->name, bhead_id_name(fd, bhead))==0) {
id->flag &= ~LIB_READ;
id->flag |= LIB_TEST;
// printf("read lib block %s\n", id->name);
read_libblock(fd, mainvar, bhead, id->flag, id_r);
-
+
break;
}
}
@@ -9105,15 +9100,15 @@ static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **id_r)
static Main* library_append_begin(Main *mainvar, FileData **fd, const char *filepath)
{
Main *mainl;
-
+
/* make mains */
blo_split_main(&(*fd)->mainlist, mainvar);
-
+
/* which one do we need? */
mainl = blo_find_main(*fd, &(*fd)->mainlist, filepath, G.main->name);
/* needed for do_version */
- mainl->versionfile= (*fd)->fileversion;
+ mainl->versionfile = (*fd)->fileversion;
read_file_version(*fd, mainl);
return mainl;
@@ -9121,7 +9116,7 @@ static Main* library_append_begin(Main *mainvar, FileData **fd, const char *file
Main* BLO_library_append_begin(Main *mainvar, BlendHandle** bh, const char *filepath)
{
- FileData *fd= (FileData*)(*bh);
+ FileData *fd = (FileData*)(*bh);
return library_append_begin(mainvar, &fd, filepath);
}
@@ -9131,45 +9126,44 @@ static void library_append_end(const bContext *C, Main *mainl, FileData **fd, in
{
Main *mainvar;
Library *curlib;
-
+
/* make main consistent */
expand_main(*fd, mainl);
-
+
/* do this when expand found other libs */
read_libraries(*fd, &(*fd)->mainlist);
- curlib= mainl->curlib;
-
+ curlib = mainl->curlib;
+
/* make the lib path relative if required */
if (flag & FILE_RELPATH) {
-
/* use the full path, this could have been read by other library even */
BLI_strncpy(curlib->name, curlib->filepath, sizeof(curlib->name));
/* uses current .blend file as reference */
BLI_path_rel(curlib->name, G.main->name);
}
-
+
blo_join_main(&(*fd)->mainlist);
- mainvar= (*fd)->mainlist.first;
- mainl= NULL; /* blo_join_main free's mainl, cant use anymore */
-
+ mainvar = (*fd)->mainlist.first;
+ mainl = NULL; /* blo_join_main free's mainl, cant use anymore */
+
lib_link_all(*fd, mainvar);
lib_verify_nodetree(mainvar, FALSE);
fix_relpaths_library(G.main->name, mainvar); /* make all relative paths, relative to the open blend file */
-
+
if (C) {
- Scene *scene= CTX_data_scene(C);
-
+ Scene *scene = CTX_data_scene(C);
+
/* give a base to loose objects. If group append, do it for objects too */
if (scene) {
- const short is_link= (flag & FILE_LINK) != 0;
- if (idcode==ID_SCE) {
+ const short is_link = (flag & FILE_LINK) != 0;
+ if (idcode == ID_SCE) {
/* don't instance anything when linking in scenes, assume the scene its self instances the data */
}
else {
give_base_to_objects(mainvar, scene, curlib, idcode, is_link);
-
+
if (flag & FILE_GROUP_INSTANCE) {
give_base_to_groups(mainvar, scene);
}
@@ -9192,9 +9186,9 @@ static void library_append_end(const bContext *C, Main *mainl, FileData **fd, in
void BLO_library_append_end(const bContext *C, struct Main *mainl, BlendHandle** bh, int idcode, short flag)
{
- FileData *fd= (FileData*)(*bh);
+ FileData *fd = (FileData*)(*bh);
library_append_end(C, mainl, &fd, idcode, flag);
- *bh= (BlendHandle*)fd;
+ *bh = (BlendHandle*)fd;
}
void *BLO_library_read_struct(FileData *fd, BHead *bh, const char *blockname)
@@ -9207,160 +9201,160 @@ void *BLO_library_read_struct(FileData *fd, BHead *bh, const char *blockname)
static int mainvar_count_libread_blocks(Main *mainvar)
{
ListBase *lbarray[MAX_LIBARRAY];
- int a, tot= 0;
-
- a= set_listbasepointers(mainvar, lbarray);
+ int a, tot = 0;
+
+ a = set_listbasepointers(mainvar, lbarray);
while (a--) {
ID *id;
-
- for (id= lbarray[a]->first; id; id= id->next)
+
+ for (id = lbarray[a]->first; id; id = id->next) {
if (id->flag & LIB_READ)
tot++;
+ }
}
return tot;
}
static void read_libraries(FileData *basefd, ListBase *mainlist)
{
- Main *mainl= mainlist->first;
+ Main *mainl = mainlist->first;
Main *mainptr;
ListBase *lbarray[MAX_LIBARRAY];
int a, doit= 1;
-
+
while (doit) {
- doit= 0;
-
+ doit = 0;
+
/* test 1: read libdata */
mainptr= mainl->next;
while (mainptr) {
- int tot= mainvar_count_libread_blocks(mainptr);
+ int tot = mainvar_count_libread_blocks(mainptr);
// printf("found LIB_READ %s\n", mainptr->curlib->name);
if (tot) {
- FileData *fd= mainptr->curlib->filedata;
-
- if (fd==NULL) {
-
+ FileData *fd = mainptr->curlib->filedata;
+
+ if (fd == NULL) {
/* printf and reports for now... its important users know this */
BKE_reportf_wrap(basefd->reports, RPT_INFO,
- "read library: '%s', '%s'\n",
+ "read library: '%s', '%s'",
mainptr->curlib->filepath, mainptr->curlib->name);
-
- fd= blo_openblenderfile(mainptr->curlib->filepath, basefd->reports);
+
+ fd = blo_openblenderfile(mainptr->curlib->filepath, basefd->reports);
/* allow typing in a new lib path */
- if (G.rt==-666) {
- while (fd==NULL) {
- char newlib_path[FILE_MAX] = { 0 };
+ if (G.rt == -666) {
+ while (fd == NULL) {
+ char newlib_path[FILE_MAX] = {0};
printf("Missing library...'\n");
printf(" current file: %s\n", G.main->name);
printf(" absolute lib: %s\n", mainptr->curlib->filepath);
printf(" relative lib: %s\n", mainptr->curlib->name);
printf(" enter a new path:\n");
-
+
if (scanf("%s", newlib_path) > 0) {
BLI_strncpy(mainptr->curlib->name, newlib_path, sizeof(mainptr->curlib->name));
BLI_strncpy(mainptr->curlib->filepath, newlib_path, sizeof(mainptr->curlib->filepath));
cleanup_path(G.main->name, mainptr->curlib->filepath);
- fd= blo_openblenderfile(mainptr->curlib->filepath, basefd->reports);
-
+ fd = blo_openblenderfile(mainptr->curlib->filepath, basefd->reports);
+
if (fd) {
printf("found: '%s', party on macuno!\n", mainptr->curlib->filepath);
}
}
}
}
-
+
if (fd) {
- fd->reports= basefd->reports;
+ fd->reports = basefd->reports;
if (fd->libmap)
oldnewmap_free(fd->libmap);
-
+
fd->libmap = oldnewmap_new();
- mainptr->curlib->filedata= fd;
- mainptr->versionfile= fd->fileversion;
+ mainptr->curlib->filedata = fd;
+ mainptr->versionfile= fd->fileversion;
/* subversion */
read_file_version(fd, mainptr);
}
- else mainptr->curlib->filedata= NULL;
-
- if (fd==NULL) {
+ else mainptr->curlib->filedata = NULL;
+
+ if (fd == NULL) {
BKE_reportf_wrap(basefd->reports, RPT_ERROR,
- "Can't find lib '%s'\n",
+ "Can't find lib '%s'",
mainptr->curlib->filepath);
}
}
if (fd) {
- doit= 1;
- a= set_listbasepointers(mainptr, lbarray);
+ doit = 1;
+ a = set_listbasepointers(mainptr, lbarray);
while (a--) {
- ID *id= lbarray[a]->first;
-
+ ID *id = lbarray[a]->first;
+
while (id) {
- ID *idn= id->next;
+ ID *idn = id->next;
if (id->flag & LIB_READ) {
- ID *realid= NULL;
+ ID *realid = NULL;
BLI_remlink(lbarray[a], id);
-
+
append_id_part(fd, mainptr, id, &realid);
if (!realid) {
BKE_reportf_wrap(fd->reports, RPT_ERROR,
- "LIB ERROR: %s:'%s' missing from '%s'\n",
+ "LIB ERROR: %s:'%s' missing from '%s'",
BKE_idcode_to_name(GS(id->name)),
id->name+2, mainptr->curlib->filepath);
}
change_idid_adr(mainlist, basefd, id, realid);
-
+
MEM_freeN(id);
}
- id= idn;
+ id = idn;
}
}
-
+
expand_main(fd, mainptr);
/* dang FileData... now new libraries need to be appended to original filedata,
* it is not a good replacement for the old global (ton) */
- while ( fd->mainlist.first ) {
- Main *mp= fd->mainlist.first;
+ while (fd->mainlist.first) {
+ Main *mp = fd->mainlist.first;
BLI_remlink(&fd->mainlist, mp);
BLI_addtail(&basefd->mainlist, mp);
}
}
}
-
- mainptr= mainptr->next;
+
+ mainptr = mainptr->next;
}
}
/* test if there are unread libblocks */
- for (mainptr= mainl->next; mainptr; mainptr= mainptr->next) {
- a= set_listbasepointers(mainptr, lbarray);
+ for (mainptr = mainl->next; mainptr; mainptr = mainptr->next) {
+ a = set_listbasepointers(mainptr, lbarray);
while (a--) {
- ID *id= lbarray[a]->first;
+ ID *id = lbarray[a]->first;
while (id) {
- ID *idn= id->next;
+ ID *idn = id->next;
if (id->flag & LIB_READ) {
BLI_remlink(lbarray[a], id);
BKE_reportf_wrap(basefd->reports, RPT_ERROR,
- "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n",
- BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ "LIB ERROR: %s:'%s' unread libblock missing from '%s'",
+ BKE_idcode_to_name(GS(id->name)), id->name + 2, mainptr->curlib->filepath);
change_idid_adr(mainlist, basefd, id, NULL);
-
+
MEM_freeN(id);
}
- id= idn;
+ id = idn;
}
}
}
/* do versions, link, and free */
- for (mainptr= mainl->next; mainptr; mainptr= mainptr->next) {
+ for (mainptr = mainl->next; mainptr; mainptr = mainptr->next) {
/* some mains still have to be read, then
* versionfile is still zero! */
if (mainptr->versionfile) {
@@ -9374,7 +9368,7 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
lib_link_all(mainptr->curlib->filedata, mainptr);
if (mainptr->curlib->filedata) blo_freefiledata(mainptr->curlib->filedata);
- mainptr->curlib->filedata= NULL;
+ mainptr->curlib->filedata = NULL;
}
}
@@ -9388,17 +9382,17 @@ BlendFileData *blo_read_blendafterruntime(int file, const char *name, int actual
fd->filedes = file;
fd->buffersize = actualsize;
fd->read = fd_read_from_file;
-
+
/* needed for library_append and read_libraries */
BLI_strncpy(fd->relabase, name, sizeof(fd->relabase));
-
+
fd = blo_decode_and_check(fd, reports);
if (!fd)
return NULL;
-
- fd->reports= reports;
- bfd= blo_read_file_internal(fd, "");
+
+ fd->reports = reports;
+ bfd = blo_read_file_internal(fd, "");
blo_freefiledata(fd);
-
+
return bfd;
}
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index 9be375977e9..aa388923f6b 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -75,8 +75,8 @@ typedef struct FileData {
char *compflags;
int fileversion;
- int id_name_offs; /* used to retrieve ID names from (bhead+1) */
- int globalf, fileflags; /* for do_versions patching */
+ int id_name_offs; /* used to retrieve ID names from (bhead+1) */
+ int globalf, fileflags; /* for do_versions patching */
struct OldNewMap *datamap;
struct OldNewMap *globmap;
@@ -89,9 +89,9 @@ typedef struct FileData {
ListBase mainlist;
- /* ick ick, used to return
- * data through streamglue.
- */
+ /* ick ick, used to return
+ * data through streamglue.
+ */
BlendFileData **bfd_r;
struct ReportList *reports;
} FileData;
@@ -102,16 +102,16 @@ typedef struct BHeadN {
} BHeadN;
-#define FD_FLAGS_SWITCH_ENDIAN (1<<0)
-#define FD_FLAGS_FILE_POINTSIZE_IS_4 (1<<1)
-#define FD_FLAGS_POINTSIZE_DIFFERS (1<<2)
-#define FD_FLAGS_FILE_OK (1<<3)
-#define FD_FLAGS_NOT_MY_BUFFER (1<<4)
-#define FD_FLAGS_NOT_MY_LIBMAP (1<<5)
+#define FD_FLAGS_SWITCH_ENDIAN (1 << 0)
+#define FD_FLAGS_FILE_POINTSIZE_IS_4 (1 << 1)
+#define FD_FLAGS_POINTSIZE_DIFFERS (1 << 2)
+#define FD_FLAGS_FILE_OK (1 << 3)
+#define FD_FLAGS_NOT_MY_BUFFER (1 << 4)
+#define FD_FLAGS_NOT_MY_LIBMAP (1 << 5)
#define SIZEOFBLENDERHEADER 12
- /***/
+/***/
struct Main;
void blo_join_main(ListBase *mainlist);
void blo_split_main(ListBase *mainlist, struct Main *main);
@@ -129,7 +129,7 @@ void blo_make_movieclip_pointer_map(FileData *fd, Main *oldmain);
void blo_end_movieclip_pointer_map(FileData *fd, Main *oldmain);
void blo_add_library_pointer_map(ListBase *mainlist, FileData *fd);
-void blo_freefiledata( FileData *fd);
+void blo_freefiledata(FileData *fd);
BHead *blo_firstbhead(FileData *fd);
BHead *blo_nextbhead(FileData *fd, BHead *thisblock);
diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c
index 75fa8d0c3d2..21a9290968b 100644
--- a/source/blender/blenloader/intern/undofile.c
+++ b/source/blender/blenloader/intern/undofile.c
@@ -56,11 +56,11 @@ void BLO_free_memfile(MemFile *memfile)
MemFileChunk *chunk;
while ( (chunk = (memfile->chunks.first) ) ) {
- if (chunk->ident==0) MEM_freeN(chunk->buf);
+ if (chunk->ident == 0) MEM_freeN(chunk->buf);
BLI_remlink(&memfile->chunks, chunk);
MEM_freeN(chunk);
}
- memfile->size= 0;
+ memfile->size = 0;
}
/* to keep list of memfiles consistent, 'first' is always first in list */
@@ -69,17 +69,17 @@ void BLO_merge_memfile(MemFile *first, MemFile *second)
{
MemFileChunk *fc, *sc;
- fc= first->chunks.first;
- sc= second->chunks.first;
+ fc = first->chunks.first;
+ sc = second->chunks.first;
while (fc || sc) {
if (fc && sc) {
if (sc->ident) {
- sc->ident= 0;
- fc->ident= 1;
+ sc->ident = 0;
+ fc->ident = 1;
}
}
- if (fc) fc= fc->next;
- if (sc) sc= sc->next;
+ if (fc) fc = fc->next;
+ if (sc) sc = sc->next;
}
BLO_free_memfile(first);
@@ -92,7 +92,7 @@ static int my_memcmp(const int *mem1, const int *mem2, const int len)
register const int *memb = mem2;
while (a--) {
- if ( *mema != *memb) return 1;
+ if (*mema != *memb) return 1;
mema++;
memb++;
}
@@ -101,39 +101,39 @@ static int my_memcmp(const int *mem1, const int *mem2, const int len)
void add_memfilechunk(MemFile *compare, MemFile *current, const char *buf, unsigned int size)
{
- static MemFileChunk *compchunk=NULL;
+ static MemFileChunk *compchunk = NULL;
MemFileChunk *curchunk;
/* this function inits when compare != NULL or when current==NULL */
if (compare) {
- compchunk= compare->chunks.first;
+ compchunk = compare->chunks.first;
return;
}
- if (current==NULL) {
- compchunk= NULL;
+ if (current == NULL) {
+ compchunk = NULL;
return;
}
- curchunk= MEM_mallocN(sizeof(MemFileChunk), "MemFileChunk");
- curchunk->size= size;
- curchunk->buf= NULL;
- curchunk->ident= 0;
+ curchunk = MEM_mallocN(sizeof(MemFileChunk), "MemFileChunk");
+ curchunk->size = size;
+ curchunk->buf = NULL;
+ curchunk->ident = 0;
BLI_addtail(&current->chunks, curchunk);
/* we compare compchunk with buf */
if (compchunk) {
if (compchunk->size == curchunk->size) {
if (my_memcmp((int *)compchunk->buf, (const int *)buf, size / 4) == 0) {
- curchunk->buf= compchunk->buf;
- curchunk->ident= 1;
+ curchunk->buf = compchunk->buf;
+ curchunk->ident = 1;
}
}
- compchunk= compchunk->next;
+ compchunk = compchunk->next;
}
/* not equal... */
- if (curchunk->buf==NULL) {
- curchunk->buf= MEM_mallocN(size, "Chunk buffer");
+ if (curchunk->buf == NULL) {
+ curchunk->buf = MEM_mallocN(size, "Chunk buffer");
memcpy(curchunk->buf, buf, size);
current->size += size;
}
diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c
index 2f7ff055b91..799dc82482d 100644
--- a/source/blender/blenloader/intern/versioning_legacy.c
+++ b/source/blender/blenloader/intern/versioning_legacy.c
@@ -3559,7 +3559,7 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
{
SpaceNla *snla = (SpaceNla *)sl;
snla->autosnap = SACTSNAP_FRAME;
- }
+ }
break;
}
}
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index e20eb103e1b..736a43e1676 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -1833,7 +1833,7 @@ int bmesh_vert_separate(BMesh *bm, BMVert *v, BMVert ***r_vout, int *r_vout_len)
int i, maxindex;
BMLoop *nl;
- visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+ visithash = BLI_ghash_ptr_new(__func__);
maxindex = 0;
BM_ITER_ELEM (e, &eiter, v, BM_EDGES_OF_VERT) {
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index fe94983dc88..8d9f2ed7336 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -624,7 +624,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx)
int *new_idx = NULL;
/* Init the old-to-new vert pointers mapping */
- vptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap vert pointers mapping");
+ vptr_map = BLI_ghash_ptr_new("BM_mesh_remap vert pointers mapping");
/* Make a copy of all vertices. */
verts_pool = MEM_callocN(sizeof(BMVert *) * totvert, "BM_mesh_remap verts pool");
@@ -658,7 +658,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx)
int *new_idx = NULL;
/* Init the old-to-new vert pointers mapping */
- eptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap edge pointers mapping");
+ eptr_map = BLI_ghash_ptr_new("BM_mesh_remap edge pointers mapping");
/* Make a copy of all vertices. */
edges_pool = MEM_callocN(sizeof(BMEdge *) * totedge, "BM_mesh_remap edges pool");
@@ -691,7 +691,7 @@ void BM_mesh_remap(BMesh *bm, int *vert_idx, int *edge_idx, int *face_idx)
int *new_idx = NULL;
/* Init the old-to-new vert pointers mapping */
- fptr_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BM_mesh_remap face pointers mapping");
+ fptr_map = BLI_ghash_ptr_new("BM_mesh_remap face pointers mapping");
/* Make a copy of all vertices. */
faces_pool = MEM_callocN(sizeof(BMFace *) * totface, "BM_mesh_remap faces pool");
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index b5e6d7e1f68..4186f5d47eb 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -1159,7 +1159,7 @@ static BMOpDefine bmo_vertex_slide_def = {
* 'unused_geom' slot will contain all interior geometry that is
* completely unused. Lastly, 'holes_geom' contains edges and faces
* that were in the input and are part of the hull.
-*/
+ */
static BMOpDefine bmo_convex_hull_def = {
"convex_hull",
{{BMO_OP_SLOT_ELEMENT_BUF, "input"},
diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c
index 97347f841c8..b2d9590dc54 100644
--- a/source/blender/bmesh/intern/bmesh_operators.c
+++ b/source/blender/bmesh/intern/bmesh_operators.c
@@ -274,7 +274,7 @@ void BMO_slot_copy(BMOperator *source_op, BMOperator *dest_op, const char *src,
}
if (!dest_slot->data.ghash) {
- dest_slot->data.ghash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh operator 2");
+ dest_slot->data.ghash = BLI_ghash_ptr_new("bmesh operator 2");
}
BLI_ghashIterator_init(&it, source_slot->data.ghash);
@@ -556,7 +556,7 @@ void BMO_slot_map_insert(BMesh *UNUSED(bm), BMOperator *op, const char *slotname
memcpy(mapping + 1, data, len);
if (!slot->data.ghash) {
- slot->data.ghash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh slot map hash");
+ slot->data.ghash = BLI_ghash_ptr_new("bmesh slot map hash");
}
BLI_ghash_insert(slot->data.ghash, element, mapping);
diff --git a/source/blender/bmesh/intern/bmesh_operators.h b/source/blender/bmesh/intern/bmesh_operators.h
index 3a63b77c50f..4ddc19b2b9f 100644
--- a/source/blender/bmesh/intern/bmesh_operators.h
+++ b/source/blender/bmesh/intern/bmesh_operators.h
@@ -64,6 +64,7 @@ enum {
SIMEDGE_FACE,
SIMEDGE_FACE_ANGLE,
SIMEDGE_CREASE,
+ SIMEDGE_BEVEL,
SIMEDGE_SEAM,
SIMEDGE_SHARP,
SIMEDGE_FREESTYLE
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c
index fbfc253c364..6f6db3ce239 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -213,7 +213,7 @@ void BM_face_calc_center_bounds(BMFace *f, float r_cent[3])
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
do {
- DO_MINMAX(l_iter->v->co, min, max);
+ minmax_v3v3_v3(min, max, l_iter->v->co);
} while ((l_iter = l_iter->next) != l_first);
mid_v3_v3v3(r_cent, min, max);
diff --git a/source/blender/bmesh/intern/bmesh_walkers.c b/source/blender/bmesh/intern/bmesh_walkers.c
index ea29c149c1a..79e097a7a7c 100644
--- a/source/blender/bmesh/intern/bmesh_walkers.c
+++ b/source/blender/bmesh/intern/bmesh_walkers.c
@@ -87,8 +87,8 @@ void BMW_init(BMWalker *walker, BMesh *bm, int type,
walker->mask_edge = mask_edge;
walker->mask_face = mask_face;
- walker->visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 1");
- walker->secvisithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers sec 1");
+ walker->visithash = BLI_ghash_ptr_new("bmesh walkers 1");
+ walker->secvisithash = BLI_ghash_ptr_new("bmesh walkers sec 1");
if (UNLIKELY(type >= BMW_MAXWALKERS || type < 0)) {
fprintf(stderr,
@@ -254,6 +254,6 @@ void BMW_reset(BMWalker *walker)
walker->depth = 0;
BLI_ghash_free(walker->visithash, NULL, NULL);
BLI_ghash_free(walker->secvisithash, NULL, NULL);
- walker->visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 1");
- walker->secvisithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers sec 1");
+ walker->visithash = BLI_ghash_ptr_new("bmesh walkers 1");
+ walker->secvisithash = BLI_ghash_ptr_new("bmesh walkers sec 1");
}
diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c
index 01c269657dc..4ae7b6cc350 100644
--- a/source/blender/bmesh/intern/bmesh_walkers_impl.c
+++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c
@@ -482,7 +482,7 @@ static void bmw_LoopWalker_begin(BMWalker *walker, void *data)
lwalk->lastv = lwalk->startv = BM_edge_other_vert(owalk.cur, lwalk->lastv);
BLI_ghash_free(walker->visithash, NULL, NULL);
- walker->visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 2");
+ walker->visithash = BLI_ghash_ptr_new("bmesh walkers 2");
BLI_ghash_insert(walker->visithash, owalk.cur, NULL);
}
@@ -707,11 +707,11 @@ static void bmw_FaceLoopWalker_begin(BMWalker *walker, void *data)
lwalk->nocalc = 0;
BLI_ghash_free(walker->secvisithash, NULL, NULL);
- walker->secvisithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 3");
+ walker->secvisithash = BLI_ghash_ptr_new("bmesh walkers 3");
BLI_ghash_insert(walker->visithash, lwalk->l->e, NULL);
BLI_ghash_free(walker->visithash, NULL, NULL);
- walker->visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 3");
+ walker->visithash = BLI_ghash_ptr_new("bmesh walkers 3");
BLI_ghash_insert(walker->visithash, lwalk->l->f, NULL);
}
@@ -814,7 +814,7 @@ static void bmw_EdgeringWalker_begin(BMWalker *walker, void *data)
}
BLI_ghash_free(walker->visithash, NULL, NULL);
- walker->visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 4");
+ walker->visithash = BLI_ghash_ptr_new("bmesh walkers 4");
BLI_ghash_insert(walker->visithash, lwalk->l->e, NULL);
}
diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c
index 85aed6141bb..ebdff8bf7aa 100644
--- a/source/blender/bmesh/operators/bmo_create.c
+++ b/source/blender/bmesh/operators/bmo_create.c
@@ -83,8 +83,8 @@ static int count_edge_faces(BMesh *bm, BMEdge *e);
BLI_INLINE BMDiskLink *rs_edge_link_get(BMEdge *e, BMVert *v, EdgeData *e_data)
{
- return v == ((BMEdge *)e)->v1 ? &(((EdgeData *)e_data)->v1_disk_link) :
- &(((EdgeData *)e_data)->v2_disk_link) ;
+ return v == ((BMEdge *)e)->v1 ? &(((EdgeData *)e_data)->v1_disk_link) :
+ &(((EdgeData *)e_data)->v2_disk_link) ;
}
static int rotsys_append_edge(BMEdge *e, BMVert *v,
@@ -733,7 +733,7 @@ static EPath *edge_find_shortest_path(BMesh *bm, BMOperator *op, BMEdge *edge, E
VertData *vdata, PathBase *pathbase, int group)
{
BMEdge *e;
- GHash *gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "createops find shortest path");
+ GHash *gh = BLI_ghash_ptr_new("createops find shortest path");
BMVert *v1, *v2;
BMVert **verts = NULL;
BLI_array_staticdeclare(verts, 1024);
diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c
index 212ec33e626..ae001b2baf6 100644
--- a/source/blender/bmesh/operators/bmo_dupe.c
+++ b/source/blender/bmesh/operators/bmo_dupe.c
@@ -197,8 +197,8 @@ static void BKE_mesh_copy(BMOperator *op, BMesh *source, BMesh *target)
GHash *vhash, *ehash;
/* initialize pointer hashes */
- vhash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh dupeops v");
- ehash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh dupeops e");
+ vhash = BLI_ghash_ptr_new("bmesh dupeops v");
+ ehash = BLI_ghash_ptr_new("bmesh dupeops e");
/* duplicate flagged vertices */
BM_ITER_MESH (v, &viter, source, BM_VERTS_OF_MESH) {
diff --git a/source/blender/bmesh/operators/bmo_hull.c b/source/blender/bmesh/operators/bmo_hull.c
index 1cd095f72e4..160db7cba75 100644
--- a/source/blender/bmesh/operators/bmo_hull.c
+++ b/source/blender/bmesh/operators/bmo_hull.c
@@ -119,16 +119,21 @@ static void expand_boundary_edges(ListBase *edges, BLI_mempool *edge_pool,
/*************************** Hull Triangles ***************************/
-static void hull_add_triangle(GHash *hull_triangles, BLI_mempool *pool,
+static void hull_add_triangle(BMesh *bm, GHash *hull_triangles, BLI_mempool *pool,
BMVert *v1, BMVert *v2, BMVert *v3)
{
HullTriangle *t;
+ int i;
t = BLI_mempool_calloc(pool);
t->v[0] = v1;
t->v[1] = v2;
t->v[2] = v3;
+ /* Mark triangles vertices as not interior */
+ for (i = 0; i < 3; i++)
+ BMO_elem_flag_disable(bm, t->v[i], HULL_FLAG_INTERIOR_ELE);
+
BLI_ghash_insert(hull_triangles, t, NULL);
normal_tri_v3(t->no, v1->co, v2->co, v3->co);
}
@@ -149,41 +154,23 @@ static GHash *hull_triangles_v_outside(GHash *hull_triangles, const BMVert *v)
GHash *outside;
GHashIterator iter;
- outside = BLI_ghash_new(BLI_ghashutil_ptrhash,
- BLI_ghashutil_ptrcmp,
- "outside");
+ outside = BLI_ghash_ptr_new("outside");
GHASH_ITER (iter, hull_triangles) {
HullTriangle *t = BLI_ghashIterator_getKey(&iter);
- if (hull_point_tri_side(t, v->co) >= 0)
+ if (hull_point_tri_side(t, v->co) > 0)
BLI_ghash_insert(outside, t, NULL);
}
return outside;
}
-/* Similar to above, but just get true/false rather than triangles */
-static int hull_test_v_outside(GHash *hull_triangles, const BMVert *v)
-{
- GHashIterator iter;
-
- GHASH_ITER (iter, hull_triangles) {
- HullTriangle *t = BLI_ghashIterator_getKey(&iter);
-
- if (hull_point_tri_side(t, v->co) >= 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-
/* For vertex 'v', find which triangles must be deleted to extend the
* hull; find the boundary edges of that hole so that it can be filled
* with connections to the new vertex, and update the hull_triangles
* to delete the marked triangles */
-static void add_point(GHash *hull_triangles, BLI_mempool *hull_pool,
+static void add_point(BMesh *bm, GHash *hull_triangles, BLI_mempool *hull_pool,
BLI_mempool *edge_pool, GHash *outside, BMVert *v)
{
ListBase edges = {NULL, NULL};
@@ -192,7 +179,13 @@ static void add_point(GHash *hull_triangles, BLI_mempool *hull_pool,
GHASH_ITER (iter, outside) {
HullTriangle *t = BLI_ghashIterator_getKey(&iter);
+ int i;
+
expand_boundary_edges(&edges, edge_pool, t);
+
+ /* Mark triangle's vertices as interior */
+ for (i = 0; i < 3; i++)
+ BMO_elem_flag_enable(bm, t->v[i], HULL_FLAG_INTERIOR_ELE);
/* Delete the triangle */
BLI_ghash_remove(hull_triangles, t, NULL, NULL);
@@ -202,7 +195,7 @@ static void add_point(GHash *hull_triangles, BLI_mempool *hull_pool,
/* Fill hole boundary with triangles to new point */
for (e = edges.first; e; e = next) {
next = e->next;
- hull_add_triangle(hull_triangles, hull_pool, e->v[0], e->v[1], v);
+ hull_add_triangle(bm, hull_triangles, hull_pool, e->v[0], e->v[1], v);
BLI_mempool_free(edge_pool, e);
}
}
@@ -303,9 +296,7 @@ static HullFinalEdges *hull_final_edges(GHash *hull_triangles)
GHashIterator iter;
final_edges = MEM_callocN(sizeof(HullFinalEdges), "HullFinalEdges");
- final_edges->edges = BLI_ghash_new(BLI_ghashutil_ptrhash,
- BLI_ghashutil_ptrcmp,
- "final edges ghash");
+ final_edges->edges = BLI_ghash_ptr_new("final edges ghash");
final_edges->base_pool = BLI_mempool_create(sizeof(ListBase), 128, 128, 0);
final_edges->link_pool = BLI_mempool_create(sizeof(LinkData), 128, 128, 0);
@@ -352,7 +343,7 @@ static void hull_final_edges_free(HullFinalEdges *final_edges)
/************************* Initial Tetrahedron ************************/
-static void hull_add_tetrahedron(GHash *hull_triangles, BLI_mempool *pool,
+static void hull_add_tetrahedron(BMesh *bm, GHash *hull_triangles, BLI_mempool *pool,
BMVert *tetra[4])
{
float center[3];
@@ -379,7 +370,7 @@ static void hull_add_tetrahedron(GHash *hull_triangles, BLI_mempool *pool,
if (dot_v3v3(no, d) > 0)
SWAP(BMVert *, v1, v3);
- hull_add_triangle(hull_triangles, pool, v1, v2, v3);
+ hull_add_triangle(bm, hull_triangles, pool, v1, v2, v3);
}
}
@@ -518,7 +509,7 @@ static void hull_remove_overlapping(BMesh *bm, GHash *hull_triangles,
BMEdge *e;
/* Check that all the face's edges are on the hull,
- otherwise can't reuse it */
+ * otherwise can't reuse it */
f_on_hull = TRUE;
BM_ITER_ELEM (e, &bm_iter2, f, BM_EDGES_OF_FACE) {
if (!hull_final_edges_lookup(final_edges, e->v1, e->v2)) {
@@ -528,9 +519,10 @@ static void hull_remove_overlapping(BMesh *bm, GHash *hull_triangles,
}
/* Note: can't change ghash while iterating, so mark
- with 'skip' flag rather than deleting triangles */
+ * with 'skip' flag rather than deleting triangles */
if (BM_vert_in_face(f, t->v[1]) &&
- BM_vert_in_face(f, t->v[2]) && f_on_hull) {
+ BM_vert_in_face(f, t->v[2]) && f_on_hull)
+ {
t->skip = TRUE;
BMO_elem_flag_disable(bm, f, HULL_FLAG_INTERIOR_ELE);
BMO_elem_flag_enable(bm, f, HULL_FLAG_HOLE);
@@ -540,23 +532,12 @@ static void hull_remove_overlapping(BMesh *bm, GHash *hull_triangles,
}
static void hull_mark_interior_elements(BMesh *bm, BMOperator *op,
- GHash *hull_triangles,
HullFinalEdges *final_edges)
{
- BMVert *v;
BMEdge *e;
BMFace *f;
BMOIter oiter;
- /* Check all input vertices again to see if they are actually part
- of the hull */
- BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) {
- if (!hull_test_v_outside(hull_triangles, v)) {
- /* Mark for 'interior_verts' slot */
- BMO_elem_flag_enable(bm, v, HULL_FLAG_INTERIOR_ELE);
- }
- }
-
/* Check for interior edges too */
BMO_ITER (e, &oiter, bm, op, "input", BM_EDGE) {
if (!hull_final_edges_lookup(final_edges, e->v1, e->v2))
@@ -564,7 +545,7 @@ static void hull_mark_interior_elements(BMesh *bm, BMOperator *op,
}
/* Mark all input faces as interior, some may be unmarked in
- hull_remove_overlapping() */
+ * hull_remove_overlapping() */
BMO_ITER (f, &oiter, bm, op, "input", BM_FACE) {
BMO_elem_flag_enable(bm, f, HULL_FLAG_INTERIOR_ELE);
}
@@ -579,9 +560,9 @@ static void hull_tag_unused(BMesh *bm, BMOperator *op)
BMFace *f;
/* Mark vertices, edges, and faces that are already marked
- interior (i.e. were already part of the input, but not part of
- the hull), but that aren't also used by elements outside the
- input set */
+ * interior (i.e. were already part of the input, but not part of
+ * the hull), but that aren't also used by elements outside the
+ * input set */
BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) {
if (BMO_elem_flag_test(bm, v, HULL_FLAG_INTERIOR_ELE)) {
int del = TRUE;
@@ -689,17 +670,20 @@ void bmo_convex_hull_exec(BMesh *bm, BMOperator *op)
}
/* Tag input elements */
- BMO_ITER (ele, &oiter, bm, op, "input", BM_ALL)
+ BMO_ITER (ele, &oiter, bm, op, "input", BM_ALL) {
BMO_elem_flag_enable(bm, ele, HULL_FLAG_INPUT);
+
+ /* Mark all vertices as interior to begin with */
+ if (ele->head.htype == BM_VERT)
+ BMO_elem_flag_enable(bm, ele, HULL_FLAG_INTERIOR_ELE);
+ }
edge_pool = BLI_mempool_create(sizeof(HullBoundaryEdge), 128, 128, 0);
hull_pool = BLI_mempool_create(sizeof(HullTriangle), 128, 128, 0);
- hull_triangles = BLI_ghash_new(BLI_ghashutil_ptrhash,
- BLI_ghashutil_ptrcmp,
- "hull_triangles");
+ hull_triangles = BLI_ghash_ptr_new("hull_triangles");
/* Add tetrahedron triangles */
- hull_add_tetrahedron(hull_triangles, hull_pool, tetra);
+ hull_add_tetrahedron(bm, hull_triangles, hull_pool, tetra);
/* Expand hull to cover new vertices outside the existing hull */
BMO_ITER (v, &oiter, bm, op, "input", BM_VERT) {
@@ -707,7 +691,7 @@ void bmo_convex_hull_exec(BMesh *bm, BMOperator *op)
GHash *outside = hull_triangles_v_outside(hull_triangles, v);
if (BLI_ghash_size(outside)) {
/* Expand hull and delete interior triangles */
- add_point(hull_triangles, hull_pool, edge_pool, outside, v);
+ add_point(bm, hull_triangles, hull_pool, edge_pool, outside, v);
}
BLI_ghash_free(outside, NULL, NULL);
}
@@ -716,7 +700,7 @@ void bmo_convex_hull_exec(BMesh *bm, BMOperator *op)
BLI_mempool_destroy(edge_pool);
final_edges = hull_final_edges(hull_triangles);
- hull_mark_interior_elements(bm, op, hull_triangles, final_edges);
+ hull_mark_interior_elements(bm, op, final_edges);
/* Remove hull triangles covered by an existing face */
if (BMO_slot_bool_get(op, "use_existing_faces")) {
diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c
index 8060c3b5142..52c693efc84 100644
--- a/source/blender/bmesh/operators/bmo_removedoubles.c
+++ b/source/blender/bmesh/operators/bmo_removedoubles.c
@@ -396,8 +396,8 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op)
BLI_array_grow_one(edges);
edges[tot] = e;
- DO_MINMAX(e->v1->co, min, max);
- DO_MINMAX(e->v2->co, min, max);
+ minmax_v3v3_v3(min, max, e->v1->co);
+ minmax_v3v3_v3(min, max, e->v2->co);
}
add_v3_v3v3(min, min, max);
diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c
index afc60d844db..e53144bd597 100644
--- a/source/blender/bmesh/operators/bmo_triangulate.c
+++ b/source/blender/bmesh/operators/bmo_triangulate.c
@@ -161,9 +161,9 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op)
BMEdge *e;
BMOperator bmop;
ScanFillContext sf_ctx;
- /* ScanFillEdge *eed; */ /* UNUSED */
- ScanFillVert *eve, *v1, *v2;
- ScanFillFace *efa;
+ /* ScanFillEdge *sf_edge; */ /* UNUSED */
+ ScanFillVert *sf_vert, *sf_vert_1, *sf_vert_2;
+ ScanFillFace *sf_tri;
SmallHash hash;
BLI_smallhash_init(&hash);
@@ -174,28 +174,28 @@ void bmo_triangle_fill_exec(BMesh *bm, BMOperator *op)
BMO_elem_flag_enable(bm, e, EDGE_MARK);
if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v1)) {
- eve = BLI_scanfill_vert_add(&sf_ctx, e->v1->co);
- eve->tmp.p = e->v1;
- BLI_smallhash_insert(&hash, (uintptr_t)e->v1, eve);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, e->v1->co);
+ sf_vert->tmp.p = e->v1;
+ BLI_smallhash_insert(&hash, (uintptr_t)e->v1, sf_vert);
}
if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v2)) {
- eve = BLI_scanfill_vert_add(&sf_ctx, e->v2->co);
- eve->tmp.p = e->v2;
- BLI_smallhash_insert(&hash, (uintptr_t)e->v2, eve);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, e->v2->co);
+ sf_vert->tmp.p = e->v2;
+ BLI_smallhash_insert(&hash, (uintptr_t)e->v2, sf_vert);
}
- v1 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v1);
- v2 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v2);
- /* eed = */ BLI_scanfill_edge_add(&sf_ctx, v1, v2);
- /* eed->tmp.p = e; */ /* UNUSED */
+ sf_vert_1 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v1);
+ sf_vert_2 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v2);
+ /* sf_edge = */ BLI_scanfill_edge_add(&sf_ctx, sf_vert_1, sf_vert_2);
+ /* sf_edge->tmp.p = e; */ /* UNUSED */
}
BLI_scanfill_calc(&sf_ctx, FALSE);
- for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) {
+ for (sf_tri = sf_ctx.fillfacebase.first; sf_tri; sf_tri = sf_tri->next) {
BMFace *f = BM_face_create_quad_tri(bm,
- efa->v1->tmp.p, efa->v2->tmp.p, efa->v3->tmp.p, NULL,
+ sf_tri->v1->tmp.p, sf_tri->v2->tmp.p, sf_tri->v3->tmp.p, NULL,
NULL, TRUE);
BMLoop *l;
BMIter liter;
diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c
index c5fab20da6f..bea6cb17abe 100644
--- a/source/blender/bmesh/operators/bmo_utils.c
+++ b/source/blender/bmesh/operators/bmo_utils.c
@@ -522,7 +522,8 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op)
int *indices = NULL;
float t_no[3]; /* temporary normal */
int type = BMO_slot_int_get(op, "type");
- float thresh = BMO_slot_float_get(op, "thresh");
+ const float thresh = BMO_slot_float_get(op, "thresh");
+ const float thresh_radians = thresh * (float)M_PI;
num_total = BM_mesh_elem_count(bm, BM_FACE);
@@ -616,16 +617,16 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op)
break;
case SIMFACE_NORMAL:
- angle = RAD2DEGF(angle_v3v3(fs->no, fm->no)); /* if the angle between the normals -> 0 */
- if (angle / 180.0f <= thresh) {
+ angle = angle_normalized_v3v3(fs->no, fm->no); /* if the angle between the normals -> 0 */
+ if (angle <= thresh_radians) {
BMO_elem_flag_enable(bm, fm, FACE_MARK);
cont = FALSE;
}
break;
case SIMFACE_COPLANAR:
- angle = RAD2DEGF(angle_v3v3(fs->no, fm->no)); /* angle -> 0 */
- if (angle / 180.0f <= thresh) { /* and dot product difference -> 0 */
+ angle = angle_normalized_v3v3(fs->no, fm->no); /* angle -> 0 */
+ if (angle <= thresh_radians) { /* and dot product difference -> 0 */
if (fabsf(f_ext[i].d - f_ext[indices[idx]].d) <= thresh) {
BMO_elem_flag_enable(bm, fm, FACE_MARK);
cont = FALSE;
@@ -704,7 +705,21 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op)
int num_sels = 0, num_total = 0;
int type = BMO_slot_int_get(op, "type");
- float thresh = BMO_slot_float_get(op, "thresh");
+ const float thresh = BMO_slot_float_get(op, "thresh");
+
+ /* sanity checks that the data we need is available */
+ switch (type) {
+ case SIMEDGE_CREASE:
+ if (!CustomData_has_layer(&bm->edata, CD_CREASE)) {
+ return;
+ }
+ break;
+ case SIMEDGE_BEVEL:
+ if (!CustomData_has_layer(&bm->edata, CD_BWEIGHT)) {
+ return;
+ }
+ break;
+ }
num_total = BM_mesh_elem_count(bm, BM_EDGE);
@@ -715,8 +730,8 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op)
}
/* allocate memory for the selected edges indices and for all temporary edges */
- indices = (int *)MEM_callocN(sizeof(int) * num_sels, "indices util.c");
- e_ext = (SimSel_EdgeExt *)MEM_callocN(sizeof(SimSel_EdgeExt) * num_total, "e_ext util.c");
+ indices = (int *)MEM_callocN(sizeof(int) * num_sels, __func__);
+ e_ext = (SimSel_EdgeExt *)MEM_callocN(sizeof(SimSel_EdgeExt) * num_total, __func__);
/* loop through all the edges and fill the edges/indices structure */
BM_ITER_MESH (e, &e_iter, bm, BM_EDGES_OF_MESH) {
@@ -738,6 +753,7 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op)
case SIMEDGE_DIR: /* compute the direction */
sub_v3_v3v3(e_ext[i].dir, e_ext[i].e->v1->co, e_ext[i].e->v2->co);
+ normalize_v3(e_ext[i].dir);
break;
case SIMEDGE_FACE: /* count the faces around the edge */
@@ -770,12 +786,12 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op)
case SIMEDGE_DIR:
/* compute the angle between the two edges */
- angle = RAD2DEGF(angle_v3v3(e_ext[i].dir, e_ext[indices[idx]].dir));
+ angle = angle_normalized_v3v3(e_ext[i].dir, e_ext[indices[idx]].dir);
- if (angle > 90.0f) /* use the smallest angle between the edges */
- angle = fabsf(angle - 180.0f);
+ if (angle > (float)(M_PI / 2.0)) /* use the smallest angle between the edges */
+ angle = fabsf(angle - (float)M_PI);
- if (angle / 90.0f <= thresh) {
+ if (angle / (float)(M_PI / 2.0) <= thresh) {
BMO_elem_flag_enable(bm, e, EDGE_MARK);
cont = FALSE;
}
@@ -803,13 +819,27 @@ void bmo_similaredges_exec(BMesh *bm, BMOperator *op)
break;
case SIMEDGE_CREASE:
- if (CustomData_has_layer(&bm->edata, CD_CREASE)) {
+ {
float *c1, *c2;
c1 = CustomData_bmesh_get(&bm->edata, e->head.data, CD_CREASE);
c2 = CustomData_bmesh_get(&bm->edata, es->head.data, CD_CREASE);
- if (c1 && c2 && fabsf(*c1 - *c2) <= thresh) {
+ if (fabsf(*c1 - *c2) <= thresh) {
+ BMO_elem_flag_enable(bm, e, EDGE_MARK);
+ cont = FALSE;
+ }
+ }
+ break;
+
+ case SIMEDGE_BEVEL:
+ {
+ float *c1, *c2;
+
+ c1 = CustomData_bmesh_get(&bm->edata, e->head.data, CD_BWEIGHT);
+ c2 = CustomData_bmesh_get(&bm->edata, es->head.data, CD_BWEIGHT);
+
+ if (fabsf(*c1 - *c2) <= thresh) {
BMO_elem_flag_enable(bm, e, EDGE_MARK);
cont = FALSE;
}
@@ -875,7 +905,8 @@ void bmo_similarverts_exec(BMesh *bm, BMOperator *op)
int *indices = NULL;
int num_total = 0, num_sels = 0, i = 0, idx = 0;
int type = BMO_slot_int_get(op, "type");
- float thresh = BMO_slot_float_get(op, "thresh");
+ const float thresh = BMO_slot_float_get(op, "thresh");
+ const float thresh_radians = thresh * (float)M_PI;
num_total = BM_mesh_elem_count(bm, BM_VERT);
@@ -926,7 +957,7 @@ void bmo_similarverts_exec(BMesh *bm, BMOperator *op)
switch (type) {
case SIMVERT_NORMAL:
/* compare the angle between the normals */
- if (RAD2DEGF(angle_v3v3(v->no, vs->no)) / 180.0f <= thresh) {
+ if (angle_normalized_v3v3(v->no, vs->no) <= thresh_radians) {
BMO_elem_flag_enable(bm, v, VERT_MARK);
cont = FALSE;
}
diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c
index e03df77a290..101614d609c 100644
--- a/source/blender/bmesh/tools/BME_bevel.c
+++ b/source/blender/bmesh/tools/BME_bevel.c
@@ -72,7 +72,7 @@ BME_TransData_Head *BME_init_transdata(int bufsize)
BME_TransData_Head *td;
td = MEM_callocN(sizeof(BME_TransData_Head), "BM transdata header");
- td->gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "BME_init_transdata gh");
+ td->gh = BLI_ghash_ptr_new("BME_init_transdata gh");
td->ma = BLI_memarena_new(bufsize, "BME_TransData arena");
BLI_memarena_use_calloc(td->ma);
@@ -195,7 +195,7 @@ static int BME_bevel_is_split_vert(BMesh *bm, BMLoop *l)
* the bevel operation as a whole based on the relationship between v1 and v2
* (won't necessarily be a vec from v1->co to v2->co, though it probably will be);
* the return value is -1 for failure, 0 if we used vert co's, and 1 if we used transform origins */
-static int BME_bevel_get_vec(float *vec, BMVert *v1, BMVert *v2, BME_TransData_Head *td)
+static int BME_bevel_get_vec(float vec[3], BMVert *v1, BMVert *v2, BME_TransData_Head *td)
{
BME_TransData *vtd1, *vtd2;
diff --git a/source/blender/collada/GeometryExporter.cpp b/source/blender/collada/GeometryExporter.cpp
index ba41e603a29..f92ee1a2b79 100644
--- a/source/blender/collada/GeometryExporter.cpp
+++ b/source/blender/collada/GeometryExporter.cpp
@@ -127,6 +127,7 @@ void GeometryExporter::operator()(Object *ob)
createVertexColorSource(geom_id, me);
// <vertices>
+
COLLADASW::Vertices verts(mSW);
verts.setId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX));
COLLADASW::InputList &input_list = verts.getInputList();
@@ -134,6 +135,8 @@ void GeometryExporter::operator()(Object *ob)
input_list.push_back(input);
verts.add();
+ createLooseEdgeList(ob, me, geom_id, norind);
+
// XXX slow
if (ob->totcol) {
for (int a = 0; a < ob->totcol; a++) {
@@ -149,7 +152,7 @@ void GeometryExporter::operator()(Object *ob)
if (me->flag & ME_TWOSIDED) {
mSW->appendTextBlock("<extra><technique profile=\"MAYA\"><double_sided>1</double_sided></technique></extra>");
}
-
+
closeGeometry();
if (this->export_settings->apply_modifiers)
@@ -157,11 +160,65 @@ void GeometryExporter::operator()(Object *ob)
BKE_libblock_free_us(&(G.main->mesh), me);
}
+
#if 0
dm->release(dm);
#endif
}
+
+void GeometryExporter::createLooseEdgeList(Object *ob,
+ Mesh *me,
+ std::string& geom_id,
+ std::vector<Face>& norind)
+{
+
+ MEdge *medges = me->medge;
+ int totedges = me->totedge;
+ int edges_in_linelist = 0;
+ std::vector<unsigned int> edge_list;
+ int index;
+
+ // Find all loose edges in Mesh
+ // and save vertex indices in edge_list
+ for (index = 0; index < totedges; index++)
+ {
+ MEdge *edge = &medges[index];
+
+ if (edge->flag & ME_LOOSEEDGE)
+ {
+ edges_in_linelist += 1;
+ edge_list.push_back(edge->v1);
+ edge_list.push_back(edge->v2);
+ }
+ }
+
+ if (edges_in_linelist > 0)
+ {
+ // Create the list of loose edges
+ COLLADASW::Lines lines(mSW);
+
+ lines.setCount(edges_in_linelist);
+
+
+ COLLADASW::InputList &til = lines.getInputList();
+
+ // creates <input> in <lines> for vertices
+ COLLADASW::Input input1(COLLADASW::InputSemantic::VERTEX, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX), 0);
+ til.push_back(input1);
+
+ lines.prepareToAppendValues();
+
+ for (index = 0; index < edges_in_linelist; index++)
+ {
+ lines.appendValues(edge_list[2*index+1]);
+ lines.appendValues(edge_list[2*index]);
+ }
+ lines.finish();
+ }
+
+}
+
// powerful because it handles both cases when there is material and when there's not
void GeometryExporter::createPolylist(short material_index,
bool has_uvs,
@@ -247,6 +304,8 @@ void GeometryExporter::createPolylist(short material_index,
// performs the actual writing
polylist.prepareToAppendValues();
+
+
// <p>
int texindex = 0;
diff --git a/source/blender/collada/GeometryExporter.h b/source/blender/collada/GeometryExporter.h
index 55dc179e5e2..aae095e819e 100644
--- a/source/blender/collada/GeometryExporter.h
+++ b/source/blender/collada/GeometryExporter.h
@@ -64,6 +64,11 @@ public:
void operator()(Object *ob);
+ void createLooseEdgeList(Object *ob,
+ Mesh *me,
+ std::string& geom_id,
+ std::vector<Face>& norind);
+
// powerful because it handles both cases when there is material and when there's not
void createPolylist(short material_index,
bool has_uvs,
diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp
index 73d1f42b340..bcfec7a8056 100644
--- a/source/blender/collada/MeshImporter.cpp
+++ b/source/blender/collada/MeshImporter.cpp
@@ -52,6 +52,7 @@ extern "C" {
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_string.h"
+#include "BLI_edgehash.h"
#include "MEM_guardedalloc.h"
}
@@ -262,7 +263,7 @@ void MeshImporter::print_index_list(COLLADAFW::IndexList& index_list)
}
#endif
-bool MeshImporter::is_nice_mesh(COLLADAFW::Mesh *mesh) // checks if mesh has supported primitive types: polylist, triangles, triangle_fans
+bool MeshImporter::is_nice_mesh(COLLADAFW::Mesh *mesh) // checks if mesh has supported primitive types: lines, polylist, triangles, triangle_fans
{
COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
@@ -291,6 +292,12 @@ bool MeshImporter::is_nice_mesh(COLLADAFW::Mesh *mesh) // checks if mesh has sup
}
}
+
+ else if ( type == COLLADAFW::MeshPrimitive::LINES )
+ {
+ // TODO: Add Checker for line syntax here
+ }
+
else if (type != COLLADAFW::MeshPrimitive::TRIANGLES && type!= COLLADAFW::MeshPrimitive::TRIANGLE_FANS) {
fprintf(stderr, "Primitive type %s is not supported.\n", type_str);
return false;
@@ -409,14 +416,202 @@ int MeshImporter::count_new_tris(COLLADAFW::Mesh *mesh, Mesh *me)
return tottri;
}
+// =====================================================================
+// condition 1: The Primitive has normals
+// condition 2: The number of normals equals the number of faces.
+// return true if both conditions apply.
+// return false otherwise.
+// =====================================================================
+bool MeshImporter::primitive_has_useable_normals(COLLADAFW::MeshPrimitive *mp) {
+
+ bool has_useable_normals = false;
+
+ int normals_count = mp->getNormalIndices().getCount();
+ if (normals_count > 0) {
+ int index_count = mp->getPositionIndices().getCount();
+ if (index_count == normals_count)
+ has_useable_normals = true;
+ else {
+ fprintf(stderr,
+ "Warning: Number of normals %d is different from the number of vertices %d, skipping normals\n",
+ normals_count, index_count );
+ }
+ }
+
+ return has_useable_normals;
+
+}
+
+// =====================================================================
+// Assume that only TRIANGLES, TRIANGLE_FANS, POLYLIST and POLYGONS
+// have faces. (to be verified)
+// =====================================================================
+bool MeshImporter::primitive_has_faces(COLLADAFW::MeshPrimitive *mp) {
+
+ bool has_faces = false;
+ int type = mp->getPrimitiveType();
+ switch (type) {
+ case COLLADAFW::MeshPrimitive::TRIANGLES:
+ case COLLADAFW::MeshPrimitive::TRIANGLE_FANS:
+ case COLLADAFW::MeshPrimitive::POLYLIST:
+ case COLLADAFW::MeshPrimitive::POLYGONS: {
+ has_faces = true;
+ break;
+ }
+ default: {
+ has_faces = false;
+ break;
+ }
+ }
+ return has_faces;
+}
+
+// =================================================================
+// Return the number of faces by summing up
+// the facecounts of the parts.
+// hint: This is done because mesh->getFacesCount() does
+// count loose edges as extra faces, which is not what we want here.
+// =================================================================
+void MeshImporter::allocate_face_data(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) {
+ COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
+ int total_facecount = 0;
+
+ // collect edge_count and face_count from all parts
+ for (int i = 0; i < prim_arr.getCount(); i++) {
+ COLLADAFW::MeshPrimitive *mp = prim_arr[i];
+ int type = mp->getPrimitiveType();
+ switch (type) {
+ case COLLADAFW::MeshPrimitive::TRIANGLES:
+ case COLLADAFW::MeshPrimitive::TRIANGLE_FANS:
+ case COLLADAFW::MeshPrimitive::POLYLIST:
+ case COLLADAFW::MeshPrimitive::POLYGONS: {
+ size_t prim_totface = mp->getFaceCount();
+ total_facecount += prim_totface;
+ break;
+ }
+ default: break;
+ }
+ }
+
+ // allocate space for faces
+ if (total_facecount > 0) {
+ me->totface = total_facecount + new_tris;
+ me->mface = (MFace*)CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, me->totface);
+ }
+}
+
+unsigned int MeshImporter::get_loose_edge_count(COLLADAFW::Mesh *mesh) {
+ COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
+ int loose_edge_count = 0;
+
+ // collect edge_count and face_count from all parts
+ for (int i = 0; i < prim_arr.getCount(); i++) {
+ COLLADAFW::MeshPrimitive *mp = prim_arr[i];
+ int type = mp->getPrimitiveType();
+ switch (type) {
+ case COLLADAFW::MeshPrimitive::LINES: {
+ size_t prim_totface = mp->getFaceCount();
+ loose_edge_count += prim_totface;
+ break;
+ }
+ default: break;
+ }
+ }
+ return loose_edge_count;
+}
+
+// =================================================================
+// This functin is copied from source/blender/editors/mesh/mesh_data.c
+//
+// TODO: (As discussed with sergey-) :
+// Maybe move this function to blenderkernel/intern/mesh.c
+// and add definition to BKE_mesh.c
+// =================================================================
+void MeshImporter::mesh_add_edges(Mesh *mesh, int len)
+{
+ CustomData edata;
+ MEdge *medge;
+ int i, totedge;
+
+ if (len == 0)
+ return;
+
+ totedge = mesh->totedge + len;
+
+ /* update customdata */
+ CustomData_copy(&mesh->edata, &edata, CD_MASK_MESH, CD_DEFAULT, totedge);
+ CustomData_copy_data(&mesh->edata, &edata, 0, 0, mesh->totedge);
+
+ if (!CustomData_has_layer(&edata, CD_MEDGE))
+ CustomData_add_layer(&edata, CD_MEDGE, CD_CALLOC, NULL, totedge);
+
+ CustomData_free(&mesh->edata, mesh->totedge);
+ mesh->edata = edata;
+ mesh_update_customdata_pointers(mesh, FALSE); /* new edges don't change tessellation */
+
+ /* set default flags */
+ medge = &mesh->medge[mesh->totedge];
+ for (i = 0; i < len; i++, medge++)
+ medge->flag = ME_EDGEDRAW | ME_EDGERENDER | SELECT;
+
+ mesh->totedge = totedge;
+}
+
+// =================================================================
+// Read all loose edges.
+// Important: This function assumes that all edges from existing
+// faces have allready been generated and added to me->medge
+// So this function MUST be called after read_faces() (see below)
+// =================================================================
+void MeshImporter::read_lines(COLLADAFW::Mesh *mesh, Mesh *me)
+{
+ unsigned int loose_edge_count = get_loose_edge_count(mesh);
+ if(loose_edge_count > 0) {
+
+ unsigned int face_edge_count = me->totedge;
+ unsigned int total_edge_count = loose_edge_count + face_edge_count;
+
+ mesh_add_edges(me, loose_edge_count);
+ MEdge *med = me->medge + face_edge_count;
+
+ COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
+
+ for (int i = 0; i < prim_arr.getCount(); i++) {
+
+ COLLADAFW::MeshPrimitive *mp = prim_arr[i];
+
+ int type = mp->getPrimitiveType();
+ if (type == COLLADAFW::MeshPrimitive::LINES)
+ {
+ unsigned int edge_count = mp->getFaceCount();
+ unsigned int *indices = mp->getPositionIndices().getData();
+
+ for (int i = 0; i < edge_count; i++, med++) {
+ med->bweight= 0;
+ med->crease = 0;
+ med->flag = 0;
+ med->v1 = indices[ 2*i ];
+ med->v2 = indices[ 2*i + 1];
+ }
+ }
+ }
+
+ }
+}
+
+
+// =======================================================================
+// Read all faces from TRIANGLES, TRIANGLE_FANS, POLYLIST, POLYGON
+// Important: This function MUST be called before read_lines()
+// Otherwise we will loose all edges from faces (see read_lines() above)
+//
// TODO: import uv set names
+// ========================================================================
void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //TODO:: Refactor. Possibly replace by iterators
{
unsigned int i;
- // allocate faces
- me->totface = mesh->getFacesCount() + new_tris;
- me->mface = (MFace*)CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, me->totface);
+ allocate_face_data(mesh, me, new_tris);
// allocate UV Maps
unsigned int totuvset = mesh->getUVCoords().getInputInfosArray().getCount();
@@ -451,7 +646,6 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
- bool has_normals = mesh->hasNormals();
COLLADAFW::MeshVertexData& nor = mesh->getNormals();
for (i = 0; i < prim_arr.getCount(); i++) {
@@ -461,14 +655,11 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
// faces
size_t prim_totface = mp->getFaceCount();
unsigned int *indices = mp->getPositionIndices().getData();
- unsigned int *nind = mp->getNormalIndices().getData();
+ unsigned int *nind = mp->getNormalIndices().getData();
- if (has_normals && mp->getPositionIndices().getCount() != mp->getNormalIndices().getCount()) {
- fprintf(stderr, "Warning: Number of normals is different from the number of vertcies, skipping normals\n");
- has_normals = false;
- }
+ bool mp_has_normals = primitive_has_useable_normals(mp);
+ bool mp_has_faces = primitive_has_faces(mp);
- unsigned int j, k;
int type = mp->getPrimitiveType();
int index = 0;
@@ -479,20 +670,20 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
#ifdef COLLADA_DEBUG
/*
fprintf(stderr, "Primitive %d:\n", i);
- for (int j = 0; j < totuvset; j++) {
+ for (unsigned int j = 0; j < totuvset; j++) {
print_index_list(*index_list_array[j]);
}
*/
#endif
if (type == COLLADAFW::MeshPrimitive::TRIANGLES) {
- for (j = 0; j < prim_totface; j++) {
+ for (unsigned int j = 0; j < prim_totface; j++) {
set_face_indices(mface, indices, false);
indices += 3;
#if 0
- for (k = 0; k < totuvset; k++) {
+ for (unsigned int k = 0; k < totuvset; k++) {
if (!index_list_array.empty() && index_list_array[k]) {
// get mtface by face index and uv set index
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, k);
@@ -500,7 +691,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
}
}
#else
- for (k = 0; k < index_list_array.getCount(); k++) {
+ for (unsigned int k = 0; k < index_list_array.getCount(); k++) {
// get mtface by face index and uv set index
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, k);
set_face_uv(&mtface[face_index], uvs, *index_list_array[k], index, false);
@@ -509,7 +700,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
test_index_face(mface, &me->fdata, face_index, 3);
- if (has_normals) {
+ if (mp_has_normals) {
if (!flat_face(nind, nor, 3))
mface->flag |= ME_SMOOTH;
@@ -538,7 +729,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
set_face_indices(mface, triangle_vertex_indices, false);
test_index_face(mface, &me->fdata, face_index, 3);
- if (has_normals) { // vertex normals, same inplementation as for the triangles
+ if (mp_has_normals) { // vertex normals, same inplementation as for the triangles
// the same for vertces normals
unsigned int vertex_normal_indices[3]={first_normal, nind[1], nind[2]};
if (!flat_face(vertex_normal_indices, nor, 3))
@@ -553,7 +744,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
}
// Moving cursor to the next triangle fan.
- if (has_normals)
+ if (mp_has_normals)
nind += 2;
indices += 2;
@@ -562,8 +753,8 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
else if (type == COLLADAFW::MeshPrimitive::POLYLIST || type == COLLADAFW::MeshPrimitive::POLYGONS) {
COLLADAFW::Polygons *mpvc = (COLLADAFW::Polygons*)mp;
COLLADAFW::Polygons::VertexCountArray& vcounta = mpvc->getGroupedVerticesVertexCountArray();
-
- for (j = 0; j < prim_totface; j++) {
+
+ for (unsigned int j = 0; j < prim_totface; j++) {
// face
int vcount = vcounta[j];
@@ -573,9 +764,9 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
// set mtface for each uv set
// it is assumed that all primitives have equal number of UV sets
-
+
#if 0
- for (k = 0; k < totuvset; k++) {
+ for (unsigned int k = 0; k < totuvset; k++) {
if (!index_list_array.empty() && index_list_array[k]) {
// get mtface by face index and uv set index
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, k);
@@ -583,7 +774,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
}
}
#else
- for (k = 0; k < index_list_array.getCount(); k++) {
+ for (unsigned int k = 0; k < index_list_array.getCount(); k++) {
// get mtface by face index and uv set index
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, k);
set_face_uv(&mtface[face_index], uvs, *index_list_array[k], index, vcount == 4);
@@ -592,7 +783,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
test_index_face(mface, &me->fdata, face_index, vcount);
- if (has_normals) {
+ if (mp_has_normals) {
if (!flat_face(nind, nor, vcount))
mface->flag |= ME_SMOOTH;
@@ -608,8 +799,8 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
std::vector<unsigned int> tri;
triangulate_poly(indices, vcount, me->mvert, tri);
-
- for (k = 0; k < tri.size() / 3; k++) {
+
+ for (unsigned int k = 0; k < tri.size() / 3; k++) {
int v = k * 3;
unsigned int uv_indices[3] = {
index + tri[v],
@@ -645,7 +836,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
test_index_face(mface, &me->fdata, face_index, 3);
- if (has_normals) {
+ if (mp_has_normals) {
unsigned int ntri[3] = {nind[tri[v]], nind[tri[v + 1]], nind[tri[v + 2]]};
if (!flat_face(ntri, nor, 3))
@@ -657,7 +848,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
prim.totface++;
}
- if (has_normals)
+ if (mp_has_normals)
nind += vcount;
}
@@ -665,8 +856,13 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //T
indices += vcount;
}
}
-
- mat_prim_map[mp->getMaterialId()].push_back(prim);
+ else if (type == COLLADAFW::MeshPrimitive::LINES)
+ {
+ continue; // read the lines later after all the rest is done
+ }
+
+ if (mp_has_faces)
+ mat_prim_map[mp->getMaterialId()].push_back(prim);
}
geom_uid_mat_mapping_map[mesh->getUniqueId()] = mat_prim_map;
@@ -978,5 +1174,9 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
BKE_mesh_make_edges(me, 0);
+ // read_lines() must be called after the face edges have been generated.
+ // Oterwise the loose edges will be silently deleted again.
+ read_lines(mesh, me);
+
return true;
}
diff --git a/source/blender/collada/MeshImporter.h b/source/blender/collada/MeshImporter.h
index 97ae4d99ad7..e4c1aca395a 100644
--- a/source/blender/collada/MeshImporter.h
+++ b/source/blender/collada/MeshImporter.h
@@ -50,6 +50,10 @@
#include "ArmatureImporter.h"
#include "collada_utils.h"
+extern "C" {
+#include "BLI_edgehash.h"
+}
+
// only for ArmatureImporter to "see" MeshImporter::get_object_by_geom_uid
class MeshImporterBase
{
@@ -118,8 +122,20 @@ private:
int count_new_tris(COLLADAFW::Mesh *mesh, Mesh *me);
+ bool primitive_has_useable_normals(COLLADAFW::MeshPrimitive *mp);
+ bool primitive_has_faces(COLLADAFW::MeshPrimitive *mp);
+
+ static void mesh_add_edges(Mesh *mesh, int len);
+
+ unsigned int get_loose_edge_count(COLLADAFW::Mesh *mesh);
+
+ CustomData create_edge_custom_data(EdgeHash *eh);
+
+ void allocate_face_data(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris);
+
// TODO: import uv set names
void read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris);
+ void read_lines(COLLADAFW::Mesh *mesh, Mesh *me);
void get_vector(float v[3], COLLADAFW::MeshVertexData& arr, int i, int stride);
diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt
new file mode 100644
index 00000000000..3230c0ec33d
--- /dev/null
+++ b/source/blender/compositor/CMakeLists.txt
@@ -0,0 +1,608 @@
+# $Id: CMakeLists.txt 14444 2008-04-16 22:40:48Z hos $
+# ***** 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) 2011, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Jeroen Bakker, Monique Dewanchand, Blender Developers Fund.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+ .
+ ../blenkernel
+ ../blenlib
+ ../makesdna
+ ../render/extern/include
+ ../render/intern/include
+ ../makesrna
+ ../blenloader
+ ../blenlib
+ ../windowmanager
+ ../imbuf
+ ../../../intern/guardedalloc
+ nodes
+ ../nodes/
+ ../nodes/composite
+ ../nodes/intern
+ intern
+ operations
+ ../opencl
+)
+
+set(SRC
+ COM_compositor.h
+ COM_defines.h
+
+ intern/COM_compositor.cpp
+ intern/COM_ExecutionSystem.cpp
+ intern/COM_ExecutionSystem.h
+ intern/COM_ExecutionSystemHelper.cpp
+ intern/COM_ExecutionSystemHelper.h
+ intern/COM_Converter.cpp
+ intern/COM_Converter.h
+ intern/COM_ExecutionGroup.cpp
+ intern/COM_ExecutionGroup.h
+ intern/COM_Node.cpp
+ intern/COM_Node.h
+ intern/COM_NodeBase.cpp
+ intern/COM_NodeBase.h
+ intern/COM_NodeOperation.cpp
+ intern/COM_NodeOperation.h
+ intern/COM_NodeProgram.h
+ intern/COM_Socket.cpp
+ intern/COM_Socket.h
+ intern/COM_SocketReader.cpp
+ intern/COM_SocketReader.h
+ intern/COM_InputSocket.cpp
+ intern/COM_InputSocket.h
+ intern/COM_OutputSocket.cpp
+ intern/COM_OutputSocket.h
+ intern/COM_SocketConnection.cpp
+ intern/COM_SocketConnection.h
+ intern/COM_MemoryProxy.cpp
+ intern/COM_MemoryProxy.h
+ intern/COM_MemoryBuffer.cpp
+ intern/COM_MemoryBuffer.h
+ intern/COM_MemoryManager.cpp
+ intern/COM_MemoryManager.h
+ intern/COM_MemoryManagerState.cpp
+ intern/COM_MemoryManagerState.h
+ intern/COM_WorkScheduler.cpp
+ intern/COM_WorkScheduler.h
+ intern/COM_WorkPackage.cpp
+ intern/COM_WorkPackage.h
+ intern/COM_ChunkOrder.cpp
+ intern/COM_ChunkOrder.h
+ intern/COM_ChunkOrderHotspot.cpp
+ intern/COM_ChunkOrderHotspot.h
+ intern/COM_Device.cpp
+ intern/COM_Device.h
+ intern/COM_CPUDevice.cpp
+ intern/COM_CPUDevice.h
+ intern/COM_OpenCLDevice.cpp
+ intern/COM_OpenCLDevice.h
+ intern/COM_CompositorContext.cpp
+ intern/COM_CompositorContext.h
+ intern/COM_ChannelInfo.cpp
+ intern/COM_ChannelInfo.h
+ operations/COM_QualityStepHelper.h
+ operations/COM_QualityStepHelper.cpp
+
+# Internal nodes
+ nodes/COM_MuteNode.cpp
+ nodes/COM_MuteNode.h
+ nodes/COM_GroupNode.cpp
+ nodes/COM_GroupNode.h
+ nodes/COM_SocketProxyNode.cpp
+ nodes/COM_SocketProxyNode.h
+
+# input nodes
+ nodes/COM_RenderLayersNode.cpp
+ nodes/COM_RenderLayersNode.h
+ nodes/COM_ImageNode.cpp
+ nodes/COM_ImageNode.h
+ nodes/COM_TextureNode.cpp
+ nodes/COM_TextureNode.h
+ nodes/COM_BokehImageNode.cpp
+ nodes/COM_BokehImageNode.h
+ nodes/COM_ColorNode.cpp
+ nodes/COM_ColorNode.h
+ nodes/COM_ValueNode.cpp
+ nodes/COM_ValueNode.h
+ nodes/COM_TimeNode.cpp
+ nodes/COM_TimeNode.h
+ nodes/COM_SwitchNode.cpp
+ nodes/COM_SwitchNode.h
+ nodes/COM_MovieClipNode.cpp
+ nodes/COM_MovieClipNode.h
+ nodes/COM_OutputFileNode.cpp
+ nodes/COM_OutputFileNode.h
+
+# output nodes
+ nodes/COM_CompositorNode.cpp
+ nodes/COM_CompositorNode.h
+ nodes/COM_ViewerNode.cpp
+ nodes/COM_ViewerNode.h
+ nodes/COM_SplitViewerNode.cpp
+ nodes/COM_SplitViewerNode.h
+ nodes/COM_ViewLevelsNode.cpp
+ nodes/COM_ViewLevelsNode.h
+ operations/COM_CalculateStandardDeviationOperation.cpp
+ operations/COM_CalculateStandardDeviationOperation.h
+ operations/COM_CalculateMeanOperation.cpp
+ operations/COM_CalculateMeanOperation.h
+
+# distort nodes
+ nodes/COM_TranslateNode.cpp
+ nodes/COM_TranslateNode.h
+ nodes/COM_ScaleNode.cpp
+ nodes/COM_ScaleNode.h
+ nodes/COM_RotateNode.cpp
+ nodes/COM_RotateNode.h
+ nodes/COM_FlipNode.cpp
+ nodes/COM_FlipNode.h
+
+ nodes/COM_MapUVNode.cpp
+ nodes/COM_MapUVNode.h
+ nodes/COM_DisplaceNode.cpp
+ nodes/COM_DisplaceNode.h
+
+ nodes/COM_DifferenceMatteNode.cpp
+ nodes/COM_DifferenceMatteNode.h
+ nodes/COM_LuminanceMatteNode.cpp
+ nodes/COM_LuminanceMatteNode.h
+ nodes/COM_DistanceMatteNode.cpp
+ nodes/COM_DistanceMatteNode.h
+ nodes/COM_ChromaMatteNode.cpp
+ nodes/COM_ChromaMatteNode.h
+ nodes/COM_ColorMatteNode.cpp
+ nodes/COM_ColorMatteNode.h
+ nodes/COM_ChannelMatteNode.cpp
+ nodes/COM_ChannelMatteNode.h
+ nodes/COM_LensDistortionNode.cpp
+ nodes/COM_LensDistortionNode.h
+
+ nodes/COM_GlareNode.cpp
+ nodes/COM_GlareNode.h
+
+ nodes/COM_CropNode.cpp
+ nodes/COM_CropNode.h
+ operations/COM_CropOperation.cpp
+ operations/COM_CropOperation.h
+
+ operations/COM_LensGlowOperation.cpp
+ operations/COM_LensGlowOperation.h
+ operations/COM_LensGhostOperation.cpp
+ operations/COM_LensGhostOperation.h
+ nodes/COM_TransformNode.cpp
+ nodes/COM_TransformNode.h
+ nodes/COM_Stabilize2dNode.cpp
+ nodes/COM_Stabilize2dNode.h
+ nodes/COM_MovieDistortionNode.cpp
+ nodes/COM_MovieDistortionNode.h
+ nodes/COM_DefocusNode.cpp
+ nodes/COM_DefocusNode.h
+
+# color nodes
+ nodes/COM_VectorCurveNode.cpp
+ nodes/COM_VectorCurveNode.h
+ nodes/COM_ColorCurveNode.cpp
+ nodes/COM_ColorCurveNode.h
+ nodes/COM_ColorToBWNode.cpp
+ nodes/COM_ColorToBWNode.h
+ nodes/COM_ColorRampNode.cpp
+ nodes/COM_ColorRampNode.h
+ nodes/COM_MixNode.cpp
+ nodes/COM_MixNode.h
+ nodes/COM_AlphaOverNode.cpp
+ nodes/COM_AlphaOverNode.h
+ nodes/COM_ZCombineNode.cpp
+ nodes/COM_ZCombineNode.h
+ nodes/COM_BrightnessNode.cpp
+ nodes/COM_BrightnessNode.h
+ nodes/COM_ColorBalanceNode.cpp
+ nodes/COM_ColorBalanceNode.h
+ nodes/COM_InvertNode.cpp
+ nodes/COM_InvertNode.h
+ nodes/COM_GammaNode.cpp
+ nodes/COM_GammaNode.h
+ nodes/COM_SetAlphaNode.cpp
+ nodes/COM_SetAlphaNode.h
+ nodes/COM_ConvertAlphaNode.cpp
+ nodes/COM_ConvertAlphaNode.h
+ nodes/COM_AlphaOverNode.cpp
+ nodes/COM_AlphaOverNode.h
+ nodes/COM_HueSaturationValueNode.cpp
+ nodes/COM_HueSaturationValueNode.h
+ nodes/COM_HueSaturationValueCorrectNode.cpp
+ nodes/COM_HueSaturationValueCorrectNode.h
+ nodes/COM_ColorCorrectionNode.cpp
+ nodes/COM_ColorCorrectionNode.h
+ nodes/COM_TonemapNode.cpp
+ nodes/COM_TonemapNode.h
+ operations/COM_TonemapOperation.cpp
+ operations/COM_TonemapOperation.h
+
+# converter nodes
+ nodes/COM_IDMaskNode.cpp
+ nodes/COM_IDMaskNode.h
+ nodes/COM_SeparateRGBANode.cpp
+ nodes/COM_SeparateRGBANode.h
+ nodes/COM_CombineRGBANode.cpp
+ nodes/COM_CombineRGBANode.h
+ nodes/COM_SeparateHSVANode.cpp
+ nodes/COM_SeparateHSVANode.h
+ nodes/COM_CombineHSVANode.cpp
+ nodes/COM_CombineHSVANode.h
+ nodes/COM_SeparateYUVANode.cpp
+ nodes/COM_SeparateYUVANode.h
+ nodes/COM_CombineYUVANode.cpp
+ nodes/COM_CombineYUVANode.h
+ nodes/COM_SeparateYCCANode.cpp
+ nodes/COM_SeparateYCCANode.h
+ nodes/COM_CombineYCCANode.cpp
+ nodes/COM_CombineYCCANode.h
+
+ nodes/COM_NormalNode.cpp
+ nodes/COM_NormalNode.h
+ nodes/COM_NormalizeNode.cpp
+ nodes/COM_NormalizeNode.h
+ nodes/COM_MathNode.cpp
+ nodes/COM_MathNode.h
+ nodes/COM_MapValueNode.cpp
+ nodes/COM_MapValueNode.h
+
+ operations/COM_NormalizeOperation.cpp
+ operations/COM_NormalizeOperation.h
+
+# Filter nodes
+ nodes/COM_BilateralBlurNode.cpp
+ nodes/COM_BilateralBlurNode.h
+ operations/COM_BilateralBlurOperation.cpp
+ operations/COM_BilateralBlurOperation.h
+ nodes/COM_VectorBlurNode.cpp
+ nodes/COM_VectorBlurNode.h
+ operations/COM_VectorBlurOperation.cpp
+ operations/COM_VectorBlurOperation.h
+
+
+
+ nodes/COM_FilterNode.cpp
+ nodes/COM_FilterNode.h
+ nodes/COM_DilateErodeNode.cpp
+ nodes/COM_DilateErodeNode.h
+ nodes/COM_BlurNode.cpp
+ nodes/COM_BlurNode.h
+ nodes/COM_BokehBlurNode.cpp
+ nodes/COM_BokehBlurNode.h
+ nodes/COM_DirectionalBlurNode.cpp
+ nodes/COM_DirectionalBlurNode.h
+ operations/COM_GaussianXBlurOperation.cpp
+ operations/COM_GaussianXBlurOperation.h
+ operations/COM_GaussianYBlurOperation.cpp
+ operations/COM_GaussianYBlurOperation.h
+ operations/COM_GaussianBokehBlurOperation.cpp
+ operations/COM_GaussianBokehBlurOperation.h
+ operations/COM_BokehBlurOperation.cpp
+ operations/COM_BokehBlurOperation.h
+ operations/COM_VariableSizeBokehBlurOperation.cpp
+ operations/COM_VariableSizeBokehBlurOperation.h
+ operations/COM_FastGaussianBlurOperation.cpp
+ operations/COM_FastGaussianBlurOperation.h
+ operations/COM_BlurBaseOperation.cpp
+ operations/COM_BlurBaseOperation.h
+ operations/COM_DirectionalBlurOperation.cpp
+ operations/COM_DirectionalBlurOperation.h
+ operations/COM_MovieClipAttributeOperation.cpp
+ operations/COM_MovieClipAttributeOperation.h
+ operations/COM_MovieDistortionOperation.cpp
+ operations/COM_MovieDistortionOperation.h
+ operations/COM_GammaCorrectOperation.h
+ operations/COM_GammaCorrectOperation.cpp
+
+# Matte nodes
+ nodes/COM_BoxMaskNode.cpp
+ nodes/COM_BoxMaskNode.h
+ nodes/COM_EllipseMaskNode.cpp
+ nodes/COM_EllipseMaskNode.h
+ nodes/COM_ColorSpillNode.cpp
+ nodes/COM_ColorSpillNode.h
+ nodes/COM_DoubleEdgeMaskNode.cpp
+ nodes/COM_DoubleEdgeMaskNode.h
+
+ operations/COM_DoubleEdgeMaskOperation.cpp
+ operations/COM_DoubleEdgeMaskOperation.h
+operations/COM_ColorSpillOperation.cpp
+operations/COM_ColorSpillOperation.h
+ operations/COM_RenderLayersBaseProg.cpp
+ operations/COM_RenderLayersBaseProg.h
+ operations/COM_RenderLayersImageProg.cpp
+ operations/COM_RenderLayersImageProg.h
+ operations/COM_RenderLayersAlphaProg.cpp
+ operations/COM_RenderLayersAlphaProg.h
+ operations/COM_RenderLayersDepthProg.cpp
+ operations/COM_RenderLayersDepthProg.h
+ operations/COM_RenderLayersNormalOperation.cpp
+ operations/COM_RenderLayersNormalOperation.h
+ operations/COM_RenderLayersSpeedOperation.cpp
+ operations/COM_RenderLayersSpeedOperation.h
+ operations/COM_RenderLayersColorOperation.cpp
+ operations/COM_RenderLayersColorOperation.h
+ operations/COM_RenderLayersUVOperation.cpp
+ operations/COM_RenderLayersUVOperation.h
+ operations/COM_RenderLayersMistOperation.cpp
+ operations/COM_RenderLayersMistOperation.h
+ operations/COM_RenderLayersObjectIndexOperation.cpp
+ operations/COM_RenderLayersObjectIndexOperation.h
+ operations/COM_RenderLayersMaterialIndexOperation.cpp
+ operations/COM_RenderLayersMaterialIndexOperation.h
+ operations/COM_RenderLayersDiffuseOperation.cpp
+ operations/COM_RenderLayersDiffuseOperation.h
+ operations/COM_RenderLayersSpecularOperation.cpp
+ operations/COM_RenderLayersSpecularOperation.h
+ operations/COM_RenderLayersShadowOperation.cpp
+ operations/COM_RenderLayersShadowOperation.h
+ operations/COM_RenderLayersAOOperation.cpp
+ operations/COM_RenderLayersAOOperation.h
+ operations/COM_RenderLayersEmitOperation.cpp
+ operations/COM_RenderLayersEmitOperation.h
+ operations/COM_RenderLayersReflectionOperation.cpp
+ operations/COM_RenderLayersReflectionOperation.h
+ operations/COM_RenderLayersRefractionOperation.cpp
+ operations/COM_RenderLayersRefractionOperation.h
+ operations/COM_RenderLayersEnvironmentOperation.cpp
+ operations/COM_RenderLayersEnvironmentOperation.h
+ operations/COM_RenderLayersIndirectOperation.cpp
+ operations/COM_RenderLayersIndirectOperation.h
+ operations/COM_RenderLayersCyclesOperation.cpp
+ operations/COM_RenderLayersCyclesOperation.h
+
+operations/COM_ImageOperation.cpp
+operations/COM_ImageOperation.h
+operations/COM_MultilayerImageOperation.cpp
+operations/COM_MultilayerImageOperation.h
+operations/COM_TextureOperation.cpp
+operations/COM_TextureOperation.h
+operations/COM_BokehImageOperation.cpp
+operations/COM_BokehImageOperation.h
+operations/COM_LensGlowImageOperation.cpp
+operations/COM_LensGlowImageOperation.h
+
+
+ operations/COM_SocketProxyOperation.h
+ operations/COM_SocketProxyOperation.cpp
+
+ operations/COM_CompositorOperation.h
+ operations/COM_CompositorOperation.cpp
+ operations/COM_OutputFileOperation.h
+ operations/COM_OutputFileOperation.cpp
+ operations/COM_ViewerBaseOperation.h
+ operations/COM_ViewerBaseOperation.cpp
+ operations/COM_ViewerOperation.h
+ operations/COM_ViewerOperation.cpp
+ operations/COM_PreviewOperation.h
+ operations/COM_PreviewOperation.cpp
+ operations/COM_SplitViewerOperation.h
+ operations/COM_SplitViewerOperation.cpp
+ operations/COM_ConvertValueToColourProg.h
+ operations/COM_ConvertValueToColourProg.cpp
+ operations/COM_ConvertColourToValueProg.h
+ operations/COM_ConvertColourToValueProg.cpp
+ operations/COM_ConvertColorToBWOperation.h
+ operations/COM_ConvertColorToBWOperation.cpp
+ operations/COM_ConvertColorToVectorOperation.h
+ operations/COM_ConvertColorToVectorOperation.cpp
+ operations/COM_ConvertValueToVectorOperation.h
+ operations/COM_ConvertValueToVectorOperation.cpp
+ operations/COM_ConvertVectorToColorOperation.h
+ operations/COM_ConvertVectorToColorOperation.cpp
+ operations/COM_ConvertVectorToValueOperation.h
+ operations/COM_ConvertVectorToValueOperation.cpp
+operations/COM_ConvertDepthToRadiusOperation.h
+operations/COM_ConvertDepthToRadiusOperation.cpp
+ operations/COM_ZCombineOperation.cpp
+ operations/COM_ZCombineOperation.h
+
+ operations/COM_ConvertRGBToYCCOperation.h
+ operations/COM_ConvertRGBToYCCOperation.cpp
+ operations/COM_ConvertYCCToRGBOperation.h
+ operations/COM_ConvertYCCToRGBOperation.cpp
+ operations/COM_ConvertRGBToYUVOperation.h
+ operations/COM_ConvertRGBToYUVOperation.cpp
+ operations/COM_ConvertYUVToRGBOperation.h
+ operations/COM_ConvertYUVToRGBOperation.cpp
+ operations/COM_ConvertRGBToHSVOperation.h
+ operations/COM_ConvertRGBToHSVOperation.cpp
+ operations/COM_ConvertHSVToRGBOperation.h
+ operations/COM_ConvertHSVToRGBOperation.cpp
+ operations/COM_ChangeHSVOperation.h
+ operations/COM_ChangeHSVOperation.cpp
+ operations/COM_ColorCurveOperation.h
+ operations/COM_ColorCurveOperation.cpp
+ operations/COM_ColorRampOperation.h
+ operations/COM_ColorRampOperation.cpp
+ operations/COM_VectorCurveOperation.h
+ operations/COM_VectorCurveOperation.cpp
+ operations/COM_CurveBaseOperation.h
+ operations/COM_CurveBaseOperation.cpp
+ operations/COM_HueSaturationValueCorrectOperation.cpp
+ operations/COM_HueSaturationValueCorrectOperation.h
+ operations/COM_DifferenceMatteOperation.cpp
+ operations/COM_DifferenceMatteOperation.h
+ operations/COM_LuminanceMatteOperation.cpp
+ operations/COM_LuminanceMatteOperation.h
+ operations/COM_DistanceMatteOperation.cpp
+ operations/COM_DistanceMatteOperation.h
+ operations/COM_ChromaMatteOperation.cpp
+ operations/COM_ChromaMatteOperation.h
+ operations/COM_ColorMatteOperation.cpp
+ operations/COM_ColorMatteOperation.h
+ operations/COM_ChannelMatteOperation.cpp
+ operations/COM_ChannelMatteOperation.h
+ operations/COM_ConvertPremulToKeyOperation.cpp
+ operations/COM_ConvertPremulToKeyOperation.h
+ operations/COM_ConvertKeyToPremulOperation.cpp
+ operations/COM_ConvertKeyToPremulOperation.h
+
+ operations/COM_ReadBufferOperation.cpp
+ operations/COM_ReadBufferOperation.h
+ operations/COM_WriteBufferOperation.cpp
+ operations/COM_WriteBufferOperation.h
+ operations/COM_MixBaseOperation.h
+ operations/COM_MixBaseOperation.cpp
+ operations/COM_MixBlendOperation.cpp
+ operations/COM_MixBlendOperation.h
+ operations/COM_MixAddOperation.h
+ operations/COM_MixAddOperation.cpp
+ operations/COM_MixMultiplyOperation.h
+ operations/COM_MixMultiplyOperation.cpp
+ operations/COM_BrightnessOperation.cpp
+ operations/COM_BrightnessOperation.h
+ operations/COM_GammaOperation.cpp
+ operations/COM_GammaOperation.h
+ operations/COM_ColorCorrectionOperation.cpp
+ operations/COM_ColorCorrectionOperation.h
+ operations/COM_SetValueOperation.h
+ operations/COM_SetValueOperation.cpp
+ operations/COM_SetColorOperation.h
+ operations/COM_SetColorOperation.cpp
+ operations/COM_SetVectorOperation.h
+ operations/COM_SetVectorOperation.cpp
+
+ operations/COM_MixBurnOperation.h
+ operations/COM_MixBurnOperation.cpp
+ operations/COM_MixColorOperation.h
+ operations/COM_MixColorOperation.cpp
+ operations/COM_MixDarkenOperation.h
+ operations/COM_MixDarkenOperation.cpp
+ operations/COM_MixDodgeOperation.h
+ operations/COM_MixDodgeOperation.cpp
+ operations/COM_MixDifferenceOperation.h
+ operations/COM_MixDifferenceOperation.cpp
+ operations/COM_MixDivideOperation.h
+ operations/COM_MixDivideOperation.cpp
+ operations/COM_MixHueOperation.h
+ operations/COM_MixHueOperation.cpp
+ operations/COM_MixLightenOperation.h
+ operations/COM_MixLightenOperation.cpp
+ operations/COM_MixLinearLightOperation.h
+ operations/COM_MixLinearLightOperation.cpp
+ operations/COM_MixOverlayOperation.h
+ operations/COM_MixOverlayOperation.cpp
+ operations/COM_MixSaturationOperation.h
+ operations/COM_MixSaturationOperation.cpp
+ operations/COM_MixScreenOperation.h
+ operations/COM_MixScreenOperation.cpp
+ operations/COM_MixSoftLightOperation.h
+ operations/COM_MixSoftLightOperation.cpp
+ operations/COM_MixValueOperation.h
+ operations/COM_MixValueOperation.cpp
+ operations/COM_MixSubtractOperation.h
+ operations/COM_MixSubtractOperation.cpp
+
+ operations/COM_MathBaseOperation.h
+ operations/COM_MathBaseOperation.cpp
+
+ operations/COM_AlphaOverMixedOperation.h
+ operations/COM_AlphaOverMixedOperation.cpp
+ operations/COM_AlphaOverPremultiplyOperation.h
+ operations/COM_AlphaOverPremultiplyOperation.cpp
+ operations/COM_AlphaOverKeyOperation.h
+ operations/COM_AlphaOverKeyOperation.cpp
+
+ operations/COM_ColorBalanceLGGOperation.h
+ operations/COM_ColorBalanceLGGOperation.cpp
+ operations/COM_ColorBalanceASCCDLOperation.h
+ operations/COM_ColorBalanceASCCDLOperation.cpp
+ operations/COM_InvertOperation.cpp
+ operations/COM_InvertOperation.h
+ operations/COM_SetAlphaOperation.cpp
+ operations/COM_SetAlphaOperation.h
+ operations/COM_MapValueOperation.cpp
+ operations/COM_MapValueOperation.h
+
+# Distort operation
+ operations/COM_TranslateOperation.h
+ operations/COM_TranslateOperation.cpp
+ operations/COM_RotateOperation.h
+ operations/COM_RotateOperation.cpp
+ operations/COM_ScaleOperation.h
+ operations/COM_ScaleOperation.cpp
+ operations/COM_MapUVOperation.h
+ operations/COM_MapUVOperation.cpp
+ operations/COM_DisplaceOperation.h
+ operations/COM_DisplaceOperation.cpp
+ operations/COM_DisplaceSimpleOperation.h
+ operations/COM_DisplaceSimpleOperation.cpp
+ operations/COM_FlipOperation.h
+ operations/COM_FlipOperation.cpp
+ operations/COM_ProjectorLensDistortionOperation.cpp
+ operations/COM_ProjectorLensDistortionOperation.h
+ operations/COM_ScreenLensDistortionOperation.cpp
+ operations/COM_ScreenLensDistortionOperation.h
+
+#Filter operations
+ operations/COM_ConvolutionFilterOperation.h
+ operations/COM_ConvolutionFilterOperation.cpp
+ operations/COM_ConvolutionEdgeFilterOperation.h
+ operations/COM_ConvolutionEdgeFilterOperation.cpp
+ operations/COM_DilateErodeOperation.cpp
+ operations/COM_DilateErodeOperation.h
+ operations/COM_FogGlowImageOperation.cpp
+ operations/COM_FogGlowImageOperation.h
+ operations/COM_GlareThresholdOperation.cpp
+ operations/COM_GlareThresholdOperation.h
+ operations/COM_GlareBaseOperation.cpp
+ operations/COM_GlareBaseOperation.h
+ operations/COM_GlareSimpleStarOperation.cpp
+ operations/COM_GlareSimpleStarOperation.h
+ operations/COM_GlareStreaksOperation.cpp
+ operations/COM_GlareStreaksOperation.h
+ operations/COM_SetSamplerOperation.cpp
+ operations/COM_SetSamplerOperation.h
+
+
+#Convert operations
+ operations/COM_IDMaskOperation.cpp
+ operations/COM_IDMaskOperation.h
+
+ operations/COM_SeparateChannelOperation.cpp
+ operations/COM_SeparateChannelOperation.h
+ operations/COM_CombineChannelsOperation.cpp
+ operations/COM_CombineChannelsOperation.h
+
+ operations/COM_DotproductOperation.cpp
+ operations/COM_DotproductOperation.h
+# Matte operation
+ operations/COM_BoxMaskOperation.h
+ operations/COM_BoxMaskOperation.cpp
+ operations/COM_EllipseMaskOperation.h
+ operations/COM_EllipseMaskOperation.cpp
+
+ operations/COM_MovieClipOperation.cpp
+ operations/COM_MovieClipOperation.h
+ operations/COM_ConvertColorProfileOperation.cpp
+ operations/COM_ConvertColorProfileOperation.h
+
+ operations/COM_AntiAliasOperation.cpp
+ operations/COM_AntiAliasOperation.h
+)
+
+blender_add_lib(bf_compositor "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/compositor/COM_compositor.h b/source/blender/compositor/COM_compositor.h
new file mode 100644
index 00000000000..b33a48464e1
--- /dev/null
+++ b/source/blender/compositor/COM_compositor.h
@@ -0,0 +1,304 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
+#include "DNA_node_types.h"
+
+/**
+ * @defgroup Model The data model of the compositor
+ * @defgroup Memory The memory management stuff
+ * @defgroup Execution The execution logic
+ * @defgroup Conversion Conversion logic
+ * @defgroup Node All nodes of the compositor
+ * @defgroup Operation All operations of the compositor
+ *
+ * @mainpage Introduction of the Blender Compositor
+ *
+ * @section bcomp Blender compositor
+ * This project redesigns the interals of Blender's compositor. The project has been executed in 2011 by At Mind.
+ * At Mind is a technology company located in Amsterdam, The Netherlands.
+ * The project has been crowdfunded. This code has been released under GPL2 to be used in Blender.
+ *
+ * @section goals The goals of the project
+ * the new compositor has 2 goals.
+ * - Make a faster compositor (speed of calculation)
+ * - Make the compositor work faster for you (workflow)
+ *
+ * @section speed Faster compositor
+ * The speedup has been done by making better use of the hardware Blenders is working on. The previous compositor only
+ * used a single threaded model to calculate a node. The only exception to this is the Defocus node.
+ * Only when it is possible to calculate two full nodes in parallel a second thread was used.
+ * Current workstations have 8-16 threads available, and most of the time these are idle.
+ *
+ * In the new compositor we want to use as much of threads as possible. Even new OpenCL capable GPU-hardware can be
+ * used for calculation.
+ *
+ * @section workflow Work faster
+ * The previous compositor only showed the final image. The compositor could wait a long time before seeing the result
+ * of his work. The new compositor will work in a way that it will focus on getting information back to the user.
+ * It will prioritise its work to get earlier user feedback.
+ *
+ * @page memory Memory model
+ * The main issue is the type of memory model to use. Blender is used by consumers and professionals.
+ * Ranging from low-end machines to very high-end machines.
+ * The system should work on high-end machines and on low-end machines.
+ *
+ *
+ * @page executing Executing
+ * @section prepare Prepare execution
+ *
+ * during the preparation of the execution All ReadBufferOperation will receive an offset.
+ * This offset is used during execution as an optimization trick
+ * Next all operations will be initialized for execution @see NodeOperation.initExecution
+ * Next all ExecutionGroup's will be initialized for execution @see ExecutionGroup.initExecution
+ * this all is controlled from @see ExecutionSystem.execute
+ *
+ * @section priority Render priority
+ * Render priority is an priority of an output node. A user has a different need of Render priorities of output nodes
+ * than during editing.
+ * for example. the Active ViewerNode has top priority during editing, but during rendering a CompositeNode has.
+ * All NodeOperation has a setting for their renderpriority, but only for output NodeOperation these have effect.
+ * In ExecutionSystem.execute all priorities are checked. For every priority the ExecutionGroup's are check if the
+ * priority do match.
+ * When match the ExecutionGroup will be executed (this happens in serial)
+ *
+ * @see ExecutionSystem.execute control of the Render priority
+ * @see NodeOperation.getRenderPriority receive the render priority
+ * @see ExecutionGroup.execute the main loop to execute a whole ExecutionGroup
+ *
+ * @section order Chunk order
+ *
+ * When a ExecutionGroup is executed, first the order of chunks are determined.
+ * The settings are stored in the ViewerNode inside the ExecutionGroup. ExecutionGroups that have no viewernode,
+ * will use a default one.
+ * There are several possible chunk orders
+ * - [@ref OrderOfChunks.COM_TO_CENTER_OUT]: Start calculating from a configurable point and order by nearest chunk
+ * - [@ref OrderOfChunks.COM_TO_RANDOM]: Randomize all chunks.
+ * - [@ref OrderOfChunks.COM_TO_TOP_DOWN]: Start calculation from the bottom to the top of the image
+ * - [@ref OrderOfChunks.COM_TO_RULE_OF_THIRDS]: Experimental order based on 9 hotspots in the image
+ *
+ * When the chunkorder is determined, the first few chunks will be checked if they can be scheduled.
+ * Chunks can have three states:
+ * - [@ref ChunkExecutionState.COM_ES_NOT_SCHEDULED]: Chunk is not yet scheduled, or dependacies are not met
+ * - [@ref ChunkExecutionState.COM_ES_SCHEDULED]: All dependacies are met, chunk is scheduled, but not finished
+ * - [@ref ChunkExecutionState.COM_ES_EXECUTED]: Chunk is finished
+ *
+ * @see ExecutionGroup.execute
+ * @see ViewerBaseOperation.getChunkOrder
+ * @see OrderOfChunks
+ *
+ * @section interest Area of interest
+ * An ExecutionGroup can have dependancies to other ExecutionGroup's. Data passing from one ExecutionGroup to another
+ * one are stored in 'chunks'.
+ * If not all input chunks are available the chunk execution will not be scheduled.
+ * <pre>
+ * +-------------------------------------+ +--------------------------------------+
+ * | ExecutionGroup A | | ExecutionGroup B |
+ * | +----------------+ +-------------+ | | +------------+ +-----------------+ |
+ * | | NodeOperation a| | WriteBuffer | | | | ReadBuffer | | ViewerOperation | |
+ * | | *==* Operation | | | | Operation *===* | |
+ * | | | | | | | | | | | |
+ * | +----------------+ +-------------+ | | +------------+ +-----------------+ |
+ * | | | | | |
+ * +--------------------------------|----+ +---|----------------------------------+
+ * | |
+ * | |
+ * +---------------------------+
+ * | MemoryProxy |
+ * | +----------+ +---------+ |
+ * | | Chunk a | | Chunk b | |
+ * | | | | | |
+ * | +----------+ +---------+ |
+ * | |
+ * +---------------------------+
+ * </pre>
+ *
+ * In the above example ExecutionGroup B has an outputoperation (ViewerOperation) and is being executed.
+ * The first chunk is evaluated [@ref ExecutionGroup.scheduleChunkWhenPossible],
+ * but not all input chunks are available. The relevant ExecutionGroup (that can calculate the missing chunks;
+ * ExecutionGroup A) is asked to calculate the area ExecutionGroup B is missing.
+ * [@ref ExecutionGroup.scheduleAreaWhenPossible]
+ * ExecutionGroup B checks what chunks the area spans, and tries to schedule these chunks.
+ * If all input data is available these chunks are scheduled [@ref ExecutionGroup.scheduleChunk]
+ *
+ * <pre>
+ *
+ * +-------------------------+ +----------------+ +----------------+
+ * | ExecutionSystem.execute | | ExecutionGroup | | ExecutionGroup |
+ * +-------------------------+ | (B) | | (A) |
+ * O +----------------+ +----------------+
+ * O | |
+ * O ExecutionGroup.execute | |
+ * O------------------------------->O |
+ * . O |
+ * . O-------\ |
+ * . . | ExecutionGroup.scheduleChunkWhenPossible
+ * . . O----/ (*) |
+ * . . O |
+ * . . O |
+ * . . O ExecutionGroup.scheduleAreaWhenPossible|
+ * . . O---------------------------------------->O
+ * . . . O----------\ ExecutionGroup.scheduleChunkWhenPossible
+ * . . . . | (*)
+ * . . . . O-------/
+ * . . . . O
+ * . . . . O
+ * . . . . O-------\ ExecutionGroup.scheduleChunk
+ * . . . . . |
+ * . . . . . O----/
+ * . . . . O<=O
+ * . . . O<=O
+ * . . . O
+ * . . O<========================================O
+ * . . O |
+ * . O<=O |
+ * . O |
+ * . O |
+ * </pre>
+ *
+ * This happens until all chunks of (ExecutionGroup B) are finished executing or the user break's the process.
+ *
+ * NodeOperation like the ScaleOperation can influence the area of interest by reimplementing the
+ * [@ref NodeOperation.determineAreaOfInterest] method
+ *
+ * <pre>
+ *
+ * +--------------------------+ +---------------------------------+
+ * | ExecutionGroup A | | ExecutionGroup B |
+ * | | | |
+ * +--------------------------+ +---------------------------------+
+ * Needed chunks from ExecutionGroup A | Chunk of ExecutionGroup B (to be evaluated)
+ * +-------+ +-------+ | +--------+
+ * |Chunk 1| |Chunk 2| +----------------+ |Chunk 1 |
+ * | | | | | ScaleOperation | | |
+ * +-------+ +-------+ +----------------+ +--------+
+ *
+ * +-------+ +-------+
+ * |Chunk 3| |Chunk 4|
+ * | | | |
+ * +-------+ +-------+
+ *
+ * </pre>
+ *
+ * @see ExecutionGroup.execute Execute a complete ExecutionGroup. Halts until finished or breaked by user
+ * @see ExecutionGroup.scheduleChunkWhenPossible Tries to schedule a single chunk,
+ * checks if all input data is available. Can trigger dependant chunks to be calculated
+ * @see ExecutionGroup.scheduleAreaWhenPossible Tries to schedule an area. This can be multiple chunks
+ * (is called from [@ref ExecutionGroup.scheduleChunkWhenPossible])
+ * @see ExecutionGroup.scheduleChunk Schedule a chunk on the WorkScheduler
+ * @see NodeOperation.determineDependingAreaOfInterest Influence the area of interest of a chunk.
+ * @see WriteBufferOperation NodeOperation to write to a MemoryProxy/MemoryBuffer
+ * @see ReadBufferOperation NodeOperation to read from a MemoryProxy/MemoryBuffer
+ * @see MemoryProxy proxy for information about memory image (a image consist out of multiple chunks)
+ * @see MemoryBuffer Allocated memory for a single chunk
+ *
+ * @section workscheduler WorkScheduler
+ * the WorkScheduler is implemented as a static class. the responsibility of the WorkScheduler is to balance
+ * WorkPackages to the available and free devices.
+ * the workscheduler can work in 2 states. For witching these between the state you need to recompile blender
+ *
+ * @subsection multithread Multi threaded
+ * Default the workscheduler will place all work as WorkPackage in a queue.
+ * For every CPUcore a working thread is created. These working threads will ask the WorkScheduler if there is work
+ * for a specific Device.
+ * the workscheduler will find work for the device and the device will be asked to execute the WorkPackage
+
+ * @subsection singlethread Single threaded
+ * For debugging reasons the multi-threading can be disabled. This is done by changing the COM_CURRENT_THREADING_MODEL
+ * to COM_TM_NOTHREAD. When compiling the workscheduler
+ * will be changes to support no threading and run everything on the CPU.
+ *
+ * @section devices Devices
+ * A Device within the compositor context is a Hardware component that can used to calculate chunks.
+ * This chunk is encapseled in a WorkPackage.
+ * the WorkScheduler controls the devices and selects the device where a WorkPackage will be calculated.
+ *
+ * @subsection WS_Devices Workscheduler
+ * The WorkScheduler controls all Devices. When initializing the compositor the WorkScheduler selects
+ * all devices that will be used during compositor.
+ * There are two types of Devices, CPUDevice and OpenCLDevice.
+ * When an ExecutionGroup schedules a Chunk the schedule method of the WorkScheduler
+ * The Workscheduler determines if the chunk can be run on an OpenCLDevice
+ * (and that there are available OpenCLDevice). If this is the case the chunk will be added to the worklist for
+ * OpenCLDevice's
+ * otherwise the chunk will be added to the worklist of CPUDevices.
+ *
+ * A thread will read the work-list and sends a workpackage to its device.
+ *
+ * @see WorkScheduler.schedule method that is called to schedule a chunk
+ * @see Device.execute method called to execute a chunk
+ *
+ * @subsection CPUDevice CPUDevice
+ * When a CPUDevice gets a WorkPackage the Device will get the inputbuffer that is needed to calculate the chunk.
+ * Allocation is already done by the ExecutionGroup.
+ * The outputbuffer of the chunk is being created.
+ * The OutputOperation of the ExecutionGroup is called to execute the area of the outputbuffer.
+ *
+ * @see ExecutionGroup
+ * @see NodeOperation.executeRegion executes a single chunk of a NodeOperation
+ * @see CPUDevice.execute
+ *
+ * @subsection GPUDevice OpenCLDevice
+ *
+ * To be completed!
+ * @see NodeOperation.executeOpenCLRegion
+ * @see OpenCLDevice.execute
+ *
+ * @section executePixel executing a pixel
+ * Finally the last step, the node functionality :)
+
+ * @page newnode Creating new nodes
+ */
+
+/**
+ * @brief The main method that is used to execute the compositor tree.
+ * It can be executed during editing (blenkernel/node.c) or rendering
+ * (renderer/pipeline.c)
+ *
+ * @param editingtree [struct bNodeTree]
+ * reference to the compositor editing tree
+ *
+ * @param rendering [true false]
+ * This parameter determines whether the function is called from rendering (true) or editing (false).
+ * based on this setting the system will work differently:
+ * - during rendering only Composite & the File output node will be calculated
+ * @see NodeOperation.isOutputProgram(int rendering) of the specific operations
+ *
+ * - during editing all output nodes will be calculated
+ * @see NodeOperation.isOutputProgram(int rendering) of the specific operations
+ *
+ * - another quality setting can be used bNodeTree. The quality is determined by the bNodeTree fields.
+ * quality can be modified by the user from within the node panels.
+ * @see bNodeTree.edit_quality
+ * @see bNodeTree.render_quality
+ *
+ * - output nodes can have different priorities in the WorkScheduler.
+ * This is implemented in the COM_execute function.
+ */
+void COM_execute(bNodeTree *editingtree, int rendering);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/source/blender/compositor/COM_defines.h b/source/blender/compositor/COM_defines.h
new file mode 100644
index 00000000000..df807091cb8
--- /dev/null
+++ b/source/blender/compositor/COM_defines.h
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_defines_h_
+#define _COM_defines_h_
+
+/**
+ * @brief possible data types for SocketConnection
+ * @ingroup Model
+ */
+typedef enum DataType {
+ /** @brief Unknown data type (or not yet known) */
+ COM_DT_UNKNOWN = 0,
+ /** @brief Value data type */
+ COM_DT_VALUE = 1,
+ /** @brief Vector data type */
+ COM_DT_VECTOR = 2,
+ /** @brief Color data type */
+ COM_DT_COLOR = 4
+} DataType;
+
+/**
+ * @brief Possible quality settings
+ * @see CompositorContext.quality
+ * @ingroup Execution
+ */
+typedef enum CompositorQuality {
+ /** @brief High quality setting */
+ COM_QUALITY_HIGH = 0 ,
+ /** @brief Medium quality setting */
+ COM_QUALITY_MEDIUM = 1,
+ /** @brief Low quality setting */
+ COM_QUALITY_LOW = 2
+} CompositorQuality;
+
+// configurable items
+
+// chunk size determination
+#define COM_PREVIEW_SIZE 140.0f
+#define COM_OPENCL_ENABLED
+#define COM_PREVIEW_ENABLED
+// workscheduler threading models
+/**
+ * COM_TM_QUEUE is a multithreaded model, which uses the BLI_thread_queue pattern. This is the default option.
+ */
+#define COM_TM_QUEUE 1
+
+/**
+ * COM_TM_NOTHREAD is a single threading model, everything is executed in the caller thread. easy for debugging
+ */
+#define COM_TM_NOTHREAD 0
+
+/**
+ * COM_CURRENT_THREADING_MODEL can be one of the above, COM_TM_QUEUE is currently default.
+ */
+#define COM_CURRENT_THREADING_MODEL COM_TM_QUEUE
+// chunk order
+/**
+ * @brief The order of chunks to be scheduled
+ * @ingroup Execution
+ */
+typedef enum OrderOfChunks {
+ /** @brief order from a distance to centerX/centerY */
+ COM_TO_CENTER_OUT = 0,
+ /** @brief order randomly */
+ COM_TO_RANDOM = 1,
+ /** @brief no ordering */
+ COM_TO_TOP_DOWN = 2,
+ /** @brief experimental ordering with 9 hotspots */
+ COM_TO_RULE_OF_THIRDS = 3
+} OrderOfChunks;
+
+#define COM_RULE_OF_THIRDS_DIVIDER 100.0f
+
+#define COM_NUMBER_OF_CHANNELS 4
+
+#define COM_DEFAULT_RESOLUTION_WIDTH 640
+#define COM_DEFAULT_RESOLUTION_HEIGHT 480
+
+#endif
diff --git a/source/blender/compositor/SConscript b/source/blender/compositor/SConscript
new file mode 100644
index 00000000000..af0d4109acc
--- /dev/null
+++ b/source/blender/compositor/SConscript
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+Import ('env')
+defs = ['GLEW_STATIC']
+
+sources = env.Glob('intern/*.cpp') + env.Glob('nodes/*.cpp') + env.Glob('operations/*.cpp')
+
+incs = '. nodes intern operations ../blenlib ../blenkernel ../makesdna ../render/extern/include ../render/intern/include'
+incs += ' ../makesrna ../blenloader ../../../intern/guardedalloc ../imbuf ../windowmanager '
+incs += '../opencl ../nodes ../nodes/intern ../nodes/composite '
+
+if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
+ incs += ' ' + env['BF_PTHREADS_INC']
+
+env.BlenderLib ( 'bf_composite', sources, Split(incs), defines=defs, libtype=['core'], priority = [191] )
diff --git a/source/blender/compositor/intern/COM_CPUDevice.cpp b/source/blender/compositor/intern/COM_CPUDevice.cpp
new file mode 100644
index 00000000000..43ec892985a
--- /dev/null
+++ b/source/blender/compositor/intern/COM_CPUDevice.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CPUDevice.h"
+
+void CPUDevice::execute(WorkPackage *work)
+{
+ const unsigned int chunkNumber = work->getChunkNumber();
+ ExecutionGroup * executionGroup = work->getExecutionGroup();
+ rcti rect;
+
+ executionGroup->determineChunkRect(&rect, chunkNumber);
+ MemoryBuffer ** inputBuffers = executionGroup->getInputBuffers(chunkNumber);
+ MemoryBuffer * outputBuffer = executionGroup->allocateOutputBuffer(chunkNumber, &rect);
+
+ executionGroup->getOutputNodeOperation()->executeRegion(&rect, chunkNumber, inputBuffers);
+
+ executionGroup->finalizeChunkExecution(chunkNumber, inputBuffers);
+ if (outputBuffer != NULL) {
+ outputBuffer->setCreatedState();
+ }
+}
+
diff --git a/source/blender/compositor/intern/COM_CPUDevice.h b/source/blender/compositor/intern/COM_CPUDevice.h
new file mode 100644
index 00000000000..f577e2b8926
--- /dev/null
+++ b/source/blender/compositor/intern/COM_CPUDevice.h
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CPUDevice_h
+#define _COM_CPUDevice_h
+
+#include "COM_Device.h"
+
+/**
+ * @brief class representing a CPU device.
+ * @note for every hardware thread in the system a CPUDevice instance will exist in the workscheduler
+ */
+class CPUDevice: public Device {
+public:
+ /**
+ * @brief execute a WorkPackage
+ * @param work the WorkPackage to execute
+ */
+ void execute(WorkPackage *work);
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_ChannelInfo.cpp b/source/blender/compositor/intern/COM_ChannelInfo.cpp
new file mode 100644
index 00000000000..7dafee5f955
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ChannelInfo.cpp
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ChannelInfo.h"
+#include "COM_defines.h"
+#include <stdio.h>
+
+/**
+ * @brief create new ChannelInfo instance and sets the defaults.
+ */
+ChannelInfo::ChannelInfo()
+{
+ this->number = 0;
+ this->premultiplied = true;
+ this->type = COM_CT_UNUSED;
+}
diff --git a/source/blender/compositor/intern/COM_ChannelInfo.h b/source/blender/compositor/intern/COM_ChannelInfo.h
new file mode 100644
index 00000000000..40933bce6f5
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ChannelInfo.h
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ChannelInfo_h
+#define _COM_ChannelInfo_h
+
+#include <vector>
+#include "BKE_text.h"
+#include <string>
+#include "DNA_node_types.h"
+#include "BLI_rect.h"
+
+using namespace std;
+
+/**
+ * @brief List of possible channel types
+ * @ingroup Model
+ */
+typedef enum ChannelType {
+ COM_CT_ColorComponent /** @brief this channel is contains color information. Specific used is determined by channelnumber, and in the future color space */,
+ COM_CT_Alpha /** @brief this channel is contains transparency value */,
+ COM_CT_Value /** @brief this channel is contains a value */,
+ COM_CT_X /** @brief this channel is contains a X value */,
+ COM_CT_Y /** @brief this channel is contains a Y value */,
+ COM_CT_Z /** @brief this channel is contains a Z value */,
+ COM_CT_W /** @brief this channel is contains a W value */,
+ COM_CT_UNUSED /** @brief this channel is unused */
+} ChannelType;
+
+/**
+ * @brief ChannelInfo holds information about a channel.
+ *
+ * Channels are transported from node to node via a SocketConnection.
+ * ChannelInfo holds specific setting of these channels in order that the to-node of the connection
+ * Can handle specific logic per channel setting.
+ *
+ * @note currently this is not used, but a future place to implement color spacing and other things.
+ * @ingroup Model
+ */
+class ChannelInfo {
+private:
+ /**
+ * @brief the channel number, in the connection. [0-3]
+ */
+ int number;
+
+ /**
+ * @brief type of channel
+ */
+ ChannelType type;
+
+ /**
+ * @brieg Is this value in this channel premultiplied with its alpha
+ * @note only valid if type = ColorComponent;
+ */
+ bool premultiplied;
+
+// /**
+// * Color space of this value.
+// * only valid when type = ColorComponent;
+// */
+// string colorspacename;
+
+public:
+ /**
+ * @brief creates a new ChannelInfo and set default values
+ */
+ ChannelInfo();
+
+ /**
+ * @brief set the index of this channel in the SocketConnection
+ */
+ void setNumber(const int number) { this->number = number; }
+
+ /**
+ * @brief get the index of this channel in the SocketConnection
+ */
+ const int getNumber() const {return this->number; }
+
+ /**
+ * @brief set the type of channel
+ */
+ void setType(const ChannelType type) { this->type = type; }
+
+ /**
+ * @brief get the type of channel
+ */
+ const ChannelType getType() const {return this->type; }
+
+ /**
+ * @brief set the premultiplicatioin of this channel
+ */
+ void setPremultiplied(const bool premultiplied) { this->premultiplied = premultiplied; }
+
+ /**
+ * @brief is this channel premultiplied
+ */
+ const bool isPremultiplied() const {return this->premultiplied;}
+};
+
+
+#endif
diff --git a/source/blender/compositor/intern/COM_ChunkOrder.cpp b/source/blender/compositor/intern/COM_ChunkOrder.cpp
new file mode 100644
index 00000000000..387e4a6ba70
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ChunkOrder.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ChunkOrder.h"
+#include "BLI_math.h"
+
+ChunkOrder::ChunkOrder()
+{
+ this->distance = 0.0;
+ this->number = 0;
+ this->x = 0;
+ this->y = 0;
+}
+
+void ChunkOrder::determineDistance(ChunkOrderHotspot **hotspots, unsigned int numberOfHotspots)
+{
+ unsigned int index;
+ double distance = MAXFLOAT;
+ for (index = 0 ; index < numberOfHotspots ; index ++) {
+ ChunkOrderHotspot *hotspot = hotspots[index];
+ double ndistance = hotspot->determineDistance(this->x, this->y);
+ if (ndistance < distance) {
+ distance = ndistance;
+ }
+ }
+ this->distance = distance;
+}
+
+bool operator<(const ChunkOrder& a, const ChunkOrder& b)
+{
+ return a.distance < b.distance;
+}
diff --git a/source/blender/compositor/intern/COM_ChunkOrder.h b/source/blender/compositor/intern/COM_ChunkOrder.h
new file mode 100644
index 00000000000..3dbb4ae8080
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ChunkOrder.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ChunkOrder_h_
+#define _COM_ChunkOrder_h_
+
+#include "COM_ChunkOrderHotspot.h"
+class ChunkOrder {
+private:
+ unsigned int number;
+ int x;
+ int y;
+ double distance;
+public:
+ ChunkOrder();
+ void determineDistance(ChunkOrderHotspot **hotspots, unsigned int numberOfHotspots);
+ friend bool operator<(const ChunkOrder& a, const ChunkOrder& b);
+
+ void setChunkNumber(unsigned int chunknumber) {this->number = chunknumber;}
+ void setX(int x) {this->x = x;}
+ void setY(int y) {this->y = y;}
+ unsigned int getChunkNumber() {return this->number;}
+ double getDistance() {return this->distance;}
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_ChunkOrderHotspot.cpp b/source/blender/compositor/intern/COM_ChunkOrderHotspot.cpp
new file mode 100644
index 00000000000..94110f0bcfe
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ChunkOrderHotspot.cpp
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ChunkOrderHotspot.h"
+#include <math.h>
+
+ChunkOrderHotspot::ChunkOrderHotspot(int x, int y, float addition)
+{
+ this->x = x;
+ this->y = y;
+ this->addition = addition;
+}
+
+double ChunkOrderHotspot::determineDistance(int x, int y)
+{
+ int dx = x-this->x;
+ int dy = y-this->y;
+ double result = sqrt((double)(dx*dx+dy*dy));
+ result += this->addition;
+ return result;
+}
diff --git a/source/blender/compositor/intern/COM_ChunkOrderHotspot.h b/source/blender/compositor/intern/COM_ChunkOrderHotspot.h
new file mode 100644
index 00000000000..ceb5934a7df
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ChunkOrderHotspot.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ChunkOrderHotSpot_h_
+#define _COM_ChunkOrderHotSpot_h_
+
+class ChunkOrderHotspot {
+private:
+ int x;
+ int y;
+ float addition;
+
+public:
+ ChunkOrderHotspot(int x, int y, float addition);
+ double determineDistance(int x, int y);
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_CompositorContext.cpp b/source/blender/compositor/intern/COM_CompositorContext.cpp
new file mode 100644
index 00000000000..911de822f80
--- /dev/null
+++ b/source/blender/compositor/intern/COM_CompositorContext.cpp
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CompositorContext.h"
+#include "COM_defines.h"
+#include <stdio.h>
+
+CompositorContext::CompositorContext()
+{
+ this->scene = NULL;
+ this->quality = COM_QUALITY_HIGH;
+ this->hasActiveOpenCLDevices = false;
+}
+
+const int CompositorContext::getFramenumber() const
+{
+ if (this->scene) {
+ return this->scene->r.cfra;
+ }
+ else {
+ return -1; /* this should never happen */
+ }
+}
+
+const int CompositorContext::isColorManaged() const
+{
+ if (this->scene) {
+ return this->scene->r.color_mgt_flag & R_COLOR_MANAGEMENT;
+ }
+ else {
+ return 0; /* this should never happen */
+ }
+}
diff --git a/source/blender/compositor/intern/COM_CompositorContext.h b/source/blender/compositor/intern/COM_CompositorContext.h
new file mode 100644
index 00000000000..2889f43290e
--- /dev/null
+++ b/source/blender/compositor/intern/COM_CompositorContext.h
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CompositorContext_h
+#define _COM_CompositorContext_h
+
+#include <vector>
+#include "BKE_text.h"
+#include <string>
+#include "DNA_node_types.h"
+#include "BLI_rect.h"
+#include "DNA_scene_types.h"
+#include "COM_defines.h"
+
+/**
+ * @brief Overall context of the compositor
+ */
+class CompositorContext {
+private:
+ /**
+ * @brief The rendering field describes if we are rendering (F12) or if we are editing (Node editor)
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * @see ExecutionSystem
+ */
+ bool rendering;
+
+ /**
+ * @brief The quality of the composite.
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * @see ExecutionSystem
+ */
+ CompositorQuality quality;
+
+ /**
+ * @brief Reference to the scene that is being composited.
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * @see ExecutionSystem
+ */
+ Scene *scene;
+
+ /**
+ * @brief reference to the bNodeTree
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * @see ExecutionSystem
+ */
+ bNodeTree *bnodetree;
+
+ /**
+ * @brief does this system have active opencl devices?
+ */
+ bool hasActiveOpenCLDevices;
+
+public:
+ /**
+ * @brief constructor initializes the context with default values.
+ */
+ CompositorContext();
+
+ /**
+ * @brief set the rendering field of the context
+ */
+ void setRendering(bool rendering) { this->rendering = rendering; }
+
+ /**
+ * @brief get the rendering field of the context
+ */
+ bool isRendering() const {return this->rendering;}
+
+ /**
+ * @brief set the scene of the context
+ */
+ void setScene(Scene *scene) {this->scene = scene;}
+
+ /**
+ * @brief set the bnodetree of the context
+ */
+ void setbNodeTree(bNodeTree *bnodetree) {this->bnodetree = bnodetree;}
+
+ /**
+ * @brief get the bnodetree of the context
+ */
+ const bNodeTree * getbNodeTree() const {return this->bnodetree;}
+
+ /**
+ * @brief get the scene of the context
+ */
+ const Scene *getScene() const {return this->scene;}
+
+ /**
+ * @brief set the quality
+ */
+ void setQuality(CompositorQuality quality) {
+ this->quality = quality;
+ }
+
+ /**
+ * @brief get the quality
+ */
+ const CompositorQuality getQuality() const {
+ return quality;
+ }
+
+ /**
+ * @brief get the current framenumber of the scene in this context
+ */
+ const int getFramenumber() const;
+
+ /**
+ * @brief has this system active openclDevices?
+ */
+ const bool getHasActiveOpenCLDevices() const {
+ return this->hasActiveOpenCLDevices;
+ }
+
+ /**
+ * @brief set has this system active openclDevices?
+ */
+ void setHasActiveOpenCLDevices(bool hasAvtiveOpenCLDevices) {
+ this->hasActiveOpenCLDevices = hasAvtiveOpenCLDevices;
+ }
+
+ int getChunksize() {return this->getbNodeTree()->chunksize;}
+
+ const int isColorManaged() const;
+};
+
+
+#endif
diff --git a/source/blender/compositor/intern/COM_Converter.cpp b/source/blender/compositor/intern/COM_Converter.cpp
new file mode 100644
index 00000000000..3cb297801ca
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Converter.cpp
@@ -0,0 +1,501 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Converter.h"
+#include "BKE_node.h"
+#include "COM_CompositorNode.h"
+#include "COM_RenderLayersNode.h"
+#include "COM_ColorToBWNode.h"
+#include "string.h"
+#include "COM_SocketConnection.h"
+#include "COM_ConvertColourToValueProg.h"
+#include "COM_ConvertValueToColourProg.h"
+#include "COM_ConvertColorToVectorOperation.h"
+#include "COM_ConvertValueToVectorOperation.h"
+#include "COM_ConvertVectorToColorOperation.h"
+#include "COM_ConvertVectorToValueOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_MixNode.h"
+#include "COM_MuteNode.h"
+#include "COM_TranslateNode.h"
+#include "COM_RotateNode.h"
+#include "COM_ScaleNode.h"
+#include "COM_FlipNode.h"
+#include "COM_IDMaskNode.h"
+#include "COM_FilterNode.h"
+#include "COM_BrightnessNode.h"
+#include "COM_SeparateRGBANode.h"
+#include "COM_CombineRGBANode.h"
+#include "COM_SeparateHSVANode.h"
+#include "COM_CombineHSVANode.h"
+#include "COM_SeparateYUVANode.h"
+#include "COM_CombineYUVANode.h"
+#include "COM_SeparateYCCANode.h"
+#include "COM_CombineYCCANode.h"
+#include "COM_AlphaOverNode.h"
+#include "COM_ColorBalanceNode.h"
+#include "COM_ViewerNode.h"
+#include "COM_SplitViewerNode.h"
+#include "COM_InvertNode.h"
+#include "COM_GroupNode.h"
+#include "COM_NormalNode.h"
+#include "COM_NormalizeNode.h"
+#include "COM_ImageNode.h"
+#include "COM_BokehImageNode.h"
+#include "COM_ColorCurveNode.h"
+#include "COM_VectorCurveNode.h"
+#include "COM_SetAlphaNode.h"
+#include "COM_ConvertAlphaNode.h"
+#include "COM_MapUVNode.h"
+#include "COM_DisplaceNode.h"
+#include "COM_MathNode.h"
+#include "COM_HueSaturationValueNode.h"
+#include "COM_HueSaturationValueCorrectNode.h"
+#include "COM_ColorCorrectionNode.h"
+#include "COM_BoxMaskNode.h"
+#include "COM_EllipseMaskNode.h"
+#include "COM_GammaNode.h"
+#include "COM_ColorRampNode.h"
+#include "COM_DifferenceMatteNode.h"
+#include "COM_LuminanceMatteNode.h"
+#include "COM_DistanceMatteNode.h"
+#include "COM_ChromaMatteNode.h"
+#include "COM_ColorMatteNode.h"
+#include "COM_ChannelMatteNode.h"
+#include "COM_BlurNode.h"
+#include "COM_BokehBlurNode.h"
+#include "COM_DilateErodeNode.h"
+#include "COM_TranslateOperation.h"
+#include "COM_LensDistortionNode.h"
+#include "COM_TextureNode.h"
+#include "COM_ColorNode.h"
+#include "COM_ValueNode.h"
+#include "COM_TimeNode.h"
+#include "COM_DirectionalBlurNode.h"
+#include "COM_ZCombineNode.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ScaleOperation.h"
+#include "COM_ExecutionSystemHelper.h"
+#include "COM_TonemapNode.h"
+#include "COM_SwitchNode.h"
+#include "COM_GlareNode.h"
+#include "COM_MovieClipNode.h"
+#include "COM_ColorSpillNode.h"
+#include "COM_OutputFileNode.h"
+#include "COM_MapValueNode.h"
+#include "COM_TransformNode.h"
+#include "COM_Stabilize2dNode.h"
+#include "COM_BilateralBlurNode.h"
+#include "COM_VectorBlurNode.h"
+#include "COM_MovieDistortionNode.h"
+#include "COM_ViewLevelsNode.h"
+#include "COM_DefocusNode.h"
+#include "COM_DoubleEdgeMaskNode.h"
+#include "COM_CropNode.h"
+
+Node *Converter::convert(bNode *bNode)
+{
+ Node * node;
+
+ if (bNode->flag & NODE_MUTED) {
+ node = new MuteNode(bNode);
+ return node;
+ }
+
+ switch (bNode->type) {
+ case CMP_NODE_COMPOSITE:
+ node = new CompositorNode(bNode);
+ break;
+ case CMP_NODE_R_LAYERS:
+ node = new RenderLayersNode(bNode);
+ break;
+ case CMP_NODE_TEXTURE:
+ node = new TextureNode(bNode);
+ break;
+ case CMP_NODE_RGBTOBW:
+ node = new ColourToBWNode(bNode);
+ break;
+ case CMP_NODE_MIX_RGB:
+ node = new MixNode(bNode);
+ break;
+ case CMP_NODE_TRANSLATE:
+ node = new TranslateNode(bNode);
+ break;
+ case CMP_NODE_SCALE:
+ node = new ScaleNode(bNode);
+ break;
+ case CMP_NODE_ROTATE:
+ node = new RotateNode(bNode);
+ break;
+ case CMP_NODE_FLIP:
+ node = new FlipNode(bNode);
+ break;
+ case CMP_NODE_FILTER:
+ node = new FilterNode(bNode);
+ break;
+ case CMP_NODE_ID_MASK:
+ node = new IDMaskNode(bNode);
+ break;
+ case CMP_NODE_BRIGHTCONTRAST:
+ node = new BrightnessNode(bNode);
+ break;
+ case CMP_NODE_SEPRGBA:
+ node = new SeparateRGBANode(bNode);
+ break;
+ case CMP_NODE_COMBRGBA:
+ node = new CombineRGBANode(bNode);
+ break;
+ case CMP_NODE_SEPHSVA:
+ node = new SeparateHSVANode(bNode);
+ break;
+ case CMP_NODE_COMBHSVA:
+ node = new CombineHSVANode(bNode);
+ break;
+ case CMP_NODE_SEPYUVA:
+ node = new SeparateYUVANode(bNode);
+ break;
+ case CMP_NODE_COMBYUVA:
+ node = new CombineYUVANode(bNode);
+ break;
+ case CMP_NODE_SEPYCCA:
+ node = new SeparateYCCANode(bNode);
+ break;
+ case CMP_NODE_COMBYCCA:
+ node = new CombineYCCANode(bNode);
+ break;
+ case CMP_NODE_ALPHAOVER:
+ node = new AlphaOverNode(bNode);
+ break;
+ case CMP_NODE_COLORBALANCE:
+ node = new ColorBalanceNode(bNode);
+ break;
+ case CMP_NODE_VIEWER:
+ node = new ViewerNode(bNode);
+ break;
+ case CMP_NODE_SPLITVIEWER:
+ node = new SplitViewerNode(bNode);
+ break;
+ case CMP_NODE_INVERT:
+ node = new InvertNode(bNode);
+ break;
+ case NODE_GROUP:
+ node = new GroupNode(bNode);
+ break;
+ case CMP_NODE_NORMAL:
+ node = new NormalNode(bNode);
+ break;
+ case CMP_NODE_NORMALIZE:
+ node = new NormalizeNode(bNode);
+ break;
+ case CMP_NODE_IMAGE:
+ node = new ImageNode(bNode);
+ break;
+ case CMP_NODE_SETALPHA:
+ node = new SetAlphaNode(bNode);
+ break;
+ case CMP_NODE_PREMULKEY:
+ node = new ConvertAlphaNode(bNode);
+ break;
+ case CMP_NODE_MATH:
+ node = new MathNode(bNode);
+ break;
+ case CMP_NODE_HUE_SAT:
+ node = new HueSaturationValueNode(bNode);
+ break;
+ case CMP_NODE_COLORCORRECTION:
+ node = new ColorCorrectionNode(bNode);
+ break;
+ case CMP_NODE_MASK_BOX:
+ node = new BoxMaskNode(bNode);
+ break;
+ case CMP_NODE_MASK_ELLIPSE:
+ node = new EllipseMaskNode(bNode);
+ break;
+ case CMP_NODE_GAMMA:
+ node = new GammaNode(bNode);
+ break;
+ case CMP_NODE_CURVE_RGB:
+ node = new ColorCurveNode(bNode);
+ break;
+ case CMP_NODE_CURVE_VEC:
+ node = new VectorCurveNode(bNode);
+ break;
+ case CMP_NODE_HUECORRECT:
+ node = new HueSaturationValueCorrectNode(bNode);
+ break;
+ case CMP_NODE_MAP_UV:
+ node = new MapUVNode(bNode);
+ break;
+ case CMP_NODE_DISPLACE:
+ node = new DisplaceNode(bNode);
+ break;
+ case CMP_NODE_VALTORGB:
+ node = new ColorRampNode(bNode);
+ break;
+ case CMP_NODE_DIFF_MATTE:
+ node = new DifferenceMatteNode(bNode);
+ break;
+ case CMP_NODE_LUMA_MATTE:
+ node = new LuminanceMatteNode(bNode);
+ break;
+ case CMP_NODE_DIST_MATTE:
+ node = new DistanceMatteNode(bNode);
+ break;
+ case CMP_NODE_CHROMA_MATTE:
+ node = new ChromaMatteNode(bNode);
+ break;
+ case CMP_NODE_COLOR_MATTE:
+ node = new ColorMatteNode(bNode);
+ break;
+ case CMP_NODE_CHANNEL_MATTE:
+ node = new ChannelMatteNode(bNode);
+ break;
+ case CMP_NODE_BLUR:
+ node = new BlurNode(bNode);
+ break;
+ case CMP_NODE_BOKEHIMAGE:
+ node = new BokehImageNode(bNode);
+ break;
+ case CMP_NODE_BOKEHBLUR:
+ node = new BokehBlurNode(bNode);
+ break;
+ case CMP_NODE_DILATEERODE:
+ node = new DilateErodeNode(bNode);
+ break;
+ case CMP_NODE_LENSDIST:
+ node = new LensDistortionNode(bNode);
+ break;
+ case CMP_NODE_RGB:
+ node = new ColorNode(bNode);
+ break;
+ case CMP_NODE_VALUE:
+ node = new ValueNode(bNode);
+ break;
+ case CMP_NODE_TIME:
+ node = new TimeNode(bNode);
+ break;
+ case CMP_NODE_DBLUR:
+ node = new DirectionalBlurNode(bNode);
+ break;
+ case CMP_NODE_ZCOMBINE:
+ node = new ZCombineNode(bNode);
+ break;
+ case CMP_NODE_TONEMAP:
+ node = new TonemapNode(bNode);
+ break;
+ case CMP_NODE_SWITCH:
+ node = new SwitchNode(bNode);
+ break;
+ case CMP_NODE_GLARE:
+ node = new GlareNode(bNode);
+ break;
+ case CMP_NODE_MOVIECLIP:
+ node = new MovieClipNode(bNode);
+ break;
+ case CMP_NODE_COLOR_SPILL:
+ node = new ColorSpillNode(bNode);
+ break;
+case CMP_NODE_OUTPUT_FILE:
+ node = new OutputFileNode(bNode);
+ break;
+ case CMP_NODE_MAP_VALUE:
+ node = new MapValueNode(bNode);
+ break;
+ case CMP_NODE_TRANSFORM:
+ node = new TransformNode(bNode);
+ break;
+ case CMP_NODE_STABILIZE2D:
+ node = new Stabilize2dNode(bNode);
+ break;
+ case CMP_NODE_BILATERALBLUR:
+ node = new BilateralBlurNode(bNode);
+ break;
+ case CMP_NODE_VECBLUR:
+ node = new VectorBlurNode(bNode);
+ break;
+ case CMP_NODE_MOVIEDISTORTION:
+ node = new MovieDistortionNode(bNode);
+ break;
+ case CMP_NODE_VIEW_LEVELS:
+ node = new ViewLevelsNode(bNode);
+ break;
+ case CMP_NODE_DEFOCUS:
+ node = new DefocusNode(bNode);
+ break;
+ case CMP_NODE_DOUBLEEDGEMASK:
+ node = new DoubleEdgeMaskNode(bNode);
+ break;
+ case CMP_NODE_CROP:
+ node = new CropNode(bNode);
+ break;
+ /* not inplemented yet */
+ default:
+ node = new MuteNode(bNode);
+ break;
+ }
+ return node;
+}
+void Converter::convertDataType(SocketConnection *connection, ExecutionSystem *system)
+{
+ OutputSocket *outputSocket = connection->getFromSocket();
+ InputSocket *inputSocket = connection->getToSocket();
+ DataType fromDatatype = outputSocket->getActualDataType();
+ DataType toDatatype = inputSocket->getActualDataType();
+ NodeOperation * converter = NULL;
+ if (fromDatatype == COM_DT_VALUE && toDatatype == COM_DT_COLOR) {
+ converter = new ConvertValueToColourProg();
+ }
+ else if (fromDatatype == COM_DT_VALUE && toDatatype == COM_DT_VECTOR) {
+ converter = new ConvertValueToVectorOperation();
+ }
+ else if (fromDatatype == COM_DT_COLOR && toDatatype == COM_DT_VALUE) {
+ converter = new ConvertColourToValueProg();
+ }
+ else if (fromDatatype == COM_DT_COLOR && toDatatype == COM_DT_VECTOR) {
+ converter = new ConvertColorToVectorOperation();
+ }
+ else if (fromDatatype == COM_DT_VECTOR && toDatatype == COM_DT_VALUE) {
+ converter = new ConvertVectorToValueOperation();
+ }
+ else if (fromDatatype == COM_DT_VECTOR && toDatatype == COM_DT_COLOR) {
+ converter = new ConvertVectorToColorOperation();
+ }
+ if (converter != NULL) {
+ inputSocket->relinkConnections(converter->getInputSocket(0));
+ ExecutionSystemHelper::addLink(system->getConnections(), converter->getOutputSocket(), inputSocket);
+ system->addOperation(converter);
+ }
+}
+
+void Converter::convertResolution(SocketConnection *connection, ExecutionSystem *system)
+{
+ InputSocketResizeMode mode = connection->getToSocket()->getResizeMode();
+
+ NodeOperation * toOperation = (NodeOperation*)connection->getToNode();
+ const float toWidth = toOperation->getWidth();
+ const float toHeight = toOperation->getHeight();
+ NodeOperation * fromOperation = (NodeOperation*)connection->getFromNode();
+ const float fromWidth = fromOperation->getWidth();
+ const float fromHeight = fromOperation->getHeight();
+ bool doCenter = false;
+ bool doScale = false;
+ float addX= (toWidth-fromWidth)/2.0f;
+ float addY = (toHeight-fromHeight)/2.0f;
+ float scaleX=0;
+ float scaleY=0;
+
+ switch (mode) {
+ case COM_SC_NO_RESIZE:
+ break;
+ case COM_SC_CENTER:
+ doCenter = true;
+ break;
+ case COM_SC_FIT_WIDTH:
+ doCenter = true;
+ doScale = true;
+ scaleX = scaleY = toWidth/fromWidth;
+ break;
+ case COM_SC_FIT_HEIGHT:
+ doCenter = true;
+ doScale = true;
+ scaleX = scaleY = toHeight/fromHeight;
+ break;
+ case COM_SC_FIT:
+ doCenter = true;
+ doScale = true;
+ scaleX = toWidth/fromWidth;
+ scaleY = toHeight/fromHeight;
+ if (scaleX < scaleY) {
+ scaleX = scaleY;
+ }
+ else {
+ scaleY = scaleX;
+ }
+ break;
+ case COM_SC_STRETCH:
+ doCenter = true;
+ doScale = true;
+ scaleX = toWidth/fromWidth;
+ scaleY = toHeight/fromHeight;
+ break;
+
+ }
+
+ if (doCenter) {
+ NodeOperation *first = NULL;
+ SocketConnection *c;
+ ScaleOperation * scaleOperation = NULL;
+ if (doScale) {
+ scaleOperation = new ScaleOperation();
+ first = scaleOperation;
+ SetValueOperation * sxop = new SetValueOperation();
+ sxop->setValue(scaleX);
+ c = ExecutionSystemHelper::addLink(system->getConnections(), sxop->getOutputSocket(), scaleOperation->getInputSocket(1));
+ c->setIgnoreResizeCheck(true);
+ SetValueOperation * syop = new SetValueOperation();
+ syop->setValue(scaleY);
+ c = ExecutionSystemHelper::addLink(system->getConnections(), syop->getOutputSocket(), scaleOperation->getInputSocket(2));
+ c->setIgnoreResizeCheck(true);
+ system->addOperation(sxop);
+ system->addOperation(syop);
+
+ unsigned int resolution[2] = {fromWidth, fromHeight};
+ scaleOperation->setResolution(resolution);
+ sxop->setResolution(resolution);
+ syop->setResolution(resolution);
+ system->addOperation(scaleOperation);
+
+ c->setIgnoreResizeCheck(true);
+ }
+
+ TranslateOperation * translateOperation = new TranslateOperation();
+ if (!first) first = translateOperation;
+ SetValueOperation * xop = new SetValueOperation();
+ xop->setValue(addX);
+ c = ExecutionSystemHelper::addLink(system->getConnections(), xop->getOutputSocket(), translateOperation->getInputSocket(1));
+ c->setIgnoreResizeCheck(true);
+ SetValueOperation * yop = new SetValueOperation();
+ yop->setValue(addY);
+ c = ExecutionSystemHelper::addLink(system->getConnections(), yop->getOutputSocket(), translateOperation->getInputSocket(2));
+ c->setIgnoreResizeCheck(true);
+ system->addOperation(xop);
+ system->addOperation(yop);
+
+ unsigned int resolution[2] = {toWidth, toHeight};
+ translateOperation->setResolution(resolution);
+ xop->setResolution(resolution);
+ yop->setResolution(resolution);
+ system->addOperation(translateOperation);
+
+ if (doScale) {
+ c = ExecutionSystemHelper::addLink(system->getConnections(), scaleOperation->getOutputSocket(), translateOperation->getInputSocket(0));
+ c->setIgnoreResizeCheck(true);
+ }
+
+ InputSocket * inputSocket = connection->getToSocket();
+ inputSocket->relinkConnections(first->getInputSocket(0));
+ c = ExecutionSystemHelper::addLink(system->getConnections(), translateOperation->getOutputSocket(), inputSocket);
+ c->setIgnoreResizeCheck(true);
+ }
+
+ connection->setIgnoreResizeCheck(true);
+}
diff --git a/source/blender/compositor/intern/COM_Converter.h b/source/blender/compositor/intern/COM_Converter.h
new file mode 100644
index 00000000000..fa12be4e79a
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Converter.h
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_Converter_h
+#define _COM_Converter_h
+
+#include "DNA_node_types.h"
+#include "COM_Node.h"
+
+/**
+ * @brief Conversion methods for the compositor
+ */
+class Converter {
+public:
+ /**
+ * @brief Convert/wraps a bNode in its Node instance.
+ *
+ * For all nodetypes a wrapper class is created.
+ * Muted nodes are wrapped with MuteNode.
+ *
+ * @note When adding a new node to blender, this method needs to be changed to return the correct Node instance.
+ *
+ * @see Node
+ * @see MuteNode
+ */
+ static Node *convert(bNode *bNode);
+
+ /**
+ * @brief This method will add a datetype conversion rule when the to-socket does not support the from-socket actual data type.
+ *
+ * @note this method is called when conversion is needed.
+ *
+ * @param connection the SocketConnection what needs conversion
+ * @param system the ExecutionSystem to add the conversion to.
+ * @see SocketConnection - a link between two sockets
+ */
+ static void convertDataType(SocketConnection *connection, ExecutionSystem *system);
+
+ /**
+ * @brief This method will add a resolution rule based on the settings of the InputSocket.
+ *
+ * @note Conversion logic is implemented in this method
+ * @see InputSocketResizeMode for the possible conversions.
+
+ * @param connection the SocketConnection what needs conversion
+ * @param system the ExecutionSystem to add the conversion to.
+ * @see SocketConnection - a link between two sockets
+ */
+ static void convertResolution(SocketConnection *connection, ExecutionSystem *system);
+};
+#endif
diff --git a/source/blender/compositor/intern/COM_Device.cpp b/source/blender/compositor/intern/COM_Device.cpp
new file mode 100644
index 00000000000..64172cdd472
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Device.cpp
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Device.h"
+
diff --git a/source/blender/compositor/intern/COM_Device.h b/source/blender/compositor/intern/COM_Device.h
new file mode 100644
index 00000000000..74a9400f8f3
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Device.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_Device_h
+#define _COM_Device_h
+
+#include "COM_ExecutionSystem.h"
+#include "COM_WorkPackage.h"
+#include "COM_NodeOperation.h"
+#include "BLI_rect.h"
+#include "COM_MemoryBuffer.h"
+
+/**
+ * @brief Abstract class for device implementations to be used by the Compositor.
+ * devices are queried, initialized and used by the WorkScheduler.
+ * work are packaged as a WorkPackage instance.
+ */
+class Device {
+public:
+ /**
+ * @brief initialize the device
+ */
+ virtual bool initialize() {return true;}
+
+ /**
+ * @brief deinitialize the device
+ */
+ virtual void deinitialize() {}
+
+ /**
+ * @brief execute a WorkPackage
+ * @param work the WorkPackage to execute
+ */
+ virtual void execute(WorkPackage *work) = 0;
+
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.cpp b/source/blender/compositor/intern/COM_ExecutionGroup.cpp
new file mode 100644
index 00000000000..e4fefa6a904
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ExecutionGroup.cpp
@@ -0,0 +1,596 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ExecutionGroup.h"
+#include "COM_InputSocket.h"
+#include "COM_SocketConnection.h"
+#include "COM_defines.h"
+#include "math.h"
+#include "COM_ExecutionSystem.h"
+#include <sstream>
+#include "COM_ReadBufferOperation.h"
+#include "COM_WriteBufferOperation.h"
+#include "COM_ReadBufferOperation.h"
+#include "COM_WorkScheduler.h"
+#include "COM_ViewerOperation.h"
+#include <stdlib.h>
+#include "BLI_math.h"
+#include "COM_MemoryManager.h"
+#include "PIL_time.h"
+#include "COM_ChunkOrder.h"
+#include <algorithm>
+#include "BLI_math.h"
+#include "COM_ExecutionSystemHelper.h"
+
+ExecutionGroup::ExecutionGroup()
+{
+ this->isOutput = false;
+ this->complex = false;
+ this->chunkExecutionStates = NULL;
+ this->bTree = NULL;
+ this->height = 0;
+ this->width = 0;
+ this->cachedMaxReadBufferOffset = 0;
+ this->numberOfXChunks = 0;
+ this->numberOfYChunks = 0;
+ this->numberOfChunks = 0;
+ this->initialized = false;
+ this->openCL = false;
+ this->chunksFinished = 0;
+}
+
+int ExecutionGroup::getRenderPriotrity()
+{
+ return this->getOutputNodeOperation()->getRenderPriority();
+}
+
+bool ExecutionGroup::containsOperation(NodeOperation *operation)
+{
+ for (vector<NodeOperation*>::const_iterator iterator = this->operations.begin() ; iterator != this->operations.end() ; ++iterator) {
+ NodeOperation *inListOperation = *iterator;
+ if (inListOperation == operation) {
+ return true;
+ }
+ }
+ return false;
+}
+
+const bool ExecutionGroup::isComplex() const
+{
+ return this->complex;
+}
+
+bool ExecutionGroup::canContainOperation(NodeOperation *operation)
+{
+ if (!this->initialized) {return true;}
+ if (operation->isReadBufferOperation()) {return true;}
+ if (operation->isWriteBufferOperation()) {return false;}
+ if (operation->isSetOperation()) {return true;}
+
+ if (!this->isComplex()) {
+ return (!operation->isComplex());
+ }
+ else {
+ return false;
+ }
+}
+
+void ExecutionGroup::addOperation(ExecutionSystem *system, NodeOperation *operation)
+{
+ if (containsOperation(operation)) return;
+ if (canContainOperation(operation)) {
+ if (!operation->isBufferOperation()) {
+ this->complex = operation->isComplex();
+ this->openCL = operation->isOpenCL();
+ this->initialized = true;
+ }
+ this->operations.push_back(operation);
+ if (operation->isReadBufferOperation()) {
+ ReadBufferOperation *readOperation = (ReadBufferOperation*)operation;
+ WriteBufferOperation *writeOperation = readOperation->getMemoryProxy()->getWriteBufferOperation();
+ this->addOperation(system, writeOperation);
+ }
+ else {
+ unsigned int index;
+ for (index = 0 ; index < operation->getNumberOfInputSockets(); index ++) {
+ InputSocket * inputSocket = operation->getInputSocket(index);
+ if (inputSocket->isConnected()) {
+ NodeOperation *node = (NodeOperation*)inputSocket->getConnection()->getFromNode();
+ this->addOperation(system, node);
+ }
+ }
+ }
+ }
+ else {
+ if (operation->isWriteBufferOperation()) {
+ WriteBufferOperation * writeoperation = (WriteBufferOperation*)operation;
+ if (writeoperation->getMemoryProxy()->getExecutor() == NULL) {
+ ExecutionGroup *newGroup = new ExecutionGroup();
+ writeoperation->getMemoryProxy()->setExecutor(newGroup);
+ newGroup->addOperation(system, operation);
+ ExecutionSystemHelper::addExecutionGroup(system->getExecutionGroups(), newGroup);
+ }
+ }
+ }
+}
+
+NodeOperation *ExecutionGroup::getOutputNodeOperation() const
+{
+ return this->operations[0]; // the first operation of the group is always the output operation.
+}
+
+void ExecutionGroup::initExecution()
+{
+ if (this->chunkExecutionStates != NULL) {
+ delete[] this->chunkExecutionStates;
+ }
+ unsigned int index;
+ determineNumberOfChunks();
+
+ this->chunkExecutionStates = NULL;
+ if (this->numberOfChunks != 0) {
+ this->chunkExecutionStates = new ChunkExecutionState[numberOfChunks];
+ for (index = 0 ; index < numberOfChunks ; index ++) {
+ this->chunkExecutionStates[index] = COM_ES_NOT_SCHEDULED;
+ }
+ }
+
+
+ unsigned int maxNumber = 0;
+
+ for (index = 0 ; index < this->operations.size(); index ++) {
+ NodeOperation *operation = this->operations[index];
+ if (operation->isReadBufferOperation()) {
+ ReadBufferOperation *readOperation = (ReadBufferOperation*)operation;
+ this->cachedReadOperations.push_back(readOperation);
+ maxNumber = max(maxNumber, readOperation->getOffset());
+ }
+ }
+ maxNumber++;
+ this->cachedMaxReadBufferOffset = maxNumber;
+
+}
+
+void ExecutionGroup::deinitExecution()
+{
+ if (this->chunkExecutionStates != NULL) {
+ delete[] this->chunkExecutionStates;
+ this->chunkExecutionStates = NULL;
+ }
+ this->numberOfChunks = 0;
+ this->numberOfXChunks = 0;
+ this->numberOfYChunks = 0;
+ this->cachedReadOperations.clear();
+ this->bTree = NULL;
+}
+void ExecutionGroup::determineResolution(unsigned int resolution[])
+{
+ NodeOperation *operation = this->getOutputNodeOperation();
+ unsigned int preferredResolution[2];
+ preferredResolution[0] = 0;
+ preferredResolution[1] = 0;
+ operation->determineResolution(resolution, preferredResolution);
+ operation->setResolution(resolution);
+ this->setResolution(resolution);
+}
+
+void ExecutionGroup::determineNumberOfChunks()
+{
+ const float chunkSizef = this->chunkSize;
+ this->numberOfXChunks = ceil(this->width / chunkSizef);
+ this->numberOfYChunks = ceil(this->height / chunkSizef);
+ this->numberOfChunks = this->numberOfXChunks * this->numberOfYChunks;
+}
+
+/**
+ * this method is called for the top execution groups. containing the compositor node or the preview node or the viewer node)
+ */
+void ExecutionGroup::execute(ExecutionSystem *graph)
+{
+ CompositorContext& context = graph->getContext();
+ const bNodeTree *bTree = context.getbNodeTree();
+ if (this->width == 0 || this->height == 0) {return;} /// @note: break out... no pixels to calculate.
+ if (bTree->test_break && bTree->test_break(bTree->tbh)) {return;} /// @note: early break out for blur and preview nodes
+ if (this->numberOfChunks == 0) {return;} /// @note: early break out
+ unsigned int chunkNumber;
+
+ this->chunksFinished = 0;
+ this->bTree = bTree;
+ unsigned int index;
+ unsigned int *chunkOrder = new unsigned int[this->numberOfChunks];
+
+ for (chunkNumber = 0 ; chunkNumber<this->numberOfChunks ; chunkNumber++) {
+ chunkOrder[chunkNumber] = chunkNumber;
+ }
+ NodeOperation *operation = this->getOutputNodeOperation();
+ float centerX = 0.5;
+ float centerY = 0.5;
+ int chunkorder = COM_TO_CENTER_OUT;
+
+ if (operation->isViewerOperation()) {
+ ViewerBaseOperation *viewer = (ViewerBaseOperation*)operation;
+ centerX = viewer->getCenterX();
+ centerY = viewer->getCenterY();
+ chunkorder = viewer->getChunkOrder();
+ }
+
+ switch (chunkorder) {
+ case COM_TO_RANDOM:
+ for (index = 0 ; index < 2 * numberOfChunks ; index ++) {
+ int index1 = rand()%numberOfChunks;
+ int index2 = rand()%numberOfChunks;
+ int s = chunkOrder[index1];
+ chunkOrder[index1] = chunkOrder[index2];
+ chunkOrder[index2] = s;
+ }
+ break;
+ case COM_TO_CENTER_OUT:
+ {
+ ChunkOrderHotspot **hotspots = new ChunkOrderHotspot*[1];
+ hotspots[0] = new ChunkOrderHotspot(this->width*centerX, this->height*centerY, 0.0f);
+ rcti rect;
+ ChunkOrder *chunkOrders = new ChunkOrder[this->numberOfChunks];
+ for (index = 0 ; index < this->numberOfChunks; index ++) {
+ determineChunkRect(&rect, index);
+ chunkOrders[index].setChunkNumber(index);
+ chunkOrders[index].setX(rect.xmin);
+ chunkOrders[index].setY(rect.ymin);
+ chunkOrders[index].determineDistance(hotspots, 1);
+ }
+
+ sort(&chunkOrders[0], &chunkOrders[numberOfChunks-1]);
+ for (index = 0 ; index < numberOfChunks; index ++) {
+ chunkOrder[index] = chunkOrders[index].getChunkNumber();
+ }
+
+ delete hotspots[0];
+ delete[] hotspots;
+ delete[] chunkOrders;
+ }
+ break;
+ case COM_TO_RULE_OF_THIRDS:
+ {
+ ChunkOrderHotspot **hotspots = new ChunkOrderHotspot*[9];
+ unsigned int tx = this->width/6;
+ unsigned int ty = this->height/6;
+ unsigned int mx = this->width/2;
+ unsigned int my = this->height/2;
+ unsigned int bx = mx+2*tx;
+ unsigned int by = my+2*ty;
+
+ float addition = numberOfChunks/COM_RULE_OF_THIRDS_DIVIDER;
+ hotspots[0] = new ChunkOrderHotspot(mx, my, addition*0);
+ hotspots[1] = new ChunkOrderHotspot(tx, my, addition*1);
+ hotspots[2] = new ChunkOrderHotspot(bx, my, addition*2);
+ hotspots[3] = new ChunkOrderHotspot(bx, by, addition*3);
+ hotspots[4] = new ChunkOrderHotspot(tx, ty, addition*4);
+ hotspots[5] = new ChunkOrderHotspot(bx, ty, addition*5);
+ hotspots[6] = new ChunkOrderHotspot(tx, by, addition*6);
+ hotspots[7] = new ChunkOrderHotspot(mx, ty, addition*7);
+ hotspots[8] = new ChunkOrderHotspot(mx, by, addition*8);
+ rcti rect;
+ ChunkOrder *chunkOrders = new ChunkOrder[this->numberOfChunks];
+ for (index = 0 ; index < this->numberOfChunks; index ++) {
+ determineChunkRect(&rect, index);
+ chunkOrders[index].setChunkNumber(index);
+ chunkOrders[index].setX(rect.xmin);
+ chunkOrders[index].setY(rect.ymin);
+ chunkOrders[index].determineDistance(hotspots, 9);
+ }
+
+ sort(&chunkOrders[0], &chunkOrders[numberOfChunks]);
+
+ for (index = 0 ; index < numberOfChunks; index ++) {
+ chunkOrder[index] = chunkOrders[index].getChunkNumber();
+ }
+
+ delete hotspots[0];
+ delete hotspots[1];
+ delete hotspots[2];
+ delete hotspots[3];
+ delete hotspots[4];
+ delete hotspots[5];
+ delete hotspots[6];
+ delete hotspots[7];
+ delete hotspots[8];
+ delete[] hotspots;
+ delete[] chunkOrders;
+ }
+ break;
+ case COM_TO_TOP_DOWN:
+ default:
+ break;
+ }
+
+ bool breaked = false;
+ bool finished = false;
+ unsigned int startIndex = 0;
+ const int maxNumberEvaluated = BLI_system_thread_count()*2;
+
+ while (!finished && !breaked) {
+ unsigned int index;
+ bool startEvaluated = false;
+ finished = true;
+ int numberEvaluated = 0;
+
+ for (index = startIndex ; index < numberOfChunks && numberEvaluated < maxNumberEvaluated; index ++) {
+ int chunkNumber = chunkOrder[index];
+ int yChunk = chunkNumber/this->numberOfXChunks;
+ int xChunk = chunkNumber - (yChunk*this->numberOfXChunks);
+ const ChunkExecutionState state = this->chunkExecutionStates[chunkNumber];
+ if (state == COM_ES_NOT_SCHEDULED) {
+ scheduleChunkWhenPossible(graph, xChunk, yChunk);
+ finished=false;
+ startEvaluated = true;
+ numberEvaluated++;
+ }
+ else if (state == COM_ES_SCHEDULED) {
+ finished=false;
+ startEvaluated = true;
+ numberEvaluated++;
+ }
+ else if (state == COM_ES_EXECUTED && !startEvaluated) {
+ startIndex = index+1;
+ }
+ }
+ PIL_sleep_ms(10);
+
+ if (bTree->test_break && bTree->test_break(bTree->tbh)) {
+ breaked = true;
+ }
+ }
+
+ delete[] chunkOrder;
+}
+
+MemoryBuffer** ExecutionGroup::getInputBuffers(int chunkNumber)
+{
+ rcti rect;
+ vector<MemoryProxy*> memoryproxies;
+ unsigned int index;
+ determineChunkRect(&rect, chunkNumber);
+
+ this->determineDependingMemoryProxies(&memoryproxies);
+ MemoryBuffer **memoryBuffers = new MemoryBuffer*[this->cachedMaxReadBufferOffset];
+ for (index = 0 ; index < this->cachedMaxReadBufferOffset ; index ++) {
+ memoryBuffers[index] = NULL;
+ }
+ rcti output;
+ for (index = 0 ; index < this->cachedReadOperations.size(); index ++) {
+ ReadBufferOperation *readOperation = (ReadBufferOperation*)this->cachedReadOperations[index];
+ MemoryProxy * memoryProxy = readOperation->getMemoryProxy();
+ this->determineDependingAreaOfInterest(&rect, readOperation, &output);
+ MemoryBuffer *memoryBuffer = memoryProxy->getExecutor()->constructConsolidatedMemoryBuffer(memoryProxy, &output);
+ memoryBuffers[readOperation->getOffset()] = memoryBuffer;
+ }
+ return memoryBuffers;
+}
+
+MemoryBuffer *ExecutionGroup::constructConsolidatedMemoryBuffer(MemoryProxy *memoryProxy, rcti *rect)
+{
+ // find all chunks inside the rect
+ // determine minxchunk, minychunk, maxxchunk, maxychunk where x and y are chunknumbers
+ float chunkSizef = this->chunkSize;
+
+ int indexx, indexy;
+
+ const int minxchunk = floor(rect->xmin/chunkSizef);
+ const int maxxchunk = ceil((rect->xmax-1)/chunkSizef);
+ const int minychunk = floor(rect->ymin/chunkSizef);
+ const int maxychunk = ceil((rect->ymax-1)/chunkSizef);
+
+ if (maxxchunk== minxchunk+1 && maxychunk == minychunk+1) {
+ const int chunkNumber = minxchunk+minychunk*numberOfXChunks;
+ MemoryBuffer *result = MemoryManager::getMemoryBuffer(memoryProxy, chunkNumber);
+ return result;
+ }
+
+ rcti chunkRect;
+ chunkRect.xmin = minxchunk*this->chunkSize;
+ chunkRect.xmax = maxxchunk*this->chunkSize;
+ chunkRect.ymin = minychunk*this->chunkSize;
+ chunkRect.ymax = maxychunk*this->chunkSize;
+
+ CLAMP(chunkRect.xmin, 0, (int)this->width);
+ CLAMP(chunkRect.xmax, 0, (int)this->width);
+ CLAMP(chunkRect.ymin, 0, (int)this->height);
+ CLAMP(chunkRect.ymax, 0, (int)this->height);
+
+ MemoryBuffer *result = new MemoryBuffer(memoryProxy, &chunkRect);
+
+ for (indexx = max(minxchunk, 0); indexx<min((int)this->numberOfXChunks, maxxchunk) ; indexx++) {
+ for (indexy = max(minychunk, 0); indexy<min((int)this->numberOfYChunks, maxychunk) ; indexy++) {
+ int chunkNumber = indexx+indexy*this->numberOfXChunks;
+ MemoryBuffer *chunkBuffer = MemoryManager::getMemoryBuffer(memoryProxy, chunkNumber);
+ result->copyContentFrom(chunkBuffer);
+ }
+ }
+
+ return result;
+}
+
+void ExecutionGroup::finalizeChunkExecution(int chunkNumber, MemoryBuffer** memoryBuffers)
+{
+ if (this->chunkExecutionStates[chunkNumber] == COM_ES_SCHEDULED)
+ this->chunkExecutionStates[chunkNumber] = COM_ES_EXECUTED;
+ else
+ throw "Threading inconsistency";
+
+ this->chunksFinished++;
+ if (memoryBuffers) {
+ for (unsigned int index = 0 ; index < this->cachedMaxReadBufferOffset; index ++) {
+ MemoryBuffer * buffer = memoryBuffers[index];
+ if (buffer) {
+ if (buffer->isTemporarily()) {
+ memoryBuffers[index] = NULL;
+ delete buffer;
+ }
+ }
+ }
+ delete[] memoryBuffers;
+ }
+ if (bTree) {
+ // status report is only performed for top level Execution Groups.
+ float progress = chunksFinished;
+ progress/=numberOfChunks;
+ bTree->progress(bTree->prh, progress);
+ }
+}
+
+inline void ExecutionGroup::determineChunkRect(rcti *rect, const unsigned int xChunk, const unsigned int yChunk ) const
+{
+ const unsigned int minx = xChunk * chunkSize;
+ const unsigned int miny = yChunk * chunkSize;
+ BLI_init_rcti(rect, minx, min(minx + this->chunkSize, this->width), miny, min(miny + this->chunkSize, this->height));
+}
+
+void ExecutionGroup::determineChunkRect(rcti *rect, const unsigned int chunkNumber) const
+{
+ const unsigned int yChunk = chunkNumber / numberOfXChunks;
+ const unsigned int xChunk = chunkNumber - (yChunk * numberOfXChunks);
+ determineChunkRect(rect, xChunk, yChunk);
+}
+
+MemoryBuffer *ExecutionGroup::allocateOutputBuffer(int chunkNumber, rcti *rect)
+{
+ MemoryBuffer *outputBuffer = NULL;
+ // output allocation is only valid when our outputoperation is a memorywriter
+ NodeOperation * operation = this->getOutputNodeOperation();
+ if (operation->isWriteBufferOperation()) {
+ WriteBufferOperation *writeOperation = (WriteBufferOperation*)operation;
+ outputBuffer = MemoryManager::allocateMemoryBuffer(writeOperation->getMemoryProxy(), chunkNumber, rect);
+ }
+ return outputBuffer;
+}
+
+
+bool ExecutionGroup::scheduleAreaWhenPossible(ExecutionSystem * graph, rcti *area)
+{
+ // find all chunks inside the rect
+ // determine minxchunk, minychunk, maxxchunk, maxychunk where x and y are chunknumbers
+
+ float chunkSizef = this->chunkSize;
+
+ int indexx, indexy;
+ const int minxchunk = floor(area->xmin/chunkSizef);
+ const int maxxchunk = ceil((area->xmax-1)/chunkSizef);
+ const int minychunk = floor(area->ymin/chunkSizef);
+ const int maxychunk = ceil((area->ymax-1)/chunkSizef);
+
+ bool result = true;
+ for (indexx = max(minxchunk, 0); indexx<maxxchunk ; indexx++) {
+ for (indexy = max(minychunk, 0); indexy<maxychunk ; indexy++) {
+ if (!scheduleChunkWhenPossible(graph, indexx, indexy)) {
+ result = false;
+ }
+ }
+ }
+
+ return result;
+}
+
+bool ExecutionGroup::scheduleChunk(unsigned int chunkNumber)
+{
+ if (this->chunkExecutionStates[chunkNumber] == COM_ES_NOT_SCHEDULED) {
+ this->chunkExecutionStates[chunkNumber] = COM_ES_SCHEDULED;
+ WorkScheduler::schedule(this, chunkNumber);
+ return true;
+ }
+ return false;
+}
+
+bool ExecutionGroup::scheduleChunkWhenPossible(ExecutionSystem * graph, int xChunk, int yChunk)
+{
+ if (xChunk < 0 || xChunk >= (int)this->numberOfXChunks) {
+ return true;
+ }
+ if (yChunk < 0 || yChunk >= (int)this->numberOfYChunks) {
+ return true;
+ }
+ int chunkNumber = yChunk*this->numberOfXChunks + xChunk;
+ // chunk is already executed
+ if (this->chunkExecutionStates[chunkNumber] == COM_ES_EXECUTED) {
+ return true;
+ }
+
+ // chunk is scheduled, but not executed
+ if (this->chunkExecutionStates[chunkNumber] == COM_ES_SCHEDULED) {
+ return false;
+ }
+
+ // chunk is nor executed nor scheduled.
+ vector<MemoryProxy*> memoryProxies;
+ this->determineDependingMemoryProxies(&memoryProxies);
+
+ rcti rect;
+ determineChunkRect(&rect, xChunk, yChunk);
+ unsigned int index;
+ bool canBeExecuted = true;
+ rcti area;
+
+ for (index = 0 ; index < cachedReadOperations.size() ; index ++) {
+ ReadBufferOperation * readOperation = (ReadBufferOperation*)cachedReadOperations[index];
+ BLI_init_rcti(&area, 0, 0, 0, 0);
+ MemoryProxy * memoryProxy = memoryProxies[index];
+ determineDependingAreaOfInterest(&rect, readOperation, &area);
+ ExecutionGroup *group = memoryProxy->getExecutor();
+
+ if (group != NULL) {
+ if (!group->scheduleAreaWhenPossible(graph, &area)) {
+ canBeExecuted = false;
+ }
+ }
+ else {
+ throw "ERROR";
+ }
+ }
+
+ if (canBeExecuted) {
+ scheduleChunk(chunkNumber);
+ }
+
+ return false;
+}
+
+void ExecutionGroup::determineDependingAreaOfInterest(rcti * input, ReadBufferOperation *readOperation, rcti *output)
+{
+ this->getOutputNodeOperation()->determineDependingAreaOfInterest(input, readOperation, output);
+}
+
+void ExecutionGroup::determineDependingMemoryProxies(vector<MemoryProxy*> *memoryProxies)
+{
+ unsigned int index;
+ for (index = 0 ; index < this->cachedReadOperations.size() ; index ++) {
+ ReadBufferOperation * readOperation = (ReadBufferOperation*) this->cachedReadOperations[index];
+ memoryProxies->push_back(readOperation->getMemoryProxy());
+ }
+}
+
+bool ExecutionGroup::operator ==(const ExecutionGroup & executionGroup) const
+{
+ return this->getOutputNodeOperation() == executionGroup.getOutputNodeOperation();
+}
+
+bool ExecutionGroup::isOpenCL()
+{
+ return this->openCL;
+}
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.h b/source/blender/compositor/intern/COM_ExecutionGroup.h
new file mode 100644
index 00000000000..adab7df4690
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ExecutionGroup.h
@@ -0,0 +1,404 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ExecutionGroup_h
+#define _COM_ExecutionGroup_h
+
+#include "COM_Node.h"
+#include "COM_NodeOperation.h"
+#include <vector>
+#include "BLI_rect.h"
+#include "COM_MemoryProxy.h"
+#include "COM_Device.h"
+#include "COM_CompositorContext.h"
+
+
+/**
+ * @brief the execution state of a chunk in an ExecutionGroup
+ * @ingroup Execution
+ */
+typedef enum ChunkExecutionState {
+ /**
+ * @brief chunk is not yet scheduled
+ */
+ COM_ES_NOT_SCHEDULED = 0,
+ /**
+ * @brief chunk is scheduled, but not yet executed
+ */
+ COM_ES_SCHEDULED = 1,
+ /**
+ * @brief chunk is executed.
+ */
+ COM_ES_EXECUTED = 2
+} ChunkExecutionState;
+
+class MemoryProxy;
+class ReadBufferOperation;
+class Device;
+
+/**
+ * @brief Class ExecutionGroup is a group of NodeOperations that are executed as one.
+ * This grouping is used to combine Operations that can be executed as one whole when multi-processing.
+ * @ingroup Execution
+ */
+class ExecutionGroup {
+private:
+ // fields
+ /**
+ * @brief unique identifier of this node.
+ */
+ string id;
+
+ /**
+ * @brief list of operations in this ExecutionGroup
+ */
+ vector<NodeOperation*> operations;
+
+ /**
+ * @brief is this ExecutionGroup an input ExecutionGroup
+ * an input execution group is a group that is at the end of the calculation (the output is important for the user)
+ */
+ int isOutput;
+
+ /**
+ * @brief Width of the output
+ */
+ unsigned int width;
+
+ /**
+ * @brief Height of the output
+ */
+ unsigned int height;
+
+ /**
+ * @brief size of a single chunk, being Width or of height
+ * a chunk is always a square, except at the edges of the MemoryBuffer
+ */
+ unsigned int chunkSize;
+
+ /**
+ * @brief number of chunks in the x-axis
+ */
+ unsigned int numberOfXChunks;
+
+ /**
+ * @brief number of chunks in the y-axis
+ */
+ unsigned int numberOfYChunks;
+
+ /**
+ * @brief total number of chunks
+ */
+ unsigned int numberOfChunks;
+
+ /**
+ * @brief contains this ExecutionGroup a complex NodeOperation.
+ */
+ bool complex;
+
+ /**
+ * @brief can this ExecutionGroup be scheduled on an OpenCLDevice
+ */
+ bool openCL;
+
+ /**
+ * @brief what is the maximum number field of all ReadBufferOperation in this ExecutionGroup.
+ * @note this is used to construct the MemoryBuffers that will be passed during execution.
+ */
+ unsigned int cachedMaxReadBufferOffset;
+
+ /**
+ * @brief a cached vector of all read operations in the execution group.
+ */
+ vector<NodeOperation*> cachedReadOperations;
+
+ /**
+ * @brief reference to the original bNodeTree, this field is only set for the 'top' execution group.
+ * @note can only be used to call the callbacks for progress, status and break
+ */
+ const bNodeTree * bTree;
+
+ /**
+ * @brief total number of chunks that have been calculated for this ExecutionGroup
+ */
+ unsigned int chunksFinished;
+
+ /**
+ * @brief the chunkExecutionStates holds per chunk the execution state. this state can be
+ * - COM_ES_NOT_SCHEDULED: not scheduled
+ * - COM_ES_SCHEDULED: scheduled
+ * - COM_ES_EXECUTED: executed
+ */
+ ChunkExecutionState *chunkExecutionStates;
+
+ /**
+ * @brief indicator when this ExecutionGroup has valid NodeOperations in its vector for Execution
+ * @note When building the ExecutionGroup NodeOperations are added via recursion. First a WriteBufferOperations is added, then the
+ * @note Operation containing the settings that is important for the ExecutiongGroup is added,
+ * @note When this occurs, these settings are copied over from the node to the ExecutionGroup
+ * @note and the Initialized flag is set to true.
+ * @see complex
+ * @see openCL
+ */
+ bool initialized;
+
+ // methods
+ /**
+ * @brief check whether parameter operation can be added to the execution group
+ * @param operation the operation to be added
+ */
+ bool canContainOperation(NodeOperation *operation);
+
+ /**
+ * @brief get the Render priority of this ExecutionGroup
+ * @see ExecutionSystem.execute
+ */
+ int getRenderPriotrity();
+
+ /**
+ * @brief calculate the actual chunk size of this execution group.
+ * @note A chunk size is an unsigned int that is both the height and width of a chunk.
+ * @note The chunk size will not be stored in the chunkSize field. This needs to be done
+ * @note by the calling method.
+ */
+ unsigned int determineChunkSize();
+
+
+ /**
+ * @brief Determine the rect (minx, maxx, miny, maxy) of a chunk at a position.
+ * @note Only gives usefull results ater the determination of the chunksize
+ * @see determineChunkSize()
+ */
+ void determineChunkRect(rcti *rect, const unsigned int xChunk, const unsigned int yChunk) const;
+
+ /**
+ * @brief determine the number of chunks, based on the chunkSize, width and height.
+ * @note The result are stored in the fields numberOfChunks, numberOfXChunks, numberOfYChunks
+ */
+ void determineNumberOfChunks();
+
+ /**
+ * @brief try to schedule a specific chunk.
+ * @note scheduling succeeds when all input requirements are met and the chunks hasen't been scheduled yet.
+ * @param graph
+ * @param xChunk
+ * @param yChunk
+ * @return [true:false]
+ * true: package(s) are scheduled
+ * false: scheduling is deferred (depending workpackages are scheduled)
+ */
+ bool scheduleChunkWhenPossible(ExecutionSystem * graph, int xChunk, int yChunk);
+
+ /**
+ * @brief try to schedule a specific area.
+ * @note Check if a certain area is available, when not available this are will be checked.
+ * @note This method is called from other ExecutionGroup's.
+ * @param graph
+ * @param rect
+ * @return [true:false]
+ * true: package(s) are scheduled
+ * false: scheduling is deferred (depending workpackages are scheduled)
+ */
+ bool scheduleAreaWhenPossible(ExecutionSystem * graph, rcti * rect);
+
+ /**
+ * @brief add a chunk to the WorkScheduler.
+ * @param chunknumber
+ */
+ bool scheduleChunk(unsigned int chunkNumber);
+
+ /**
+ * @brief determine the area of interest of a certain input area
+ * @note This method only evaluates a single ReadBufferOperation
+ * @param input the input area
+ * @param readOperation The ReadBufferOperation where the area needs to be evaluated
+ * @param output the area needed of the ReadBufferOperation. Result
+ */
+ void determineDependingAreaOfInterest(rcti * input, ReadBufferOperation *readOperation, rcti *output);
+
+
+public:
+ // constructors
+ ExecutionGroup();
+
+ /**
+ * @brief set the id of this ExecutionGroup
+ * @param id
+ */
+ void setId(string id) {this->id = id;}
+
+ /**
+ * @brief return the id of this ExecutionGroup
+ */
+ const string getId() const {return this->id;}
+
+ // methods
+ /**
+ * @brief check to see if a NodeOperation is already inside this execution group
+ * @param operation the NodeOperation to check
+ * @return [true,false]
+ */
+ bool containsOperation(NodeOperation *operation);
+
+ /**
+ * @brief add an operation to this ExecutionGroup
+ * @note this method will add input of the operations recursivly
+ * @note this method can create multiple ExecutionGroup's
+ * @param system
+ * @param operation
+ */
+ void addOperation(ExecutionSystem *system, NodeOperation *operation);
+
+ /**
+ * @brief is this ExecutionGroup an output ExecutionGroup
+ * @note An OutputExecution group are groups containing a
+ * @note ViewerOperation, CompositeOperation, PreviewOperation.
+ * @see NodeOperation.isOutputOperation
+ */
+ const int isOutputExecutionGroup() const {return this->isOutput;}
+
+ /**
+ * @brief set whether this ExecutionGroup is an output
+ * @param isOutput
+ */
+ void setOutputExecutionGroup(int isOutput) {this->isOutput = isOutput;}
+
+ /**
+ * @brief determine the resolution of this ExecutionGroup
+ * @param resolution
+ */
+ void determineResolution(unsigned int resolution[]);
+
+ /**
+ * @brief set the resolution of this executiongroup
+ * @param resolution
+ */
+ void setResolution(unsigned int resolution[]) {this->width = resolution[0];this->height = resolution[1];}
+
+ /**
+ * @brief get the width of this execution group
+ */
+ const unsigned int getWidth() {return this->width;}
+
+ /**
+ * @brief get the height of this execution group
+ */
+ const unsigned int getHeight() {return this->height;}
+
+ /**
+ * @brief does this ExecutionGroup contains a complex NodeOperation
+ */
+ const bool isComplex() const;
+
+
+ /**
+ * @brief get the output operation of this ExecutionGroup
+ * @return NodeOperation *output operation
+ */
+ NodeOperation *getOutputNodeOperation() const;
+
+ /**
+ * @brief compose multiple chunks into a single chunk
+ * @return Memorybuffer *consolidated chunk
+ */
+ MemoryBuffer *constructConsolidatedMemoryBuffer(MemoryProxy *memoryProxy, rcti *output);
+
+ /**
+ * @brief initExecution is called just before the execution of the whole graph will be done.
+ * @note The implementation will calculate the chunkSize of this execution group.
+ */
+ void initExecution();
+
+ /**
+ * @brief get all inputbuffers needed to calculate an chunk
+ * @note all inputbuffers must be executed
+ * @param chunkNumber the chunk to be calculated
+ * @return MemoryBuffer** the inputbuffers
+ */
+ MemoryBuffer** getInputBuffers(int chunkNumber);
+
+ /**
+ * @brief allocate the outputbuffer of a chunk
+ * @param chunkNumber the number of the chunk in the ExecutionGroup
+ * @param rect the rect of that chunk
+ * @see determineChunkRect
+ */
+ MemoryBuffer *allocateOutputBuffer(int chunkNumber, rcti *rect);
+
+ /**
+ * @brief after a chunk is executed the needed resources can be freed or unlocked.
+ * @param chunknumber
+ * @param memorybuffers
+ */
+ void finalizeChunkExecution(int chunkNumber, MemoryBuffer** memoryBuffers);
+
+ /**
+ * @brief deinitExecution is called just after execution the whole graph.
+ * @note It will release all needed resources
+ */
+ void deinitExecution();
+
+
+ /**
+ * @brief schedule an ExecutionGroup
+ * @note this method will return when all chunks have been calculated, or the execution has breaked (by user)
+ *
+ * first the order of the chunks will be determined. This is determined by finding the ViewerOperation and get the relevant information from it.
+ * - ChunkOrdering
+ * - CenterX
+ * - CenterY
+ *
+ * After determining the order of the chunks the chunks will be scheduled
+ *
+ * @see ViewerOperation
+ * @param system
+ */
+ void execute(ExecutionSystem *system);
+
+ /**
+ * @brief this method determines the MemoryProxy's where this execution group depends on.
+ * @note After this method determineDependingAreaOfInterest can be called to determine
+ * @note the area of the MemoryProxy.creator thas has to be executed.
+ * @param memoryProxies result
+ */
+ void determineDependingMemoryProxies(vector<MemoryProxy*> *memoryProxies);
+
+ /**
+ * @brief Determine the rect (minx, maxx, miny, maxy) of a chunk.
+ * @note Only gives usefull results ater the determination of the chunksize
+ * @see determineChunkSize()
+ */
+ void determineChunkRect(rcti *rect, const unsigned int chunkNumber) const;
+
+
+ bool operator ==(const ExecutionGroup &executionGroup) const;
+
+ /**
+ * @brief can this ExecutionGroup be scheduled on an OpenCLDevice
+ * @see WorkScheduler.schedule
+ */
+ bool isOpenCL();
+
+ void setChunksize(int chunksize) {this->chunkSize = chunksize;}
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.cpp b/source/blender/compositor/intern/COM_ExecutionSystem.cpp
new file mode 100644
index 00000000000..84b5bb8f5fc
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ExecutionSystem.cpp
@@ -0,0 +1,320 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ExecutionSystem.h"
+
+#include "PIL_time.h"
+#include "BKE_node.h"
+#include "COM_Converter.h"
+#include <sstream>
+#include "COM_NodeOperation.h"
+#include "COM_ExecutionGroup.h"
+#include "COM_NodeBase.h"
+#include "COM_WorkScheduler.h"
+#include "COM_ReadBufferOperation.h"
+#include "COM_MemoryManager.h"
+#include "stdio.h"
+#include "COM_GroupNode.h"
+#include "COM_WriteBufferOperation.h"
+#include "COM_ReadBufferOperation.h"
+#include "COM_ExecutionSystemHelper.h"
+
+#include "BKE_global.h"
+
+ExecutionSystem::ExecutionSystem(bNodeTree *editingtree, bool rendering)
+{
+ this->context.setbNodeTree(editingtree);
+
+ /* initialize the CompositorContext */
+ if (rendering) {
+ context.setQuality((CompositorQuality)editingtree->render_quality);
+ }
+ else {
+ context.setQuality((CompositorQuality)editingtree->edit_quality);
+ }
+ context.setRendering(rendering);
+ context.setHasActiveOpenCLDevices(WorkScheduler::hasGPUDevices() && (editingtree->flag & NTREE_COM_OPENCL));
+
+ Node *mainOutputNode=NULL;
+
+ mainOutputNode = ExecutionSystemHelper::addbNodeTree(*this, 0, editingtree);
+
+ if (mainOutputNode) {
+ context.setScene((Scene*)mainOutputNode->getbNode()->id);
+ this->convertToOperations();
+ this->groupOperations(); /* group operations in ExecutionGroups */
+ vector<ExecutionGroup*> executionGroups;
+ this->findOutputExecutionGroup(&executionGroups);
+ unsigned int index;
+ unsigned int resolution[2];
+ for (index = 0 ; index < executionGroups.size(); index ++) {
+ resolution[0]=0;
+ resolution[1]=0;
+ ExecutionGroup *executionGroup = executionGroups[index];
+ executionGroup->determineResolution(resolution);
+ }
+ }
+
+ if (G.f & G_DEBUG) ExecutionSystemHelper::debugDump(this);
+}
+
+ExecutionSystem::~ExecutionSystem()
+{
+ unsigned int index;
+ for (index = 0; index < this->connections.size(); index++) {
+ SocketConnection *connection = this->connections[index];
+ delete connection;
+ }
+ this->connections.clear();
+ for (index = 0; index < this->nodes.size(); index++) {
+ Node *node = this->nodes[index];
+ delete node;
+ }
+ this->nodes.clear();
+ for (index = 0; index < this->operations.size(); index++) {
+ NodeOperation *operation = this->operations[index];
+ delete operation;
+ }
+ this->operations.clear();
+ for (index = 0; index < this->groups.size(); index++) {
+ ExecutionGroup *group = this->groups[index];
+ delete group;
+ }
+ this->groups.clear();
+}
+
+void ExecutionSystem::execute()
+{
+ unsigned int order = 0;
+ for ( vector<NodeOperation*>::iterator iter = this->operations.begin(); iter != operations.end(); ++iter ) {
+ NodeBase *node = *iter;
+ NodeOperation *operation = (NodeOperation*) node;
+ if (operation->isReadBufferOperation()) {
+ ReadBufferOperation * readOperation = (ReadBufferOperation*)operation;
+ readOperation->setOffset(order);
+ order ++;
+ }
+ }
+
+ MemoryManager::initialize();
+ unsigned int index;
+
+ for (index = 0 ; index < this->operations.size() ; index ++) {
+ NodeOperation * operation = this->operations[index];
+ operation->initExecution();
+ }
+ for (index = 0 ; index < this->groups.size() ; index ++) {
+ ExecutionGroup * executionGroup = this->groups[index];
+ executionGroup->setChunksize(context.getChunksize());
+ executionGroup->initExecution();
+ }
+
+ WorkScheduler::start(this->context);
+
+
+ vector<ExecutionGroup*> executionGroups;
+ this->findOutputExecutionGroup(&executionGroups);
+
+ /* start execution of the ExecutionGroups based on priority of their output node */
+ for (int priority = 9 ; priority>=0 ; priority--) {
+ for (index = 0 ; index < executionGroups.size(); index ++) {
+ ExecutionGroup *group = executionGroups[index];
+ NodeOperation *output = group->getOutputNodeOperation();
+ if (output->getRenderPriority() == priority) {
+ group->execute(this);
+ }
+ }
+ }
+
+ WorkScheduler::finish();
+ WorkScheduler::stop();
+
+ for (index = 0 ; index < this->operations.size() ; index ++) {
+ NodeOperation * operation = this->operations[index];
+ operation->deinitExecution();
+ }
+ for (index = 0 ; index < this->groups.size() ; index ++) {
+ ExecutionGroup * executionGroup = this->groups[index];
+ executionGroup->deinitExecution();
+ }
+ MemoryManager::clear();
+}
+
+void ExecutionSystem::addOperation(NodeOperation *operation)
+{
+ ExecutionSystemHelper::addOperation(this->operations, operation);
+}
+
+void ExecutionSystem::addReadWriteBufferOperations(NodeOperation *operation)
+{
+ // for every input add write and read operation if input is not a read operation
+ // only add read operation to other links when they are attached to buffered operations.
+ unsigned int index;
+ for (index = 0 ; index < operation->getNumberOfInputSockets();index++) {
+ InputSocket *inputsocket = operation->getInputSocket(index);
+ if (inputsocket->isConnected()) {
+ SocketConnection *connection = inputsocket->getConnection();
+ NodeOperation *otherEnd = (NodeOperation*)connection->getFromNode();
+ if (!otherEnd->isReadBufferOperation()) {
+ // check of other end already has write operation
+ OutputSocket *fromsocket = connection->getFromSocket();
+ WriteBufferOperation * writeoperation = fromsocket->findAttachedWriteBufferOperation();
+ if (writeoperation == NULL) {
+ writeoperation = new WriteBufferOperation();
+ writeoperation->setbNodeTree(this->getContext().getbNodeTree());
+ this->addOperation(writeoperation);
+ ExecutionSystemHelper::addLink(this->getConnections(), fromsocket, writeoperation->getInputSocket(0));
+ }
+ ReadBufferOperation *readoperation = new ReadBufferOperation();
+ readoperation->setMemoryProxy(writeoperation->getMemoryProxy());
+ connection->setFromSocket(readoperation->getOutputSocket());
+ readoperation->getOutputSocket()->addConnection(connection);
+ this->addOperation(readoperation);
+ }
+ }
+ }
+ /*
+ link the outputsocket to a write operation
+ link the writeoperation to a read operation
+ link the read operation to the next node.
+ */
+ OutputSocket * outputsocket = operation->getOutputSocket();
+ if (outputsocket->isConnected()) {
+ int index;
+ WriteBufferOperation *writeOperation;
+ writeOperation = new WriteBufferOperation();
+ writeOperation->setbNodeTree(this->getContext().getbNodeTree());
+ this->addOperation(writeOperation);
+ for (index = 0 ; index < outputsocket->getNumberOfConnections();index ++) {
+ SocketConnection * connection = outputsocket->getConnection(index);
+ ReadBufferOperation *readoperation = new ReadBufferOperation();
+ readoperation->setMemoryProxy(writeOperation->getMemoryProxy());
+ connection->setFromSocket(readoperation->getOutputSocket());
+ readoperation->getOutputSocket()->addConnection(connection);
+ this->addOperation(readoperation);
+ }
+ ExecutionSystemHelper::addLink(this->getConnections(), outputsocket, writeOperation->getInputSocket(0));
+ }
+}
+
+void ExecutionSystem::convertToOperations()
+{
+ unsigned int index;
+ // first determine data types of the nodes, this can be used by the node to convert to a different operation system
+ this->determineActualSocketDataTypes((vector<NodeBase*>&)this->nodes);
+ for (index = 0; index < this->nodes.size(); index++) {
+ Node *node = (Node*)this->nodes[index];
+ node->convertToOperations(this, &this->context);
+ }
+
+ // update the socket types of the operations. this will be used to add conversion operations in the system
+ this->determineActualSocketDataTypes((vector<NodeBase*>&)this->operations);
+ for (index = 0 ; index < this->connections.size(); index ++) {
+ SocketConnection *connection = this->connections[index];
+ if (connection->isValid()) {
+ if (connection->getFromSocket()->getActualDataType() != connection->getToSocket()->getActualDataType()) {
+ Converter::convertDataType(connection, this);
+ }
+ }
+ }
+
+ // determine all resolutions of the operations (Width/Height)
+ for (index = 0 ; index < this->operations.size(); index ++) {
+ NodeOperation *operation = this->operations[index];
+ if (operation->isOutputOperation(context.isRendering())) {
+ unsigned int resolution[2] = {0,0};
+ unsigned int preferredResolution[2] = {0,0};
+ operation->determineResolution(resolution, preferredResolution);
+ operation->setResolution(resolution);
+ }
+ }
+
+ // add convert resolution operations when needed.
+ for (index = 0 ; index < this->connections.size(); index ++) {
+ SocketConnection *connection = this->connections[index];
+ if (connection->isValid()) {
+ if (connection->needsResolutionConversion()) {
+ Converter::convertResolution(connection, this);
+ }
+ }
+ }
+
+}
+
+void ExecutionSystem::groupOperations()
+{
+ vector<NodeOperation*> outputOperations;
+ NodeOperation * operation;
+ unsigned int index;
+ // surround complex operations with ReadBufferOperation and WriteBufferOperation
+ for (index = 0; index < this->operations.size(); index++) {
+ operation = this->operations[index];
+ if (operation->isComplex()) {
+ this->addReadWriteBufferOperations(operation);
+ }
+ }
+ ExecutionSystemHelper::findOutputNodeOperations(&outputOperations, this->getOperations(), this->context.isRendering());
+ for ( vector<NodeOperation*>::iterator iter = outputOperations.begin(); iter != outputOperations.end(); ++iter ) {
+ operation = *iter;
+ ExecutionGroup *group = new ExecutionGroup();
+ group->addOperation(this, operation);
+ group->setOutputExecutionGroup(true);
+ ExecutionSystemHelper::addExecutionGroup(this->getExecutionGroups(), group);
+ }
+}
+
+void ExecutionSystem::addSocketConnection(SocketConnection *connection)
+{
+ this->connections.push_back(connection);
+}
+
+
+void ExecutionSystem::determineActualSocketDataTypes(vector<NodeBase*> &nodes)
+{
+ unsigned int index;
+ /* first do all input nodes */
+ for (index = 0; index < nodes.size(); index++) {
+ NodeBase *node = nodes[index];
+ if (node->isInputNode()) {
+ node->determineActualSocketDataTypes();
+ }
+ }
+
+ /* then all other nodes */
+ for (index = 0; index < nodes.size(); index++) {
+ NodeBase *node = nodes[index];
+ if (!node->isInputNode()) {
+ node->determineActualSocketDataTypes();
+ }
+ }
+}
+
+void ExecutionSystem::findOutputExecutionGroup(vector<ExecutionGroup*> *result) const
+{
+ unsigned int index;
+ for (index = 0 ; index < this->groups.size() ; index ++) {
+ ExecutionGroup *group = this->groups[index];
+ if (group->isOutputExecutionGroup()) {
+ result->push_back(group);
+ }
+ }
+}
diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.h b/source/blender/compositor/intern/COM_ExecutionSystem.h
new file mode 100644
index 00000000000..85fec8b6145
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ExecutionSystem.h
@@ -0,0 +1,229 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class ExecutionGroup;
+
+#ifndef _COM_ExecutionSystem_h
+#define _COM_ExecutionSystem_h
+
+#include "DNA_node_types.h"
+#include <vector>
+#include "COM_Node.h"
+#include "COM_SocketConnection.h"
+#include "BKE_text.h"
+#include "COM_ExecutionGroup.h"
+#include "COM_NodeOperation.h"
+
+using namespace std;
+
+/**
+ * @page execution Execution model
+ * In order to get to an efficient model for execution, serveral steps are being done. these steps are explained below.
+ *
+ * @section EM_Step1 Step 1: translating blender node system to the new compsitor system
+ * Blenders node structure is based on C structs (DNA). These structs are not efficient in the new architecture. We want to use classes in order to simplify the system.
+ * during this step the blender node_tree is evaluated and converted to a CPP node system.
+ *
+ * @see ExecutionSystem
+ * @see Converter.convert
+ * @see Node
+ *
+ * @section EM_Step2 Step2: translating nodes to operations
+ * Ungrouping the GroupNodes. Group nodes are node_tree's in node_tree's. The new system only supports a single level of node_tree. We will 'flatten' the system in a single level.
+ * @see GroupNode
+ * @see ExecutionSystemHelper.ungroup
+ *
+ * Every node has the ability to convert itself to operations. The node itself is responsible to create a correct NodeOperation setup based on its internal settings.
+ * Most Node only need to convert it to its NodeOperation. Like a ColorToBWNode doesn't check anything, but replaces itself with a ConvertColorToBWOperation.
+ * More complex nodes can use different NodeOperation based on settings; like MixNode. based on the selected Mixtype a different operation will be used.
+ * for more information see the page about creating new Nodes. [@subpage newnode]
+ *
+ * @see ExecutionSystem.convertToOperations
+ * @see Node.convertToOperations
+ * @see NodeOperation base class for all operations in the system
+ *
+ * @section EM_Step3 Step3: add additional conversions to the operation system
+ * - Data type conversions: the system has 3 data types COM_DT_VALUE, COM_DT_VECTOR, COM_DT_COLOR. The user can connect a Value socket to a color socket. As values are ordered differently than colors a conversion happens.
+ *
+ * - Image size conversions: the system can automatically convert when resolutions do not match. An InputSocket has a resize mode. This can be any of the folowing settings.
+ * - [@ref InputSocketResizeMode.COM_SC_CENTER]: The center of both images are aligned
+ * - [@ref InputSocketResizeMode.COM_SC_FIT_WIDTH]: The width of both images are aligned
+ * - [@ref InputSocketResizeMode.COM_SC_FIT_HEIGHT]: the height of both images are aligned
+ * - [@ref InputSocketResizeMode.COM_SC_FIT]: The width, or the height of both images are aligned to make sure that it fits.
+ * - [@ref InputSocketResizeMode.COM_SC_STRETCH]: The width and the height of both images are aligned
+ * - [@ref InputSocketResizeMode.COM_SC_NO_RESIZE]: bottom left of the images are aligned.
+ *
+ * @see Converter.convertDataType Datatype conversions
+ * @see Converter.convertResolution Image size conversions
+ *
+ * @section EM_Step4 Step4: group operations in executions groups
+ * ExecutionGroup are groups of operations that are calculated as being one bigger operation. All operations will be part of an ExecutionGroup.
+ * Complex nodes will be added to separate groups. Between ExecutionGroup's the data will be stored in MemoryBuffers. ReadBufferOperations and WriteBufferOperations are added where needed.
+ *
+ * <pre>
+ *
+ * +------------------------------+ +----------------+
+ * | ExecutionGroup A | |ExecutionGroup B| ExecutionGroup
+ * | +----------+ +----------+| |+----------+ |
+ * /----->| Operation|---->| Operation|-\ /--->| Operation|-\ | NodeOperation
+ * | | | A | | B ||| | || C | | |
+ * | | | cFFA | /->| cFFA ||| | || cFFA | | |
+ * | | +----------+ | +----------+|| | |+----------+ | |
+ * | +---------------|--------------+v | +-------------v--+
+ * +-*----+ +---*--+ +--*-*--+ +--*----+
+ * |inputA| |inputB| |outputA| |outputB| MemoryBuffer
+ * |cFAA | |cFAA | |cFAA | |cFAA |
+ * +------+ +------+ +-------+ +-------+
+ * </pre>
+ * @see ExecutionSystem.groupOperations method doing this step
+ * @see ExecutionSystem.addReadWriteBufferOperations
+ * @see NodeOperation.isComplex
+ * @see ExecutionGroup class representing the ExecutionGroup
+ */
+
+/**
+ * @brief the ExecutionSystem contains the whole compositor tree.
+ */
+class ExecutionSystem {
+private:
+ /**
+ * @brief the context used during execution
+ */
+ CompositorContext context;
+
+ /**
+ * @brief vector of nodes
+ */
+ vector<Node*> nodes;
+
+ /**
+ * @brief vector of operations
+ */
+ vector<NodeOperation*> operations;
+
+ /**
+ * @brief vector of groups
+ */
+ vector<ExecutionGroup*> groups
+
+ /**
+ * @brief vector of connections
+ */;
+ vector<SocketConnection*> connections;
+
+private: //methods
+ /**
+ * @brief add ReadBufferOperation and WriteBufferOperation around an operation
+ * @param operation the operation to add the bufferoperations around.
+ */
+ void addReadWriteBufferOperations(NodeOperation *operation);
+
+
+ /**
+ * find all execution group with output nodes
+ */
+ void findOutputExecutionGroup(vector<ExecutionGroup*> *result) const;
+
+public:
+ /**
+ * @brief Create a new ExecutionSystem and initialize it with the
+ * editingtree.
+ *
+ * @param editingtree [bNodeTree*]
+ * @param rendering [true false]
+ */
+ ExecutionSystem(bNodeTree *editingtree, bool rendering);
+
+ /**
+ * Destructor
+ */
+ ~ExecutionSystem();
+
+
+ /**
+ * @brief execute this system
+ * - initialize the NodeOperation's and ExecutionGroup's
+ * - schedule the output ExecutionGroup's based on their priority
+ * - deinitialize the ExecutionGroup's and NodeOperation's
+ */
+ void execute();
+
+ /**
+ * @brief Add an operation to the operation list
+ *
+ * @param operation the operation to add
+ */
+ void addOperation(NodeOperation *operation);
+
+ /**
+ * Add an editor link to the system. convert it to an socketconnection (CPP-representative)
+ * this converted socket is returned.
+ */
+ SocketConnection *addNodeLink(bNodeLink *bNodeLink);
+ void addSocketConnection(SocketConnection *connection);
+
+ /**
+ * @brief Convert all nodes to operations
+ */
+ void convertToOperations();
+
+ /**
+ * @brief group operations in ExecutionGroup's
+ * @see ExecutionGroup
+ */
+ void groupOperations();
+
+ /**
+ * @brief get the reference to the compositor context
+ */
+ CompositorContext& getContext() {return this->context;}
+
+ /**
+ * @brief get the reference to the compositor nodes
+ */
+ vector<Node*>& getNodes() {return this->nodes;}
+
+ /**
+ * @brief get the reference to the compositor connections
+ */
+ vector<SocketConnection*>& getConnections() {return this->connections;}
+
+ /**
+ * @brief get the reference to the list of execution groups
+ */
+ vector<ExecutionGroup*>& getExecutionGroups() {return this->groups;}
+
+ /**
+ * @brief get the reference to the list of operations
+ */
+ vector<NodeOperation*>& getOperations() {return this->operations;}
+
+private:
+
+ /**
+ * @brief determine the actual data types of all sockets
+ * @param nodes list of nodes or operations to do the data type determination
+ */
+ void determineActualSocketDataTypes(vector<NodeBase*> &nodes);
+
+};
+#endif
diff --git a/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp b/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp
new file mode 100644
index 00000000000..94376f73de9
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp
@@ -0,0 +1,329 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ExecutionSystemHelper.h"
+
+#include "PIL_time.h"
+#include "BKE_node.h"
+#include "COM_Converter.h"
+#include <sstream>
+#include "COM_NodeOperation.h"
+#include "COM_ExecutionGroup.h"
+#include "COM_NodeBase.h"
+#include "COM_WorkScheduler.h"
+#include "COM_ReadBufferOperation.h"
+#include "COM_MemoryManager.h"
+#include "stdio.h"
+#include "COM_GroupNode.h"
+#include "COM_WriteBufferOperation.h"
+#include "COM_ReadBufferOperation.h"
+
+Node *ExecutionSystemHelper::addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree *tree)
+{
+ vector<Node*>& nodes = system.getNodes();
+ vector<SocketConnection*>& links = system.getConnections();
+ Node *mainnode = NULL;
+ /* add all nodes of the tree to the node list */
+ bNode *node = (bNode*)tree->nodes.first;
+ while (node != NULL) {
+ Node *execnode = addNode(nodes, node);
+ if (node->type == CMP_NODE_COMPOSITE) {
+ mainnode = execnode;
+ }
+ node = (bNode*)node->next;
+ }
+
+ NodeRange node_range(nodes.begin()+nodes_start, nodes.end());
+
+ /* add all nodelinks of the tree to the link list */
+ bNodeLink *nodelink = (bNodeLink*)tree->links.first;
+ while (nodelink != NULL) {
+ addNodeLink(node_range, links, nodelink);
+ nodelink = (bNodeLink*)nodelink->next;
+ }
+
+ /* Expand group nodes */
+ for (int i=nodes_start; i < nodes.size(); ++i) {
+ Node *execnode = nodes[i];
+ if (execnode->isGroupNode()) {
+ GroupNode * groupNode = (GroupNode*)execnode;
+ groupNode->ungroup(system);
+ }
+ }
+
+ return mainnode;
+}
+
+void ExecutionSystemHelper::addNode(vector<Node*>& nodes, Node *node)
+{
+ nodes.push_back(node);
+}
+
+Node *ExecutionSystemHelper::addNode(vector<Node*>& nodes, bNode *bNode)
+{
+ Converter converter;
+ Node * node;
+ node = converter.convert(bNode);
+ if (node != NULL) {
+ addNode(nodes, node);
+ return node;
+ }
+ return NULL;
+}
+void ExecutionSystemHelper::addOperation(vector<NodeOperation*>& operations, NodeOperation *operation)
+{
+ operations.push_back(operation);
+}
+
+void ExecutionSystemHelper::addExecutionGroup(vector<ExecutionGroup*>& executionGroups, ExecutionGroup *executionGroup)
+{
+ executionGroups.push_back(executionGroup);
+}
+
+void ExecutionSystemHelper::findOutputNodeOperations(vector<NodeOperation*>* result, vector<NodeOperation*>& operations, bool rendering)
+{
+ unsigned int index;
+
+ for (index = 0 ; index < operations.size() ; index ++) {
+ NodeOperation *operation = operations[index];
+ if (operation->isOutputOperation(rendering)) {
+ result->push_back(operation);
+ }
+ }
+}
+
+static InputSocket *find_input(NodeRange &node_range, bNode *bnode, bNodeSocket *bsocket)
+{
+ if (bnode != NULL) {
+ for (NodeIterator it=node_range.first; it!=node_range.second; ++it) {
+ Node *node = *it;
+ if (node->getbNode() == bnode)
+ return node->findInputSocketBybNodeSocket(bsocket);
+ }
+ }
+ else {
+ for (NodeIterator it=node_range.first; it!=node_range.second; ++it) {
+ Node *node = *it;
+ if (node->isProxyNode()) {
+ InputSocket *proxySocket = node->getInputSocket(0);
+ if (proxySocket->getbNodeSocket()==bsocket)
+ return proxySocket;
+ }
+ }
+ }
+ return NULL;
+}
+static OutputSocket *find_output(NodeRange &node_range, bNode *bnode, bNodeSocket *bsocket)
+{
+ if (bnode != NULL) {
+ for (NodeIterator it=node_range.first; it!=node_range.second; ++it) {
+ Node *node = *it;
+ if (node->getbNode() == bnode)
+ return node->findOutputSocketBybNodeSocket(bsocket);
+ }
+ }
+ else {
+ for (NodeIterator it=node_range.first; it!=node_range.second; ++it) {
+ Node *node = *it;
+ if (node->isProxyNode()) {
+ OutputSocket *proxySocket = node->getOutputSocket(0);
+ if (proxySocket->getbNodeSocket()==bsocket)
+ return proxySocket;
+ }
+ }
+ }
+ return NULL;
+}
+SocketConnection *ExecutionSystemHelper::addNodeLink(NodeRange &node_range, vector<SocketConnection*>& links, bNodeLink *bNodeLink)
+{
+ /// @note: cyclic lines will be ignored. This has been copied from node.c
+ if (bNodeLink->tonode != 0 && bNodeLink->fromnode != 0) {
+ if (!(bNodeLink->fromnode->level >= bNodeLink->tonode->level && bNodeLink->tonode->level!=0xFFF)) { // only add non cyclic lines! so execution will procede
+ return NULL;
+ }
+ }
+
+ InputSocket *inputSocket = find_input(node_range, bNodeLink->tonode, bNodeLink->tosock);
+ OutputSocket *outputSocket = find_output(node_range, bNodeLink->fromnode, bNodeLink->fromsock);
+ if (inputSocket == NULL || outputSocket == NULL) {
+ return NULL;
+ }
+ if (inputSocket->isConnected()) {
+ return NULL;
+ }
+ SocketConnection *connection = addLink(links, outputSocket, inputSocket);
+ return connection;
+}
+
+SocketConnection *ExecutionSystemHelper::addLink(vector<SocketConnection*>& links, OutputSocket *fromSocket, InputSocket *toSocket)
+{
+ SocketConnection * newconnection = new SocketConnection();
+ newconnection->setFromSocket(fromSocket);
+ newconnection->setToSocket(toSocket);
+ fromSocket->addConnection(newconnection);
+ toSocket->setConnection(newconnection);
+ links.push_back(newconnection);
+ return newconnection;
+}
+
+void ExecutionSystemHelper::debugDump(ExecutionSystem *system)
+{
+ Node *node;
+ NodeOperation *operation;
+ ExecutionGroup *group;
+ SocketConnection *connection;
+ int tot, tot2;
+ printf("-- BEGIN COMPOSITOR DUMP --\r\n");
+ printf("digraph compositorexecution {\r\n");
+ tot = system->getNodes().size();
+ for (int i = 0 ; i < tot ; i ++) {
+ node = system->getNodes()[i];
+ printf("// NODE: %s\r\n", node->getbNode()->typeinfo->name);
+ }
+ tot = system->getOperations().size();
+ for (int i = 0 ; i < tot ; i ++) {
+ operation = system->getOperations()[i];
+ printf("// OPERATION: %p\r\n", operation);
+ printf("\t\"O_%p\"", operation);
+ printf(" [shape=record,label=\"{");
+ tot2 = operation->getNumberOfInputSockets();
+ if (tot2 != 0) {
+ printf("{");
+ for (int j = 0 ; j < tot2 ; j ++) {
+ InputSocket *socket = operation->getInputSocket(j);
+ if (j != 0) {
+ printf("|");
+ }
+ printf("<IN_%p>", socket);
+ switch (socket->getActualDataType()) {
+ case COM_DT_VALUE:
+ printf("Value");
+ break;
+ case COM_DT_VECTOR:
+ printf("Vector");
+ break;
+ case COM_DT_COLOR:
+ printf("Color");
+ break;
+ case COM_DT_UNKNOWN:
+ printf("Unknown");
+ break;
+ }
+ }
+ printf("}");
+ printf("|");
+ }
+ if (operation->isViewerOperation()) {
+ printf("Viewer");
+ }
+ else if (operation->isOutputOperation(system->getContext().isRendering())) {
+ printf("Output");
+ }
+ else if (operation->isSetOperation()) {
+ printf("Set");
+ }
+ else if (operation->isReadBufferOperation()) {
+ printf("ReadBuffer");
+ }
+ else if (operation->isWriteBufferOperation()) {
+ printf("WriteBuffer");
+ }
+ else {
+ printf("O_%p", operation);
+ }
+ tot2 = operation->getNumberOfOutputSockets();
+ if (tot2 != 0) {
+ printf("|");
+ printf("{");
+ for (int j = 0 ; j < tot2 ; j ++) {
+ OutputSocket *socket = operation->getOutputSocket(j);
+ if (j != 0) {
+ printf("|");
+ }
+ printf("<OUT_%p>", socket);
+ switch (socket->getActualDataType()) {
+ case COM_DT_VALUE:
+ printf("Value");
+ break;
+ case COM_DT_VECTOR:
+ printf("Vector");
+ break;
+ case COM_DT_COLOR:
+ printf("Color");
+ break;
+ case COM_DT_UNKNOWN:
+ printf("Unknown");
+ break;
+ }
+ }
+ printf("}");
+ }
+ printf("}\"]");
+ printf("\r\n");
+ }
+ tot = system->getExecutionGroups().size();
+ for (int i = 0 ; i < tot ; i ++) {
+ group = system->getExecutionGroups()[i];
+ printf("// GROUP: %d\r\n", i);
+ printf("subgraph {\r\n");
+ printf("// OUTPUTOPERATION: %p\r\n", group->getOutputNodeOperation());
+ printf(" O_%p\r\n", group->getOutputNodeOperation());
+ printf("}\r\n");
+ }
+ tot = system->getOperations().size();
+ for (int i = 0 ; i < tot ; i ++) {
+ operation = system->getOperations()[i];
+ if (operation->isReadBufferOperation()) {
+ ReadBufferOperation * read = (ReadBufferOperation*)operation;
+ WriteBufferOperation * write = read->getMemoryProxy()->getWriteBufferOperation();
+ printf("\t\"O_%p\" -> \"O_%p\" [style=dotted]\r\n", write, read);
+ }
+ }
+ tot = system->getConnections().size();
+ for (int i = 0 ; i < tot ; i ++) {
+ connection = system->getConnections()[i];
+ printf("// CONNECTION: %p.%p -> %p.%p\r\n", connection->getFromNode(), connection->getFromSocket(), connection->getToNode(), connection->getToSocket());
+ printf("\t\"O_%p\":\"OUT_%p\" -> \"O_%p\":\"IN_%p\"", connection->getFromNode(), connection->getFromSocket(), connection->getToNode(), connection->getToSocket());
+ if (!connection->isValid()) {
+ printf(" [color=red]");
+ }
+ else {
+ switch (connection->getFromSocket()->getActualDataType()) {
+ case COM_DT_VALUE:
+ printf(" [color=grey]");
+ break;
+ case COM_DT_VECTOR:
+ printf(" [color=blue]");
+ break;
+ case COM_DT_COLOR:
+ printf(" [color=orange]");
+ break;
+ case COM_DT_UNKNOWN:
+ printf(" [color=black]");
+ break;
+ }
+ }
+ printf("\r\n");
+ }
+ printf("}\r\n");
+ printf("-- END COMPOSITOR DUMP --\r\n");
+}
diff --git a/source/blender/compositor/intern/COM_ExecutionSystemHelper.h b/source/blender/compositor/intern/COM_ExecutionSystemHelper.h
new file mode 100644
index 00000000000..a72e269115e
--- /dev/null
+++ b/source/blender/compositor/intern/COM_ExecutionSystemHelper.h
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class ExecutionGroup;
+
+#ifndef _COM_ExecutionSystemHelper_h
+#define _COM_ExecutionSystemHelper_h
+
+#include "DNA_node_types.h"
+#include <vector>
+#include "COM_Node.h"
+#include "COM_SocketConnection.h"
+#include "BKE_text.h"
+#include "COM_ExecutionGroup.h"
+
+using namespace std;
+
+/**
+ *
+ */
+class ExecutionSystemHelper {
+
+public:
+
+ /**
+ * @brief add an bNodeTree to the nodes list and connections
+ * @param system Execution system
+ * @param nodes_start Starting index in the system's nodes list for nodes in this tree.
+ * @param tree bNodeTree to add
+ * @return Node representing the "Compositor node" of the maintree. or NULL when a subtree is added
+ */
+ static Node *addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree * tree);
+
+ /**
+ * @brief add an editor node to the system.
+ * this node is converted to a Node instance.
+ * and the converted node is returned
+ *
+ * @param bNode node to add
+ * @return Node that represents the bNode or null when not able to convert.
+ */
+ static Node *addNode(vector<Node*>& nodes, bNode *bNode);
+
+ /**
+ * @brief Add a Node to a list
+ *
+ * @param nodes the list where the node needs to be added to
+ * @param node the node to be added
+ */
+ static void addNode(vector<Node*>& nodes, Node *node);
+
+ /**
+ * @brief Add an operation to the operation list
+ *
+ * The id of the operation is updated.
+ *
+ * @param operations the list where the operation need to be added to
+ * @param operation the operation to add
+ */
+ static void addOperation(vector<NodeOperation*> &operations, NodeOperation *operation);
+
+ /**
+ * @brief Add an ExecutionGroup to a list
+ *
+ * The id of the ExecutionGroup is updated.
+ *
+ * @param executionGroups the list where the executionGroup need to be added to
+ * @param executionGroup the ExecutionGroup to add
+ */
+ static void addExecutionGroup(vector<ExecutionGroup*>& executionGroups, ExecutionGroup *executionGroup);
+
+ /**
+ * Find all Node Operations that needs to be executed.
+ * @param rendering
+ * the rendering parameter will tell what type of execution we are doing
+ * FALSE is editing, TRUE is rendering
+ */
+ static void findOutputNodeOperations(vector<NodeOperation*>* result, vector<NodeOperation*>& operations , bool rendering);
+
+ /**
+ * @brief add a bNodeLink to the list of links
+ * the bNodeLink will be wrapped in a SocketConnection
+ *
+ * @note Cyclic links will be ignored
+ *
+ * @param node_range list of possible nodes for lookup.
+ * @param links list of links to add the bNodeLink to
+ * @param bNodeLink the link to be added
+ * @return the created SocketConnection or NULL
+ */
+ static SocketConnection *addNodeLink(NodeRange &node_range, vector<SocketConnection*>& links, bNodeLink *bNodeLink);
+
+ /**
+ * @brief create a new SocketConnection and add to a vector of links
+ * @param links the vector of links
+ * @param fromSocket the startpoint of the connection
+ * @param toSocket the endpoint of the connection
+ * @return the new created SocketConnection
+ */
+ static SocketConnection *addLink(vector<SocketConnection*>& links, OutputSocket *fromSocket, InputSocket *toSocket);
+
+ /**
+ * @brief dumps the content of the execution system to standard out
+ * @param system the execution system to dump
+ */
+ static void debugDump(ExecutionSystem *system);
+};
+#endif
diff --git a/source/blender/compositor/intern/COM_InputSocket.cpp b/source/blender/compositor/intern/COM_InputSocket.cpp
new file mode 100644
index 00000000000..881aa58ec6b
--- /dev/null
+++ b/source/blender/compositor/intern/COM_InputSocket.cpp
@@ -0,0 +1,246 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Socket.h"
+#include "COM_Node.h"
+#include "COM_SocketConnection.h"
+#include "COM_ExecutionSystem.h"
+
+InputSocket::InputSocket(DataType datatype) :Socket(datatype)
+{
+ this->connection = NULL;
+ this->resizeMode = COM_SC_CENTER;
+}
+InputSocket::InputSocket(DataType datatype, InputSocketResizeMode resizeMode) :Socket(datatype)
+{
+ this->connection = NULL;
+ this->resizeMode = resizeMode;
+}
+
+InputSocket::InputSocket(InputSocket *from) :Socket(from->getDataType())
+{
+ this->connection = NULL;
+ this->resizeMode = from->getResizeMode();
+}
+
+int InputSocket::isInputSocket() const { return true; }
+const int InputSocket::isConnected() const { return this->connection != NULL; }
+
+void InputSocket::setConnection(SocketConnection *connection)
+{
+ this->connection = connection;
+}
+SocketConnection *InputSocket::getConnection()
+{
+ return this->connection;
+}
+
+void InputSocket::determineResolution(unsigned int resolution[],unsigned int preferredResolution[])
+{
+ if (this->isConnected()) {
+ this->connection->getFromSocket()->determineResolution(resolution, preferredResolution);
+ }
+ else {
+ return;
+ }
+}
+
+DataType InputSocket::convertToSupportedDataType(DataType datatype)
+{
+ int supportedDataTypes = getDataType();
+ if (supportedDataTypes&datatype) {
+ return datatype;
+ }
+ bool candoValue = supportedDataTypes&COM_DT_VALUE;
+ bool candoVector = supportedDataTypes&COM_DT_VECTOR;
+ bool candoColor = supportedDataTypes&COM_DT_COLOR;
+
+ if (datatype == COM_DT_VALUE) {
+ if (candoColor) {
+ return COM_DT_COLOR;
+ }
+ else if (candoVector) {
+ return COM_DT_VECTOR;
+ }
+ }
+ else if (datatype == COM_DT_VECTOR) {
+ if (candoColor) {
+ return COM_DT_COLOR;
+ }
+ else if (candoValue) {
+ return COM_DT_VALUE;
+ }
+ }
+ else if (datatype == COM_DT_COLOR) {
+ if (candoVector) {
+ return COM_DT_VECTOR;
+ }
+ else if (candoValue) {
+ return COM_DT_VALUE;
+ }
+ }
+ return this->getDataType();
+}
+
+void InputSocket::determineActualDataType()
+{
+ /// @note: this method is only called for inputsocket that are not connected.
+ /// @note: passes COM_DT_COLOR, the convertToSupportedDataType converts this to a capable DataType
+ this->setActualDataType(this->convertToSupportedDataType(COM_DT_COLOR));
+ #if 0 // XXX TODO check for proxy node and use output data type?
+ if (this->getGroupOutputSocket()) {
+ if (!this->isInsideOfGroupNode()) {
+ this->getGroupOutputSocket()->determineActualDataType();
+ }
+ }
+ #endif
+}
+
+void InputSocket::notifyActualInputType(DataType datatype)
+{
+ DataType supportedDataType = convertToSupportedDataType(datatype);
+ this->setActualDataType(supportedDataType);
+ this->fireActualDataTypeSet();
+}
+
+void InputSocket::fireActualDataTypeSet()
+{
+ this->getNode()->notifyActualDataTypeSet(this, this->getActualDataType());
+}
+void InputSocket::relinkConnections(InputSocket *relinkToSocket)
+{
+ this->relinkConnections(relinkToSocket, false, -1, NULL);
+}
+
+void InputSocket::relinkConnections(InputSocket *relinkToSocket, bool autoconnect, int editorNodeInputSocketIndex, bool duplicate, ExecutionSystem *graph)
+{
+ if (!duplicate) {
+ this->relinkConnections(relinkToSocket, autoconnect, editorNodeInputSocketIndex, graph);
+ }
+ else {
+ if (!this->isConnected() && autoconnect) {
+ Node *node = (Node*)this->getNode();
+ switch (this->getActualDataType()) {
+ case COM_DT_UNKNOWN:
+ case COM_DT_COLOR:
+ node->addSetColorOperation(graph, relinkToSocket, editorNodeInputSocketIndex);
+ break;
+ case COM_DT_VECTOR:
+ node->addSetVectorOperation(graph, relinkToSocket, editorNodeInputSocketIndex);
+ break;
+ case COM_DT_VALUE:
+ node->addSetValueOperation(graph, relinkToSocket, editorNodeInputSocketIndex);
+ break;
+ }
+ return;
+ }
+ SocketConnection * newConnection = new SocketConnection();
+ OutputSocket * fromSocket = this->getConnection()->getFromSocket();
+ newConnection->setToSocket(relinkToSocket);
+ newConnection->setFromSocket(fromSocket);
+ relinkToSocket->setConnection(newConnection);
+ fromSocket->addConnection(newConnection);
+ graph->addSocketConnection(newConnection);
+ }
+}
+
+void InputSocket::relinkConnections(InputSocket *relinkToSocket, bool autoconnect, int editorNodeInputSocketIndex, ExecutionSystem *graph)
+{
+ if (!isConnected()) {
+ if (autoconnect) {
+ Node *node = (Node*)this->getNode();
+ switch (this->getActualDataType()) {
+ case COM_DT_UNKNOWN:
+ case COM_DT_COLOR:
+ node->addSetColorOperation(graph, relinkToSocket, editorNodeInputSocketIndex);
+ break;
+ case COM_DT_VECTOR:
+ node->addSetVectorOperation(graph, relinkToSocket, editorNodeInputSocketIndex);
+ break;
+ case COM_DT_VALUE:
+ node->addSetValueOperation(graph, relinkToSocket, editorNodeInputSocketIndex);
+ break;
+ }
+ }
+ return;
+ }
+ SocketConnection *connection = this->getConnection();
+ connection->setToSocket(relinkToSocket);
+ relinkToSocket->setConnection(connection);
+ this->setConnection(NULL);
+}
+
+const ChannelInfo *InputSocket::getChannelInfo(const int channelnumber)
+{
+ if (this->isConnected() && this->connection->getFromSocket()) {
+ return this->connection->getFromSocket()->getChannelInfo(channelnumber);
+ }
+ else {
+ return NULL;
+ }
+}
+
+bool InputSocket::isStatic()
+{
+ if (isConnected()) {
+ NodeBase *node = this->getConnection()->getFromNode();
+ if (node) {
+ return node->isStatic();
+ }
+ }
+ return true;
+}
+SocketReader *InputSocket::getReader()
+{
+ return this->getOperation();
+}
+
+NodeOperation *InputSocket::getOperation() const
+{
+ if (isConnected()) {
+ return (NodeOperation*)this->connection->getFromSocket()->getNode();
+ }
+ else {
+ return NULL;
+ }
+}
+
+float *InputSocket::getStaticValues()
+{
+ /* XXX only works for socket types with actual float input values.
+ * currently all compositor socket types (value, rgba, vector) support this.
+ */
+ bNodeSocket *b_socket = this->getbNodeSocket();
+ static float default_null = 0.0f;
+
+ switch (this->getDataType()) {
+ case COM_DT_VALUE:
+ return &((bNodeSocketValueFloat*)b_socket->default_value)->value;
+ case COM_DT_COLOR:
+ return ((bNodeSocketValueRGBA*)b_socket->default_value)->value;
+ case COM_DT_VECTOR:
+ return ((bNodeSocketValueVector*)b_socket->default_value)->value;
+ default:
+ /* XXX this should never happen, just added to please the compiler */
+ return &default_null;
+ }
+}
diff --git a/source/blender/compositor/intern/COM_InputSocket.h b/source/blender/compositor/intern/COM_InputSocket.h
new file mode 100644
index 00000000000..e01793317a5
--- /dev/null
+++ b/source/blender/compositor/intern/COM_InputSocket.h
@@ -0,0 +1,162 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_InputSocket_h
+#define _COM_InputSocket_h
+
+#include <vector>
+#include "COM_Socket.h"
+#include "COM_SocketReader.h"
+
+using namespace std;
+class SocketConnection;
+class Node;
+class ExecutionSystem;
+class OutputSocket;
+class ChannelInfo;
+class NodeOperation;
+
+/**
+ * @brief Resize modes of inputsockets
+ * How are the input and working resolutions matched
+ * @ingroup Model
+ */
+typedef enum InputSocketResizeMode {
+ /** @brief Center the input image to the center of the working area of the node, no resizing occurs */
+ COM_SC_CENTER = NS_CR_CENTER,
+ /** @brief The bottom left of the input image is the bottom left of the working area of the node, no resizing occurs */
+ COM_SC_NO_RESIZE = NS_CR_NONE,
+ /** @brief Fit the width of the input image to the width of the working area of the node */
+ COM_SC_FIT_WIDTH = NS_CR_FIT_WIDTH,
+ /** @brief Fit the height of the input image to the height of the working area of the node */
+ COM_SC_FIT_HEIGHT = NS_CR_FIT_HEIGHT,
+ /** @brief Fit the width or the height of the input image to the width or height of the working area of the node, image will be larger than the working area */
+ COM_SC_FIT = NS_CR_FIT,
+ /** @brief Fit the width and the height of the input image to the width and height of the working area of the node, image will be equally larger than the working area */
+ COM_SC_STRETCH = NS_CR_STRETCH
+} InputSocketResizeMode;
+
+/**
+ * @brief InputSocket are sockets that can receive data/input
+ * @ingroup Model
+ */
+class InputSocket : public Socket {
+private:
+ /**
+ * @brief connection connected to this InputSocket.
+ * An input socket can only have a single connection
+ */
+ SocketConnection *connection;
+
+ /**
+ * @brief resize mode of this socket
+ */
+ InputSocketResizeMode resizeMode;
+
+
+ /**
+ * @brief convert a data type to a by the socket supported data type.
+ *
+ * @param datatype the datatype that needs to be checked
+ * @section data-conversion
+ */
+ DataType convertToSupportedDataType(DataType datatype);
+
+ /**
+ * @brief called when the ActualDataType is set. notifies other parties
+ */
+ void fireActualDataTypeSet();
+
+public:
+ InputSocket(DataType datatype);
+ InputSocket(DataType datatype, InputSocketResizeMode resizeMode);
+ InputSocket(InputSocket *from);
+
+ void setConnection(SocketConnection *connection);
+ SocketConnection *getConnection();
+
+ const int isConnected() const;
+ int isInputSocket() const;
+
+ /**
+ * @brief determine the resolution of this data going through this socket
+ * @param resolution the result of this operation
+ * @param preferredResolution the preferrable resolution as no resolution could be determined
+ */
+ void determineResolution(unsigned int resolution[],unsigned int preferredResolution[]);
+
+ void determineActualDataType();
+
+ /**
+ * @brief Notifies the Input of the data type (via a SocketConnection)
+ * @param datatype the datatype to evaluate
+ */
+ void notifyActualInputType(DataType datatype);
+
+ /**
+ * @brief move all connections of this input socket to another socket
+ * only use this method when already checked the availability of a SocketConnection
+ * @param relinkToSocket the socket to move to connections to
+ */
+ void relinkConnections(InputSocket *relinkToSocket);
+
+ /**
+ * @brief move all connections of this input socket to another socket
+ * @param relinkToSocket the socket to move to connections to
+ * @param autoconnect will a set operation be added when no connections exist
+ * @param editorNodeInputSocketIndex index of the socket number of the bNode (used to retrieve the value for autoconnection)
+ * @param system ExecutionSystem to update to
+ */
+ void relinkConnections(InputSocket *relinkToSocket, bool autoconnect, int editorNodeInputSocketIndex, ExecutionSystem *system);
+
+ /**
+ * @brief move all connections of this input socket to another socket
+ * @param relinkToSocket the socket to move to connections to
+ * @param autoconnect will a set operation be added when no connections exist
+ * @param editorNodeInputSocketIndex index of the socket number of the bNode (used to retrieve the value for autoconnection)
+ * @param duplicate instead of move do a copy of the connection.
+ * @param system ExecutionSystem to update to
+ */
+ void relinkConnections(InputSocket *relinkToSocket, bool autoconnect, int editorNodeInputSocketIndex, bool duplicate, ExecutionSystem *system);
+
+ /**
+ * @brief set the resize mode
+ * @param resizeMode the new resize mode.
+ */
+ void setResizeMode(InputSocketResizeMode resizeMode) {this->resizeMode = resizeMode;}
+
+ /**
+ * @brief get the resize mode of this socket
+ * @return InputSocketResizeMode
+ */
+ InputSocketResizeMode getResizeMode() const {return this->resizeMode;}
+
+ const ChannelInfo *getChannelInfo(const int channelnumber);
+
+ bool isStatic();
+
+ float *getStaticValues();
+ SocketReader *getReader();
+ NodeOperation *getOperation() const;
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_MemoryBuffer.cpp b/source/blender/compositor/intern/COM_MemoryBuffer.cpp
new file mode 100644
index 00000000000..19c2c96a8f2
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryBuffer.cpp
@@ -0,0 +1,353 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MemoryBuffer.h"
+#include "MEM_guardedalloc.h"
+#include "BLI_math.h"
+#include "BKE_global.h"
+
+unsigned int MemoryBuffer::determineBufferSize()
+{
+ return getWidth() * getHeight();
+}
+
+int MemoryBuffer::getWidth() const
+{
+ return this->rect.xmax-this->rect.xmin;
+}
+int MemoryBuffer::getHeight() const
+{
+ return this->rect.ymax-this->rect.ymin;
+}
+
+MemoryBuffer::MemoryBuffer(MemoryProxy * memoryProxy, unsigned int chunkNumber, rcti *rect)
+{
+ BLI_init_rcti(&this->rect, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
+ this->memoryProxy = memoryProxy;
+ this->chunkNumber = chunkNumber;
+ this->buffer = (float*)MEM_mallocN(sizeof(float)*determineBufferSize()*4, "COM_MemoryBuffer");
+ this->state = COM_MB_ALLOCATED;
+ this->datatype = COM_DT_COLOR;
+ this->chunkWidth = this->rect.xmax - this->rect.xmin;
+}
+
+MemoryBuffer::MemoryBuffer(MemoryProxy * memoryProxy, rcti *rect)
+{
+ BLI_init_rcti(&this->rect, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
+ this->memoryProxy = memoryProxy;
+ this->chunkNumber = -1;
+ this->buffer = (float*)MEM_mallocN(sizeof(float)*determineBufferSize()*4, "COM_MemoryBuffer");
+ this->state = COM_MB_TEMPORARILY;
+ this->datatype = COM_DT_COLOR;
+ this->chunkWidth = this->rect.xmax - this->rect.xmin;
+}
+MemoryBuffer *MemoryBuffer::duplicate()
+{
+ MemoryBuffer *result = new MemoryBuffer(this->memoryProxy, &this->rect);
+ memcpy(result->buffer, this->buffer, this->determineBufferSize()*4*sizeof(float));
+ return result;
+}
+void MemoryBuffer::clear()
+{
+ memset(this->buffer, 0, this->determineBufferSize()*4*sizeof(float));
+}
+
+float *MemoryBuffer::convertToValueBuffer()
+{
+ int size = this->determineBufferSize();
+ int i;
+ int offset4;
+ float *result = new float[size];
+ for (i = 0, offset4 = 0 ; i < size ; i ++, offset4 +=4) {
+ result[i] = this->buffer[offset4];
+ }
+
+ return result;
+}
+
+MemoryBuffer::~MemoryBuffer()
+{
+ if (this->buffer) {
+ MEM_freeN(this->buffer);
+ this->buffer = NULL;
+ }
+}
+
+void MemoryBuffer::copyContentFrom(MemoryBuffer *otherBuffer)
+{
+ if (!otherBuffer) {
+ return;
+ }
+ unsigned int otherY;
+ unsigned int minX = max(this->rect.xmin, otherBuffer->rect.xmin);
+ unsigned int maxX = min(this->rect.xmax, otherBuffer->rect.xmax);
+ unsigned int minY = max(this->rect.ymin, otherBuffer->rect.ymin);
+ unsigned int maxY = min(this->rect.ymax, otherBuffer->rect.ymax);
+ int offset;
+ int otherOffset;
+
+
+ for (otherY = minY ; otherY<maxY ; otherY ++) {
+ otherOffset = ((otherY-otherBuffer->rect.ymin) * otherBuffer->chunkWidth + minX-otherBuffer->rect.xmin)*4;
+ offset = ((otherY - this->rect.ymin) * this->chunkWidth + minX-this->rect.xmin)*4;
+ memcpy(&this->buffer[offset], &otherBuffer->buffer[otherOffset], (maxX-minX) * 4*sizeof(float));
+ }
+}
+
+void MemoryBuffer::read(float *result, int x, int y)
+{
+ if (x>=this->rect.xmin && x < this->rect.xmax &&
+ y>=this->rect.ymin && y < this->rect.ymax) {
+ int dx = x-this->rect.xmin;
+ int dy = y-this->rect.ymin;
+ int offset = (this->chunkWidth*dy+dx)*4;
+ result[0] = this->buffer[offset];
+ result[1] = this->buffer[offset+1];
+ result[2] = this->buffer[offset+2];
+ result[3] = this->buffer[offset+3];
+ }
+ else {
+ result[0] = 0.0f;
+ result[1] = 0.0f;
+ result[2] = 0.0f;
+ result[3] = 0.0f;
+ }
+}
+void MemoryBuffer::writePixel(int x, int y, float color[4])
+{
+ if (x>=this->rect.xmin && x < this->rect.xmax &&
+ y>=this->rect.ymin && y < this->rect.ymax) {
+ int offset = (this->chunkWidth*y+x)*4;
+ this->buffer[offset] = color[0];
+ this->buffer[offset+1] = color[1];
+ this->buffer[offset+2] = color[2];
+ this->buffer[offset+3] = color[3];
+ }
+}
+
+void MemoryBuffer::readCubic(float *result, float x, float y)
+{
+ int x1 = floor(x);
+ int x2 = x1 + 1;
+ int y1 = floor(y);
+ int y2 = y1 + 1;
+
+ float valuex = x - x1;
+ float valuey = y - y1;
+ float mvaluex = 1.0 - valuex;
+ float mvaluey = 1.0 - valuey;
+
+ float color1[4];
+ float color2[4];
+ float color3[4];
+ float color4[4];
+
+ read(color1, x1, y1);
+ read(color2, x1, y2);
+ read(color3, x2, y1);
+ read(color4, x2, y2);
+
+ color1[0] = color1[0]*mvaluey + color2[0]*valuey;
+ color1[1] = color1[1]*mvaluey + color2[1]*valuey;
+ color1[2] = color1[2]*mvaluey + color2[2]*valuey;
+ color1[3] = color1[3]*mvaluey + color2[3]*valuey;
+
+ color3[0] = color3[0]*mvaluey + color4[0]*valuey;
+ color3[1] = color3[1]*mvaluey + color4[1]*valuey;
+ color3[2] = color3[2]*mvaluey + color4[2]*valuey;
+ color3[3] = color3[3]*mvaluey + color4[3]*valuey;
+
+ result[0] = color1[0]*mvaluex + color3[0]*valuex;
+ result[1] = color1[1]*mvaluex + color3[1]*valuex;
+ result[2] = color1[2]*mvaluex + color3[2]*valuex;
+ result[3] = color1[3]*mvaluex + color3[3]*valuex;
+}
+
+
+// table of (exp(ar) - exp(a)) / (1 - exp(a)) for r in range [0, 1] and a = -2
+// used instead of actual gaussian, otherwise at high texture magnifications circular artifacts are visible
+#define EWA_MAXIDX 255
+static float EWA_WTS[EWA_MAXIDX + 1] =
+{ 1.f, 0.990965f, 0.982f, 0.973105f, 0.96428f, 0.955524f, 0.946836f, 0.938216f, 0.929664f,
+ 0.921178f, 0.912759f, 0.904405f, 0.896117f, 0.887893f, 0.879734f, 0.871638f, 0.863605f,
+ 0.855636f, 0.847728f, 0.839883f, 0.832098f, 0.824375f, 0.816712f, 0.809108f, 0.801564f,
+ 0.794079f, 0.786653f, 0.779284f, 0.771974f, 0.76472f, 0.757523f, 0.750382f, 0.743297f,
+ 0.736267f, 0.729292f, 0.722372f, 0.715505f, 0.708693f, 0.701933f, 0.695227f, 0.688572f,
+ 0.68197f, 0.67542f, 0.66892f, 0.662471f, 0.656073f, 0.649725f, 0.643426f, 0.637176f,
+ 0.630976f, 0.624824f, 0.618719f, 0.612663f, 0.606654f, 0.600691f, 0.594776f, 0.588906f,
+ 0.583083f, 0.577305f, 0.571572f, 0.565883f, 0.56024f, 0.55464f, 0.549084f, 0.543572f,
+ 0.538102f, 0.532676f, 0.527291f, 0.521949f, 0.516649f, 0.511389f, 0.506171f, 0.500994f,
+ 0.495857f, 0.490761f, 0.485704f, 0.480687f, 0.475709f, 0.470769f, 0.465869f, 0.461006f,
+ 0.456182f, 0.451395f, 0.446646f, 0.441934f, 0.437258f, 0.432619f, 0.428017f, 0.42345f,
+ 0.418919f, 0.414424f, 0.409963f, 0.405538f, 0.401147f, 0.39679f, 0.392467f, 0.388178f,
+ 0.383923f, 0.379701f, 0.375511f, 0.371355f, 0.367231f, 0.363139f, 0.359079f, 0.355051f,
+ 0.351055f, 0.347089f, 0.343155f, 0.339251f, 0.335378f, 0.331535f, 0.327722f, 0.323939f,
+ 0.320186f, 0.316461f, 0.312766f, 0.3091f, 0.305462f, 0.301853f, 0.298272f, 0.294719f,
+ 0.291194f, 0.287696f, 0.284226f, 0.280782f, 0.277366f, 0.273976f, 0.270613f, 0.267276f,
+ 0.263965f, 0.26068f, 0.257421f, 0.254187f, 0.250979f, 0.247795f, 0.244636f, 0.241502f,
+ 0.238393f, 0.235308f, 0.232246f, 0.229209f, 0.226196f, 0.223206f, 0.220239f, 0.217296f,
+ 0.214375f, 0.211478f, 0.208603f, 0.20575f, 0.20292f, 0.200112f, 0.197326f, 0.194562f,
+ 0.191819f, 0.189097f, 0.186397f, 0.183718f, 0.18106f, 0.178423f, 0.175806f, 0.17321f,
+ 0.170634f, 0.168078f, 0.165542f, 0.163026f, 0.16053f, 0.158053f, 0.155595f, 0.153157f,
+ 0.150738f, 0.148337f, 0.145955f, 0.143592f, 0.141248f, 0.138921f, 0.136613f, 0.134323f,
+ 0.132051f, 0.129797f, 0.12756f, 0.125341f, 0.123139f, 0.120954f, 0.118786f, 0.116635f,
+ 0.114501f, 0.112384f, 0.110283f, 0.108199f, 0.106131f, 0.104079f, 0.102043f, 0.100023f,
+ 0.0980186f, 0.09603f, 0.094057f, 0.0920994f, 0.0901571f, 0.08823f, 0.0863179f, 0.0844208f,
+ 0.0825384f, 0.0806708f, 0.0788178f, 0.0769792f, 0.0751551f, 0.0733451f, 0.0715493f, 0.0697676f,
+ 0.0679997f, 0.0662457f, 0.0645054f, 0.0627786f, 0.0610654f, 0.0593655f, 0.0576789f, 0.0560055f,
+ 0.0543452f, 0.0526979f, 0.0510634f, 0.0494416f, 0.0478326f, 0.0462361f, 0.0446521f, 0.0430805f,
+ 0.0415211f, 0.039974f, 0.0384389f, 0.0369158f, 0.0354046f, 0.0339052f, 0.0324175f, 0.0309415f,
+ 0.029477f, 0.0280239f, 0.0265822f, 0.0251517f, 0.0237324f, 0.0223242f, 0.020927f, 0.0195408f,
+ 0.0181653f, 0.0168006f, 0.0154466f, 0.0141031f, 0.0127701f, 0.0114476f, 0.0101354f, 0.00883339f,
+ 0.00754159f, 0.00625989f, 0.00498819f, 0.00372644f, 0.00247454f, 0.00123242f, 0.f
+};
+
+static void radangle2imp(float a2, float b2, float th, float *A, float *B, float *C, float *F)
+{
+ float ct2 = cosf(th);
+ const float st2 = 1.f - ct2*ct2; // <- sin(th)^2
+ ct2 *= ct2;
+ *A = a2*st2 + b2*ct2;
+ *B = (b2 - a2)*sinf(2.f*th);
+ *C = a2*ct2 + b2*st2;
+ *F = a2*b2;
+}
+
+// all tests here are done to make sure possible overflows are hopefully minimized
+static void imp2radangle(float A, float B, float C, float F, float *a, float *b, float *th, float *ecc)
+{
+ if (F <= 1e-5f) { // use arbitrary major radius, zero minor, infinite eccentricity
+ *a = sqrtf(A > C ? A : C);
+ *b = 0.f;
+ *ecc = 1e10f;
+ *th = 0.5f*(atan2f(B, A - C) + (float)M_PI);
+ }
+ else {
+ const float AmC = A - C, ApC = A + C, F2 = F*2.f;
+ const float r = sqrtf(AmC*AmC + B*B);
+ float d = ApC - r;
+ *a = (d <= 0.f) ? sqrtf(A > C ? A : C) : sqrtf(F2 / d);
+ d = ApC + r;
+ if (d <= 0.f) {
+ *b = 0.f;
+ *ecc = 1e10f;
+ }
+ else {
+ *b = sqrtf(F2 / d);
+ *ecc = *a / *b;
+ }
+ // incr theta by 0.5*pi (angle of major axis)
+ *th = 0.5f*(atan2f(B, AmC) + (float)M_PI);
+ }
+}
+
+float clipuv(float x, float limit)
+{
+ x = (x < 0) ? 0 : ((x >= limit) ? (limit - 1) : x);
+ return x;
+}
+
+void MemoryBuffer::readEWA(float *result, float fx, float fy, float dx, float dy)
+{
+ int width = this->getWidth(), height = this->getHeight();
+
+ // scaling dxt/dyt by full resolution can cause overflow because of huge A/B/C and esp. F values,
+ // scaling by aspect ratio alone does the opposite, so try something in between instead...
+ const float ff2 = width, ff = sqrtf(ff2), q = height / ff;
+ const float Ux = dx*ff, Vx = dx*q, Uy = dy*ff, Vy = dy*q;
+ float A = Vx*Vx + Vy*Vy;
+ float B = -2.f*(Ux*Vx + Uy*Vy);
+ float C = Ux*Ux + Uy*Uy;
+ float F = A*C - B*B*0.25f;
+ float a, b, th, ecc, a2, b2, ue, ve, U0, V0, DDQ, U, ac1, ac2, BU, d;
+ int u, v, u1, u2, v1, v2;
+ // The so-called 'high' quality ewa method simply adds a constant of 1 to both A & C,
+ // so the ellipse always covers at least some texels. But since the filter is now always larger,
+ // it also means that everywhere else it's also more blurry then ideally should be the case.
+ // So instead here the ellipse radii are modified instead whenever either is too low.
+ // Use a different radius based on interpolation switch, just enough to anti-alias when interpolation is off,
+ // and slightly larger to make result a bit smoother than bilinear interpolation when interpolation is on
+ // (minimum values: const float rmin = intpol ? 1.f : 0.5f;)
+ const float rmin = 1.5625f/ff2;
+ imp2radangle(A, B, C, F, &a, &b, &th, &ecc);
+ if ((b2 = b*b) < rmin) {
+ if ((a2 = a*a) < rmin) {
+ B = 0.f;
+ A = C = rmin;
+ F = A*C;
+ }
+ else {
+ b2 = rmin;
+ radangle2imp(a2, b2, th, &A, &B, &C, &F);
+ }
+ }
+
+ ue = ff*sqrtf(C);
+ ve = ff*sqrtf(A);
+ d = (float)(EWA_MAXIDX + 1) / (F*ff2);
+ A *= d;
+ B *= d;
+ C *= d;
+
+ U0 = fx;
+ V0 = fy;
+ u1 = (int)(floorf(U0 - ue));
+ u2 = (int)(ceilf(U0 + ue));
+ v1 = (int)(floorf(V0 - ve));
+ v2 = (int)(ceilf(V0 + ve));
+ U0 -= 0.5f;
+ V0 -= 0.5f;
+ DDQ = 2.f*A;
+ U = u1 - U0;
+ ac1 = A*(2.f*U + 1.f);
+ ac2 = A*U*U;
+ BU = B*U;
+
+ d = result[0] = result[1] = result[2] = result[3] = 0.f;
+ for (v=v1; v<=v2; ++v) {
+ const float V = v - V0;
+ float DQ = ac1 + B*V;
+ float Q = (C*V + BU)*V + ac2;
+ for (u=u1; u<=u2; ++u) {
+ if (Q < (float)(EWA_MAXIDX + 1)) {
+ float tc[4];
+ const float wt = EWA_WTS[(Q < 0.f) ? 0 : (unsigned int)Q];
+ read(tc, clipuv(u, width), clipuv(v, height));
+ result[0] += tc[0]*wt;
+ result[1] += tc[1]*wt;
+ result[2] += tc[2]*wt;
+ result[3] += result[3] ? tc[3]*wt : 0.f;
+ d += wt;
+ }
+ Q += DQ;
+ DQ += DDQ;
+ }
+ }
+
+ // d should hopefully never be zero anymore
+ d = 1.f/d;
+ result[0] *= d;
+ result[1] *= d;
+ result[2] *= d;
+ // clipping can be ignored if alpha used, texr->ta already includes filtered edge
+ result[3] = result[3] ? result[3] *d : 1.f;
+}
diff --git a/source/blender/compositor/intern/COM_MemoryBuffer.h b/source/blender/compositor/intern/COM_MemoryBuffer.h
new file mode 100644
index 00000000000..bfc18424570
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryBuffer.h
@@ -0,0 +1,170 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class MemoryBuffer;
+
+#ifndef _COM_MemoryBuffer_h_
+#define _COM_MemoryBuffer_h_
+
+#include "COM_ExecutionGroup.h"
+#include "BLI_rect.h"
+#include "COM_MemoryProxy.h"
+extern "C" {
+ #include "BLI_threads.h"
+}
+#include <vector>
+
+/**
+ * @brief state of a memory buffer
+ * @ingroup Memory
+ */
+typedef enum MemoryBufferState {
+ /** @brief memory has been allocated on creator device and CPU machine, but kernel has not been executed */
+ COM_MB_ALLOCATED = 1,
+ /** @brief memory is available for use, content has been created */
+ COM_MB_AVAILABLE = 2,
+ /** @brief chunk is consolidated from other chunks. special state.*/
+ COM_MB_TEMPORARILY = 6
+} MemoryBufferState;
+
+class MemoryProxy;
+
+/**
+ * @brief a MemoryBuffer contains access to the data of a chunk
+ */
+class MemoryBuffer {
+private:
+ /**
+ * @brief proxy of the memory (same for all chunks in the same buffer)
+ */
+ MemoryProxy * memoryProxy;
+
+ /**
+ * @brief the type of buffer COM_DT_VALUE, COM_DT_VECTOR, COM_DT_COLOR
+ */
+ DataType datatype;
+
+
+ /**
+ * @brief region of this buffer inside reative to the MemoryProxy
+ */
+ rcti rect;
+
+ /**
+ * brief refers to the chunknumber within the executiongroup where related to the MemoryProxy
+ * @see memoryProxy
+ */
+ unsigned int chunkNumber;
+
+ /**
+ * @brief width of the chunk
+ */
+ unsigned int chunkWidth;
+
+ /**
+ * @brief state of the buffer
+ */
+ MemoryBufferState state;
+
+ /**
+ * @brief the actual float buffer/data
+ */
+ float *buffer;
+
+public:
+ /**
+ * @brief construct new MemoryBuffer for a chunk
+ */
+ MemoryBuffer(MemoryProxy *memoryProxy, unsigned int chunkNumber, rcti *rect);
+
+ /**
+ * @brief construct new temporarily MemoryBuffer for an area
+ */
+ MemoryBuffer(MemoryProxy *memoryProxy, rcti *rect);
+
+ /**
+ * @brief destructor
+ */
+ ~MemoryBuffer();
+
+ /**
+ * @brief read the ChunkNumber of this MemoryBuffer
+ */
+ unsigned int getChunkNumber() {return this->chunkNumber;}
+
+ /**
+ * @brief get the data of this MemoryBuffer
+ * @note buffer should already be available in memory
+ */
+ float *getBuffer() {return this->buffer;}
+
+ /**
+ * @brief after execution the state will be set to available by calling this method
+ */
+ void setCreatedState() {
+ this->state = COM_MB_AVAILABLE;
+ }
+
+ void read(float *result, int x, int y);
+ void writePixel(int x, int y, float color[4]);
+ void readCubic(float *result, float x, float y);
+ void readEWA(float *result, float fx, float fy, float dx, float dy);
+
+ /**
+ * @brief is this MemoryBuffer a temporarily buffer (based on an area, not on a chunk)
+ */
+ inline const bool isTemporarily() const {return this->state == COM_MB_TEMPORARILY;}
+
+ /**
+ * @brief add the content from otherBuffer to this MemoryBuffer
+ * @param otherBuffer source buffer
+ */
+ void copyContentFrom(MemoryBuffer *otherBuffer);
+
+ /**
+ * @brief get the rect of this MemoryBuffer
+ */
+ rcti *getRect() {return &this->rect;}
+
+ /**
+ * @brief get the width of this MemoryBuffer
+ */
+ int getWidth() const;
+
+ /**
+ * @brief get the height of this MemoryBuffer
+ */
+ int getHeight() const;
+
+ /**
+ * @brief clear the buffer. Make all pixels black transparant.
+ */
+ void clear();
+
+ MemoryBuffer *duplicate();
+
+ float *convertToValueBuffer();
+private:
+ unsigned int determineBufferSize();
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_MemoryManager.cpp b/source/blender/compositor/intern/COM_MemoryManager.cpp
new file mode 100644
index 00000000000..4f97b0b1e80
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryManager.cpp
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MemoryManager.h"
+#include "BLI_threads.h"
+#include <stdio.h>
+#include "COM_defines.h"
+
+vector<MemoryBuffer*> buffers;
+
+ThreadMutex mutex;
+
+MemoryBuffer *MemoryManager::allocateMemoryBuffer(MemoryProxy *id, unsigned int chunkNumber, rcti *rect)
+{
+ MemoryBuffer *result = new MemoryBuffer(id, chunkNumber, rect);
+ MemoryManagerState * state = MemoryManager::getState(id);
+ state->addMemoryBuffer(result);
+ BLI_mutex_lock(&mutex);
+ buffers.push_back(result);
+ BLI_mutex_unlock(&mutex);
+ return result;
+}
+
+void MemoryManager::addMemoryProxy(MemoryProxy *memoryProxy)
+{
+ MemoryManagerState * state = MemoryManager::getState(memoryProxy);
+ if (!state) {
+ state = new MemoryManagerState(memoryProxy);
+ memoryProxy->setState(state);
+ }
+}
+MemoryBuffer *MemoryManager::getMemoryBuffer(MemoryProxy *id, unsigned int chunkNumber)
+{
+ MemoryManagerState * state = MemoryManager::getState(id);
+ if (!state) {
+ return NULL;
+ }
+ MemoryBuffer *buffer = state->getMemoryBuffer(chunkNumber);
+ if (!buffer) return NULL;
+ return buffer;
+}
+
+MemoryManagerState *MemoryManager::getState(MemoryProxy *memoryProxy)
+{
+ return memoryProxy->getState();
+}
+void MemoryManager::initialize()
+{
+ BLI_mutex_init(&mutex);
+}
+void MemoryManager::clear()
+{
+ buffers.clear();
+ BLI_mutex_end(&mutex);
+}
diff --git a/source/blender/compositor/intern/COM_MemoryManager.h b/source/blender/compositor/intern/COM_MemoryManager.h
new file mode 100644
index 00000000000..6194d40d9a5
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryManager.h
@@ -0,0 +1,146 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MemoryManager_h_
+#define _COM_MemoryManager_h_
+
+#include "COM_MemoryBuffer.h"
+#include "COM_MemoryProxy.h"
+#include "COM_ExecutionGroup.h"
+#include "COM_MemoryManagerState.h"
+
+/**
+ * @page memorymanager The Memory Manager
+ * The compositor has its own MemoryManager. The goal of the MemoryManager is to manage the memory allocated by chunks.
+ * During execution new chunks will be created [MemoryManager.allocateMemoryBuffer] When calculation is finished the MemoryBuffer will get the state [MemoryBufferState.COM_MB_AVAILABLE].
+ * From now on other ExecutionGroup and NodeOperations may read from the MemoryBuffer.
+ * The MemoryManager also has the capability to save MemoryBuffer's to disk in order to free some memory.
+ *
+ * @section S_MEM Memory manager
+ * The memory manager synchronize and optimize data across devices.
+ * Only one NodeOperation running on a device is able to write to a MemoryBuffer. This MemoryBuffer is only allocated on the main-device memory (CPU).
+ * The MemoryBuffer.state will be [MemoryBufferState.COM_MB_ALLOCATED]. As soon as the chunk has been executed the state changes to [MemoryBufferState.COM_MB_AVAILABLE]. This MemoryBuffer can now be used as inputBuffer of ExecutionGroup's.
+ * When needed the MemoryBuffer will be stored to a file. This will save memory that can be used by other tiles.
+ * @subsection S_MEM_1 Step one
+ * When a chunk of an ExecutionGroup is being executed by a device, the MemoryBuffer is allocated on the CPU.
+ * <pre>
+ * Allocation of the output MemoryBuffer
+ * +----------------------------------------+
+ * | Main device (CPU) |
+ * | +----------------+ +--------------+ |
+ * | | ExecutionGroup | | MemoryBuffer | |
+ * | | | | Chunk a | |
+ * | +----------------+ +--------------+ |
+ * | |
+ * +----------------------------------------+
+ * </pre>
+ * @see MemoryManager.allocateMemoryBuffer
+ *
+ * @subsection S_MEM_2 Step two
+ * The Device will execute the ExecutionGroup. This differs per type of Device. CPUDevice will call the NodeOperation.executeRegion method of the outputnode of the ExecutionGroup.
+ * The [NodeOperation.executeRegion] writes the result to the allocated MemoryBuffer. When finished the state of the MemoryBuffer will be set to [MemoryBufferState.COM_MB_AVAILABLE].
+ * <pre>
+ * Execute a chunk and store result to the MemoryBuffer
+ * +----------------------------------------+
+ * | Main device (CPU) |
+ * | +----------------+ +--------------+ |
+ * | | ExecutionGroup | | MemoryBuffer | |
+ * | | | | Chunk a | |
+ * | +----------------+ +--------------+ |
+ * | | ^ |
+ * | +----------------+ | |
+ * | | NodeOperation |--------+ |
+ * | | | Write result |
+ * | +----------------+ |
+ * | |
+ * +----------------------------------------+
+ * </pre>
+ * @subsection S_MEM_3 Step 3
+ * Other Chunks that depend on the MemoryBuffer can now use it.
+ * When a MemoryBuffer is being used its number of users are increased. When a 'user' is finished the number of users are decreased, If a MemoryBuffer has no users, the system can decide to store the data to disk and free some memory.
+ * @see MemoryBuffer.numberOfUsers
+ * @see MemoryBuffer.saveToDisk
+ *
+ * @subsection S_MEM_CON Temporarily MemoryBuffers
+ * Nodes like blur nodes can depend on multiple MemoryBuffer of the same MemoryProxy. These multiple buffers will be consolidated temporarily to a new MemoryBuffer.
+ * When execution is finished this temporarily memory buffer is deallicated.
+ * <pre>
+ * Original MemoryBuffer's Temporarily
+ * +-------+ +-------+ MemoryBuffer
+ * | MB A | | MB B | +-------+-------+
+ * +-------+ +-------+ | MB A | MB B |
+ * ==> +-------+-------+
+ * +-------+ +-------+ | MB C | MB D |
+ * | MB C | | MB D | +-------+-------+
+ * +-------+ +-------+
+ * </pre>
+ * @see ExecutionGroup.constructConsolidatedMemoryBuffer constructs the temporarily MemoryBuffer
+ * @see MemoryBuffer.state state is MemoryManagerState.COM_MB_TEMPORARILY
+ * @see ExecutionGroup.finalizeChunkExecution deallocate the temporarily MemoryBuffer
+ * @note this MemoryBuffer is not managed by the MemoryManager
+ */
+
+/**
+ * @brief the memory manager for the compostor
+ * @ingroup Memory
+ */
+class MemoryManager {
+private:
+ /**
+ * @brief retrieve the state of a certain MemoryProxy;
+ * @param memoryProxy the MemoryProxy to retrieve the state from
+ */
+ static MemoryManagerState *getState(MemoryProxy *memoryProxy);
+public:
+ /**
+ * @brief allocate a memory buffer
+ * @param memoryProxy the MemoryProxy to get a chunk from
+ * @param chunkNumber number of the chunk to receive
+ * @param rect size + position of the chunk
+ */
+ static MemoryBuffer *allocateMemoryBuffer(MemoryProxy *memoryProxy, unsigned int chunkNumber, rcti *rect);
+
+ /**
+ * @brief get a memory buffer
+ * @param memoryProxy the MemoryProxy to get a chunk from
+ * @param chunkNumber number of the chunk to receive
+ * @param addUser must we add a user to the chunk.
+ */
+ static MemoryBuffer *getMemoryBuffer(MemoryProxy *memoryProxy, unsigned int chunkNumber);
+
+ /**
+ * @brief add a MemoryProxy to the scope of the memory manager
+ * @param memoryProxy the MemoryProxy to add
+ */
+ static void addMemoryProxy(MemoryProxy *memoryProxy);
+
+ /**
+ * @brief clear the memory manager
+ */
+ static void clear();
+
+ /**
+ * @brief initialize the memory manager.
+ */
+ static void initialize();
+};
+#endif
diff --git a/source/blender/compositor/intern/COM_MemoryManagerState.cpp b/source/blender/compositor/intern/COM_MemoryManagerState.cpp
new file mode 100644
index 00000000000..b40ae146f9e
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryManagerState.cpp
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MemoryManagerState.h"
+
+MemoryManagerState::MemoryManagerState(MemoryProxy *memoryProxy)
+{
+ this->memoryProxy = memoryProxy;
+ this->currentSize = 0;
+ this->chunkBuffers = NULL;
+ BLI_mutex_init(&this->mutex);
+}
+
+MemoryProxy * MemoryManagerState::getMemoryProxy()
+{
+ return this->memoryProxy;
+}
+
+MemoryManagerState::~MemoryManagerState()
+{
+ this->memoryProxy = NULL;
+ unsigned int index;
+ for (index = 0 ; index < this->currentSize; index ++) {
+ MemoryBuffer *buffer = this->chunkBuffers[index];
+ if (buffer) {
+ delete buffer;
+ }
+ }
+ delete this->chunkBuffers;
+ BLI_mutex_end(&this->mutex);
+}
+
+void MemoryManagerState::addMemoryBuffer(MemoryBuffer *buffer)
+{
+ BLI_mutex_lock(&this->mutex);
+ unsigned int chunkNumber = buffer->getChunkNumber();
+ unsigned int index;
+ while (this->currentSize <= chunkNumber) {
+ unsigned int newSize = this->currentSize + 1000;
+ MemoryBuffer** newbuffer = new MemoryBuffer*[newSize];
+ MemoryBuffer** oldbuffer = this->chunkBuffers;
+
+ for (index = 0 ; index < this->currentSize ; index++) {
+ newbuffer[index] = oldbuffer[index];
+ }
+ for (index = currentSize ; index < newSize; index++) {
+ newbuffer[index] = NULL;
+ }
+
+ this->chunkBuffers = newbuffer;
+ this->currentSize = newSize;
+ if (oldbuffer) delete oldbuffer;
+ }
+
+ if (this->chunkBuffers[chunkNumber] == NULL) {
+ this->chunkBuffers[chunkNumber] = buffer;
+ }
+ else {
+ throw "ALREADY ALLOCATED!";
+ }
+ BLI_mutex_unlock(&this->mutex);
+}
+
+MemoryBuffer *MemoryManagerState::getMemoryBuffer(unsigned int chunkNumber)
+{
+ MemoryBuffer *result = NULL;
+ if (chunkNumber< this->currentSize) {
+ result = this->chunkBuffers[chunkNumber];
+ if (result) {
+ return result;
+ }
+ }
+
+ BLI_mutex_lock(&this->mutex);
+ if (chunkNumber< this->currentSize) {
+ result = this->chunkBuffers[chunkNumber];
+ }
+
+ BLI_mutex_unlock(&this->mutex);
+ return result;
+}
diff --git a/source/blender/compositor/intern/COM_MemoryManagerState.h b/source/blender/compositor/intern/COM_MemoryManagerState.h
new file mode 100644
index 00000000000..8e8cb484d1a
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryManagerState.h
@@ -0,0 +1,87 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class MemoryManagerState;
+
+#ifndef _COM_MemoryManagerState_h_
+#define _COM_MemoryManagerState_h_
+
+#include "COM_MemoryProxy.h"
+#include "COM_MemoryBuffer.h"
+#include <vector>
+extern "C" {
+ #include "BLI_threads.h"
+}
+
+/**
+ * @brief State of a MemoryProxy in the MemoryManager.
+ * @ingroup Memory
+ */
+class MemoryManagerState {
+private:
+ /**
+ * @brief reference to the MemoryProxy of this state
+ */
+ MemoryProxy *memoryProxy;
+
+ /**
+ * @brief list of all chunkbuffers
+ */
+ MemoryBuffer** chunkBuffers;
+
+ /**
+ * @brief size of the chunkBuffers
+ */
+ unsigned int currentSize;
+
+ /**
+ * @brief lock to this memory for multithreading
+ */
+ ThreadMutex mutex;
+public:
+ /**
+ * @brief creates a new MemoryManagerState for a certain MemoryProxy.
+ */
+ MemoryManagerState(MemoryProxy * memoryProxy);
+ /**
+ * @brief destructor
+ */
+ ~MemoryManagerState();
+
+ /**
+ * @brief get the reference to the MemoryProxy this state belongs to.
+ */
+ MemoryProxy *getMemoryProxy();
+
+ /**
+ * @brief add a new memorybuffer to the state
+ */
+ void addMemoryBuffer(MemoryBuffer *buffer);
+
+ /**
+ * @brief get the MemoryBuffer assiciated to a chunk.
+ * @param chunkNumber the chunknumber
+ */
+ MemoryBuffer *getMemoryBuffer(unsigned int chunkNumber);
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_MemoryProxy.cpp b/source/blender/compositor/intern/COM_MemoryProxy.cpp
new file mode 100644
index 00000000000..7ff4f4949f0
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryProxy.cpp
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MemoryProxy.h"
+
+
+MemoryProxy::MemoryProxy()
+{
+ this->state = NULL;
+ this->writeBufferOperation = NULL;
+ this->executor = NULL;
+}
+
+MemoryProxy::~MemoryProxy()
+{
+ if (this->state) {
+ delete this->state;
+ this->state = NULL;
+ }
+}
diff --git a/source/blender/compositor/intern/COM_MemoryProxy.h b/source/blender/compositor/intern/COM_MemoryProxy.h
new file mode 100644
index 00000000000..276ebeed1e2
--- /dev/null
+++ b/source/blender/compositor/intern/COM_MemoryProxy.h
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class MemoryProxy;
+
+
+#ifndef _COM_MemoryProxy_h
+#define _COM_MemoryProxy_h
+#include "COM_ExecutionGroup.h"
+#include "COM_MemoryManagerState.h"
+
+class ExecutionGroup;
+
+/**
+ * @brief A MemoryProxy is a unique identifier for a memory buffer.
+ * A single MemoryProxy is used among all chunks of the same buffer,
+ * the MemoryBuffer only stores the data of a single chunk.
+ * @ingroup Memory
+ */
+class MemoryProxy {
+private:
+ /**
+ * @brief reference to the ouput operation of the executiongroup
+ */
+ WriteBufferOperation *writeBufferOperation;
+
+ /**
+ * @brief reference to the executor. the Execution group that can fill a chunk
+ */
+ ExecutionGroup *executor;
+
+ /**
+ * @brief data of the different chunks.
+ * @note state is part of this class due to optimization in the MemoryManager
+ */
+ MemoryManagerState * state;
+
+ /**
+ * @brief datatype of this MemoryProxy
+ */
+ DataType datatype;
+
+ /**
+ * @brief channel information of this buffer
+ */
+ ChannelInfo channelInfo[COM_NUMBER_OF_CHANNELS];
+public:
+ MemoryProxy();
+ ~MemoryProxy();
+
+ /**
+ * @brief set the ExecutionGroup that can be scheduled to calculate a certain chunk.
+ * @param group the ExecutionGroup to set
+ */
+ void setExecutor(ExecutionGroup *executor) {this->executor = executor;}
+
+ /**
+ * @brief get the ExecutionGroup that can be scheduled to calculate a certain chunk.
+ */
+ ExecutionGroup *getExecutor() {return this->executor;}
+
+ /**
+ * @brief set the WriteBufferOperation that is responsible for writing to this MemoryProxy
+ * @param operation
+ */
+ void setWriteBufferOperation(WriteBufferOperation *operation) {this->writeBufferOperation = operation;}
+
+ /**
+ * @brief get the WriteBufferOperation that is responsible for writing to this MemoryProxy
+ * @return WriteBufferOperation
+ */
+ WriteBufferOperation *getWriteBufferOperation() {return this->writeBufferOperation;}
+
+ /**
+ * @brief set the memorymanager state of this MemoryProxy, this is set from the MemoryManager
+ * @param state the state to set
+ */
+ void setState(MemoryManagerState *state) {this->state = state;}
+
+ /**
+ * @brief get the state of this MemoryProxy
+ * @return MemoryManagerState reference to the state of this MemoryProxy.
+ */
+ MemoryManagerState *getState() {return this->state;}
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_Node.cpp b/source/blender/compositor/intern/COM_Node.cpp
new file mode 100644
index 00000000000..f06672ac80b
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Node.cpp
@@ -0,0 +1,197 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Node.h"
+#include "string.h"
+
+#include "COM_NodeOperation.h"
+#include "BKE_node.h"
+#include "COM_SetValueOperation.h"
+#include "COM_SetVectorOperation.h"
+#include "COM_SetColorOperation.h"
+#include "COM_SocketConnection.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_PreviewOperation.h"
+#include "COM_TranslateOperation.h"
+
+#include "COM_SocketProxyNode.h"
+
+//#include "stdio.h"
+#include "COM_defines.h"
+
+Node::Node(bNode *editorNode, bool create_sockets)
+{
+ this->editorNode = editorNode;
+
+ if (create_sockets) {
+ bNodeSocket * input = (bNodeSocket*)editorNode->inputs.first;
+ while (input != NULL) {
+ DataType dt = COM_DT_VALUE;
+ if (input->type == SOCK_RGBA) dt = COM_DT_COLOR;
+ if (input->type == SOCK_VECTOR) dt = COM_DT_VECTOR;
+
+ this->addInputSocket(dt, (InputSocketResizeMode)input->resizemode, input);
+ input = (bNodeSocket*)input->next;
+ }
+ bNodeSocket *output = (bNodeSocket*)editorNode->outputs.first;
+ while (output != NULL) {
+ DataType dt = COM_DT_VALUE;
+ if (output->type == SOCK_RGBA) dt = COM_DT_COLOR;
+ if (output->type == SOCK_VECTOR) dt = COM_DT_VECTOR;
+
+ this->addOutputSocket(dt, output);
+ output = (bNodeSocket*)output->next;
+ }
+ }
+}
+Node::Node()
+{
+ this->editorNode = NULL;
+}
+
+bNode *Node::getbNode()
+{
+ return this->editorNode;
+}
+
+void Node::addSetValueOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex)
+{
+ bNodeSocket *bSock = (bNodeSocket*)this->getEditorInputSocket(editorNodeInputSocketIndex);
+ SetValueOperation *operation = new SetValueOperation();
+ bNodeSocketValueFloat *val = (bNodeSocketValueFloat*)bSock->default_value;
+ operation->setValue(val->value);
+ this->addLink(graph, operation->getOutputSocket(), inputsocket);
+ graph->addOperation(operation);
+}
+
+void Node::addPreviewOperation(ExecutionSystem *system, OutputSocket *outputSocket, int priority)
+{
+#ifdef COM_PREVIEW_ENABLED
+ PreviewOperation *operation = new PreviewOperation();
+ system->addOperation(operation);
+ operation->setbNode(this->getbNode());
+ operation->setbNodeTree(system->getContext().getbNodeTree());
+ operation->setPriority(priority);
+ this->addLink(system, outputSocket, operation->getInputSocket(0));
+#endif
+}
+
+void Node::addPreviewOperation(ExecutionSystem *system, InputSocket *inputSocket, int priority)
+{
+ if (inputSocket->isConnected()) {
+ OutputSocket *outputsocket = inputSocket->getConnection()->getFromSocket();
+ this->addPreviewOperation(system, outputsocket, priority);
+ }
+}
+
+SocketConnection *Node::addLink(ExecutionSystem *graph, OutputSocket *outputSocket, InputSocket *inputsocket)
+{
+ if (inputsocket->isConnected()) {
+ return NULL;
+ }
+ SocketConnection *connection = new SocketConnection();
+ connection->setFromSocket(outputSocket);
+ outputSocket->addConnection(connection);
+ connection->setToSocket(inputsocket);
+ inputsocket->setConnection(connection);
+ graph->addSocketConnection(connection);
+ return connection;
+}
+
+void Node::addSetColorOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex)
+{
+ bNodeSocket *bSock = (bNodeSocket*)this->getEditorInputSocket(editorNodeInputSocketIndex);
+ SetColorOperation *operation = new SetColorOperation();
+ bNodeSocketValueRGBA *val = (bNodeSocketValueRGBA*)bSock->default_value;
+ operation->setChannel1(val->value[0]);
+ operation->setChannel2(val->value[1]);
+ operation->setChannel3(val->value[2]);
+ operation->setChannel4(val->value[3]);
+ this->addLink(graph, operation->getOutputSocket(), inputsocket);
+ graph->addOperation(operation);
+}
+
+void Node::addSetVectorOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex)
+{
+ bNodeSocket *bSock = (bNodeSocket*)this->getEditorInputSocket(editorNodeInputSocketIndex);
+ bNodeSocketValueVector *val = (bNodeSocketValueVector*)bSock->default_value;
+ SetVectorOperation *operation = new SetVectorOperation();
+ operation->setX(val->value[0]);
+ operation->setY(val->value[1]);
+ operation->setZ(val->value[2]);
+ operation->setW(val->value[3]);
+ this->addLink(graph, operation->getOutputSocket(), inputsocket);
+ graph->addOperation(operation);
+}
+
+bNodeSocket *Node::getEditorInputSocket(int editorNodeInputSocketIndex)
+{
+ bNodeSocket *bSock = (bNodeSocket*)this->getbNode()->inputs.first;
+ int index = 0;
+ while (bSock != NULL) {
+ if (index == editorNodeInputSocketIndex) {
+ return bSock;
+ }
+ index++;
+ bSock = bSock->next;
+ }
+ return NULL;
+}
+bNodeSocket *Node::getEditorOutputSocket(int editorNodeInputSocketIndex)
+{
+ bNodeSocket *bSock = (bNodeSocket*)this->getbNode()->outputs.first;
+ int index = 0;
+ while (bSock != NULL) {
+ if (index == editorNodeInputSocketIndex) {
+ return bSock;
+ }
+ index++;
+ bSock = bSock->next;
+ }
+ return NULL;
+}
+
+InputSocket *Node::findInputSocketBybNodeSocket(bNodeSocket *socket)
+{
+ vector<InputSocket*> &inputsockets = this->getInputSockets();
+ unsigned int index;
+ for (index = 0 ; index < inputsockets.size(); index ++) {
+ InputSocket *input = inputsockets[index];
+ if (input->getbNodeSocket() == socket) {
+ return input;
+ }
+ }
+ return NULL;
+}
+
+OutputSocket *Node::findOutputSocketBybNodeSocket(bNodeSocket *socket)
+{
+ vector<OutputSocket*> &outputsockets = this->getOutputSockets();
+ unsigned int index;
+ for (index = 0 ; index < outputsockets.size(); index ++) {
+ OutputSocket *output = outputsockets[index];
+ if (output->getbNodeSocket() == socket) {
+ return output;
+ }
+ }
+ return NULL;
+}
diff --git a/source/blender/compositor/intern/COM_Node.h b/source/blender/compositor/intern/COM_Node.h
new file mode 100644
index 00000000000..2666d0a6980
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Node.h
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_Node_h
+#define _COM_Node_h
+
+#include "COM_NodeBase.h"
+#include "COM_InputSocket.h"
+#include "COM_OutputSocket.h"
+#include "COM_CompositorContext.h"
+#include "DNA_node_types.h"
+#include "BKE_text.h"
+#include <vector>
+#include <string>
+
+using namespace std;
+
+class Node;
+class NodeOperation;
+class ExecutionSystem;
+
+typedef vector<Node*> NodeList;
+typedef NodeList::iterator NodeIterator;
+typedef pair<NodeIterator, NodeIterator> NodeRange;
+
+/**
+ * My node documentation.
+ */
+class Node:public NodeBase {
+private:
+ /**
+ * @brief stores the reference to the SDNA bNode struct
+ */
+ bNode *editorNode;
+
+public:
+ Node(bNode *editorNode, bool create_sockets=true);
+
+ /**
+ * @brief get the reference to the SDNA bNode struct
+ */
+ bNode *getbNode();
+
+ /**
+ * @brief convert node to operation
+ *
+ * @todo this must be described furter
+ *
+ * @param system the ExecutionSystem where the operations need to be added
+ * @param context reference to the CompositorContext
+ */
+ virtual void convertToOperations(ExecutionSystem *system, CompositorContext * context) =0;
+
+ /**
+ * this method adds a SetValueOperation as input of the input socket.
+ * This can only be used from the convertToOperation method. all other usages are not allowed
+ */
+ void addSetValueOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex);
+
+ /**
+ * this method adds a SetColorOperation as input of the input socket.
+ * This can only be used from the convertToOperation method. all other usages are not allowed
+ */
+ void addSetColorOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex);
+
+ /**
+ * this method adds a SetVectorOperation as input of the input socket.
+ * This can only be used from the convertToOperation method. all other usages are not allowed
+ */
+ void addSetVectorOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex);
+
+ /**
+ * Creates a new link between an outputSocket and inputSocket and registrates the link to the graph
+ * @return the new created link
+ */
+ SocketConnection *addLink(ExecutionSystem *graph, OutputSocket *outputSocket, InputSocket *inputsocket);
+
+ /**
+ * is this node a group node.
+ */
+ virtual bool isGroupNode() const { return false; }
+ /**
+ * is this node a proxy node.
+ */
+ virtual bool isProxyNode() const { return false; }
+
+ /**
+ * @brief find the InputSocket by bNodeSocket
+ *
+ * @param socket
+ */
+ InputSocket *findInputSocketBybNodeSocket(bNodeSocket *socket);
+
+ /**
+ * @brief find the OutputSocket by bNodeSocket
+ *
+ * @param socket
+ */
+ OutputSocket *findOutputSocketBybNodeSocket(bNodeSocket *socket);
+protected:
+
+ Node();
+
+ void addPreviewOperation(ExecutionSystem *system, InputSocket *inputSocket, int priority);
+ void addPreviewOperation(ExecutionSystem *system, OutputSocket *inputSocket, int priority);
+
+ bNodeSocket *getEditorInputSocket(int editorNodeInputSocketIndex);
+ bNodeSocket *getEditorOutputSocket(int editorNodeOutputSocketIndex);
+private:
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_NodeBase.cpp b/source/blender/compositor/intern/COM_NodeBase.cpp
new file mode 100644
index 00000000000..17a623c9c81
--- /dev/null
+++ b/source/blender/compositor/intern/COM_NodeBase.cpp
@@ -0,0 +1,143 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_NodeBase.h"
+#include "string.h"
+#include "COM_NodeOperation.h"
+#include "BKE_node.h"
+#include "COM_SetValueOperation.h"
+#include "COM_SetColorOperation.h"
+#include "COM_SocketConnection.h"
+#include "COM_ExecutionSystem.h"
+
+NodeBase::NodeBase()
+{
+}
+
+
+NodeBase::~NodeBase()
+{
+ while (!this->outputsockets.empty()) {
+ delete (this->outputsockets.back());
+ this->outputsockets.pop_back();
+ }
+ while (!this->inputsockets.empty()) {
+ delete (this->inputsockets.back());
+ this->inputsockets.pop_back();
+ }
+}
+
+void NodeBase::addInputSocket(DataType datatype)
+{
+ this->addInputSocket(datatype, COM_SC_CENTER, NULL);
+}
+
+void NodeBase::addInputSocket(DataType datatype, InputSocketResizeMode resizeMode)
+{
+ this->addInputSocket(datatype, resizeMode, NULL);
+}
+void NodeBase::addInputSocket(DataType datatype, InputSocketResizeMode resizeMode, bNodeSocket *bSocket)
+{
+ InputSocket *socket = new InputSocket(datatype, resizeMode);
+ socket->setEditorSocket(bSocket);
+ socket->setNode(this);
+ this->inputsockets.push_back(socket);
+}
+
+void NodeBase::addOutputSocket(DataType datatype)
+{
+ this->addOutputSocket(datatype, NULL);
+
+}
+void NodeBase::addOutputSocket(DataType datatype, bNodeSocket *bSocket)
+{
+ OutputSocket *socket = new OutputSocket(datatype);
+ socket->setEditorSocket(bSocket);
+ socket->setNode(this);
+ this->outputsockets.push_back(socket);
+}
+const bool NodeBase::isInputNode() const
+{
+ return this->inputsockets.size() == 0;
+}
+
+OutputSocket *NodeBase::getOutputSocket(int index)
+{
+ return this->outputsockets[index];
+}
+
+InputSocket *NodeBase::getInputSocket(int index)
+{
+ return this->inputsockets[index];
+}
+
+
+void NodeBase::determineActualSocketDataTypes()
+{
+ unsigned int index;
+ for (index = 0 ; index < this->outputsockets.size() ; index ++) {
+ OutputSocket *socket = this->outputsockets[index];
+ if (socket->getActualDataType() ==COM_DT_UNKNOWN && socket->isConnected()) {
+ socket->determineActualDataType();
+ }
+ }
+ for (index = 0 ; index < this->inputsockets.size() ; index ++) {
+ InputSocket *socket = this->inputsockets[index];
+ if (socket->getActualDataType() ==COM_DT_UNKNOWN) {
+ socket->determineActualDataType();
+ }
+ }
+}
+
+DataType NodeBase::determineActualDataType(OutputSocket *outputsocket)
+{
+ const int inputIndex = outputsocket->getInputSocketDataTypeDeterminatorIndex();
+ if (inputIndex != -1) {
+ return this->getInputSocket(inputIndex)->getActualDataType();
+ }
+ else {
+ return outputsocket->getDataType();
+ }
+}
+
+void NodeBase::notifyActualDataTypeSet(InputSocket *socket, DataType actualType)
+{
+ unsigned int index;
+ int socketIndex = -1;
+ for (index = 0 ; index < this->inputsockets.size() ; index ++) {
+ if (this->inputsockets[index] == socket) {
+ socketIndex = (int)index;
+ break;
+ }
+ }
+ if (socketIndex == -1) return;
+
+ for (index = 0 ; index < this->outputsockets.size() ; index ++) {
+ OutputSocket *socket = this->outputsockets[index];
+ if (socket->isActualDataTypeDeterminedByInputSocket() &&
+ socket->getInputSocketDataTypeDeterminatorIndex() == socketIndex)
+ {
+ socket->setActualDataType(actualType);
+ socket->fireActualDataType();
+ }
+ }
+}
diff --git a/source/blender/compositor/intern/COM_NodeBase.h b/source/blender/compositor/intern/COM_NodeBase.h
new file mode 100644
index 00000000000..123797c780a
--- /dev/null
+++ b/source/blender/compositor/intern/COM_NodeBase.h
@@ -0,0 +1,174 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_NodeBase_h
+#define _COM_NodeBase_h
+
+#include "COM_InputSocket.h"
+#include "COM_OutputSocket.h"
+#include "DNA_node_types.h"
+#include "BKE_text.h"
+#include <vector>
+#include <string>
+
+using namespace std;
+
+
+class NodeOperation;
+class ExecutionSystem;
+
+/**
+ * @brief The NodeBase class is the super-class of all node related objects like @see Node @see NodeOperation
+ * the reason for the existence of this class is to support graph-nodes when using ExecutionSystem
+ * the NodeBase also contains the reference to InputSocket and OutputSocket.
+ * @ingroup Model
+ */
+class NodeBase {
+private:
+ /**
+ * @brief the list of actual inputsockets @see InputSocket
+ */
+ vector<InputSocket*> inputsockets;
+
+ /**
+ * @brief the list of actual outputsockets @see OutputSocket
+ */
+ vector<OutputSocket*> outputsockets;
+
+protected:
+ /**
+ * @brief get access to the vector of input sockets
+ */
+ inline vector<InputSocket*>& getInputSockets() {return this->inputsockets;}
+
+ /**
+ * @brief get access to the vector of input sockets
+ */
+ inline vector<OutputSocket*>& getOutputSockets() {return this->outputsockets;}
+
+
+public:
+ /**
+ * @brief destructor
+ * clean up memory related to this NodeBase.
+ */
+ virtual ~NodeBase();
+
+ /**
+ * @brief determine the actual socket data types that will go through the system
+ */
+ virtual void determineActualSocketDataTypes();
+
+ /**
+ * @brief determine the actual socket data types of a specific outputsocket
+ *
+ * @param outputsocket
+ * a reference to the actual outputsocket where the datatype must be determined from
+ *
+ * @return
+ * COM_DT_VALUE if it is a value (1 float buffer)
+ * COM_DT_COLOR if it is a value (4 float buffer)
+ * COM_DT_VECTOR if it is a value (3 float buffer)
+ */
+ virtual DataType determineActualDataType(OutputSocket *outputsocket);
+
+ /**
+ * @brief is this node an operation?
+ * This is true when the instance is of the subclass NodeOperation.
+ * @return [true:false]
+ * @see NodeOperation
+ */
+ virtual const int isOperation() const {return false;}
+
+ /**
+ * @brief check if this is an input node
+ * An input node is a node that only has output sockets and no input sockets
+ * @return [false..true]
+ */
+ const bool isInputNode() const;
+
+ /**
+ * @brief Return the number of input sockets of this node.
+ */
+ const unsigned int getNumberOfInputSockets() const {return this->inputsockets.size();}
+
+ /**
+ * @brief Return the number of output sockets of this node.
+ */
+ const unsigned int getNumberOfOutputSockets() const {return this->outputsockets.size();}
+
+ /**
+ * after the data has been determined of an outputsocket that has a connection with an inputsocket this method is called on the
+ * node that contains the inputsocket.
+ * @param socket
+ * the reference of the inputsocket where connected data type is found
+ * @param actualType [COM_DT_VALUE, COM_DT_VECTOR, COM_DT_COLOR]
+ * the actual data type that is coming from the connected output socket
+ */
+ virtual void notifyActualDataTypeSet(InputSocket *socket, const DataType actualType);
+
+ /**
+ * get the reference to a certain outputsocket
+ * @param index
+ * the index of the needed outputsocket
+ */
+ OutputSocket *getOutputSocket(const int index);
+
+ /**
+ * get the reference to the first outputsocket
+ * @param index
+ * the index of the needed outputsocket
+ */
+ inline OutputSocket *getOutputSocket() {return getOutputSocket(0);}
+
+ /**
+ * get the reference to a certain inputsocket
+ * @param index
+ * the index of the needed inputsocket
+ */
+ InputSocket *getInputSocket(const int index);
+
+
+ virtual bool isStatic() const {return false;}
+ void getStaticValues(float *result) const {}
+protected:
+ NodeBase();
+
+ /**
+ * @brief add an InputSocket to the collection of inputsockets
+ * @note may only be called in an constructor
+ * @param socket the InputSocket to add
+ */
+ void addInputSocket(DataType datatype);
+ void addInputSocket(DataType datatype, InputSocketResizeMode resizeMode);
+ void addInputSocket(DataType datatype, InputSocketResizeMode resizeMode, bNodeSocket *socket);
+
+ /**
+ * @brief add an OutputSocket to the collection of outputsockets
+ * @note may only be called in an constructor
+ * @param socket the OutputSocket to add
+ */
+ void addOutputSocket(DataType datatype);
+ void addOutputSocket(DataType datatype, bNodeSocket *socket);
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cpp b/source/blender/compositor/intern/COM_NodeOperation.cpp
new file mode 100644
index 00000000000..fae652e39d7
--- /dev/null
+++ b/source/blender/compositor/intern/COM_NodeOperation.cpp
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_NodeOperation.h"
+#include <typeinfo>
+#include "COM_InputSocket.h"
+#include "COM_SocketConnection.h"
+#include "COM_defines.h"
+#include "stdio.h"
+
+NodeOperation::NodeOperation()
+{
+ this->resolutionInputSocketIndex = 0;
+ this->complex = false;
+ this->width = 0;
+ this->height = 0;
+ this->openCL = false;
+}
+
+void NodeOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ unsigned int temp[2];
+ unsigned int temp2[2];
+ vector<InputSocket*> &inputsockets = this->getInputSockets();
+
+ for (unsigned int index = 0 ; index < inputsockets.size();index++) {
+ InputSocket *inputSocket = inputsockets[index];
+ if (inputSocket->isConnected()) {
+ if (index == this->resolutionInputSocketIndex) {
+ inputSocket->determineResolution(resolution, preferredResolution);
+ temp2[0] = resolution[0];
+ temp2[1] = resolution[1];
+ break;
+ }
+ }
+ }
+ for (unsigned int index = 0 ; index < inputsockets.size();index++) {
+ InputSocket *inputSocket = inputsockets[index];
+ if (inputSocket->isConnected()) {
+ if (index != resolutionInputSocketIndex) {
+ inputSocket->determineResolution(temp, temp2);
+ }
+ }
+ }
+}
+void NodeOperation::setResolutionInputSocketIndex(unsigned int index)
+{
+ this->resolutionInputSocketIndex = index;
+}
+void NodeOperation::initExecution()
+{
+}
+
+void NodeOperation::initMutex()
+{
+ BLI_mutex_init(&mutex);
+}
+void NodeOperation::deinitMutex()
+{
+ BLI_mutex_end(&mutex);
+}
+void NodeOperation::deinitExecution()
+{
+}
+SocketReader *NodeOperation::getInputSocketReader(unsigned int inputSocketIndex)
+{
+ return this->getInputSocket(inputSocketIndex)->getReader();
+}
+NodeOperation *NodeOperation::getInputOperation(unsigned int inputSocketIndex)
+{
+ return this->getInputSocket(inputSocketIndex)->getOperation();
+}
+
+void NodeOperation::getConnectedInputSockets(vector<InputSocket*> *sockets)
+{
+ vector<InputSocket*> &inputsockets = this->getInputSockets();
+ for (vector<InputSocket*>::iterator iterator = inputsockets.begin() ; iterator!= inputsockets.end() ; iterator++) {
+ InputSocket *socket = *iterator;
+ if (socket->isConnected()) {
+ sockets->push_back(socket);
+ }
+ }
+}
+
+bool NodeOperation::determineDependingAreaOfInterest(rcti * input, ReadBufferOperation *readOperation, rcti *output)
+{
+ if (this->isInputNode()) {
+ BLI_init_rcti(output, input->xmin, input->xmax, input->ymin, input->ymax);
+ return false;
+ }
+ else {
+ unsigned int index;
+ vector<InputSocket*> &inputsockets = this->getInputSockets();
+
+ for (index = 0 ; index < inputsockets.size() ; index++) {
+ InputSocket *inputsocket = inputsockets[index];
+ if (inputsocket->isConnected()) {
+ NodeOperation *inputoperation = (NodeOperation*)inputsocket->getConnection()->getFromNode();
+ bool result = inputoperation->determineDependingAreaOfInterest(input, readOperation, output);
+ if (result) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
new file mode 100644
index 00000000000..bba3de2ec98
--- /dev/null
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -0,0 +1,247 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_NodeProgram_h
+#define _COM_NodeProgram_h
+
+class NodeOperation;
+
+#include "COM_Node.h"
+#include <string>
+#include <sstream>
+#include "COM_MemoryBuffer.h"
+#include "COM_MemoryProxy.h"
+#include "COM_SocketReader.h"
+#include "OCL_opencl.h"
+#include "list"
+
+class ReadBufferOperation;
+
+/**
+ * @brief NodeOperation are contains calculation logic
+ *
+ * Subclasses needs to implement the execution method (defined in SocketReader) to implement logic.
+ * @ingroup Model
+ */
+class NodeOperation : public NodeBase, public SocketReader {
+private:
+ /**
+ * @brief the index of the input socket that will be used to determine the resolution
+ */
+ unsigned int resolutionInputSocketIndex;
+
+ /**
+ * @brief is this operation a complex one.
+ *
+ * Complex operations are typically doing many reads to calculate the output of a single pixel.
+ * Mostly Filter types (Blurs, Convolution, Defocus etc) need this to be set to true.
+ */
+ bool complex;
+
+ /**
+ * @brief can this operation be scheduled on an OpenCL device.
+ * @note Only applicable if complex is True
+ */
+ bool openCL;
+
+ /**
+ * @brief mutex reference for very special node initializations
+ * @note only use when you really know what you are doing.
+ * this mutex is used to share data among chunks in the same operation
+ * @see TonemapOperation for an example of usage
+ * @see NodeOperation.initMutex initializes this mutex
+ * @see NodeOperation.deinitMutex deinitializes this mutex
+ * @see NodeOperation.getMutex retrieve a pointer to this mutex.
+ */
+ ThreadMutex mutex;
+
+public:
+ /**
+ * @brief is this node an operation?
+ * This is true when the instance is of the subclass NodeOperation.
+ * @return [true:false]
+ * @see NodeBase
+ */
+ const int isOperation() const {return true;}
+
+ /**
+ * @brief determine the resolution of this node
+ * @note this method will not set the resolution, this is the responsibility of the caller
+ * @param resolution the result of this operation
+ * @param preferredResolution the preferrable resolution as no resolution could be determined
+ */
+ virtual void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ /**
+ * @brief isOutputOperation determines whether this operation is an output of the ExecutionSystem during rendering or editing.
+ *
+ * Default behaviour if not overriden, this operation will not be evaluated as being an output of the ExecutionSystem.
+ *
+ * @see ExecutionSystem
+ * @group check
+ * @param rendering [true false]
+ * true: rendering
+ * false: editing
+ *
+ * @return bool the result of this method
+ */
+ virtual bool isOutputOperation(bool rendering) const {return false;}
+
+ /**
+ * isBufferOperation returns if this is an operation that work directly on buffers.
+ *
+ * there are only 2 implementation where this is true:
+ * @see ReadBufferOperation
+ * @see WriteBufferOperation
+ * for all other operations this will result in false.
+ */
+ virtual int isBufferOperation() {return false;}
+
+ virtual void initExecution();
+ void initMutex();
+
+ /**
+ * @brief when a chunk is executed by a CPUDevice, this method is called
+ * @ingroup execution
+ * @param rect the rectangle of the chunk (location and size)
+ * @param chunkNumber the chunkNumber to be calculated
+ * @param memoryBuffers all input MemoryBuffer's needed
+ */
+ virtual void executeRegion(rcti *rect, unsigned int chunkNumber, MemoryBuffer** memoryBuffers) {}
+
+ /**
+ * @brief when a chunk is executed by an OpenCLDevice, this method is called
+ * @ingroup execution
+ * @note this method is only implemented in WriteBufferOperation
+ * @param context the OpenCL context
+ * @param program the OpenCL program containing all compositor kernels
+ * @param queue the OpenCL command queue of the device the chunk is executed on
+ * @param rect the rectangle of the chunk (location and size)
+ * @param chunkNumber the chunkNumber to be calculated
+ * @param memoryBuffers all input MemoryBuffer's needed
+ */
+ virtual void executeOpenCLRegion(cl_context context, cl_program program, cl_command_queue queue, rcti *rect, unsigned int chunkNumber, MemoryBuffer** memoryBuffers) {}
+
+ /**
+ * @brief custom handle to add new tasks to the OpenCL command queue in order to execute a chunk on an GPUDevice
+ * @ingroup execution
+ * @param context the OpenCL context
+ * @param program the OpenCL program containing all compositor kernels
+ * @param queue the OpenCL command queue of the device the chunk is executed on
+ * @param outputMemoryBuffer the allocated memory buffer in main CPU memory
+ * @param clOutputBuffer the allocated memory buffer in OpenCLDevice memory
+ * @param inputMemoryBuffers all input MemoryBuffer's needed
+ * @param clMemToCleanUp all created cl_mem references must be added to this list. Framework will clean this after execution
+ * @param clKernelsToCleanUp all created cl_kernel references must be added to this list. Framework will clean this after execution
+ */
+ virtual void executeOpenCL(cl_context context,cl_program program, cl_command_queue queue, MemoryBuffer *outputMemoryBuffer, cl_mem clOutputBuffer, MemoryBuffer** inputMemoryBuffers, list<cl_mem> *clMemToCleanUp, list<cl_kernel> *clKernelsToCleanUp) {}
+ virtual void deinitExecution();
+ void deinitMutex();
+
+ /**
+ * @brief set the resolution
+ * @param resolution the resolution to set
+ */
+ void setResolution(unsigned int resolution[]) {this->width = resolution[0];this->height = resolution[1];}
+ void getConnectedInputSockets(vector<InputSocket*> *sockets);
+
+ /**
+ * @brief is this operation complex
+ *
+ * Complex operations are typically doing many reads to calculate the output of a single pixel.
+ * Mostly Filter types (Blurs, Convolution, Defocus etc) need this to be set to true.
+ */
+ const bool isComplex() const {return this->complex;}
+ virtual const bool isSetOperation() const {return false;}
+
+ /**
+ * @brief is this operation of type ReadBufferOperation
+ * @return [true:false]
+ * @see ReadBufferOperation
+ */
+ virtual const bool isReadBufferOperation() const {return false;}
+
+ /**
+ * @brief is this operation of type WriteBufferOperation
+ * @return [true:false]
+ * @see WriteBufferOperation
+ */
+ virtual const bool isWriteBufferOperation() const {return false;}
+
+ /**
+ * @brief is this operation the active viewer output
+ * user can select an ViewerNode to be active (the result of this node will be drawn on the backdrop)
+ * @return [true:false]
+ * @see BaseViewerOperation
+ */
+ virtual const bool isActiveViewerOutput() const {return false;}
+
+ virtual bool determineDependingAreaOfInterest(rcti * input, ReadBufferOperation *readOperation, rcti *output);
+
+ /**
+ * @brief set the index of the input socket that will determine the resolution of this operation
+ * @param index the index to set
+ */
+ void setResolutionInputSocketIndex(unsigned int index);
+
+ /**
+ * @brief get the render priority of this node.
+ * @note only applicable for output operations like ViewerOperation
+ * @return [0:9] 9 is highest priority
+ */
+ virtual const int getRenderPriority() const {return 0;}
+
+ /**
+ * @brief can this NodeOperation be scheduled on an OpenCLDevice
+ * @see WorkScheduler.schedule
+ * @see ExecutionGroup.addOperation
+ */
+ bool isOpenCL() { return this->openCL; }
+
+ virtual bool isViewerOperation() {return false;}
+protected:
+ NodeOperation();
+
+ void setWidth(unsigned int width) {this->width = width;}
+ void setHeight(unsigned int height) {this->height = height;}
+ SocketReader *getInputSocketReader(unsigned int inputSocketindex);
+ NodeOperation *getInputOperation(unsigned int inputSocketindex);
+
+ inline ThreadMutex *getMutex() {return &this->mutex;}
+
+ /**
+ * @brief set whether this operation is complex
+ *
+ * Complex operations are typically doing many reads to calculate the output of a single pixel.
+ * Mostly Filter types (Blurs, Convolution, Defocus etc) need this to be set to true.
+ */
+ void setComplex(bool complex) {this->complex = complex;}
+
+ /**
+ * @brief set if this NodeOperation can be scheduled on a OpenCLDevice
+ */
+ void setOpenCL(bool openCL) {this->openCL = openCL;}
+
+
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_NodeProgram.cpp b/source/blender/compositor/intern/COM_NodeProgram.cpp
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/source/blender/compositor/intern/COM_NodeProgram.cpp
diff --git a/source/blender/compositor/intern/COM_NodeProgram.h b/source/blender/compositor/intern/COM_NodeProgram.h
new file mode 100644
index 00000000000..a71fa2b676f
--- /dev/null
+++ b/source/blender/compositor/intern/COM_NodeProgram.h
@@ -0,0 +1,7 @@
+#ifndef _COM_NodeProgram_h
+#define _COM_NodeProgram_h
+
+class NodeProgram{
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_OpenCLDevice.cpp b/source/blender/compositor/intern/COM_OpenCLDevice.cpp
new file mode 100644
index 00000000000..0945b426a4e
--- /dev/null
+++ b/source/blender/compositor/intern/COM_OpenCLDevice.cpp
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_OpenCLDevice.h"
+#include "COM_WorkScheduler.h"
+
+
+OpenCLDevice::OpenCLDevice(cl_context context, cl_device_id device, cl_program program)
+{
+ this->device = device;
+ this->context = context;
+ this->program = program;
+ this->queue = NULL;
+}
+
+bool OpenCLDevice::initialize()
+{
+ cl_int error;
+ queue = clCreateCommandQueue(context, device, 0, &error);
+ return false;
+}
+
+void OpenCLDevice::deinitialize()
+{
+ if (queue) {
+ clReleaseCommandQueue(queue);
+ }
+}
+
+void OpenCLDevice::execute(WorkPackage *work)
+{
+ const unsigned int chunkNumber = work->getChunkNumber();
+ ExecutionGroup * executionGroup = work->getExecutionGroup();
+ rcti rect;
+
+ executionGroup->determineChunkRect(&rect, chunkNumber);
+ MemoryBuffer ** inputBuffers = executionGroup->getInputBuffers(chunkNumber);
+ MemoryBuffer * outputBuffer = executionGroup->allocateOutputBuffer(chunkNumber, &rect);
+
+ executionGroup->getOutputNodeOperation()->executeOpenCLRegion(this->context, this->program, this->queue, &rect, chunkNumber, inputBuffers);
+
+ executionGroup->finalizeChunkExecution(chunkNumber, inputBuffers);
+ if (outputBuffer != NULL) {
+ outputBuffer->setCreatedState();
+ }
+}
diff --git a/source/blender/compositor/intern/COM_OpenCLDevice.h b/source/blender/compositor/intern/COM_OpenCLDevice.h
new file mode 100644
index 00000000000..f61c555558d
--- /dev/null
+++ b/source/blender/compositor/intern/COM_OpenCLDevice.h
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class OpenCLDevice;
+
+#ifndef _COM_OpenCLDevice_h
+#define _COM_OpenCLDevice_h
+
+#include "COM_Device.h"
+#include "OCL_opencl.h"
+#include "COM_WorkScheduler.h"
+
+
+/**
+ * @brief device representing an GPU OpenCL device.
+ * an instance of this class represents a single cl_device
+ */
+class OpenCLDevice: public Device {
+private:
+ /**
+ *@brief opencl context
+ */
+ cl_context context;
+
+ /**
+ *@brief opencl device
+ */
+ cl_device_id device;
+
+ /**
+ *@brief opencl program
+ */
+ cl_program program;
+
+ /**
+ *@brief opencl command queue
+ */
+ cl_command_queue queue;
+public:
+ /**
+ *@brief constructor with opencl device
+ *@param context
+ *@param device
+ */
+ OpenCLDevice(cl_context context, cl_device_id device, cl_program program);
+
+
+ /**
+ * @brief initialize the device
+ * During initialization the OpenCL cl_command_queue is created
+ * the command queue is stored in the field queue.
+ * @see queue
+ */
+ bool initialize();
+
+ /**
+ * @brief deinitialize the device
+ * During deintiialization the command queue is cleared
+ */
+ void deinitialize();
+
+ /**
+ * @brief execute a WorkPackage
+ * @param work the WorkPackage to execute
+ */
+ void execute(WorkPackage *work);
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_OutputSocket.cpp b/source/blender/compositor/intern/COM_OutputSocket.cpp
new file mode 100644
index 00000000000..00d3518cd15
--- /dev/null
+++ b/source/blender/compositor/intern/COM_OutputSocket.cpp
@@ -0,0 +1,159 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Socket.h"
+#include "COM_Node.h"
+#include "COM_SocketConnection.h"
+#include "COM_NodeOperation.h"
+
+OutputSocket::OutputSocket(DataType datatype) :Socket(datatype)
+{
+ this->inputSocketDataTypeDeterminatorIndex = -1;
+}
+OutputSocket::OutputSocket(DataType datatype, int inputSocketDataTypeDeterminatorIndex) :Socket(datatype)
+{
+ this->inputSocketDataTypeDeterminatorIndex = inputSocketDataTypeDeterminatorIndex;
+}
+
+OutputSocket::OutputSocket(OutputSocket *from): Socket(from->getDataType())
+{
+ this->inputSocketDataTypeDeterminatorIndex = from->getInputSocketDataTypeDeterminatorIndex();
+}
+
+int OutputSocket::isOutputSocket() const { return true; }
+const int OutputSocket::isConnected() const { return this->connections.size()!=0; }
+
+void OutputSocket::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ NodeBase *node = this->getNode();
+ if (node->isOperation()) {
+ NodeOperation *operation = (NodeOperation*)node;
+ operation->determineResolution(resolution, preferredResolution);
+ operation->setResolution(resolution);
+ }
+}
+
+void OutputSocket::determineActualDataType()
+{
+ DataType actualDatatype = this->getNode()->determineActualDataType(this);
+
+ /** @todo: set the channel info needs to be moved after integration with OCIO */
+ this->channelinfo[0].setNumber(0);
+ this->channelinfo[1].setNumber(1);
+ this->channelinfo[2].setNumber(2);
+ this->channelinfo[3].setNumber(3);
+ switch (actualDatatype) {
+ case COM_DT_VALUE:
+ this->channelinfo[0].setType(COM_CT_Value);
+ break;
+ case COM_DT_VECTOR:
+ this->channelinfo[0].setType(COM_CT_X);
+ this->channelinfo[1].setType(COM_CT_Y);
+ this->channelinfo[2].setType(COM_CT_Z);
+ break;
+ case COM_DT_COLOR:
+ this->channelinfo[0].setType(COM_CT_ColorComponent);
+ this->channelinfo[1].setType(COM_CT_ColorComponent);
+ this->channelinfo[2].setType(COM_CT_ColorComponent);
+ this->channelinfo[3].setType(COM_CT_Alpha);
+ break;
+ default:
+ break;
+ }
+
+ this->setActualDataType(actualDatatype);
+ this->fireActualDataType();
+}
+
+void OutputSocket::addConnection(SocketConnection *connection)
+{
+ this->connections.push_back(connection);
+}
+
+void OutputSocket::fireActualDataType()
+{
+ unsigned int index;
+ for (index = 0 ; index < this->connections.size();index ++) {
+ SocketConnection *connection = this->connections[index];
+ connection->getToSocket()->notifyActualInputType(this->getActualDataType());
+ }
+}
+void OutputSocket::relinkConnections(OutputSocket *relinkToSocket, bool single)
+{
+ if (isConnected()) {
+ if (single) {
+ SocketConnection *connection = this->connections[0];
+ connection->setFromSocket(relinkToSocket);
+ relinkToSocket->addConnection(connection);
+// relinkToSocket->setActualDataType(this->getActualDataType());
+ this->connections.erase(this->connections.begin());
+ }
+ else {
+ unsigned int index;
+ for (index = 0 ; index < this->connections.size();index ++) {
+ SocketConnection *connection = this->connections[index];
+ connection->setFromSocket(relinkToSocket);
+ relinkToSocket->addConnection(connection);
+ }
+// relinkToSocket->setActualDataType(this->getActualDataType());
+ this->connections.clear();
+ }
+ }
+}
+void OutputSocket::removeFirstConnection()
+{
+ SocketConnection *connection = this->connections[0];
+ InputSocket *inputSocket = connection->getToSocket();
+ if (inputSocket != NULL) {
+ inputSocket->setConnection(NULL);
+ }
+ this->connections.erase(this->connections.begin());
+}
+
+void OutputSocket::clearConnections()
+{
+ while (this->isConnected()) {
+ removeFirstConnection();
+ }
+}
+
+WriteBufferOperation *OutputSocket::findAttachedWriteBufferOperation() const
+{
+ unsigned int index;
+ for (index = 0 ; index < this->connections.size();index++) {
+ SocketConnection *connection = this->connections[index];
+ NodeBase *node = connection->getToNode();
+ if (node->isOperation()) {
+ NodeOperation *operation = (NodeOperation*)node;
+ if (operation->isWriteBufferOperation()) {
+ return (WriteBufferOperation*)operation;
+ }
+ }
+ }
+ return NULL;
+}
+
+ChannelInfo *OutputSocket::getChannelInfo(const int channelnumber)
+{
+ return &this->channelinfo[channelnumber];
+}
+
diff --git a/source/blender/compositor/intern/COM_OutputSocket.h b/source/blender/compositor/intern/COM_OutputSocket.h
new file mode 100644
index 00000000000..640588417b4
--- /dev/null
+++ b/source/blender/compositor/intern/COM_OutputSocket.h
@@ -0,0 +1,105 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_OutputSocket_h
+#define _COM_OutputSocket_h
+
+#include <vector>
+#include "COM_Socket.h"
+#include "COM_ChannelInfo.h"
+
+using namespace std;
+class SocketConnection;
+class Node;
+class InputSocket;
+class WriteBufferOperation;
+
+//#define COM_ST_INPUT 0
+//#define COM_ST_OUTPUT 1
+
+/**
+ * @brief OutputSocket are sockets that can send data/input
+ * @ingroup Model
+ */
+class OutputSocket : public Socket {
+private:
+ vector<SocketConnection*> connections;
+
+ /**
+ * @brief index of the inputsocket that determines the datatype of this outputsocket
+ * -1 will not use any inputsocket to determine the datatype, but use the outputsocket
+ * default datatype.
+ */
+ int inputSocketDataTypeDeterminatorIndex;
+
+ ChannelInfo channelinfo[4];
+ void removeFirstConnection();
+public:
+ OutputSocket(DataType datatype);
+ OutputSocket(DataType datatype, int inputSocketDataTypeDeterminatorIndex);
+ OutputSocket(OutputSocket * from);
+ void addConnection(SocketConnection *connection);
+ SocketConnection *getConnection(unsigned int index) {return this->connections[index];}
+ const int isConnected() const;
+ int isOutputSocket() const;
+
+ /**
+ * @brief determine the resolution of this socket
+ * @param resolution the result of this operation
+ * @param preferredResolution the preferrable resolution as no resolution could be determined
+ */
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ /**
+ * @brief determine the actual data type and channel info.
+ */
+ void determineActualDataType();
+ void relinkConnections(OutputSocket *relinkToSocket) {this->relinkConnections(relinkToSocket, false);};
+ void relinkConnections(OutputSocket *relinkToSocket, bool single);
+ bool isActualDataTypeDeterminedByInputSocket() {
+ return this->inputSocketDataTypeDeterminatorIndex>-1;
+ }
+ const int getNumberOfConnections() {return connections.size();}
+
+ /**
+ * @brief get the index of the inputsocket that determines the datatype of this outputsocket
+ */
+ int getInputSocketDataTypeDeterminatorIndex() {return this->inputSocketDataTypeDeterminatorIndex;}
+ void clearConnections();
+
+ /**
+ * @brief find a connected write buffer operation to this OutputSocket
+ * @return WriteBufferOperation or NULL
+ */
+ WriteBufferOperation *findAttachedWriteBufferOperation() const;
+ ChannelInfo *getChannelInfo(const int channelnumber);
+
+ /**
+ * @brief trigger determine actual data type to all connected sockets
+ * @note will only be triggered just after the actual data type is set.
+ */
+ void fireActualDataType();
+
+private:
+
+};
+#endif
diff --git a/source/blender/compositor/intern/COM_Socket.cpp b/source/blender/compositor/intern/COM_Socket.cpp
new file mode 100644
index 00000000000..a5336ac1202
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Socket.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Socket.h"
+#include "COM_Node.h"
+#include "COM_SocketConnection.h"
+
+Socket::Socket(DataType datatype)
+{
+ this->datatype = datatype;
+ this->actualType = COM_DT_UNKNOWN;
+ this->editorSocket = NULL;
+ this->node = NULL;
+}
+
+DataType Socket::getDataType() const
+{
+ return this->datatype;
+}
+
+int Socket::isInputSocket() const { return false; }
+int Socket::isOutputSocket() const { return false; }
+const int Socket::isConnected() const {return false;}
+void Socket::setNode(NodeBase *node) {this->node = node;}
+NodeBase *Socket::getNode() const {return this->node;}
+
+DataType Socket::getActualDataType() const {return this->actualType;}
+void Socket::setActualDataType(DataType actualType)
+{
+ this->actualType = actualType;
+}
diff --git a/source/blender/compositor/intern/COM_Socket.h b/source/blender/compositor/intern/COM_Socket.h
new file mode 100644
index 00000000000..8ad7a5c7fde
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Socket.h
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_Socket_h
+#define _COM_Socket_h
+
+#include <vector>
+#include "BKE_text.h"
+#include <string>
+#include "DNA_node_types.h"
+#include "COM_defines.h"
+
+using namespace std;
+class SocketConnection;
+class NodeBase;
+
+/**
+ * @brief Base class for InputSocket and OutputSocket.
+ *
+ * A socket are the points on an node where the user can make a connection between.
+ * Sockets are always part of a node or an operation.
+ *
+ * @see InputSocket
+ * @see OutputSocket
+ * @see SocketConnection - a connection between an InputSocket and an OutputSocket
+ * @ingroup Model
+ */
+class Socket {
+private:
+ /**
+ * Reference to the node where this Socket belongs to
+ */
+ NodeBase *node;
+
+ /**
+ * the datatype of this socket. Is used for automatically data transformation.
+ * @section data-conversion
+ */
+ DataType datatype;
+
+ /**
+ * the actual data type during execution. This can be different than the field datatype, based on the conversion rules of the node
+ * @section data-conversion
+ */
+ DataType actualType;
+
+ bNodeSocket *editorSocket;
+public:
+ Socket(DataType datatype);
+
+ DataType getDataType() const;
+ void setNode(NodeBase *node);
+ NodeBase *getNode() const;
+
+ /**
+ * @brief get the actual data type
+ *
+ * @note The actual data type can differ from the data type this socket expects.
+ * @return actual DataType
+ */
+ DataType getActualDataType() const;
+
+ /**
+ * @brief set the actual data type
+ * @param actualType the new actual type
+ */
+ void setActualDataType(DataType actualType);
+
+ const virtual int isConnected() const;
+ int isInputSocket() const;
+ int isOutputSocket() const;
+ virtual void determineResolution(int resolution[], unsigned int preferredResolution[]) {}
+ virtual void determineActualDataType() {}
+
+ void setEditorSocket(bNodeSocket *editorSocket) {this->editorSocket = editorSocket;}
+ bNodeSocket *getbNodeSocket() const {return this->editorSocket;}
+
+};
+
+
+#endif
diff --git a/source/blender/compositor/intern/COM_SocketConnection.cpp b/source/blender/compositor/intern/COM_SocketConnection.cpp
new file mode 100644
index 00000000000..9f0c736392a
--- /dev/null
+++ b/source/blender/compositor/intern/COM_SocketConnection.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SocketConnection.h"
+#include "COM_NodeOperation.h"
+
+SocketConnection::SocketConnection()
+{
+ this->fromSocket = NULL;
+ this->toSocket = NULL;
+ this->setIgnoreResizeCheck(false);
+}
+
+void SocketConnection::setFromSocket(OutputSocket *fromsocket)
+{
+ if (fromsocket == NULL) {
+ throw "ERROR";
+ }
+ this->fromSocket = fromsocket;
+}
+
+OutputSocket *SocketConnection::getFromSocket() const {return this->fromSocket;}
+void SocketConnection::setToSocket(InputSocket *tosocket)
+{
+ if (tosocket == NULL) {
+ throw "ERROR";
+ }
+ this->toSocket = tosocket;
+}
+
+InputSocket *SocketConnection::getToSocket() const {return this->toSocket;}
+
+NodeBase *SocketConnection::getFromNode() const
+{
+ if (this->getFromSocket() == NULL) {
+ return NULL;
+ }
+ else {
+ return this->getFromSocket()->getNode();
+ }
+}
+NodeBase *SocketConnection::getToNode() const
+{
+ if (this->getToSocket() == NULL) {
+ return NULL;
+ }
+ else {
+ return this->getToSocket()->getNode();
+ }
+}
+bool SocketConnection::isValid() const
+{
+ if ((this->getToSocket() != NULL && this->getFromSocket() != NULL)) {
+ if (this->getFromNode()->isOperation() && this->getToNode()->isOperation()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool SocketConnection::needsResolutionConversion() const
+{
+ if (this->ignoreResizeCheck) {return false;}
+ NodeOperation *fromOperation = (NodeOperation*)this->getFromNode();
+ NodeOperation *toOperation = (NodeOperation*)this->getToNode();
+ if (this->toSocket->getResizeMode() == COM_SC_NO_RESIZE) {return false;}
+ const unsigned int fromWidth = fromOperation->getWidth();
+ const unsigned int fromHeight = fromOperation->getHeight();
+ const unsigned int toWidth = toOperation->getWidth();
+ const unsigned int toHeight = toOperation->getHeight();
+
+ if (fromWidth == toWidth && fromHeight == toHeight) {
+ return false;
+ }
+ return true;
+}
diff --git a/source/blender/compositor/intern/COM_SocketConnection.h b/source/blender/compositor/intern/COM_SocketConnection.h
new file mode 100644
index 00000000000..1c4dcebfe07
--- /dev/null
+++ b/source/blender/compositor/intern/COM_SocketConnection.h
@@ -0,0 +1,123 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SocketConnection_h
+#define _COM_SocketConnection_h
+
+#include "DNA_node_types.h"
+#include "COM_Node.h"
+#include "COM_Socket.h"
+#include "COM_ChannelInfo.h"
+
+/**
+ * @brief An SocketConnection is an connection between an InputSocket and an OutputSocket.
+ *
+ * <pre>
+ * +----------+ To InputSocket +----------+
+ * | From | SocketConnection \| To Node |
+ * | Node *====================* |
+ * | |\ | |
+ * | | From OutputSocket +----------+
+ * +----------+
+ * </pre>
+ * @ingroup Model
+ * @see InputSocket
+ * @see OutputSocket
+ */
+class SocketConnection {
+private:
+ /**
+ * @brief Startpoint of the connection
+ */
+ OutputSocket *fromSocket;
+
+ /**
+ * @brief Endpoint of the connection
+ */
+ InputSocket *toSocket;
+
+ /**
+ * @brief has the resize already been done for this connection
+ */
+ bool ignoreResizeCheck;
+public:
+ SocketConnection();
+
+ /**
+ * @brief set the startpoint of the connection
+ * @param fromsocket
+ */
+ void setFromSocket(OutputSocket *fromsocket);
+
+ /**
+ * @brief get the startpoint of the connection
+ * @return from OutputSocket
+ */
+ OutputSocket *getFromSocket() const;
+
+ /**
+ * @brief set the endpoint of the connection
+ * @param tosocket
+ */
+ void setToSocket(InputSocket *tosocket);
+
+ /**
+ * @brief get the endpoint of the connection
+ * @return to InputSocket
+ */
+ InputSocket *getToSocket() const;
+
+ /**
+ * @brief check if this connection is valid
+ */
+ bool isValid() const;
+
+ /**
+ * @brief return the Node where this connection is connected from
+ */
+ NodeBase * getFromNode() const;
+
+ /**
+ * @brief return the Node where this connection is connected to
+ */
+ NodeBase * getToNode() const;
+
+ /**
+ * @brief set, whether the resize has already been done for this SocketConnection
+ */
+ void setIgnoreResizeCheck(bool check) {this->ignoreResizeCheck = check;}
+
+ /**
+ * @brief has the resize already been done for this SocketConnection
+ */
+ bool isIgnoreResizeCheck() const { return this->ignoreResizeCheck;}
+
+ /**
+ * @brief does this SocketConnection need resolution conversion
+ * @note PreviewOperation's will be ignored
+ * @note Already converted SocketConnection's will be ignored
+ * @return needs conversion [true:false]
+ */
+ bool needsResolutionConversion() const;
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_SocketReader.cpp b/source/blender/compositor/intern/COM_SocketReader.cpp
new file mode 100644
index 00000000000..45f3be5a66c
--- /dev/null
+++ b/source/blender/compositor/intern/COM_SocketReader.cpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SocketReader.h"
+
+
diff --git a/source/blender/compositor/intern/COM_SocketReader.h b/source/blender/compositor/intern/COM_SocketReader.h
new file mode 100644
index 00000000000..24322847517
--- /dev/null
+++ b/source/blender/compositor/intern/COM_SocketReader.h
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SocketReader_h
+#define _COM_SocketReader_h
+#include "BLI_rect.h"
+#include "COM_defines.h"
+
+typedef enum PixelSampler {
+ COM_PS_NEAREST,
+ COM_PS_BILINEAR,
+ COM_PS_BICUBIC
+} PixelSampler;
+
+class MemoryBuffer;
+/**
+ * @brief Helper class for reading socket data.
+ * Only use this class for dispatching (un-ary and n-ary) executions.
+ * @ingroup Execution
+ */
+class SocketReader {
+private:
+protected:
+ /**
+ * @brief Holds the width of the output of this operation.
+ */
+ unsigned int width;
+
+ /**
+ * @brief Holds the height of the output of this operation.
+ */
+ unsigned int height;
+
+
+ /**
+ * @brief calculate a single pixel
+ * @note this method is called for non-complex
+ * @param result is a float[4] array to store the result
+ * @param x the x-coordinate of the pixel to calculate in image space
+ * @param y the y-coordinate of the pixel to calculate in image space
+ * @param inputBuffers chunks that can be read by their ReadBufferOperation.
+ */
+ virtual void executePixel(float *result, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]) {}
+
+ /**
+ * @brief calculate a single pixel
+ * @note this method is called for complex
+ * @param result is a float[4] array to store the result
+ * @param x the x-coordinate of the pixel to calculate in image space
+ * @param y the y-coordinate of the pixel to calculate in image space
+ * @param inputBuffers chunks that can be read by their ReadBufferOperation.
+ * @param chunkData chunk specific data a during execution time.
+ */
+ virtual void executePixel(float *result, int x, int y, MemoryBuffer *inputBuffers[], void *chunkData) {
+ executePixel(result, x, y, COM_PS_NEAREST, inputBuffers);
+ }
+
+ /**
+ * @brief calculate a single pixel using an EWA filter
+ * @note this method is called for complex
+ * @param result is a float[4] array to store the result
+ * @param x the x-coordinate of the pixel to calculate in image space
+ * @param y the y-coordinate of the pixel to calculate in image space
+ * @param dx
+ * @param dy
+ * @param inputBuffers chunks that can be read by their ReadBufferOperation.
+ */
+ virtual void executePixel(float *result, float x, float y, float dx, float dy, MemoryBuffer *inputBuffers[]) {}
+
+public:
+ inline void read(float *result, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]) {
+ executePixel(result, x, y, sampler, inputBuffers);
+ }
+ inline void read(float *result, int x, int y, MemoryBuffer *inputBuffers[], void *chunkData) {
+ executePixel(result, x, y, inputBuffers, chunkData);
+ }
+ inline void read(float *result, float x, float y, float dx, float dy, MemoryBuffer *inputBuffers[]) {
+ executePixel(result, x, y, dx, dy, inputBuffers);
+ }
+
+ virtual void *initializeTileData(rcti *rect, MemoryBuffer** memoryBuffers) {
+ return 0;
+ }
+ virtual void deinitializeTileData(rcti *rect, MemoryBuffer** memoryBuffers, void *data) {
+ }
+
+ virtual MemoryBuffer *getInputMemoryBuffer(MemoryBuffer** memoryBuffers) {return 0;}
+
+
+ inline const unsigned int getWidth() const {return this->width;}
+ inline const unsigned int getHeight() const {return this->height;}
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_WorkPackage.cpp b/source/blender/compositor/intern/COM_WorkPackage.cpp
new file mode 100644
index 00000000000..07974b9aafc
--- /dev/null
+++ b/source/blender/compositor/intern/COM_WorkPackage.cpp
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_WorkPackage.h"
+
+WorkPackage::WorkPackage(ExecutionGroup *group, unsigned int chunkNumber)
+{
+ this->executionGroup = group;
+ this->chunkNumber = chunkNumber;
+}
diff --git a/source/blender/compositor/intern/COM_WorkPackage.h b/source/blender/compositor/intern/COM_WorkPackage.h
new file mode 100644
index 00000000000..8bdf21499cf
--- /dev/null
+++ b/source/blender/compositor/intern/COM_WorkPackage.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+class WorkPackage;
+
+#ifndef _COM_WorkPackage_h_
+#define _COM_WorkPackage_h_
+
+#include "COM_ExecutionGroup.h"
+
+/**
+ * @brief contains data about work that can be scheduled
+ * @see WorkScheduler
+ */
+class WorkPackage {
+private:
+ /**
+ * @brief executionGroup with the operations-setup to be evaluated
+ */
+ ExecutionGroup *executionGroup;
+
+ /**
+ * @brief number of the chunk to be executed
+ */
+ unsigned int chunkNumber;
+public:
+ /**
+ * @constructor
+ * @param group the ExecutionGroup
+ * @param chunkNumber the number of the chunk
+ */
+ WorkPackage(ExecutionGroup *group, unsigned int chunkNumber);
+
+ /**
+ * @brief get the ExecutionGroup
+ */
+ ExecutionGroup *getExecutionGroup() const {return this->executionGroup;}
+
+ /**
+ * @brief get the number of the chunk
+ */
+ unsigned int getChunkNumber() const {return this->chunkNumber;}
+};
+
+#endif
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.cpp b/source/blender/compositor/intern/COM_WorkScheduler.cpp
new file mode 100644
index 00000000000..c82a01a1e0a
--- /dev/null
+++ b/source/blender/compositor/intern/COM_WorkScheduler.cpp
@@ -0,0 +1,326 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include <list>
+#include "COM_WorkScheduler.h"
+#include "PIL_time.h"
+#include "BLI_threads.h"
+#include "COM_CPUDevice.h"
+#include "COM_OpenCLDevice.h"
+#include "OCL_opencl.h"
+#include "stdio.h"
+#include "COM_OpenCLKernels.cl.cpp"
+
+#if COM_CURRENT_THREADING_MODEL == COM_TM_NOTHREAD
+#warning COM_CURRENT_THREADING_MODEL COM_TM_NOTHREAD is activated. Use only for debugging.
+#elif COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+#else
+#error COM_CURRENT_THREADING_MODEL No threading model selected
+#endif
+
+
+/// @brief global state of the WorkScheduler.
+static WorkSchedulerState state;
+/// @brief list of all CPUDevices. for every hardware thread an instance of CPUDevice is created
+static vector<CPUDevice*> cpudevices;
+
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+/// @brief list of all thread for every CPUDevice in cpudevices a thread exists
+static ListBase cputhreads;
+/// @brief all scheduled work for the cpu
+static ThreadQueue * cpuqueue;
+static ThreadQueue * gpuqueue;
+#ifdef COM_OPENCL_ENABLED
+static cl_context context;
+static cl_program program;
+/// @brief list of all OpenCLDevices. for every OpenCL GPU device an instance of OpenCLDevice is created
+static vector<OpenCLDevice*> gpudevices;
+/// @brief list of all thread for every GPUDevice in cpudevices a thread exists
+static ListBase gputhreads;
+/// @brief all scheduled work for the gpu
+#ifdef COM_OPENCL_ENABLED
+static bool openclActive = false;
+#endif
+#endif
+#endif
+
+
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+void *WorkScheduler::thread_execute_cpu(void *data)
+{
+ bool continueLoop = true;
+ Device *device = (Device*)data;
+ while (continueLoop) {
+ WorkPackage *work = (WorkPackage*)BLI_thread_queue_pop(cpuqueue);
+ if (work) {
+ device->execute(work);
+ delete work;
+ }
+ PIL_sleep_ms(10);
+
+ if (WorkScheduler::isStopping()) {
+ continueLoop = false;
+ }
+ }
+ return NULL;
+}
+
+void *WorkScheduler::thread_execute_gpu(void *data)
+{
+ bool continueLoop = true;
+ Device *device = (Device*)data;
+ while (continueLoop) {
+ WorkPackage *work = (WorkPackage*)BLI_thread_queue_pop(gpuqueue);
+ if (work) {
+ device->execute(work);
+ delete work;
+ }
+ PIL_sleep_ms(10);
+
+ if (WorkScheduler::isStopping()) {
+ continueLoop = false;
+ }
+ }
+ return NULL;
+}
+
+bool WorkScheduler::isStopping() {return state == COM_WSS_STOPPING;}
+#endif
+
+
+
+void WorkScheduler::schedule(ExecutionGroup *group, int chunkNumber)
+{
+ WorkPackage *package = new WorkPackage(group, chunkNumber);
+#if COM_CURRENT_THREADING_MODEL == COM_TM_NOTHREAD
+ CPUDevice device;
+ device.execute(package);
+ delete package;
+#elif COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+#ifdef COM_OPENCL_ENABLED
+ if (group->isOpenCL() && openclActive) {
+ BLI_thread_queue_push(gpuqueue, package);
+ }
+ else {
+ BLI_thread_queue_push(cpuqueue, package);
+ }
+#else
+ BLI_thread_queue_push(cpuqueue, package);
+#endif
+#endif
+}
+
+void WorkScheduler::start(CompositorContext &context)
+{
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+ unsigned int index;
+ cpuqueue = BLI_thread_queue_init();
+ BLI_thread_queue_nowait(cpuqueue);
+ BLI_init_threads(&cputhreads, thread_execute_cpu, cpudevices.size());
+ for (index = 0 ; index < cpudevices.size() ; index ++) {
+ Device *device = cpudevices[index];
+ BLI_insert_thread(&cputhreads, device);
+ }
+#ifdef COM_OPENCL_ENABLED
+ if (context.getHasActiveOpenCLDevices()) {
+ gpuqueue = BLI_thread_queue_init();
+ BLI_thread_queue_nowait(gpuqueue);
+ BLI_init_threads(&gputhreads, thread_execute_gpu, gpudevices.size());
+ for (index = 0 ; index < gpudevices.size() ; index ++) {
+ Device *device = gpudevices[index];
+ BLI_insert_thread(&gputhreads, device);
+ }
+ openclActive = true;
+ }
+ else {
+ openclActive = false;
+ }
+#endif
+#endif
+ state = COM_WSS_STARTED;
+}
+void WorkScheduler::finish()
+{
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+#ifdef COM_OPENCL_ENABLED
+ if (openclActive) {
+ while (BLI_thread_queue_size(gpuqueue) + BLI_thread_queue_size(cpuqueue) > 0) {
+ PIL_sleep_ms(10);
+ }
+ }
+ else {
+ while (BLI_thread_queue_size(cpuqueue) > 0) {
+ PIL_sleep_ms(10);
+ }
+ }
+#else
+ while (BLI_thread_queue_size(cpuqueue) > 0) {
+ PIL_sleep_ms(10);
+ }
+#endif
+#endif
+}
+void WorkScheduler::stop()
+{
+ state = COM_WSS_STOPPING;
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+ BLI_end_threads(&cputhreads);
+ BLI_thread_queue_free(cpuqueue);
+ cpuqueue = NULL;
+#ifdef COM_OPENCL_ENABLED
+ if (openclActive) {
+ BLI_end_threads(&gputhreads);
+ BLI_thread_queue_free(gpuqueue);
+ gpuqueue = NULL;
+ }
+#endif
+#endif
+ state = COM_WSS_STOPPED;
+}
+
+bool WorkScheduler::hasGPUDevices()
+{
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+#ifdef COM_OPENCL_ENABLED
+ return gpudevices.size()>0;
+#else
+ return 0;
+#endif
+#else
+ return 0;
+#endif
+}
+
+extern void clContextError(const char *errinfo, const void *private_info, size_t cb, void *user_data)
+{
+ printf("OPENCL error: %s\n", errinfo);
+}
+
+void WorkScheduler::initialize()
+{
+ state = COM_WSS_UNKNOWN;
+
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+ int numberOfCPUThreads = BLI_system_thread_count();
+
+ for (int index = 0 ; index < numberOfCPUThreads ; index ++) {
+ CPUDevice *device = new CPUDevice();
+ device->initialize();
+ cpudevices.push_back(device);
+ }
+#ifdef COM_OPENCL_ENABLED
+ context = NULL;
+ program = NULL;
+ if (clCreateContextFromType) {
+ cl_uint numberOfPlatforms;
+ cl_int error;
+ error = clGetPlatformIDs(0, 0, &numberOfPlatforms);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ printf("%d number of platforms\n", numberOfPlatforms);
+ cl_platform_id *platforms = new cl_platform_id[numberOfPlatforms];
+ error = clGetPlatformIDs(numberOfPlatforms, platforms, 0);
+ unsigned int indexPlatform;
+ cl_uint totalNumberOfDevices = 0;
+ for (indexPlatform = 0 ; indexPlatform < numberOfPlatforms ; indexPlatform ++) {
+ cl_platform_id platform = platforms[indexPlatform];
+ cl_uint numberOfDevices;
+ clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, 0, &numberOfDevices);
+ totalNumberOfDevices += numberOfDevices;
+ }
+
+ cl_device_id *cldevices = new cl_device_id[totalNumberOfDevices];
+ unsigned int numberOfDevicesReceived = 0;
+ for (indexPlatform = 0 ; indexPlatform < numberOfPlatforms ; indexPlatform ++) {
+ cl_platform_id platform = platforms[indexPlatform];
+ cl_uint numberOfDevices;
+ clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, 0, &numberOfDevices);
+ clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, numberOfDevices, cldevices+numberOfDevicesReceived*sizeof (cl_device_id), 0);
+ numberOfDevicesReceived += numberOfDevices;
+ }
+ context = clCreateContext(NULL, totalNumberOfDevices, cldevices, clContextError, NULL, &error);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ program = clCreateProgramWithSource(context, 1, &sourcecode, 0, &error);
+ error = clBuildProgram(program, totalNumberOfDevices, cldevices, 0, 0, 0);
+ if (error != CL_SUCCESS) {
+ cl_int error2;
+ size_t ret_val_size;
+ printf("CLERROR[%d]: %s\n", error, clewErrorString(error));
+ error2 = clGetProgramBuildInfo(program, cldevices[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size);
+ if (error2 != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ char *build_log = new char[ret_val_size+1];
+ error2 = clGetProgramBuildInfo(program, cldevices[0], CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL);
+ if (error2 != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ build_log[ret_val_size] = '\0';
+ printf("%s", build_log);
+ delete build_log;
+
+ }
+ unsigned int indexDevices;
+ for (indexDevices = 0 ; indexDevices < totalNumberOfDevices ; indexDevices ++) {
+ cl_device_id device = cldevices[indexDevices];
+ OpenCLDevice *clDevice = new OpenCLDevice(context, device, program);
+ clDevice->initialize(),
+ gpudevices.push_back(clDevice);
+ char resultString[32];
+ error = clGetDeviceInfo(device, CL_DEVICE_NAME, 32, resultString, 0);
+ printf("OPENCL_DEVICE: %s, ", resultString);
+ error = clGetDeviceInfo(device, CL_DEVICE_VENDOR, 32, resultString, 0);
+ printf("%s\n", resultString);
+ }
+ delete cldevices;
+ delete platforms;
+ }
+#endif
+#endif
+
+ state = COM_WSS_INITIALIZED;
+}
+
+void WorkScheduler::deinitialize()
+{
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+ Device *device;
+ while (cpudevices.size()>0) {
+ device = cpudevices.back();
+ cpudevices.pop_back();
+ device->deinitialize();
+ delete device;
+ }
+#ifdef COM_OPENCL_ENABLED
+ while (gpudevices.size()>0) {
+ device = gpudevices.back();
+ gpudevices.pop_back();
+ device->deinitialize();
+ delete device;
+ }
+ if (program) {
+ clReleaseProgram(program);
+ program = NULL;
+ }
+ if (context) {
+ clReleaseContext(context);
+ context = NULL;
+ }
+#endif
+#endif
+ state = COM_WSS_DEINITIALIZED;
+}
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.h b/source/blender/compositor/intern/COM_WorkScheduler.h
new file mode 100644
index 00000000000..0de1763749e
--- /dev/null
+++ b/source/blender/compositor/intern/COM_WorkScheduler.h
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_WorkScheduler_h_
+#define _COM_WorkScheduler_h_
+
+#include "COM_ExecutionGroup.h"
+extern "C" {
+ #include "BLI_threads.h"
+}
+#include "COM_WorkPackage.h"
+#include "COM_defines.h"
+#include "COM_Device.h"
+
+// STATES
+/** @brief states of the WorkScheduler
+ * @ingroup execution
+ */
+typedef enum WorkSchedulerState {
+ COM_WSS_UNKNOWN = -1,
+ COM_WSS_INITIALIZED = 0,
+ COM_WSS_STARTED = 1,
+ COM_WSS_STOPPING = 2,
+ COM_WSS_STOPPED = 3,
+ COM_WSS_DEINITIALIZED = 4
+} WorkSchedulerState;
+
+/** @brief the workscheduler
+ * @ingroup execution
+ */
+class WorkScheduler {
+
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
+ /**
+ * @brief are we being stopped.
+ */
+ static bool isStopping();
+
+ /**
+ * @brief main thread loop for cpudevices
+ * inside this loop new work is queried and being executed
+ */
+ static void *thread_execute_cpu(void *data);
+
+ /**
+ * @brief main thread loop for gpudevices
+ * inside this loop new work is queried and being executed
+ */
+ static void *thread_execute_gpu(void *data);
+#endif
+public:
+ /**
+ * @brief schedule a chunk of a group to be calculated.
+ * An execution group schedules a chunk in the WorkScheduler
+ * when ExecutionGroup.isOpenCL is set the work will be handled by a OpenCLDevice
+ * otherwide the work is scheduled for an CPUDevice
+ * @see ExecutionGroup.execute
+ * @param group the execution group
+ * @param chunkNumber the number of the chunk in the group to be executed
+ */
+ static void schedule(ExecutionGroup *group, int chunkNumber);
+
+ /**
+ * @brief initialize the WorkScheduler
+ *
+ * during initialization the mutexes are initialized.
+ * there are two mutexes (for every device type one)
+ * After mutex initialization the system is queried in order to count the number of CPUDevices and GPUDevices to be created.
+ * For every hardware thread a CPUDevice and for every OpenCL GPU device a OpenCLDevice is created.
+ * these devices are stored in a separate list (cpudevices & gpudevices)
+ */
+ static void initialize();
+
+ /**
+ * @brief deinitialize the WorkScheduler
+ * free all allocated resources
+ */
+ static void deinitialize();
+
+ /**
+ * @brief Start the execution
+ * this methods will start the WorkScheduler. Inside this method all threads are initialized.
+ * for every device a thread is created.
+ * @see initialize Initialization and query of the number of devices
+ */
+ static void start(CompositorContext &context);
+
+ /**
+ * @brief stop the execution
+ * All created thread by the start method are destroyed.
+ * @see start
+ */
+ static void stop();
+
+ /**
+ * @brief wait for all work to be completed.
+ */
+ static void finish();
+
+ /**
+ * @brief Are there OpenCL capable GPU devices initialized?
+ * the result of this method is stored in the CompositorContext
+ * A node can generate a different operation tree when OpenCLDevices exists.
+ * @see CompositorContext.getHasActiveOpenCLDevices
+ */
+ static bool hasGPUDevices();
+};
+#endif
diff --git a/source/blender/compositor/intern/COM_compositor.cpp b/source/blender/compositor/intern/COM_compositor.cpp
new file mode 100644
index 00000000000..bd967190987
--- /dev/null
+++ b/source/blender/compositor/intern/COM_compositor.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+
+#include "BKE_node.h"
+extern "C" {
+ #include "BLI_threads.h"
+}
+
+#include "COM_compositor.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_WorkScheduler.h"
+
+static ThreadMutex *compositorMutex;
+void COM_execute(bNodeTree *editingtree, int rendering)
+{
+ if (compositorMutex == NULL) { /// TODO: move to blender startup phase
+ compositorMutex = new ThreadMutex();
+ BLI_mutex_init(compositorMutex);
+ WorkScheduler::initialize(); ///TODO: call workscheduler.deinitialize somewhere
+ }
+ BLI_mutex_lock(compositorMutex);
+ if (editingtree->test_break && editingtree->test_break(editingtree->tbh)) {
+ // during editing multiple calls to this method can be triggered.
+ // make sure one the last one will be doing the work.
+ BLI_mutex_unlock(compositorMutex);
+ return;
+
+ }
+
+ /* set progress bar to 0% and status to init compositing*/
+ editingtree->progress(editingtree->prh, 0.0);
+ editingtree->stats_draw(editingtree->sdh, (char*)"Compositing");
+
+ /* initialize execution system */
+ ExecutionSystem *system = new ExecutionSystem(editingtree, rendering);
+ system->execute();
+ delete system;
+
+ BLI_mutex_unlock(compositorMutex);
+}
diff --git a/source/blender/compositor/nodes/COM_AlphaOverNode.cpp b/source/blender/compositor/nodes/COM_AlphaOverNode.cpp
new file mode 100644
index 00000000000..0037480d2e9
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_AlphaOverNode.cpp
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_AlphaOverNode.h"
+
+#include "COM_MixBaseOperation.h"
+#include "COM_AlphaOverKeyOperation.h"
+#include "COM_AlphaOverMixedOperation.h"
+#include "COM_AlphaOverPremultiplyOperation.h"
+
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "DNA_material_types.h" // the ramp types
+
+void AlphaOverNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *valueSocket = this->getInputSocket(0);
+ InputSocket *color1Socket = this->getInputSocket(1);
+ InputSocket *color2Socket = this->getInputSocket(2);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ bNode *editorNode = this->getbNode();
+
+ MixBaseOperation *convertProg;
+ NodeTwoFloats *ntf = (NodeTwoFloats*)editorNode->storage;
+ if (ntf->x!= 0.0f) {
+ AlphaOverMixedOperation *mixOperation = new AlphaOverMixedOperation();
+ mixOperation->setX(ntf->x);
+ convertProg = mixOperation;
+
+ }
+ else if (editorNode->custom1) {
+ convertProg = new AlphaOverKeyOperation();
+ }
+ else {
+ convertProg = new AlphaOverPremultiplyOperation();
+ }
+
+ convertProg->setUseValueAlphaMultiply(false);
+ if (color1Socket->isConnected()) {
+ convertProg->setResolutionInputSocketIndex(1);
+ }
+ else if (color2Socket->isConnected()) {
+ convertProg->setResolutionInputSocketIndex(2);
+ }
+ else {
+ convertProg->setResolutionInputSocketIndex(0);
+ }
+ valueSocket->relinkConnections(convertProg->getInputSocket(0), true, 0, graph);
+ color1Socket->relinkConnections(convertProg->getInputSocket(1), true, 1, graph);
+ color2Socket->relinkConnections(convertProg->getInputSocket(2), true, 2, graph);
+ outputSocket->relinkConnections(convertProg->getOutputSocket(0));
+ graph->addOperation(convertProg);
+}
diff --git a/source/blender/compositor/nodes/COM_AlphaOverNode.h b/source/blender/compositor/nodes/COM_AlphaOverNode.h
new file mode 100644
index 00000000000..64f78e76837
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_AlphaOverNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_AlphaOverNode_h
+#define _COM_AlphaOverNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief AlphaOverNode
+ * @ingroup Node
+ */
+class AlphaOverNode: public Node {
+public:
+ AlphaOverNode(bNode *editorNode) :Node(editorNode) {}
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp b/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp
new file mode 100644
index 00000000000..436d92df7f8
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BilateralBlurNode.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BilateralBlurNode.h"
+#include "DNA_scene_types.h"
+#include "DNA_node_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_BilateralBlurOperation.h"
+
+BilateralBlurNode::BilateralBlurNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void BilateralBlurNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ NodeBilateralBlurData *data = (NodeBilateralBlurData*)this->getbNode()->storage;
+ BilateralBlurOperation *operation = new BilateralBlurOperation();
+ operation->setQuality(context->getQuality());
+ operation->setData(data);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_BilateralBlurNode.h b/source/blender/compositor/nodes/COM_BilateralBlurNode.h
new file mode 100644
index 00000000000..a92de0eaa62
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BilateralBlurNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BilateralBlurNode_h_
+#define _COM_BilateralBlurNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief BilateralBlurNode
+ * @ingroup Node
+ */
+class BilateralBlurNode: public Node {
+public:
+ BilateralBlurNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_BlurNode.cpp b/source/blender/compositor/nodes/COM_BlurNode.cpp
new file mode 100644
index 00000000000..789a6a6eee2
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BlurNode.cpp
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BlurNode.h"
+#include "DNA_scene_types.h"
+#include "DNA_node_types.h"
+#include "COM_GaussianXBlurOperation.h"
+#include "COM_GaussianYBlurOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_GaussianBokehBlurOperation.h"
+#include "COM_FastGaussianBlurOperation.h"
+
+BlurNode::BlurNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void BlurNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ bNode *editorNode = this->getbNode();
+ NodeBlurData * data = (NodeBlurData*)editorNode->storage;
+#if 0
+ const bNodeSocket *sock = this->getInputSocket(1)->getbNodeSocket();
+ const float size = ((const bNodeSocketValueFloat*)sock->default_value)->value;
+#endif
+
+ CompositorQuality quality = context->getQuality();
+
+ if (data->filtertype == R_FILTER_MITCH || data->filtertype == R_FILTER_CATROM) {
+ quality = COM_QUALITY_HIGH;
+ }
+ if (data->filtertype == R_FILTER_FAST_GAUSS) {
+ FastGaussianBlurOperation *operationfgb = new FastGaussianBlurOperation();
+ operationfgb->setData(data);
+ this->getInputSocket(0)->relinkConnections(operationfgb->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operationfgb->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operationfgb->getOutputSocket(0));
+ graph->addOperation(operationfgb);
+ addPreviewOperation(graph, operationfgb->getOutputSocket(), 5);
+ }
+ else if (!data->bokeh) {
+ GaussianXBlurOperation *operationx = new GaussianXBlurOperation();
+ operationx->setData(data);
+ operationx->setQuality(quality);
+ this->getInputSocket(0)->relinkConnections(operationx->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operationx->getInputSocket(1), true, 1, graph);
+ graph->addOperation(operationx);
+ GaussianYBlurOperation *operationy = new GaussianYBlurOperation();
+ operationy->setData(data);
+ operationy->setQuality(quality);
+ this->getOutputSocket(0)->relinkConnections(operationy->getOutputSocket());
+ graph->addOperation(operationy);
+ addLink(graph, operationx->getOutputSocket(), operationy->getInputSocket(0));
+ addLink(graph, operationx->getInputSocket(1)->getConnection()->getFromSocket(), operationy->getInputSocket(1));
+ addPreviewOperation(graph, operationy->getOutputSocket(), 5);
+ }
+ else {
+ GaussianBokehBlurOperation *operation = new GaussianBokehBlurOperation();
+ operation->setData(data);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ operation->setQuality(quality);
+ graph->addOperation(operation);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ addPreviewOperation(graph, operation->getOutputSocket(), 5);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_BlurNode.h b/source/blender/compositor/nodes/COM_BlurNode.h
new file mode 100644
index 00000000000..04a680c32cf
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BlurNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BlurNode_h_
+#define _COM_BlurNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief BlurNode
+ * @ingroup Node
+ */
+
+class BlurNode: public Node {
+public:
+ BlurNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_BokehBlurNode.cpp b/source/blender/compositor/nodes/COM_BokehBlurNode.cpp
new file mode 100644
index 00000000000..9e80d024bd2
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BokehBlurNode.cpp
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BokehBlurNode.h"
+#include "DNA_scene_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_object_types.h"
+#include "DNA_node_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_BokehBlurOperation.h"
+#include "COM_VariableSizeBokehBlurOperation.h"
+#include "COM_ConvertDepthToRadiusOperation.h"
+
+BokehBlurNode::BokehBlurNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void BokehBlurNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ Object *camob = context->getScene()->camera;
+
+ if (this->getInputSocket(2)->isConnected()) {
+ VariableSizeBokehBlurOperation *operation = new VariableSizeBokehBlurOperation();
+ ConvertDepthToRadiusOperation *converter = new ConvertDepthToRadiusOperation();
+ converter->setfStop(4.0f);
+ converter->setCameraObject(camob);
+ operation->setMaxBlur(16);
+ operation->setQuality(context->getQuality());
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getInputSocket(2)->relinkConnections(converter->getInputSocket(0), true, 2, graph);
+ addLink(graph, converter->getOutputSocket(), operation->getInputSocket(2));
+ graph->addOperation(operation);
+ graph->addOperation(converter);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ }
+ else {
+ BokehBlurOperation *operation = new BokehBlurOperation();
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getInputSocket(3)->relinkConnections(operation->getInputSocket(2), true, 3, graph);
+ operation->setSize(((bNodeSocketValueFloat*)this->getInputSocket(2)->getbNodeSocket()->default_value)->value);
+ operation->setQuality(context->getQuality());
+ graph->addOperation(operation);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_BokehBlurNode.h b/source/blender/compositor/nodes/COM_BokehBlurNode.h
new file mode 100644
index 00000000000..eb9fada5112
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BokehBlurNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehBlurNode_h_
+#define _COM_BokehBlurNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief BokehBlurNode
+ * @ingroup Node
+ */
+
+class BokehBlurNode: public Node {
+public:
+ BokehBlurNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_BokehImageNode.cpp b/source/blender/compositor/nodes/COM_BokehImageNode.cpp
new file mode 100644
index 00000000000..35511d213f5
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BokehImageNode.cpp
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BokehImageNode.h"
+#include "DNA_scene_types.h"
+#include "COM_BokehImageOperation.h"
+#include "COM_ExecutionSystem.h"
+
+BokehImageNode::BokehImageNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void BokehImageNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ BokehImageOperation *operation = new BokehImageOperation();
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ operation->setData((NodeBokehImage*)this->getbNode()->storage);
+ addPreviewOperation(graph, operation->getOutputSocket(0), 9);
+}
diff --git a/source/blender/compositor/nodes/COM_BokehImageNode.h b/source/blender/compositor/nodes/COM_BokehImageNode.h
new file mode 100644
index 00000000000..d4fabf0e516
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BokehImageNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehImageNode_h_
+#define _COM_BokehImageNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief BokehImageNode
+ * @ingroup Node
+ */
+class BokehImageNode: public Node {
+public:
+ BokehImageNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_BoxMaskNode.cpp b/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
new file mode 100644
index 00000000000..322b5893096
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BoxMaskNode.h"
+#include "DNA_scene_types.h"
+#include "COM_BoxMaskOperation.h"
+#include "COM_ExecutionSystem.h"
+
+BoxMaskNode::BoxMaskNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void BoxMaskNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ BoxMaskOperation *operation;
+ operation = new BoxMaskOperation();
+ operation->setData((NodeBoxMask*)this->getbNode()->storage);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ operation->setMaskType(this->getbNode()->custom1);
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_BoxMaskNode.h b/source/blender/compositor/nodes/COM_BoxMaskNode.h
new file mode 100644
index 00000000000..c71c6a18388
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BoxMaskNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BoxMaskNode_h_
+#define _COM_BoxMaskNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief BoxMaskNode
+ * @ingroup Node
+ */
+class BoxMaskNode: public Node {
+public:
+ BoxMaskNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_BrightnessNode.cpp b/source/blender/compositor/nodes/COM_BrightnessNode.cpp
new file mode 100644
index 00000000000..2bcf7250173
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BrightnessNode.cpp
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BrightnessNode.h"
+#include "DNA_scene_types.h"
+#include "COM_BrightnessOperation.h"
+#include "COM_ExecutionSystem.h"
+
+BrightnessNode::BrightnessNode(bNode *editorNode): Node(editorNode)
+{
+}
+/// @todo: add anti alias when not FSA
+void BrightnessNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ BrightnessOperation *operation = new BrightnessOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0));
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1),true, 1, graph);
+ this->getInputSocket(2)->relinkConnections(operation->getInputSocket(2),true, 2, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_BrightnessNode.h b/source/blender/compositor/nodes/COM_BrightnessNode.h
new file mode 100644
index 00000000000..4c3b6421322
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_BrightnessNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BrightnessNode_h_
+#define _COM_BrightnessNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief BrightnessNode
+ * @ingroup Node
+ */
+class BrightnessNode: public Node {
+public:
+ BrightnessNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp b/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp
new file mode 100644
index 00000000000..08980de8d98
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ChannelMatteNode.h"
+#include "BKE_node.h"
+#include "COM_ChannelMatteOperation.h"
+#include "COM_ConvertRGBToHSVOperation.h"
+#include "COM_ConvertRGBToYCCOperation.h"
+#include "COM_ConvertRGBToYUVOperation.h"
+#include "COM_SetAlphaOperation.h"
+
+ChannelMatteNode::ChannelMatteNode(bNode *editorNode): Node(editorNode)
+{}
+
+void ChannelMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ InputSocket *inputSocketImage = this->getInputSocket(0);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+ OutputSocket *outputSocketMatte = this->getOutputSocket(1);
+
+ NodeOperation *convert=NULL;
+ bNode *node = this->getbNode();
+
+ /* colorspace */
+ switch (node->custom1) {
+ case CMP_NODE_CHANNEL_MATTE_CS_RGB:
+ break;
+ case CMP_NODE_CHANNEL_MATTE_CS_HSV: /*HSV*/
+ convert = new ConvertRGBToHSVOperation();
+ break;
+ case CMP_NODE_CHANNEL_MATTE_CS_YUV: /*YUV*/
+ convert = new ConvertRGBToYUVOperation();
+ break;
+ case CMP_NODE_CHANNEL_MATTE_CS_YCC: /*YCC*/
+ convert = new ConvertRGBToYCCOperation();
+ ((ConvertRGBToYCCOperation *)convert)->setMode(0); /* BLI_YCC_ITU_BT601 */
+ break;
+ default:
+ break;
+ }
+
+ ChannelMatteOperation *operation = new ChannelMatteOperation();
+ /* pass the ui properties to the operation */
+ operation->setSettings((NodeChroma*)node->storage, node->custom2);
+
+ SetAlphaOperation *operationAlpha = new SetAlphaOperation();
+
+ if (convert) {
+ inputSocketImage->relinkConnections(convert->getInputSocket(0), true, 0, graph);
+ addLink(graph, convert->getOutputSocket(), operation->getInputSocket(0));
+ addLink(graph, convert->getInputSocket(0)->getConnection()->getFromSocket(), operationAlpha->getInputSocket(0));
+ graph->addOperation(convert);
+ }
+ else {
+ inputSocketImage->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ addLink(graph, operation->getInputSocket(0)->getConnection()->getFromSocket(), operationAlpha->getInputSocket(0));
+ }
+
+ if (outputSocketMatte->isConnected()) {
+ outputSocketMatte->relinkConnections(operation->getOutputSocket(0));
+ }
+
+ graph->addOperation(operation);
+ graph->addOperation(operationAlpha);
+
+ addLink(graph, operation->getOutputSocket(), operationAlpha->getInputSocket(1));
+ addPreviewOperation(graph, operationAlpha->getOutputSocket(), 9);
+
+ if (outputSocketImage->isConnected()) {
+ outputSocketImage->relinkConnections(operationAlpha->getOutputSocket());
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_ChannelMatteNode.h b/source/blender/compositor/nodes/COM_ChannelMatteNode.h
new file mode 100644
index 00000000000..cb67ac604b2
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ChannelMatteNode.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef COM_ChannelMatteNODE_H
+#define COM_ChannelMatteNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief ChannelMatteNode
+ * @ingroup Node
+ */
+class ChannelMatteNode : public Node
+{
+public:
+ ChannelMatteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_ChannelMatteNODE_H
diff --git a/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp b/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp
new file mode 100644
index 00000000000..45176cb007c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ChromaMatteNode.cpp
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ChromaMatteNode.h"
+#include "BKE_node.h"
+#include "COM_ChromaMatteOperation.h"
+#include "COM_ConvertRGBToYCCOperation.h"
+#include "COM_SetAlphaOperation.h"
+
+ChromaMatteNode::ChromaMatteNode(bNode *editorNode): Node(editorNode)
+{}
+
+void ChromaMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ InputSocket *inputSocketImage = this->getInputSocket(0);
+ InputSocket *inputSocketKey = this->getInputSocket(1);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+ OutputSocket *outputSocketMatte = this->getOutputSocket(1);
+
+ ConvertRGBToYCCOperation *operationRGBToYCC_Image = new ConvertRGBToYCCOperation();
+ ConvertRGBToYCCOperation *operationRGBToYCC_Key = new ConvertRGBToYCCOperation();
+ operationRGBToYCC_Image->setMode(0); /* BLI_YCC_ITU_BT601 */
+ operationRGBToYCC_Key->setMode(0); /* BLI_YCC_ITU_BT601 */
+
+ ChromaMatteOperation *operation = new ChromaMatteOperation();
+ bNode *editorsnode = getbNode();
+ operation->setSettings((NodeChroma*)editorsnode->storage);
+
+ inputSocketImage->relinkConnections(operationRGBToYCC_Image->getInputSocket(0), true, 0, graph);
+ inputSocketKey->relinkConnections(operationRGBToYCC_Key->getInputSocket(0), true, 0, graph);
+
+ addLink(graph, operationRGBToYCC_Image->getOutputSocket(), operation->getInputSocket(0));
+ addLink(graph, operationRGBToYCC_Key->getOutputSocket(), operation->getInputSocket(1));
+
+ graph->addOperation(operationRGBToYCC_Image);
+ graph->addOperation(operationRGBToYCC_Key);
+ graph->addOperation(operation);
+
+ if (outputSocketMatte->isConnected()) {
+ outputSocketMatte->relinkConnections(operation->getOutputSocket());
+ }
+
+ SetAlphaOperation *operationAlpha = new SetAlphaOperation();
+ addLink(graph, operationRGBToYCC_Image->getInputSocket(0)->getConnection()->getFromSocket(), operationAlpha->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), operationAlpha->getInputSocket(1));
+
+ graph->addOperation(operationAlpha);
+ addPreviewOperation(graph, operationAlpha->getOutputSocket(), 9);
+
+ if (outputSocketImage->isConnected()) {
+ outputSocketImage->relinkConnections(operationAlpha->getOutputSocket());
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_ChromaMatteNode.h b/source/blender/compositor/nodes/COM_ChromaMatteNode.h
new file mode 100644
index 00000000000..6008137b4a7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ChromaMatteNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef COM_ChromaMatteNODE_H
+#define COM_ChromaMatteNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief ChromaMatteNode
+ * @ingroup Node
+ */
+class ChromaMatteNode : public Node
+{
+public:
+ ChromaMatteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_ChromaMatteNODE_H
diff --git a/source/blender/compositor/nodes/COM_ColorBalanceNode.cpp b/source/blender/compositor/nodes/COM_ColorBalanceNode.cpp
new file mode 100644
index 00000000000..32c9e50874e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorBalanceNode.cpp
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorBalanceNode.h"
+#include "COM_ColorBalanceLGGOperation.h"
+#include "COM_ColorBalanceASCCDLOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "BKE_node.h"
+#include "COM_MixBlendOperation.h"
+
+ColorBalanceNode::ColorBalanceNode(bNode *editorNode): Node(editorNode)
+{
+}
+void ColorBalanceNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ InputSocket *inputImageSocket = this->getInputSocket(1);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+
+ bNode *node = this->getbNode();
+ NodeColorBalance *n = (NodeColorBalance *)node->storage;
+ NodeOperation*operation;
+ if (node->custom1 == 0) {
+ ColorBalanceLGGOperation *operationLGG = new ColorBalanceLGGOperation();
+ {
+ int c;
+
+ for (c = 0; c < 3; c++) {
+ n->lift_lgg[c] = 2.0f - n->lift[c];
+ n->gamma_inv[c] = (n->gamma[c] != 0.0f) ? 1.0f/n->gamma[c] : 1000000.0f;
+ }
+ }
+
+ operationLGG->setGain(n->gain);
+ operationLGG->setLift(n->lift_lgg);
+ operationLGG->setGammaInv(n->gamma_inv);
+ operation = operationLGG;
+ }
+ else {
+ ColorBalanceASCCDLOperation *operationCDL = new ColorBalanceASCCDLOperation();
+ operationCDL->setGain(n->gain);
+ operationCDL->setLift(n->lift);
+ operationCDL->setGamma(n->gamma);
+ operation = operationCDL;
+ }
+
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputImageSocket->relinkConnections(operation->getInputSocket(1), true, 0, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorBalanceNode.h b/source/blender/compositor/nodes/COM_ColorBalanceNode.h
new file mode 100644
index 00000000000..61a09d28c01
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorBalanceNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef COM_ColorBalanceNODE_H
+#define COM_ColorBalanceNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorBalanceNode
+ * @ingroup Node
+ */
+class ColorBalanceNode : public Node
+{
+public:
+ ColorBalanceNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_ColorBalanceNODE_H
diff --git a/source/blender/compositor/nodes/COM_ColorCorrectionNode.cpp b/source/blender/compositor/nodes/COM_ColorCorrectionNode.cpp
new file mode 100644
index 00000000000..995d66fcf23
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorCorrectionNode.cpp
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorCorrectionNode.h"
+#include "DNA_scene_types.h"
+#include "COM_ColorCorrectionOperation.h"
+#include "COM_ExecutionSystem.h"
+
+ColorCorrectionNode::ColorCorrectionNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void ColorCorrectionNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ ColorCorrectionOperation *operation = new ColorCorrectionOperation();
+ bNode *editorNode = getbNode();
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0),true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1),true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ operation->setData((NodeColorCorrection*)editorNode->storage);
+ operation->setRedChannelEnabled((editorNode->custom1&1)>0);
+ operation->setGreenChannelEnabled((editorNode->custom1&2)>0);
+ operation->setBlueChannelEnabled((editorNode->custom1&4)>0);
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorCorrectionNode.h b/source/blender/compositor/nodes/COM_ColorCorrectionNode.h
new file mode 100644
index 00000000000..46b7fe5e0bc
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorCorrectionNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorCorrectionNode_h_
+#define _COM_ColorCorrectionNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorCorrectionNode
+ * @ingroup Node
+ */
+class ColorCorrectionNode: public Node {
+public:
+ ColorCorrectionNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ColorCurveNode.cpp b/source/blender/compositor/nodes/COM_ColorCurveNode.cpp
new file mode 100644
index 00000000000..a96fdf72b11
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorCurveNode.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorCurveNode.h"
+#include "DNA_scene_types.h"
+#include "COM_ColorCurveOperation.h"
+#include "COM_ExecutionSystem.h"
+
+ColorCurveNode::ColorCurveNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void ColorCurveNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ ColorCurveOperation *operation = new ColorCurveOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getInputSocket(2)->relinkConnections(operation->getInputSocket(2), true, 2, graph);
+ this->getInputSocket(3)->relinkConnections(operation->getInputSocket(3), true, 3, graph);
+
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ operation->setCurveMapping((CurveMapping*)this->getbNode()->storage);
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorCurveNode.h b/source/blender/compositor/nodes/COM_ColorCurveNode.h
new file mode 100644
index 00000000000..264e2691566
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorCurveNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorCurveNode_h_
+#define _COM_ColorCurveNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorCurveNode
+ * @ingroup Node
+ */
+class ColorCurveNode: public Node {
+public:
+ ColorCurveNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ColorMatteNode.cpp b/source/blender/compositor/nodes/COM_ColorMatteNode.cpp
new file mode 100644
index 00000000000..e5231a48e05
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorMatteNode.cpp
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ColorMatteNode.h"
+#include "BKE_node.h"
+#include "COM_ColorMatteOperation.h"
+#include "COM_ConvertRGBToHSVOperation.h"
+#include "COM_SetAlphaOperation.h"
+
+ColorMatteNode::ColorMatteNode(bNode *editorNode): Node(editorNode)
+{}
+
+void ColorMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ InputSocket *inputSocketImage = this->getInputSocket(0);
+ InputSocket *inputSocketKey = this->getInputSocket(1);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+ OutputSocket *outputSocketMatte = this->getOutputSocket(1);
+
+ ConvertRGBToHSVOperation *operationRGBToHSV_Image = new ConvertRGBToHSVOperation();
+ ConvertRGBToHSVOperation *operationRGBToHSV_Key = new ConvertRGBToHSVOperation();
+
+ ColorMatteOperation *operation = new ColorMatteOperation();
+ bNode *editorsnode = getbNode();
+ operation->setSettings((NodeChroma*)editorsnode->storage);
+
+ inputSocketImage->relinkConnections(operationRGBToHSV_Image->getInputSocket(0), true, 0, graph);
+ inputSocketKey->relinkConnections(operationRGBToHSV_Key->getInputSocket(0), true, 1, graph);
+
+ addLink(graph, operationRGBToHSV_Image->getOutputSocket(), operation->getInputSocket(0));
+ addLink(graph, operationRGBToHSV_Key->getOutputSocket(), operation->getInputSocket(1));
+
+ if (outputSocketMatte->isConnected()) {
+ outputSocketMatte->relinkConnections(operation->getOutputSocket(0));
+ }
+
+ graph->addOperation(operationRGBToHSV_Image);
+ graph->addOperation(operationRGBToHSV_Key);
+ graph->addOperation(operation);
+
+ SetAlphaOperation *operationAlpha = new SetAlphaOperation();
+ addLink(graph, operationRGBToHSV_Image->getInputSocket(0)->getConnection()->getFromSocket(), operationAlpha->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), operationAlpha->getInputSocket(1));
+ graph->addOperation(operationAlpha);
+ addPreviewOperation(graph, operationAlpha->getOutputSocket(), 9);
+
+ if (outputSocketImage->isConnected()) {
+ outputSocketImage->relinkConnections(operationAlpha->getOutputSocket());
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_ColorMatteNode.h b/source/blender/compositor/nodes/COM_ColorMatteNode.h
new file mode 100644
index 00000000000..af64616d054
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorMatteNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef COM_ColorMatteNODE_H
+#define COM_ColorMatteNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorMatteNode
+ * @ingroup Node
+ */
+class ColorMatteNode : public Node
+{
+public:
+ ColorMatteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_ColorMatteNODE_H
diff --git a/source/blender/compositor/nodes/COM_ColorNode.cpp b/source/blender/compositor/nodes/COM_ColorNode.cpp
new file mode 100644
index 00000000000..f5fcb0177f7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorNode.cpp
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorNode.h"
+#include "DNA_scene_types.h"
+#include "COM_SetColorOperation.h"
+#include "COM_ExecutionSystem.h"
+
+ColorNode::ColorNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void ColorNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ SetColorOperation *operation = new SetColorOperation();
+ bNodeSocket *socket = this->getEditorOutputSocket(0);
+ bNodeSocketValueRGBA *dval = (bNodeSocketValueRGBA*)socket->default_value;
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ operation->setChannels(dval->value);
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorNode.h b/source/blender/compositor/nodes/COM_ColorNode.h
new file mode 100644
index 00000000000..937979dd961
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorNode_h_
+#define _COM_ColorNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorNode
+ * @ingroup Node
+ */
+class ColorNode: public Node {
+public:
+ ColorNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ColorRampNode.cpp b/source/blender/compositor/nodes/COM_ColorRampNode.cpp
new file mode 100644
index 00000000000..1873cad5d57
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorRampNode.cpp
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorRampNode.h"
+#include "COM_ExecutionSystem.h"
+#include "BKE_node.h"
+#include "COM_ColorRampOperation.h"
+#include "COM_SeparateChannelOperation.h"
+#include "DNA_texture_types.h"
+
+ColorRampNode::ColorRampNode(bNode *editorNode): Node(editorNode)
+{}
+
+void ColorRampNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ OutputSocket *outputSocketAlpha = this->getOutputSocket(1);
+ bNode *editorNode = this->getbNode();
+
+ ColorRampOperation *operation = new ColorRampOperation();
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ if (outputSocketAlpha->isConnected()) {
+ SeparateChannelOperation *operation2 = new SeparateChannelOperation();
+ outputSocketAlpha->relinkConnections(operation2->getOutputSocket());
+ addLink(graph, operation->getOutputSocket(), operation2->getInputSocket(0));
+ operation2->setChannel(3);
+ graph->addOperation(operation2);
+ }
+ operation->setColorBand((ColorBand*)editorNode->storage);
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorRampNode.h b/source/blender/compositor/nodes/COM_ColorRampNode.h
new file mode 100644
index 00000000000..53fff2b0d98
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorRampNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef COM_ColorRampNODE_H
+#define COM_ColorRampNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorRampNode
+ * @ingroup Node
+ */
+class ColorRampNode : public Node
+{
+public:
+ ColorRampNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif // COM_ColorRampNODE_H
diff --git a/source/blender/compositor/nodes/COM_ColorSpillNode.cpp b/source/blender/compositor/nodes/COM_ColorSpillNode.cpp
new file mode 100644
index 00000000000..88043653b4f
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorSpillNode.cpp
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorSpillNode.h"
+#include "BKE_node.h"
+#include "COM_ColorSpillOperation.h"
+
+ColorSpillNode::ColorSpillNode(bNode *editorNode): Node(editorNode)
+{}
+
+void ColorSpillNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ InputSocket *inputSocketImage = this->getInputSocket(0);
+ InputSocket *inputSocketFac = this->getInputSocket(1);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+
+ bNode *editorsnode = getbNode();
+
+
+ ColorSpillOperation *operation;
+ if (editorsnode->custom2 == 0) {
+ // Simple color spill
+ operation = new ColorSpillOperation();
+ }
+ else {
+ // Average color spill
+ operation = new ColorSpillAverageOperation();
+ }
+ operation->setSettings((NodeColorspill*)editorsnode->storage);
+ operation->setSpillChannel(editorsnode->custom1-1); // Channel for spilling
+
+
+ inputSocketImage->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputSocketFac->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+
+ outputSocketImage->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorSpillNode.h b/source/blender/compositor/nodes/COM_ColorSpillNode.h
new file mode 100644
index 00000000000..ed0e33b0742
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorSpillNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef COM_ColorSpillNODE_H
+#define COM_ColorSpillNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief ColorSpillNode
+ * @ingroup Node
+ */
+class ColorSpillNode : public Node
+{
+public:
+ ColorSpillNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_ColorSpillNODE_H
diff --git a/source/blender/compositor/nodes/COM_ColorToBWNode.cpp b/source/blender/compositor/nodes/COM_ColorToBWNode.cpp
new file mode 100644
index 00000000000..7ff7ee1c13e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorToBWNode.cpp
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorToBWNode.h"
+
+#include "COM_ConvertColorToBWOperation.h"
+#include "COM_ExecutionSystem.h"
+
+ColourToBWNode::ColourToBWNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void ColourToBWNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *colourSocket = this->getInputSocket(0);
+ OutputSocket *valueSocket = this->getOutputSocket(0);
+
+ ConvertColorToBWOperation *convertProg = new ConvertColorToBWOperation();
+ colourSocket->relinkConnections(convertProg->getInputSocket(0), true, 0, graph);
+ valueSocket->relinkConnections(convertProg->getOutputSocket(0));
+ graph->addOperation(convertProg);
+}
diff --git a/source/blender/compositor/nodes/COM_ColorToBWNode.h b/source/blender/compositor/nodes/COM_ColorToBWNode.h
new file mode 100644
index 00000000000..e2badd1b104
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ColorToBWNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColourToBWNode_h
+#define _COM_ColourToBWNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief ColourToBWNode
+ * @ingroup Node
+ */
+class ColourToBWNode : public Node {
+public:
+ ColourToBWNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_CombineHSVANode.cpp b/source/blender/compositor/nodes/COM_CombineHSVANode.cpp
new file mode 100644
index 00000000000..a0f46ad6b6c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineHSVANode.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CombineHSVANode.h"
+
+#include "COM_CombineChannelsOperation.h"
+
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ConvertHSVToRGBOperation.h"
+
+CombineHSVANode::CombineHSVANode(bNode *editorNode): CombineRGBANode(editorNode)
+{
+}
+
+void CombineHSVANode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ ConvertHSVToRGBOperation *operation = new ConvertHSVToRGBOperation();
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ if (outputSocket->isConnected()) {
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ addLink(graph, outputSocket, operation->getInputSocket(0));
+ }
+ graph->addOperation(operation);
+ CombineRGBANode::convertToOperations(graph, context);
+}
diff --git a/source/blender/compositor/nodes/COM_CombineHSVANode.h b/source/blender/compositor/nodes/COM_CombineHSVANode.h
new file mode 100644
index 00000000000..fabd6f91f7e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineHSVANode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CombineHSVANode_h
+#define _COM_CombineHSVANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_CombineRGBANode.h"
+/**
+ * @brief CombineHSVANode
+ * @ingroup Node
+ */
+class CombineHSVANode : public CombineRGBANode {
+public:
+ CombineHSVANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_CombineRGBANode.cpp b/source/blender/compositor/nodes/COM_CombineRGBANode.cpp
new file mode 100644
index 00000000000..d5fef1e756a
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineRGBANode.cpp
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CombineRGBANode.h"
+
+#include "COM_CombineChannelsOperation.h"
+
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "DNA_material_types.h" // the ramp types
+
+
+CombineRGBANode::CombineRGBANode(bNode *editorNode): Node(editorNode)
+{
+}
+
+
+void CombineRGBANode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputRSocket = this->getInputSocket(0);
+ InputSocket *inputGSocket = this->getInputSocket(1);
+ InputSocket *inputBSocket = this->getInputSocket(2);
+ InputSocket *inputASocket = this->getInputSocket(3);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+
+ CombineChannelsOperation *operation = new CombineChannelsOperation();
+ if (inputRSocket->isConnected()) {
+ operation->setResolutionInputSocketIndex(0);
+ }
+ else if (inputGSocket->isConnected()) {
+ operation->setResolutionInputSocketIndex(1);
+ }
+ else if (inputBSocket->isConnected()) {
+ operation->setResolutionInputSocketIndex(2);
+ }
+ else {
+ operation->setResolutionInputSocketIndex(3);
+ }
+ inputRSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputGSocket->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ inputBSocket->relinkConnections(operation->getInputSocket(2), true, 2, graph);
+ inputASocket->relinkConnections(operation->getInputSocket(3), true, 3, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_CombineRGBANode.h b/source/blender/compositor/nodes/COM_CombineRGBANode.h
new file mode 100644
index 00000000000..182bfece6d3
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineRGBANode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CombineRGBANode_h
+#define _COM_CombineRGBANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief CombineRGBANode
+ * @ingroup Node
+ */
+class CombineRGBANode : public Node {
+public:
+ CombineRGBANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_CombineYCCANode.cpp b/source/blender/compositor/nodes/COM_CombineYCCANode.cpp
new file mode 100644
index 00000000000..ad6203ea85a
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineYCCANode.cpp
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_CombineYCCANode.h"
+#include "COM_ConvertYCCToRGBOperation.h"
+
+CombineYCCANode::CombineYCCANode(bNode *editorNode): CombineRGBANode(editorNode)
+{
+}
+
+void CombineYCCANode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ ConvertYCCToRGBOperation *operation = new ConvertYCCToRGBOperation();
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+
+ bNode *node = this->getbNode();
+ operation->setMode(node->custom1);
+
+ if (outputSocket->isConnected()) {
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ addLink(graph, outputSocket, operation->getInputSocket(0));
+ }
+
+ graph->addOperation(operation);
+ CombineRGBANode::convertToOperations(graph, context);
+}
diff --git a/source/blender/compositor/nodes/COM_CombineYCCANode.h b/source/blender/compositor/nodes/COM_CombineYCCANode.h
new file mode 100644
index 00000000000..86e2d50e950
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineYCCANode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_CombineYCCANode_h
+#define _COM_CombineYCCANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_CombineRGBANode.h"
+/**
+ * @brief CombineYCCANode
+ * @ingroup Node
+ */
+class CombineYCCANode : public CombineRGBANode {
+public:
+ CombineYCCANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_CombineYUVANode.cpp b/source/blender/compositor/nodes/COM_CombineYUVANode.cpp
new file mode 100644
index 00000000000..ea92a40f803
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineYUVANode.cpp
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_CombineYUVANode.h"
+#include "COM_ConvertYUVToRGBOperation.h"
+
+CombineYUVANode::CombineYUVANode(bNode *editorNode): CombineRGBANode(editorNode)
+{
+}
+
+void CombineYUVANode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ ConvertYUVToRGBOperation *operation = new ConvertYUVToRGBOperation();
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ if (outputSocket->isConnected()) {
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ addLink(graph, outputSocket, operation->getInputSocket(0));
+ }
+ graph->addOperation(operation);
+ CombineRGBANode::convertToOperations(graph, context);
+}
diff --git a/source/blender/compositor/nodes/COM_CombineYUVANode.h b/source/blender/compositor/nodes/COM_CombineYUVANode.h
new file mode 100644
index 00000000000..7d2f9cddf7e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CombineYUVANode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_CombineYUVANode_h
+#define _COM_CombineYUVANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_CombineRGBANode.h"
+/**
+ * @brief CombineYUVANode
+ * @ingroup Node
+ */
+class CombineYUVANode : public CombineRGBANode {
+public:
+ CombineYUVANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_CompositorNode.cpp b/source/blender/compositor/nodes/COM_CompositorNode.cpp
new file mode 100644
index 00000000000..57821e7fe27
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CompositorNode.cpp
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CompositorNode.h"
+#include "COM_CompositorOperation.h"
+#include "COM_ExecutionSystem.h"
+
+CompositorNode::CompositorNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void CompositorNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *imageSocket = this->getInputSocket(0);
+ InputSocket *alphaSocket = this->getInputSocket(1);
+ if (imageSocket->isConnected()) {
+ CompositorOperation *colourAlphaProg = new CompositorOperation();
+ colourAlphaProg->setScene(context->getScene());
+ colourAlphaProg->setbNodeTree(context->getbNodeTree());
+ imageSocket->relinkConnections(colourAlphaProg->getInputSocket(0));
+ alphaSocket->relinkConnections(colourAlphaProg->getInputSocket(1));
+ graph->addOperation(colourAlphaProg);
+ addPreviewOperation(graph, colourAlphaProg->getInputSocket(0), 5);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_CompositorNode.h b/source/blender/compositor/nodes/COM_CompositorNode.h
new file mode 100644
index 00000000000..e77d1d2f225
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CompositorNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CompositorNode_h
+#define _COM_CompositorNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief CompositorNode
+ * @ingroup Node
+ */
+class CompositorNode : public Node {
+public:
+ CompositorNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_ConvertAlphaNode.cpp b/source/blender/compositor/nodes/COM_ConvertAlphaNode.cpp
new file mode 100644
index 00000000000..94139c132fb
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ConvertAlphaNode.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertAlphaNode.h"
+#include "COM_ConvertPremulToKeyOperation.h"
+#include "COM_ConvertKeyToPremulOperation.h"
+#include "COM_ExecutionSystem.h"
+
+void ConvertAlphaNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ NodeOperation *operation = NULL;
+ bNode *node = this->getbNode();
+
+ /* value hardcoded in rna_nodetree.c */
+ if (node->custom1 == 1) {
+ operation = new ConvertPremulToKeyOperation();
+ }
+ else {
+ operation = new ConvertKeyToPremulOperation();
+ }
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ConvertAlphaNode.h b/source/blender/compositor/nodes/COM_ConvertAlphaNode.h
new file mode 100644
index 00000000000..2e3fe743f4e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ConvertAlphaNode.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertAlphaNode_h
+#define _COM_ConvertAlphaNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief ConvertAlphaNode
+ * @ingroup Node
+ */
+class ConvertAlphaNode: public Node {
+public:
+ ConvertAlphaNode(bNode *editorNode) :Node(editorNode) {}
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_CropNode.cpp b/source/blender/compositor/nodes/COM_CropNode.cpp
new file mode 100644
index 00000000000..52329be3034
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CropNode.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CropNode.h"
+#include "COM_CropOperation.h"
+
+
+CropNode::CropNode(bNode *editorNode) : Node(editorNode)
+{
+}
+
+void CropNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ bNode *node = getbNode();
+ NodeTwoXYs *cropSettings = (NodeTwoXYs*)node->storage;
+ bool relative = (bool)node->custom2;
+ bool cropImage = (bool)node->custom1;
+ CropBaseOperation *operation;
+ if (cropImage) {
+ operation = new CropImageOperation();
+ }
+ else {
+ operation = new CropOperation();
+ }
+ operation->setCropSettings(cropSettings);
+ operation->setRelative(relative);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getOutputSocket()->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_CropNode.h b/source/blender/compositor/nodes/COM_CropNode.h
new file mode 100644
index 00000000000..0bdfffc8fec
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_CropNode.h
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CropNode_h_
+#define _COM_CropNode_h_
+
+#include "COM_Node.h"
+
+class CropNode: public Node {
+public:
+ CropNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
+
+
diff --git a/source/blender/compositor/nodes/COM_DefocusNode.cpp b/source/blender/compositor/nodes/COM_DefocusNode.cpp
new file mode 100644
index 00000000000..77f7baaef98
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DefocusNode.cpp
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DefocusNode.h"
+#include "DNA_scene_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_object_types.h"
+#include "DNA_node_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_ConvertDepthToRadiusOperation.h"
+#include "COM_VariableSizeBokehBlurOperation.h"
+#include "COM_BokehImageOperation.h"
+#include "COM_MathBaseOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_GammaCorrectOperation.h"
+
+DefocusNode::DefocusNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void DefocusNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ bNode *node = this->getbNode();
+ Scene *scene = (Scene*)node->id;
+ Object *camob = (scene)? scene->camera: NULL;
+ NodeDefocus *data = (NodeDefocus*)node->storage;
+
+ NodeOperation *radiusOperation;
+ if (data->no_zbuf) {
+ MathMultiplyOperation *multiply = new MathMultiplyOperation();
+ SetValueOperation *multiplier = new SetValueOperation();
+ multiplier->setValue(data->scale);
+ SetValueOperation *maxRadius = new SetValueOperation();
+ maxRadius->setValue(data->maxblur);
+ MathMinimumOperation *minimize = new MathMinimumOperation();
+ this->getInputSocket(1)->relinkConnections(multiply->getInputSocket(0), true, 1, graph);
+ addLink(graph, multiplier->getOutputSocket(), multiply->getInputSocket(1));
+ addLink(graph, maxRadius->getOutputSocket(), minimize->getInputSocket(1));
+ addLink(graph, multiply->getOutputSocket(), minimize->getInputSocket(0));
+
+ graph->addOperation(multiply);
+ graph->addOperation(multiplier);
+ graph->addOperation(maxRadius);
+ graph->addOperation(minimize);
+ radiusOperation = minimize;
+ }
+ else {
+ ConvertDepthToRadiusOperation *converter = new ConvertDepthToRadiusOperation();
+ converter->setCameraObject(camob);
+ converter->setfStop(data->fstop);
+ converter->setMaxRadius(data->maxblur);
+ this->getInputSocket(1)->relinkConnections(converter->getInputSocket(0), true, 1, graph);
+ graph->addOperation(converter);
+ radiusOperation = converter;
+ }
+
+ BokehImageOperation *bokeh = new BokehImageOperation();
+ NodeBokehImage * bokehdata = new NodeBokehImage();
+ bokehdata->angle = data->rotation;
+ bokehdata->rounding = 0.0f;
+ bokehdata->flaps = data->bktype;
+ if (data->bktype<3) {
+ bokehdata->flaps = 5;
+ bokehdata->rounding = 1.0f;
+ }
+ bokehdata->catadioptric = 0.0f;
+ bokehdata->lensshift = 0.0f;
+
+ bokeh->setData(bokehdata);
+ bokeh->deleteDataOnFinish();
+ graph->addOperation(bokeh);
+
+ VariableSizeBokehBlurOperation *operation = new VariableSizeBokehBlurOperation();
+ operation->setQuality(context->getQuality());
+ operation->setMaxBlur(data->maxblur);
+ operation->setThreshold(data->bthresh);
+ addLink(graph, bokeh->getOutputSocket(), operation->getInputSocket(1));
+ addLink(graph, radiusOperation->getOutputSocket(), operation->getInputSocket(2));
+ if (data->gamco) {
+ GammaCorrectOperation * correct = new GammaCorrectOperation();
+ GammaUncorrectOperation * inverse = new GammaUncorrectOperation();
+ this->getInputSocket(0)->relinkConnections(correct->getInputSocket(0), 0, true, graph);
+ addLink(graph, correct->getOutputSocket(), operation->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), inverse->getInputSocket(0));
+ this->getOutputSocket()->relinkConnections(inverse->getOutputSocket());
+ graph->addOperation(correct);
+ graph->addOperation(inverse);
+ }
+ else {
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, true, graph);
+ this->getOutputSocket()->relinkConnections(operation->getOutputSocket());
+ }
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_DefocusNode.h b/source/blender/compositor/nodes/COM_DefocusNode.h
new file mode 100644
index 00000000000..d52ee3da77b
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DefocusNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DefocusNode_h_
+#define _COM_DefocusNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief DefocusNode
+ * @ingroup Node
+ */
+
+class DefocusNode: public Node {
+public:
+ DefocusNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_DifferenceMatteNode.cpp b/source/blender/compositor/nodes/COM_DifferenceMatteNode.cpp
new file mode 100644
index 00000000000..ab6917f3a59
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DifferenceMatteNode.cpp
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DifferenceMatteNode.h"
+#include "BKE_node.h"
+#include "COM_DifferenceMatteOperation.h"
+#include "COM_SetAlphaOperation.h"
+
+DifferenceMatteNode::DifferenceMatteNode(bNode *editorNode): Node(editorNode)
+{}
+
+void DifferenceMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ InputSocket *inputSocket2 = this->getInputSocket(1);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+ OutputSocket *outputSocketMatte = this->getOutputSocket(1);
+ bNode *editorNode = this->getbNode();
+
+ DifferenceMatteOperation * operationSet = new DifferenceMatteOperation();
+ operationSet->setSettings((NodeChroma*)editorNode->storage);
+ inputSocket->relinkConnections(operationSet->getInputSocket(0), true, 0, graph);
+ inputSocket2->relinkConnections(operationSet->getInputSocket(1), true, 1, graph);
+
+ outputSocketMatte->relinkConnections(operationSet->getOutputSocket(0));
+ graph->addOperation(operationSet);
+
+ SetAlphaOperation * operation = new SetAlphaOperation();
+ addLink(graph, operationSet->getInputSocket(0)->getConnection()->getFromSocket(), operation->getInputSocket(0));
+ addLink(graph, operationSet->getOutputSocket(), operation->getInputSocket(1));
+ outputSocketImage->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+ addPreviewOperation(graph, operation->getOutputSocket(), 5);
+}
diff --git a/source/blender/compositor/nodes/COM_DifferenceMatteNode.h b/source/blender/compositor/nodes/COM_DifferenceMatteNode.h
new file mode 100644
index 00000000000..3b270ebc3b7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DifferenceMatteNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef COM_DifferenceMatteNODE_H
+#define COM_DifferenceMatteNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief DifferenceMatteNode
+ * @ingroup Node
+ */
+class DifferenceMatteNode : public Node
+{
+public:
+ DifferenceMatteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif // COM_DifferenceMatteNODE_H
diff --git a/source/blender/compositor/nodes/COM_DilateErodeNode.cpp b/source/blender/compositor/nodes/COM_DilateErodeNode.cpp
new file mode 100644
index 00000000000..2118f5b8e47
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DilateErodeNode.cpp
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DilateErodeNode.h"
+#include "DNA_scene_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_DilateErodeOperation.h"
+#include "COM_AntiAliasOperation.h"
+#include "BLI_math.h"
+
+DilateErodeNode::DilateErodeNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void DilateErodeNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ bNode *editorNode = this->getbNode();
+ DilateErodeOperation *operation = new DilateErodeOperation();
+ operation->setDistance(editorNode->custom2);
+ operation->setInset(2.0f);
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0));
+
+ AntiAliasOperation * antiAlias = new AntiAliasOperation();
+ addLink(graph, operation->getOutputSocket(), antiAlias->getInputSocket(0));
+ this->getOutputSocket(0)->relinkConnections(antiAlias->getOutputSocket(0));
+ graph->addOperation(operation);
+ graph->addOperation(antiAlias);
+}
diff --git a/source/blender/compositor/nodes/COM_DilateErodeNode.h b/source/blender/compositor/nodes/COM_DilateErodeNode.h
new file mode 100644
index 00000000000..496bd0203dd
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DilateErodeNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DilateErodeNode_h_
+#define _COM_DilateErodeNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief DilateErodeNode
+ * @ingroup Node
+ */
+class DilateErodeNode: public Node {
+public:
+ DilateErodeNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_DirectionalBlurNode.cpp b/source/blender/compositor/nodes/COM_DirectionalBlurNode.cpp
new file mode 100644
index 00000000000..cefeffcfc07
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DirectionalBlurNode.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DirectionalBlurNode.h"
+#include "DNA_scene_types.h"
+#include "DNA_node_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_DirectionalBlurOperation.h"
+
+DirectionalBlurNode::DirectionalBlurNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void DirectionalBlurNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ NodeDBlurData *data = (NodeDBlurData*)this->getbNode()->storage;
+ DirectionalBlurOperation *operation = new DirectionalBlurOperation();
+ operation->setQuality(context->getQuality());
+ operation->setData(data);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_DirectionalBlurNode.h b/source/blender/compositor/nodes/COM_DirectionalBlurNode.h
new file mode 100644
index 00000000000..1cf36fdeae7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DirectionalBlurNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DirectionalBlurNode_h_
+#define _COM_DirectionalBlurNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief DirectionalBlurNode
+ * @ingroup Node
+ */
+class DirectionalBlurNode: public Node {
+public:
+ DirectionalBlurNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_DisplaceNode.cpp b/source/blender/compositor/nodes/COM_DisplaceNode.cpp
new file mode 100644
index 00000000000..5fe9591bfd4
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DisplaceNode.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_DisplaceNode.h"
+#include "COM_DisplaceOperation.h"
+#include "COM_DisplaceSimpleOperation.h"
+#include "COM_ExecutionSystem.h"
+
+DisplaceNode::DisplaceNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void DisplaceNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ NodeOperation *operation;
+ if (context->getQuality() == COM_QUALITY_LOW)
+ operation = new DisplaceSimpleOperation();
+ else
+ operation = new DisplaceOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getInputSocket(2)->relinkConnections(operation->getInputSocket(2), true, 2, graph);
+ this->getInputSocket(3)->relinkConnections(operation->getInputSocket(3), true, 3, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_DisplaceNode.h b/source/blender/compositor/nodes/COM_DisplaceNode.h
new file mode 100644
index 00000000000..3451f05dd1f
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DisplaceNode.h
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_DisplaceNode_h
+#define _COM_DisplaceNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief DisplaceNode
+ * @ingroup Node
+ */
+class DisplaceNode : public Node {
+public:
+ DisplaceNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp b/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp
new file mode 100644
index 00000000000..3fc4a882eaf
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_DistanceMatteNode.h"
+#include "BKE_node.h"
+#include "COM_DistanceMatteOperation.h"
+#include "COM_SetAlphaOperation.h"
+
+DistanceMatteNode::DistanceMatteNode(bNode *editorNode): Node(editorNode)
+{}
+
+void DistanceMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ InputSocket *inputSocketImage = this->getInputSocket(0);
+ InputSocket *inputSocketKey = this->getInputSocket(1);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+ OutputSocket *outputSocketMatte = this->getOutputSocket(1);
+
+ DistanceMatteOperation *operation = new DistanceMatteOperation();
+ bNode *editorsnode = getbNode();
+ operation->setSettings((NodeChroma*)editorsnode->storage);
+
+ inputSocketImage->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputSocketKey->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+
+ if (outputSocketMatte->isConnected()) {
+ outputSocketMatte->relinkConnections(operation->getOutputSocket());
+ }
+
+ graph->addOperation(operation);
+
+ SetAlphaOperation *operationAlpha = new SetAlphaOperation();
+ addLink(graph, operation->getInputSocket(0)->getConnection()->getFromSocket(), operationAlpha->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), operationAlpha->getInputSocket(1));
+
+ graph->addOperation(operationAlpha);
+ addPreviewOperation(graph, operationAlpha->getOutputSocket(), 9);
+
+ if (outputSocketImage->isConnected()) {
+ outputSocketImage->relinkConnections(operationAlpha->getOutputSocket());
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_DistanceMatteNode.h b/source/blender/compositor/nodes/COM_DistanceMatteNode.h
new file mode 100644
index 00000000000..740eb767a71
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DistanceMatteNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef COM_DistanceMatteNODE_H
+#define COM_DistanceMatteNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief DistanceMatteNode
+ * @ingroup Node
+ */
+class DistanceMatteNode : public Node
+{
+public:
+ DistanceMatteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_DistanceMatteNODE_H
diff --git a/source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.cpp b/source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.cpp
new file mode 100644
index 00000000000..1ac273a52cb
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DoubleEdgeMaskNode.h"
+#include "COM_DoubleEdgeMaskOperation.h"
+#include "DNA_scene_types.h"
+#include "COM_ExecutionSystem.h"
+
+DoubleEdgeMaskNode::DoubleEdgeMaskNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void DoubleEdgeMaskNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ DoubleEdgeMaskOperation *operation;
+ bNode *bnode = this->getbNode();
+
+ operation = new DoubleEdgeMaskOperation();
+ operation->setAdjecentOnly(bnode->custom1);
+ operation->setKeepInside(bnode->custom2);
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, system);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, system);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ system->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.h b/source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.h
new file mode 100644
index 00000000000..2c52e988946
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DoubleEdgeMaskNode_h_
+#define _COM_DoubleEdgeMaskNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief DoubleEdgeMaskNode
+ * @ingroup Node
+ */
+class DoubleEdgeMaskNode: public Node {
+public:
+ DoubleEdgeMaskNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp b/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
new file mode 100644
index 00000000000..7e327a306b6
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_EllipseMaskNode.h"
+#include "DNA_scene_types.h"
+#include "COM_EllipseMaskOperation.h"
+#include "COM_ExecutionSystem.h"
+
+EllipseMaskNode::EllipseMaskNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void EllipseMaskNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ EllipseMaskOperation *operation;
+ operation = new EllipseMaskOperation();
+ operation->setData((NodeEllipseMask*)this->getbNode()->storage);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ operation->setMaskType(this->getbNode()->custom1);
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_EllipseMaskNode.h b/source/blender/compositor/nodes/COM_EllipseMaskNode.h
new file mode 100644
index 00000000000..be6956e30b5
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_EllipseMaskNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_EllipseMaskNode_h_
+#define _COM_EllipseMaskNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief EllipseMaskNode
+ * @ingroup Node
+ */
+class EllipseMaskNode: public Node {
+public:
+ EllipseMaskNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_FilterNode.cpp b/source/blender/compositor/nodes/COM_FilterNode.cpp
new file mode 100644
index 00000000000..a1d405c0dff
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_FilterNode.cpp
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_FilterNode.h"
+#include "COM_ConvolutionFilterOperation.h"
+#include "COM_ConvolutionEdgeFilterOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "BKE_node.h"
+#include "COM_MixBlendOperation.h"
+
+FilterNode::FilterNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void FilterNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ InputSocket *inputImageSocket = this->getInputSocket(1);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ ConvolutionFilterOperation *operation = NULL;
+
+ switch (this->getbNode()->custom1) {
+ case CMP_FILT_SOFT:
+ operation = new ConvolutionFilterOperation();
+ operation->set3x3Filter(1/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 4/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f);
+ break;
+ case CMP_FILT_SHARP:
+ operation = new ConvolutionFilterOperation();
+ operation->set3x3Filter(-1,-1,-1,-1,9,-1,-1,-1,-1);
+ break;
+ case CMP_FILT_LAPLACE:
+ operation = new ConvolutionFilterOperation();
+ operation->set3x3Filter(-1/8.0f, -1/8.0f, -1/8.0f, -1/8.0f, 1.0f, -1/8.0f, -1/8.0f, -1/8.0f, -1/8.0f);
+ break;
+ case CMP_FILT_SOBEL:
+ operation = new ConvolutionEdgeFilterOperation();
+ operation->set3x3Filter(1,2,1,0,0,0,-1,-2,-1);
+ break;
+ case CMP_FILT_PREWITT:
+ operation = new ConvolutionEdgeFilterOperation();
+ operation->set3x3Filter(1,1,1,0,0,0,-1,-1,-1);
+ break;
+ case CMP_FILT_KIRSCH:
+ operation = new ConvolutionEdgeFilterOperation();
+ operation->set3x3Filter(5,5,5,-3,-3,-3,-2,-2,-2);
+ break;
+ case CMP_FILT_SHADOW:
+ operation = new ConvolutionFilterOperation();
+ operation->set3x3Filter(1,2,1,0,1,0,-1,-2,-1);
+ break;
+ default:
+ operation = new ConvolutionFilterOperation();
+ operation->set3x3Filter(0,0,0,0,1,0,0,0,0);
+ break;
+ }
+
+ inputImageSocket->relinkConnections(operation->getInputSocket(0), true, 1, graph);
+ inputSocket->relinkConnections(operation->getInputSocket(1), true, 0, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ addPreviewOperation(graph, operation->getOutputSocket(0), 5);
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_FilterNode.h b/source/blender/compositor/nodes/COM_FilterNode.h
new file mode 100644
index 00000000000..080682dcefe
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_FilterNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef COM_FILTERNODE_H
+#define COM_FILTERNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief FilterNode
+ * @ingroup Node
+ */
+class FilterNode : public Node
+{
+public:
+ FilterNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif // COM_FILTERNODE_H
diff --git a/source/blender/compositor/nodes/COM_FlipNode.cpp b/source/blender/compositor/nodes/COM_FlipNode.cpp
new file mode 100644
index 00000000000..a4924aaae40
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_FlipNode.cpp
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_FlipNode.h"
+
+#include "COM_FlipOperation.h"
+#include "COM_ExecutionSystem.h"
+
+FlipNode::FlipNode(bNode *editorNode) : Node(editorNode)
+{
+}
+
+void FlipNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ FlipOperation *operation = new FlipOperation();
+ switch (this->getbNode()->custom1) {
+ case 0: /// @TODO: I didn't find any constants in the old implementation, should I introduce them.
+ operation->setFlipX(true);
+ operation->setFlipY(false);
+ break;
+ case 1:
+ operation->setFlipX(false);
+ operation->setFlipY(true);
+ break;
+ case 2:
+ operation->setFlipX(true);
+ operation->setFlipY(true);
+ break;
+ }
+
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_FlipNode.h b/source/blender/compositor/nodes/COM_FlipNode.h
new file mode 100644
index 00000000000..53bcc504f80
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_FlipNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_FlipNode_h_
+#define _COM_FlipNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief FlipNode
+ * @ingroup Node
+ */
+class FlipNode: public Node {
+public:
+ FlipNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_GammaNode.cpp b/source/blender/compositor/nodes/COM_GammaNode.cpp
new file mode 100644
index 00000000000..e5391e54e72
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_GammaNode.cpp
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GammaNode.h"
+#include "DNA_scene_types.h"
+#include "COM_GammaOperation.h"
+#include "COM_ExecutionSystem.h"
+
+GammaNode::GammaNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void GammaNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ GammaOperation *operation = new GammaOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_GammaNode.h b/source/blender/compositor/nodes/COM_GammaNode.h
new file mode 100644
index 00000000000..121d99cbd57
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_GammaNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GammaNode_h_
+#define _COM_GammaNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief GammaNode
+ * @ingroup Node
+ */
+class GammaNode: public Node {
+public:
+ GammaNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_GlareNode.cpp b/source/blender/compositor/nodes/COM_GlareNode.cpp
new file mode 100644
index 00000000000..c65adc862b1
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_GlareNode.cpp
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GlareNode.h"
+#include "DNA_node_types.h"
+#include "COM_FogGlowImageOperation.h"
+#include "COM_BokehBlurOperation.h"
+#include "COM_GlareThresholdOperation.h"
+#include "COM_GlareSimpleStarOperation.h"
+#include "COM_GlareStreaksOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_MixBlendOperation.h"
+
+GlareNode::GlareNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void GlareNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)\
+{
+ bNode *node = this->getbNode();
+ NodeGlare *glare = (NodeGlare*)node->storage;
+
+ switch (glare->type) {
+
+ default:
+ case 2: // streaks
+ {
+ GlareThresholdOperation *thresholdOperation = new GlareThresholdOperation();
+ GlareStreaksOperation * glareoperation = new GlareStreaksOperation();
+ SetValueOperation * mixvalueoperation = new SetValueOperation();
+ MixBlendOperation * mixoperation = new MixBlendOperation();
+
+ this->getInputSocket(0)->relinkConnections(thresholdOperation->getInputSocket(0), true, 0, system);
+ addLink(system, thresholdOperation->getOutputSocket(), glareoperation->getInputSocket(0));
+ addLink(system, mixvalueoperation->getOutputSocket(), mixoperation->getInputSocket(0));
+ addLink(system, glareoperation->getOutputSocket(), mixoperation->getInputSocket(2));
+ addLink(system, thresholdOperation->getInputSocket(0)->getConnection()->getFromSocket(), mixoperation->getInputSocket(1));
+ this->getOutputSocket()->relinkConnections(mixoperation->getOutputSocket());
+
+ thresholdOperation->setThreshold(glare->threshold);
+ glareoperation->setGlareSettings(glare);
+ mixvalueoperation->setValue(0.5f+glare->mix*0.5f);
+ mixoperation->setResolutionInputSocketIndex(1);
+
+ system->addOperation(glareoperation);
+ system->addOperation(thresholdOperation);
+ system->addOperation(mixvalueoperation);
+ system->addOperation(mixoperation);
+ }
+ break;
+ case 1: // fog glow
+ {
+ GlareThresholdOperation *thresholdOperation = new GlareThresholdOperation();
+ FogGlowImageOperation * kerneloperation = new FogGlowImageOperation();
+ BokehBlurOperation * bluroperation = new BokehBlurOperation();
+ SetValueOperation * valueoperation = new SetValueOperation();
+ SetValueOperation * mixvalueoperation = new SetValueOperation();
+ MixBlendOperation * mixoperation = new MixBlendOperation();
+ mixoperation->setResolutionInputSocketIndex(1);
+ this->getInputSocket(0)->relinkConnections(thresholdOperation->getInputSocket(0), true, 0, system);
+ addLink(system, thresholdOperation->getOutputSocket(), bluroperation->getInputSocket(0));
+ addLink(system, kerneloperation->getOutputSocket(), bluroperation->getInputSocket(1));
+ addLink(system, valueoperation->getOutputSocket(), bluroperation->getInputSocket(2));
+ addLink(system, mixvalueoperation->getOutputSocket(), mixoperation->getInputSocket(0));
+ addLink(system, bluroperation->getOutputSocket(), mixoperation->getInputSocket(2));
+ addLink(system, thresholdOperation->getInputSocket(0)->getConnection()->getFromSocket(), mixoperation->getInputSocket(1));
+
+ thresholdOperation->setThreshold(glare->threshold);
+ bluroperation->setSize(0.003f*glare->size);
+ bluroperation->setQuality(context->getQuality());
+ valueoperation->setValue(1.0f);
+ mixvalueoperation->setValue(0.5f+glare->mix*0.5f);
+ this->getOutputSocket()->relinkConnections(mixoperation->getOutputSocket());
+
+ system->addOperation(bluroperation);
+ system->addOperation(kerneloperation);
+ system->addOperation(thresholdOperation);
+ system->addOperation(mixvalueoperation);
+ system->addOperation(valueoperation);
+ system->addOperation(mixoperation);
+ }
+ break;
+
+ case 0: // simple star
+ {
+ GlareThresholdOperation *thresholdOperation = new GlareThresholdOperation();
+ GlareSimpleStarOperation * glareoperation = new GlareSimpleStarOperation();
+ SetValueOperation * mixvalueoperation = new SetValueOperation();
+ MixBlendOperation * mixoperation = new MixBlendOperation();
+
+ this->getInputSocket(0)->relinkConnections(thresholdOperation->getInputSocket(0), true, 0, system);
+ addLink(system, thresholdOperation->getOutputSocket(), glareoperation->getInputSocket(0));
+ addLink(system, mixvalueoperation->getOutputSocket(), mixoperation->getInputSocket(0));
+ addLink(system, glareoperation->getOutputSocket(), mixoperation->getInputSocket(2));
+ addLink(system, thresholdOperation->getInputSocket(0)->getConnection()->getFromSocket(), mixoperation->getInputSocket(1));
+ this->getOutputSocket()->relinkConnections(mixoperation->getOutputSocket());
+
+ thresholdOperation->setThreshold(glare->threshold);
+ glareoperation->setGlareSettings(glare);
+ mixvalueoperation->setValue(0.5f+glare->mix*0.5f);
+ mixoperation->setResolutionInputSocketIndex(1);
+
+
+ system->addOperation(glareoperation);
+ system->addOperation(thresholdOperation);
+ system->addOperation(mixvalueoperation);
+ system->addOperation(mixoperation);
+ }
+ break;
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_GlareNode.h b/source/blender/compositor/nodes/COM_GlareNode.h
new file mode 100644
index 00000000000..97a75445db7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_GlareNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GlareNode_h_
+#define _COM_GlareNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief GlareNode
+ * @ingroup Node
+ */
+class GlareNode: public Node {
+public:
+ GlareNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_GroupNode.cpp b/source/blender/compositor/nodes/COM_GroupNode.cpp
new file mode 100644
index 00000000000..67e829a5cf6
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_GroupNode.cpp
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GroupNode.h"
+#include "COM_SocketProxyNode.h"
+#include "COM_ExecutionSystemHelper.h"
+
+GroupNode::GroupNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void GroupNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+}
+
+void GroupNode::ungroup(ExecutionSystem &system)
+{
+ vector<InputSocket*> &inputsockets = this->getInputSockets();
+ vector<OutputSocket*> &outputsockets = this->getOutputSockets();
+ unsigned int index;
+
+ /* get the node list size _before_ adding proxy nodes, so they are available for linking */
+ int nodes_start = system.getNodes().size();
+
+ for (index = 0 ; index < inputsockets.size();index ++) {
+ InputSocket * inputSocket = inputsockets[index];
+ bNodeSocket *editorInput = inputSocket->getbNodeSocket();
+ if (editorInput->groupsock) {
+ if (inputSocket->isConnected()) {
+ SocketProxyNode * proxy = new SocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
+ inputSocket->relinkConnections(proxy->getInputSocket(0), true, index, &system);
+ ExecutionSystemHelper::addNode(system.getNodes(), proxy);
+ }
+ else {
+ OutputSocketProxyNode * proxy = new OutputSocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
+ inputSocket->relinkConnections(proxy->getInputSocket(0), true, index, &system);
+ ExecutionSystemHelper::addNode(system.getNodes(), proxy);
+ }
+ }
+ }
+
+ for (index = 0 ; index < outputsockets.size();index ++) {
+ OutputSocket * outputSocket = outputsockets[index];
+ bNodeSocket *editorOutput = outputSocket->getbNodeSocket();
+ if (outputSocket->isConnected() && editorOutput->groupsock) {
+ SocketProxyNode * proxy = new SocketProxyNode(this->getbNode(), editorOutput->groupsock, editorOutput);
+ outputSocket->relinkConnections(proxy->getOutputSocket(0));
+ ExecutionSystemHelper::addNode(system.getNodes(), proxy);
+ }
+ }
+
+ bNodeTree *subtree = (bNodeTree*)this->getbNode()->id;
+ ExecutionSystemHelper::addbNodeTree(system, nodes_start, subtree);
+}
diff --git a/source/blender/compositor/nodes/COM_GroupNode.h b/source/blender/compositor/nodes/COM_GroupNode.h
new file mode 100644
index 00000000000..e35c9cbce33
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_GroupNode.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GroupNode_h_
+#define _COM_GroupNode_h_
+
+#include "COM_Node.h"
+#include "COM_ExecutionSystem.h"
+
+/**
+ * @brief Represents a group node
+ * @ingroup Node
+ */
+class GroupNode: public Node {
+public:
+ GroupNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+
+ /**
+ * @brief check if this node a group node.
+ * @returns true
+ */
+ bool isGroupNode() const { return true; }
+
+ /**
+ * @brief ungroup this group node.
+ * during ungroup the subtree (internal nodes and links) of the group node
+ * are added to the ExecutionSystem.
+ *
+ * Between the main tree and the subtree proxy nodes will be added
+ * to translate between InputSocket and OutputSocket
+ *
+ * @param system the ExecutionSystem where to add the subtree
+ */
+ void ungroup(ExecutionSystem &system);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.cpp b/source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.cpp
new file mode 100644
index 00000000000..80c786ef6d7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.cpp
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_HueSaturationValueCorrectNode.h"
+
+#include "COM_ConvertColourToValueProg.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_ConvertRGBToHSVOperation.h"
+#include "COM_ConvertHSVToRGBOperation.h"
+#include "COM_MixBlendOperation.h"
+#include "COM_SetColorOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ChangeHSVOperation.h"
+#include "DNA_node_types.h"
+#include "COM_HueSaturationValueCorrectOperation.h"
+
+HueSaturationValueCorrectNode::HueSaturationValueCorrectNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void HueSaturationValueCorrectNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *valueSocket = this->getInputSocket(0);
+ InputSocket *colourSocket = this->getInputSocket(1);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ bNode *editorsnode = getbNode();
+ CurveMapping *storage = (CurveMapping*)editorsnode->storage;
+
+ if (colourSocket->isConnected() && outputSocket->isConnected()) {
+ ConvertRGBToHSVOperation * rgbToHSV = new ConvertRGBToHSVOperation();
+ ConvertHSVToRGBOperation * hsvToRGB = new ConvertHSVToRGBOperation();
+ HueSaturationValueCorrectOperation *changeHSV = new HueSaturationValueCorrectOperation();
+ MixBlendOperation * blend = new MixBlendOperation();
+
+ colourSocket->relinkConnections(rgbToHSV->getInputSocket(0), true, 0, graph);
+ addLink(graph, rgbToHSV->getOutputSocket(), changeHSV->getInputSocket(0));
+ addLink(graph, changeHSV->getOutputSocket(), hsvToRGB->getInputSocket(0));
+ addLink(graph, hsvToRGB->getOutputSocket(), blend->getInputSocket(2));
+ addLink(graph, rgbToHSV->getInputSocket(0)->getConnection()->getFromSocket(), blend->getInputSocket(1));
+ valueSocket->relinkConnections(blend->getInputSocket(0), true, 0, graph);
+ outputSocket->relinkConnections(blend->getOutputSocket());
+
+ changeHSV->setCurveMapping(storage);
+
+ blend->setResolutionInputSocketIndex(1);
+
+ graph->addOperation(rgbToHSV);
+ graph->addOperation(hsvToRGB);
+ graph->addOperation(changeHSV);
+ graph->addOperation(blend);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.h b/source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.h
new file mode 100644
index 00000000000..d69990f712c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_HueSaturationValueCorrectNode_h
+#define _COM_HueSaturationValueCorrectNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief HueSaturationValueCorrectNode
+ * @ingroup Node
+ */
+class HueSaturationValueCorrectNode : public Node {
+public:
+ HueSaturationValueCorrectNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_HueSaturationValueNode.cpp b/source/blender/compositor/nodes/COM_HueSaturationValueNode.cpp
new file mode 100644
index 00000000000..d78592884c6
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_HueSaturationValueNode.cpp
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_HueSaturationValueNode.h"
+
+#include "COM_ConvertColourToValueProg.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_ConvertRGBToHSVOperation.h"
+#include "COM_ConvertHSVToRGBOperation.h"
+#include "COM_MixBlendOperation.h"
+#include "COM_SetColorOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ChangeHSVOperation.h"
+#include "DNA_node_types.h"
+
+HueSaturationValueNode::HueSaturationValueNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void HueSaturationValueNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *valueSocket = this->getInputSocket(0);
+ InputSocket *colourSocket = this->getInputSocket(1);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ bNode *editorsnode = getbNode();
+ NodeHueSat *storage = (NodeHueSat*)editorsnode->storage;
+
+ ConvertRGBToHSVOperation * rgbToHSV = new ConvertRGBToHSVOperation();
+ ConvertHSVToRGBOperation * hsvToRGB = new ConvertHSVToRGBOperation();
+ ChangeHSVOperation *changeHSV = new ChangeHSVOperation();
+ MixBlendOperation * blend = new MixBlendOperation();
+
+ colourSocket->relinkConnections(rgbToHSV->getInputSocket(0), true, 0, graph);
+ addLink(graph, rgbToHSV->getOutputSocket(), changeHSV->getInputSocket(0));
+ addLink(graph, changeHSV->getOutputSocket(), hsvToRGB->getInputSocket(0));
+ addLink(graph, hsvToRGB->getOutputSocket(), blend->getInputSocket(2));
+ addLink(graph, rgbToHSV->getInputSocket(0)->getConnection()->getFromSocket(), blend->getInputSocket(1));
+ valueSocket->relinkConnections(blend->getInputSocket(0), true, 0, graph);
+ outputSocket->relinkConnections(blend->getOutputSocket());
+
+ changeHSV->setHue(storage->hue);
+ changeHSV->setSaturation(storage->sat);
+ changeHSV->setValue(storage->val);
+
+ blend->setResolutionInputSocketIndex(1);
+
+ graph->addOperation(rgbToHSV);
+ graph->addOperation(hsvToRGB);
+ graph->addOperation(changeHSV);
+ graph->addOperation(blend);
+}
diff --git a/source/blender/compositor/nodes/COM_HueSaturationValueNode.h b/source/blender/compositor/nodes/COM_HueSaturationValueNode.h
new file mode 100644
index 00000000000..4fa1a4f547c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_HueSaturationValueNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_HueSaturationValueNode_h
+#define _COM_HueSaturationValueNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief HueSaturationValueNode
+ * @ingroup Node
+ */
+class HueSaturationValueNode : public Node {
+public:
+ HueSaturationValueNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_IDMaskNode.cpp b/source/blender/compositor/nodes/COM_IDMaskNode.cpp
new file mode 100644
index 00000000000..ea9e279009c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_IDMaskNode.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_IDMaskNode.h"
+#include "DNA_scene_types.h"
+#include "COM_IDMaskOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_AntiAliasOperation.h"
+
+IDMaskNode::IDMaskNode(bNode *editorNode): Node(editorNode)
+{
+}
+void IDMaskNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ bNode *bnode = this->getbNode();
+ IDMaskOperation *operation;
+ operation = new IDMaskOperation();
+ operation->setObjectIndex(bnode->custom1);
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0));
+ if (bnode->custom2==0 || context->getScene()->r.scemode & R_FULL_SAMPLE) {
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ }
+ else {
+ AntiAliasOperation * antiAliasOperation = new AntiAliasOperation();
+ addLink(graph, operation->getOutputSocket(), antiAliasOperation->getInputSocket(0));
+ this->getOutputSocket(0)->relinkConnections(antiAliasOperation->getOutputSocket(0));
+ graph->addOperation(antiAliasOperation);
+ }
+ graph->addOperation(operation);
+
+}
diff --git a/source/blender/compositor/nodes/COM_IDMaskNode.h b/source/blender/compositor/nodes/COM_IDMaskNode.h
new file mode 100644
index 00000000000..2ccbbc08f9a
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_IDMaskNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_IDMaskNode_h_
+#define _COM_IDMaskNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief IDMaskNode
+ * @ingroup Node
+ */
+class IDMaskNode: public Node {
+public:
+ IDMaskNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ImageNode.cpp b/source/blender/compositor/nodes/COM_ImageNode.cpp
new file mode 100644
index 00000000000..5300d2deffc
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ImageNode.cpp
@@ -0,0 +1,152 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#include "COM_ImageNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_ImageOperation.h"
+#include "COM_MultilayerImageOperation.h"
+#include "BKE_node.h"
+#include "BLI_utildefines.h"
+
+ImageNode::ImageNode(bNode *editorNode): Node(editorNode)
+{
+}
+NodeOperation *ImageNode::doMultilayerCheck(ExecutionSystem *system, RenderLayer *rl, Image *image, ImageUser *user, int framenumber, int outputsocketIndex, int pass, DataType datatype)
+{
+ OutputSocket *outputSocket = this->getOutputSocket(outputsocketIndex);
+ MultilayerBaseOperation * operation = NULL;
+ switch (datatype) {
+ case COM_DT_VALUE:
+ operation = new MultilayerValueOperation(pass);
+ break;
+ case COM_DT_VECTOR:
+ operation = new MultilayerVectorOperation(pass);
+ break;
+ case COM_DT_COLOR:
+ operation = new MultilayerColorOperation(pass);
+ break;
+ default:
+ break;
+ }
+ operation->setImage(image);
+ operation->setRenderLayer(rl);
+ operation->setImageUser(user);
+ operation->setFramenumber(framenumber);
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ system->addOperation(operation);
+ return operation;
+}
+
+void ImageNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ /// Image output
+ OutputSocket *outputImage = this->getOutputSocket(0);
+ bNode *editorNode = this->getbNode();
+ Image *image = (Image*)editorNode->id;
+ ImageUser *imageuser = (ImageUser*)editorNode->storage;
+ int framenumber = context->getFramenumber();
+ int numberOfOutputs = this->getNumberOfOutputSockets();
+
+ /* force a load, we assume iuser index will be set OK anyway */
+ if (image && image->type==IMA_TYPE_MULTILAYER) {
+ BKE_image_get_ibuf(image, imageuser);
+ if (image->rr) {
+ RenderLayer *rl = (RenderLayer*)BLI_findlink(&image->rr->layers, imageuser->layer);
+ if (rl) {
+ OutputSocket * socket;
+ int index;
+ for (index = 0 ; index < numberOfOutputs ; index ++) {
+ socket = this->getOutputSocket(index);
+ if (socket->isConnected() || index == 0) {
+ bNodeSocket *bnodeSocket = socket->getbNodeSocket();
+ NodeImageLayer *storage = (NodeImageLayer*)bnodeSocket->storage;
+ int passindex = storage->pass_index;
+
+ RenderPass *rpass = (RenderPass *)BLI_findlink(&rl->passes, passindex);
+ if (rpass) {
+ NodeOperation * operation = NULL;
+ imageuser->pass = passindex;
+ switch (rpass->channels) {
+ case 1:
+ operation = doMultilayerCheck(graph, rl, image, imageuser, framenumber, index, passindex, COM_DT_VALUE);
+ break;
+ /* using image operations for both 3 and 4 channels (RGB and RGBA respectively) */
+ /* XXX any way to detect actual vector images? */
+ case 3:
+ operation = doMultilayerCheck(graph, rl, image, imageuser, framenumber, index, passindex, COM_DT_VECTOR);
+ break;
+ case 4:
+ operation = doMultilayerCheck(graph, rl, image, imageuser, framenumber, index, passindex, COM_DT_COLOR);
+ break;
+
+ default:
+ /* XXX add a dummy operation? */
+ break;
+ }
+ if (index == 0 && operation) {
+ addPreviewOperation(graph, operation->getOutputSocket(), 9);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ if (numberOfOutputs > 0) {
+ ImageOperation *operation = new ImageOperation();
+ if (outputImage->isConnected()) {
+ outputImage->relinkConnections(operation->getOutputSocket());
+ }
+ operation->setImage(image);
+ operation->setImageUser(imageuser);
+ operation->setFramenumber(framenumber);
+ graph->addOperation(operation);
+ addPreviewOperation(graph, operation->getOutputSocket(), 9);
+ }
+
+ if (numberOfOutputs > 1) {
+ OutputSocket *alphaImage = this->getOutputSocket(1);
+ if (alphaImage->isConnected()) {
+ ImageAlphaOperation *alphaOperation = new ImageAlphaOperation();
+ alphaOperation->setImage(image);
+ alphaOperation->setImageUser(imageuser);
+ alphaOperation->setFramenumber(framenumber);
+ alphaImage->relinkConnections(alphaOperation->getOutputSocket());
+ graph->addOperation(alphaOperation);
+ }
+ }
+ if (numberOfOutputs > 2) {
+ OutputSocket *depthImage = this->getOutputSocket(2);
+ if (depthImage->isConnected()) {
+ ImageDepthOperation *depthOperation = new ImageDepthOperation();
+ depthOperation->setImage(image);
+ depthOperation->setImageUser(imageuser);
+ depthOperation->setFramenumber(framenumber);
+ depthImage->relinkConnections(depthOperation->getOutputSocket());
+ graph->addOperation(depthOperation);
+ }
+ }
+ }
+}
+
diff --git a/source/blender/compositor/nodes/COM_ImageNode.h b/source/blender/compositor/nodes/COM_ImageNode.h
new file mode 100644
index 00000000000..70c3ab7f4b0
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ImageNode.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#include "COM_defines.h"
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "DNA_image_types.h"
+extern "C" {
+ #include "RE_engine.h"
+}
+
+/**
+ * @brief ImageNode
+ * @ingroup Node
+ */
+class ImageNode : public Node {
+
+private:
+ NodeOperation *doMultilayerCheck(ExecutionSystem *system, RenderLayer *rl, Image *image, ImageUser *user, int framenumber, int outputsocketIndex, int pass, DataType datatype);
+public:
+ ImageNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+
+};
diff --git a/source/blender/compositor/nodes/COM_InvertNode.cpp b/source/blender/compositor/nodes/COM_InvertNode.cpp
new file mode 100644
index 00000000000..616a63ae948
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_InvertNode.cpp
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_InvertNode.h"
+#include "DNA_scene_types.h"
+#include "COM_InvertOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "BKE_node.h"
+
+InvertNode::InvertNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void InvertNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InvertOperation *operation = new InvertOperation();
+ bNode *node = this->getbNode();
+ operation->setColor(node->custom1 & CMP_CHAN_RGB);
+ operation->setAlpha(node->custom1 & CMP_CHAN_A);
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0),true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1),true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_InvertNode.h b/source/blender/compositor/nodes/COM_InvertNode.h
new file mode 100644
index 00000000000..570e86445e6
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_InvertNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_InvertNode_h_
+#define _COM_InvertNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief InvertNode
+ * @ingroup Node
+ */
+class InvertNode: public Node {
+public:
+ InvertNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_LensDistortionNode.cpp b/source/blender/compositor/nodes/COM_LensDistortionNode.cpp
new file mode 100644
index 00000000000..5719f31180b
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_LensDistortionNode.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_LensDistortionNode.h"
+#include "DNA_scene_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_ProjectorLensDistortionOperation.h"
+#include "COM_ScreenLensDistortionOperation.h"
+
+LensDistortionNode::LensDistortionNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void LensDistortionNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ bNode *editorNode = this->getbNode();
+ NodeLensDist * data = (NodeLensDist*)editorNode->storage;
+ if (data->proj) {
+ ProjectorLensDistortionOperation *operation = new ProjectorLensDistortionOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ operation->setDispertion(this->getInputSocket(2)->getStaticValues()[0]);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+
+ operation->setData(data);
+ graph->addOperation(operation);
+
+ }
+ else {
+ ScreenLensDistortionOperation *operation = new ScreenLensDistortionOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ operation->setDistortion(this->getInputSocket(1)->getStaticValues()[0]);
+ operation->setDispertion(this->getInputSocket(2)->getStaticValues()[0]);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+
+ operation->setData(data);
+ graph->addOperation(operation);
+ }
+
+}
diff --git a/source/blender/compositor/nodes/COM_LensDistortionNode.h b/source/blender/compositor/nodes/COM_LensDistortionNode.h
new file mode 100644
index 00000000000..64de740fde8
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_LensDistortionNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_LensDistortionNode_h_
+#define _COM_LensDistortionNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief LensDistortionNode
+ * @ingroup Node
+ */
+class LensDistortionNode: public Node {
+public:
+ LensDistortionNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_LuminanceMatteNode.cpp b/source/blender/compositor/nodes/COM_LuminanceMatteNode.cpp
new file mode 100644
index 00000000000..8c9ebeed1cf
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_LuminanceMatteNode.cpp
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_LuminanceMatteNode.h"
+#include "BKE_node.h"
+#include "COM_LuminanceMatteOperation.h"
+#include "COM_ConvertRGBToYUVOperation.h"
+#include "COM_SetAlphaOperation.h"
+
+LuminanceMatteNode::LuminanceMatteNode(bNode *editorNode): Node(editorNode)
+{}
+
+void LuminanceMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ OutputSocket *outputSocketImage = this->getOutputSocket(0);
+ OutputSocket *outputSocketMatte = this->getOutputSocket(1);
+
+ ConvertRGBToYUVOperation *rgbToYUV = new ConvertRGBToYUVOperation();
+ LuminanceMatteOperation *operationSet = new LuminanceMatteOperation();
+ bNode *editorsnode = getbNode();
+ operationSet->setSettings((NodeChroma*)editorsnode->storage);
+
+ inputSocket->relinkConnections(rgbToYUV->getInputSocket(0), true, 0, graph);
+ addLink(graph, rgbToYUV->getOutputSocket(), operationSet->getInputSocket(0));
+
+ if (outputSocketMatte->isConnected()) {
+ outputSocketMatte->relinkConnections(operationSet->getOutputSocket(0));
+ }
+
+ graph->addOperation(rgbToYUV);
+ graph->addOperation(operationSet);
+
+ SetAlphaOperation *operation = new SetAlphaOperation();
+ addLink(graph, rgbToYUV->getInputSocket(0)->getConnection()->getFromSocket(), operation->getInputSocket(0));
+ addLink(graph, operationSet->getOutputSocket(), operation->getInputSocket(1));
+ graph->addOperation(operation);
+ addPreviewOperation(graph, operation->getOutputSocket(), 9);
+
+ if (outputSocketImage->isConnected()) {
+ outputSocketImage->relinkConnections(operation->getOutputSocket());
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_LuminanceMatteNode.h b/source/blender/compositor/nodes/COM_LuminanceMatteNode.h
new file mode 100644
index 00000000000..e2dd8b47833
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_LuminanceMatteNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef COM_LuminanceMatteNODE_H
+#define COM_LuminanceMatteNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief LuminanceMatteNode
+ * @ingroup Node
+ */
+class LuminanceMatteNode : public Node
+{
+public:
+ LuminanceMatteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+
+#endif // COM_LuminanceMatteNODE_H
diff --git a/source/blender/compositor/nodes/COM_MapUVNode.cpp b/source/blender/compositor/nodes/COM_MapUVNode.cpp
new file mode 100644
index 00000000000..32db5ac13a8
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MapUVNode.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_MapUVNode.h"
+#include "COM_MapUVOperation.h"
+#include "COM_ExecutionSystem.h"
+
+MapUVNode::MapUVNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void MapUVNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ MapUVOperation *operation = new MapUVOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ bNode *node = this->getbNode();
+ operation->setAlpha((float)node->custom1);
+ operation->setResolutionInputSocketIndex(1);
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_MapUVNode.h b/source/blender/compositor/nodes/COM_MapUVNode.h
new file mode 100644
index 00000000000..3092e84990f
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MapUVNode.h
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_MapUVNode_h
+#define _COM_MapUVNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief MapUVNode
+ * @ingroup Node
+ */
+class MapUVNode : public Node {
+public:
+ MapUVNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_MapValueNode.cpp b/source/blender/compositor/nodes/COM_MapValueNode.cpp
new file mode 100644
index 00000000000..4ca93113dd5
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MapValueNode.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MapValueNode.h"
+
+#include "COM_MapValueOperation.h"
+#include "COM_ExecutionSystem.h"
+
+MapValueNode::MapValueNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void MapValueNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *colourSocket = this->getInputSocket(0);
+ OutputSocket *valueSocket = this->getOutputSocket(0);
+ TexMapping *storage = (TexMapping*)this->getbNode()->storage;
+ MapValueOperation *convertProg = new MapValueOperation();
+ convertProg->setSettings(storage);
+ colourSocket->relinkConnections(convertProg->getInputSocket(0), true, 0, graph);
+ valueSocket->relinkConnections(convertProg->getOutputSocket(0));
+ graph->addOperation(convertProg);
+}
diff --git a/source/blender/compositor/nodes/COM_MapValueNode.h b/source/blender/compositor/nodes/COM_MapValueNode.h
new file mode 100644
index 00000000000..47a6ea6adce
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MapValueNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MapValueNode_h
+#define _COM_MapValueNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief MapValueNode
+ * @ingroup Node
+ */
+class MapValueNode : public Node {
+public:
+ MapValueNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_MathNode.cpp b/source/blender/compositor/nodes/COM_MathNode.cpp
new file mode 100644
index 00000000000..a5c4aa01721
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MathNode.cpp
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MathNode.h"
+#include "COM_MathBaseOperation.h"
+#include "COM_ExecutionSystem.h"
+
+void MathNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ MathBaseOperation *operation=NULL;
+
+ switch (this->getbNode()->custom1)
+ {
+ case 0: /* Add */
+ operation = new MathAddOperation();
+ break;
+ case 1: /* Subtract */
+ operation = new MathSubtractOperation();
+ break;
+ case 2: /* Multiply */
+ operation = new MathMultiplyOperation();
+ break;
+ case 3: /* Divide */
+ operation = new MathDivideOperation();
+ break;
+ case 4: /* Sine */
+ operation = new MathSineOperation();
+ break;
+ case 5: /* Cosine */
+ operation = new MathCosineOperation();
+ break;
+ case 6: /* Tangent */
+ operation = new MathTangentOperation();
+ break;
+ case 7: /* Arc-Sine */
+ operation = new MathArcSineOperation();
+ break;
+ case 8: /* Arc-Cosine */
+ operation = new MathArcCosineOperation();
+ break;
+ case 9: /* Arc-Tangent */
+ operation = new MathArcTangentOperation();
+ break;
+ case 10: /* Power */
+ operation = new MathPowerOperation();
+ break;
+ case 11: /* Logarithm */
+ operation = new MathLogarithmOperation();
+ break;
+ case 12: /* Minimum */
+ operation = new MathMinimumOperation();
+ break;
+ case 13: /* Maximum */
+ operation = new MathMaximumOperation();
+ break;
+ case 14: /* Round */
+ operation = new MathRoundOperation();
+ break;
+ case 15: /* Less Than */
+ operation = new MathLessThanOperation();
+ break;
+ case 16: /* Greater Than */
+ operation = new MathGreaterThanOperation();
+ break;
+ }
+
+ if (operation != NULL) {
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ graph->addOperation(operation);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_MathNode.h b/source/blender/compositor/nodes/COM_MathNode.h
new file mode 100644
index 00000000000..1e2cccda396
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MathNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MathNode_h
+#define _COM_MathNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief MathNode
+ * @ingroup Node
+ */
+class MathNode: public Node {
+public:
+ MathNode(bNode *editorNode) :Node(editorNode) {}
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_MixNode.cpp b/source/blender/compositor/nodes/COM_MixNode.cpp
new file mode 100644
index 00000000000..63ab83834f2
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MixNode.cpp
@@ -0,0 +1,133 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixNode.h"
+
+#include "COM_MixBlendOperation.h"
+#include "COM_MixAddOperation.h"
+#include "COM_MixMultiplyOperation.h"
+#include "COM_MixBurnOperation.h"
+#include "COM_MixColorOperation.h"
+#include "COM_MixDarkenOperation.h"
+#include "COM_MixDifferenceOperation.h"
+#include "COM_MixDivideOperation.h"
+#include "COM_MixHueOperation.h"
+#include "COM_MixLightenOperation.h"
+#include "COM_MixLinearLightOperation.h"
+#include "COM_MixOverlayOperation.h"
+#include "COM_MixSaturationOperation.h"
+#include "COM_MixScreenOperation.h"
+#include "COM_MixSoftLightOperation.h"
+#include "COM_MixSubtractOperation.h"
+#include "COM_MixValueOperation.h"
+#include "COM_MixDodgeOperation.h"
+
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "DNA_material_types.h" // the ramp types
+
+
+MixNode::MixNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+
+void MixNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *valueSocket = this->getInputSocket(0);
+ InputSocket *color1Socket = this->getInputSocket(1);
+ InputSocket *color2Socket = this->getInputSocket(2);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ bNode *editorNode = this->getbNode();
+
+ MixBaseOperation *convertProg;
+
+ switch (editorNode->custom1) {
+ case MA_RAMP_ADD:
+ convertProg = new MixAddOperation();
+ break;
+ case MA_RAMP_MULT:
+ convertProg = new MixMultiplyOperation();
+ break;
+ case MA_RAMP_LIGHT:
+ convertProg = new MixLightenOperation();
+ break;
+ case MA_RAMP_BURN:
+ convertProg = new MixBurnOperation();
+ break;
+ case MA_RAMP_HUE:
+ convertProg = new MixHueOperation();
+ break;
+ case MA_RAMP_COLOR:
+ convertProg = new MixColorOperation();
+ break;
+ case MA_RAMP_SOFT:
+ convertProg = new MixSoftLightOperation();
+ break;
+ case MA_RAMP_SCREEN:
+ convertProg = new MixScreenOperation();
+ break;
+ case MA_RAMP_LINEAR:
+ convertProg = new MixLinearLightOperation();
+ break;
+ case MA_RAMP_DIFF:
+ convertProg = new MixDifferenceOperation();
+ break;
+ case MA_RAMP_SAT:
+ convertProg = new MixSaturationOperation();
+ break;
+ case MA_RAMP_DIV:
+ convertProg = new MixDivideOperation();
+ break;
+ case MA_RAMP_SUB:
+ convertProg = new MixSubtractOperation();
+ break;
+ case MA_RAMP_DARK:
+ convertProg = new MixDarkenOperation();
+ break;
+ case MA_RAMP_OVERLAY:
+ convertProg = new MixOverlayOperation();
+ break;
+ case MA_RAMP_VAL:
+ convertProg = new MixValueOperation();
+ break;
+ case MA_RAMP_DODGE:
+ convertProg = new MixDodgeOperation();
+ break;
+
+ case MA_RAMP_BLEND:
+ default:
+ convertProg = new MixBlendOperation();
+ break;
+ }
+ convertProg->setUseValueAlphaMultiply(this->getbNode()->custom2);
+
+ valueSocket->relinkConnections(convertProg->getInputSocket(0), true, 0, graph);
+ color1Socket->relinkConnections(convertProg->getInputSocket(1), true, 1, graph);
+ color2Socket->relinkConnections(convertProg->getInputSocket(2), true, 2, graph);
+ outputSocket->relinkConnections(convertProg->getOutputSocket(0));
+ addPreviewOperation(graph, convertProg->getOutputSocket(0), 5);
+
+ convertProg->getInputSocket(2)->setResizeMode(color2Socket->getResizeMode());
+
+ graph->addOperation(convertProg);
+}
diff --git a/source/blender/compositor/nodes/COM_MixNode.h b/source/blender/compositor/nodes/COM_MixNode.h
new file mode 100644
index 00000000000..4b57bdbc02a
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MixNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixNode_h
+#define _COM_MixNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief MixNode
+ * @ingroup Node
+ */
+class MixNode : public Node {
+public:
+ MixNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_MovieClipNode.cpp b/source/blender/compositor/nodes/COM_MovieClipNode.cpp
new file mode 100644
index 00000000000..0bddd328007
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MovieClipNode.cpp
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MovieClipNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_MovieClipOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ConvertColorProfileOperation.h"
+
+extern "C" {
+ #include "DNA_movieclip_types.h"
+ #include "BKE_movieclip.h"
+ #include "BKE_tracking.h"
+}
+
+MovieClipNode::MovieClipNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void MovieClipNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ OutputSocket *outputMovieClip = this->getOutputSocket(0);
+ OutputSocket *offsetXMovieClip = this->getOutputSocket(1);
+ OutputSocket *offsetYMovieClip = this->getOutputSocket(2);
+ OutputSocket *scaleMovieClip = this->getOutputSocket(3);
+ OutputSocket *angleMovieClip = this->getOutputSocket(4);
+
+ bNode *editorNode = this->getbNode();
+ MovieClip *movieClip = (MovieClip*)editorNode->id;
+ MovieClipUser *movieClipUser = (MovieClipUser*)editorNode->storage;
+
+ ImBuf * ibuf = NULL;
+ if (movieClip) {
+ ibuf = BKE_movieclip_get_ibuf(movieClip, movieClipUser);
+ }
+
+ // always connect the output image
+ MovieClipOperation *operation = new MovieClipOperation();
+
+ if (ibuf && context->isColorManaged() && ibuf->profile == IB_PROFILE_NONE) {
+ ConvertColorProfileOperation *converter = new ConvertColorProfileOperation();
+ converter->setFromColorProfile(IB_PROFILE_LINEAR_RGB);
+ converter->setToColorProfile(IB_PROFILE_SRGB);
+ addLink(graph, operation->getOutputSocket(), converter->getInputSocket(0));
+ addPreviewOperation(graph, converter->getOutputSocket(), 9);
+ if (outputMovieClip->isConnected()) {
+ outputMovieClip->relinkConnections(converter->getOutputSocket());
+ }
+ graph->addOperation(converter);
+ if (ibuf) {
+ converter->setPredivided(ibuf->flags & IB_cm_predivide);
+ }
+ }
+ else {
+ addPreviewOperation(graph, operation->getOutputSocket(), 9);
+ if (outputMovieClip->isConnected()) {
+ outputMovieClip->relinkConnections(operation->getOutputSocket());
+ }
+ }
+ operation->setMovieClip(movieClip);
+ operation->setMovieClipUser(movieClipUser);
+ operation->setFramenumber(context->getFramenumber());
+ graph->addOperation(operation);
+
+ MovieTrackingStabilization *stab = &movieClip->tracking.stabilization;
+ float loc[2], scale, angle;
+ loc[0] = 0.0f;
+ loc[1] = 0.0f;
+ scale = 1.0f;
+ angle = 0.0f;
+
+ if (ibuf) {
+ if (stab->flag&TRACKING_2D_STABILIZATION) {
+ BKE_tracking_stabilization_data(&movieClip->tracking, context->getFramenumber(), ibuf->x, ibuf->y, loc, &scale, &angle);
+ }
+ }
+
+ if (offsetXMovieClip->isConnected()) {
+ SetValueOperation * operationSetValue = new SetValueOperation();
+ operationSetValue->setValue(loc[0]);
+ offsetXMovieClip->relinkConnections(operationSetValue->getOutputSocket());
+ graph->addOperation(operationSetValue);
+ }
+ if (offsetYMovieClip->isConnected()) {
+ SetValueOperation * operationSetValue = new SetValueOperation();
+ operationSetValue->setValue(loc[1]);
+ offsetYMovieClip->relinkConnections(operationSetValue->getOutputSocket());
+ graph->addOperation(operationSetValue);
+ }
+ if (scaleMovieClip->isConnected()) {
+ SetValueOperation * operationSetValue = new SetValueOperation();
+ operationSetValue->setValue(scale);
+ scaleMovieClip->relinkConnections(operationSetValue->getOutputSocket());
+ graph->addOperation(operationSetValue);
+ }
+ if (angleMovieClip->isConnected()) {
+ SetValueOperation * operationSetValue = new SetValueOperation();
+ operationSetValue->setValue(angle);
+ angleMovieClip->relinkConnections(operationSetValue->getOutputSocket());
+ graph->addOperation(operationSetValue);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_MovieClipNode.h b/source/blender/compositor/nodes/COM_MovieClipNode.h
new file mode 100644
index 00000000000..8ad2fa8cbb0
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MovieClipNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief MovieClipNode
+ * @ingroup Node
+ */
+class MovieClipNode : public Node {
+
+
+public:
+ MovieClipNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+
+};
diff --git a/source/blender/compositor/nodes/COM_MovieDistortionNode.cpp b/source/blender/compositor/nodes/COM_MovieDistortionNode.cpp
new file mode 100644
index 00000000000..82949fe10f9
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MovieDistortionNode.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MovieDistortionNode.h"
+
+#include "COM_MovieDistortionOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "DNA_movieclip_types.h"
+
+MovieDistortionNode::MovieDistortionNode(bNode *editorNode) : Node(editorNode)
+{
+}
+
+void MovieDistortionNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ bNode *bnode = this->getbNode();
+ MovieClip * clip = (MovieClip*)bnode->id;
+
+ MovieDistortionOperation * operation = new MovieDistortionOperation(bnode->custom1 == 1);
+ operation->setMovieClip(clip);
+
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, system);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ system->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_MovieDistortionNode.h b/source/blender/compositor/nodes/COM_MovieDistortionNode.h
new file mode 100644
index 00000000000..5ee328c9df3
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MovieDistortionNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MovieDistortionNode_h_
+#define _COM_MovieDistortionNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief MovieDistortionNode
+ * @ingroup Node
+ */
+class MovieDistortionNode: public Node {
+public:
+ MovieDistortionNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_MuteNode.cpp b/source/blender/compositor/nodes/COM_MuteNode.cpp
new file mode 100644
index 00000000000..72303a4d6ee
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MuteNode.cpp
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MuteNode.h"
+#include "COM_SocketConnection.h"
+#include "stdio.h"
+#include "COM_SetValueOperation.h"
+#include "COM_SetVectorOperation.h"
+#include "COM_SetColorOperation.h"
+
+MuteNode::MuteNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void MuteNode::reconnect(ExecutionSystem * graph, OutputSocket * output)
+{
+ vector<InputSocket*> &inputsockets = this->getInputSockets();
+ for (unsigned int index = 0; index < inputsockets.size() ; index ++) {
+ InputSocket *input = inputsockets[index];
+ if (input->getDataType() == output->getDataType()) {
+ if (input->isConnected()) {
+ output->relinkConnections(input->getConnection()->getFromSocket(), false);
+ return;
+ }
+ }
+ }
+
+ NodeOperation * operation;
+ switch (output->getDataType()) {
+ case COM_DT_VALUE:
+ {
+ SetValueOperation *valueoperation = new SetValueOperation();
+ valueoperation->setValue(0.0f);
+ operation = valueoperation;
+ break;
+ }
+ case COM_DT_VECTOR:
+ {
+ SetVectorOperation *vectoroperation = new SetVectorOperation();
+ vectoroperation->setX(0.0f);
+ vectoroperation->setY(0.0f);
+ vectoroperation->setW(0.0f);
+ operation = vectoroperation;
+ break;
+ }
+ case COM_DT_COLOR:
+ {
+ SetColorOperation *coloroperation = new SetColorOperation();
+ coloroperation->setChannel1(0.0f);
+ coloroperation->setChannel2(0.0f);
+ coloroperation->setChannel3(0.0f);
+ coloroperation->setChannel4(0.0f);
+ operation = coloroperation;
+ break;
+ }
+ /* quiet warnings */
+ case COM_DT_UNKNOWN:
+ break;
+ }
+
+ if (operation) {
+ output->relinkConnections(operation->getOutputSocket(), false);
+ graph->addOperation(operation);
+ }
+
+ output->clearConnections();
+}
+
+void MuteNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ vector<OutputSocket*> &outputsockets = this->getOutputSockets();
+
+ for (unsigned int index = 0 ; index < outputsockets.size() ; index ++) {
+ OutputSocket * output = outputsockets[index];
+ if (output->isConnected()) {
+ reconnect(graph, output);
+ }
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_MuteNode.h b/source/blender/compositor/nodes/COM_MuteNode.h
new file mode 100644
index 00000000000..2dfc786ef2b
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_MuteNode.h
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MuteNode_h_
+#define _COM_MuteNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief MuteNode
+ * @ingroup Node
+ */
+class MuteNode: public Node {
+public:
+ MuteNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+private:
+ void reconnect(ExecutionSystem *graph, OutputSocket * output);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_NormalNode.cpp b/source/blender/compositor/nodes/COM_NormalNode.cpp
new file mode 100644
index 00000000000..58b6ba1f410
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_NormalNode.cpp
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_NormalNode.h"
+#include "COM_ExecutionSystem.h"
+#include "BKE_node.h"
+#include "COM_DotproductOperation.h"
+#include "COM_SetVectorOperation.h"
+
+NormalNode::NormalNode(bNode *editorNode): Node(editorNode)
+{}
+
+void NormalNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ OutputSocket *outputSocketDotproduct = this->getOutputSocket(1);
+ bNode *editorNode = this->getbNode();
+
+ SetVectorOperation * operationSet = new SetVectorOperation();
+ bNodeSocket * insock = (bNodeSocket*)editorNode->outputs.first;
+ bNodeSocketValueVector *dval = (bNodeSocketValueVector*)insock->default_value;
+ operationSet->setX(dval->value[0]);
+ operationSet->setY(dval->value[1]);
+ operationSet->setZ(dval->value[2]);
+ operationSet->setW(0.0f);
+
+ outputSocket->relinkConnections(operationSet->getOutputSocket(0));
+ graph->addOperation(operationSet);
+
+ if (outputSocketDotproduct->isConnected()) {
+ DotproductOperation *operation = new DotproductOperation();
+ outputSocketDotproduct->relinkConnections(operation->getOutputSocket(0));
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ addLink(graph, operationSet->getOutputSocket(0), operation->getInputSocket(1));
+ graph->addOperation(operation);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_NormalNode.h b/source/blender/compositor/nodes/COM_NormalNode.h
new file mode 100644
index 00000000000..1e7c7c584c3
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_NormalNode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef COM_NORMALNODE_H
+#define COM_NORMALNODE_H
+
+#include "COM_Node.h"
+
+/**
+ * @brief NormalNode
+ * @ingroup Node
+ */
+class NormalNode : public Node
+{
+public:
+ NormalNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif // COM_NormalNODE_H
diff --git a/source/blender/compositor/nodes/COM_NormalizeNode.cpp b/source/blender/compositor/nodes/COM_NormalizeNode.cpp
new file mode 100644
index 00000000000..f3fe8579a86
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_NormalizeNode.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_NormalizeNode.h"
+#include "COM_NormalizeOperation.h"
+#include "COM_ExecutionSystem.h"
+
+NormalizeNode::NormalizeNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void NormalizeNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ NormalizeOperation *operation = new NormalizeOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_NormalizeNode.h b/source/blender/compositor/nodes/COM_NormalizeNode.h
new file mode 100644
index 00000000000..ce7a6e1f7ab
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_NormalizeNode.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_NormalizeNode_h_
+#define _COM_NormalizeNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief NormalizeNode
+ * @ingroup Node
+ */
+class NormalizeNode: public Node {
+public:
+ NormalizeNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_OutputFileNode.cpp b/source/blender/compositor/nodes/COM_OutputFileNode.cpp
new file mode 100644
index 00000000000..cc060e9f7cd
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_OutputFileNode.cpp
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#include "COM_OutputFileNode.h"
+#include "COM_OutputFileOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "BLI_path_util.h"
+#include "BKE_utildefines.h"
+
+OutputFileNode::OutputFileNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void OutputFileNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ NodeImageMultiFile *storage = (NodeImageMultiFile*)this->getbNode()->storage;
+
+ if (!context->isRendering()) {
+ /* XXX TODO as in previous implementation?
+ * add dummy operations and exit, to prevent file writing on each compo update.
+ */
+ }
+
+ if (storage->format.imtype==R_IMF_IMTYPE_MULTILAYER) {
+ /* single output operation for the multilayer file */
+ OutputOpenExrMultiLayerOperation *outputOperation = new OutputOpenExrMultiLayerOperation(
+ context->getScene(), context->getbNodeTree(), storage->base_path, storage->format.exr_codec);
+
+ int num_inputs = getNumberOfInputSockets();
+ bool hasConnections = false;
+ for (int i=0; i < num_inputs; ++i) {
+ InputSocket *input = getInputSocket(i);
+ if (input->isConnected()) {
+ hasConnections = true;
+ NodeImageMultiFileSocket *sockdata = (NodeImageMultiFileSocket *)input->getbNodeSocket()->storage;
+
+ outputOperation->add_layer(sockdata->layer, input->getDataType());
+
+ input->relinkConnections(outputOperation->getInputSocket(i));
+ }
+ }
+ if (hasConnections) addPreviewOperation(graph, outputOperation->getInputSocket(0), 5);
+
+ graph->addOperation(outputOperation);
+ }
+ else { /* single layer format */
+ int num_inputs = getNumberOfInputSockets();
+ bool previewAdded = false;
+ for (int i=0; i < num_inputs; ++i) {
+ InputSocket *input = getInputSocket(i);
+ if (input->isConnected()) {
+ NodeImageMultiFileSocket *sockdata = (NodeImageMultiFileSocket *)input->getbNodeSocket()->storage;
+ ImageFormatData *format = (sockdata->use_node_format ? &storage->format : &sockdata->format);
+ char path[FILE_MAX];
+
+ /* combine file path for the input */
+ BLI_join_dirfile(path, FILE_MAX, storage->base_path, sockdata->path);
+
+ OutputSingleLayerOperation *outputOperation = new OutputSingleLayerOperation(
+ context->getScene(), context->getbNodeTree(), input->getActualDataType(), format, path);
+ input->relinkConnections(outputOperation->getInputSocket(0));
+ graph->addOperation(outputOperation);
+ if (!previewAdded) {
+ addPreviewOperation(graph, outputOperation->getInputSocket(0), 5);
+ previewAdded = true;
+ }
+ }
+ }
+ }
+}
+
diff --git a/source/blender/compositor/nodes/COM_OutputFileNode.h b/source/blender/compositor/nodes/COM_OutputFileNode.h
new file mode 100644
index 00000000000..10cbba7d50f
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_OutputFileNode.h
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#ifndef _COM_OutputFileNode_h
+#define _COM_OutputFileNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief OutputFileNode
+ * @ingroup Node
+ */
+class OutputFileNode : public Node {
+public:
+ OutputFileNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
new file mode 100644
index 00000000000..4e99db090e1
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_RenderLayersImageProg.h"
+#include "COM_RenderLayersAlphaProg.h"
+#include "COM_RenderLayersDepthProg.h"
+#include "COM_RenderLayersNormalOperation.h"
+#include "COM_RenderLayersSpeedOperation.h"
+#include "COM_RenderLayersColorOperation.h"
+#include "COM_RenderLayersUVOperation.h"
+#include "COM_RenderLayersMistOperation.h"
+#include "COM_RenderLayersObjectIndexOperation.h"
+#include "COM_RenderLayersDiffuseOperation.h"
+#include "COM_RenderLayersSpecularOperation.h"
+#include "COM_RenderLayersShadowOperation.h"
+#include "COM_RenderLayersAOOperation.h"
+#include "COM_RenderLayersEmitOperation.h"
+#include "COM_RenderLayersReflectionOperation.h"
+#include "COM_RenderLayersRefractionOperation.h"
+#include "COM_RenderLayersEnvironmentOperation.h"
+#include "COM_RenderLayersIndirectOperation.h"
+#include "COM_RenderLayersMaterialIndexOperation.h"
+#include "COM_RenderLayersCyclesOperation.h"
+#include "COM_TranslateOperation.h"
+#include "COM_RotateOperation.h"
+#include "COM_ScaleOperation.h"
+#include "COM_SetValueOperation.h"
+
+RenderLayersNode::RenderLayersNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void RenderLayersNode::testSocketConnection(ExecutionSystem *system, int outputSocketNumber, RenderLayersBaseProg * operation)
+{
+ OutputSocket *outputSocket = this->getOutputSocket(outputSocketNumber);
+ Scene *scene = (Scene*)this->getbNode()->id;
+ short layerId = this->getbNode()->custom1;
+
+ if (outputSocket->isConnected()) {
+ operation->setScene(scene);
+ operation->setLayerId(layerId);
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ system->addOperation(operation);
+ if (outputSocketNumber == 0) { // only do for image socket if connected
+ addPreviewOperation(system, operation->getOutputSocket(), 9);
+ }
+ }
+ else {
+ if (outputSocketNumber == 0) {
+ system->addOperation(operation);
+ operation->setScene(scene);
+ operation->setLayerId(layerId);
+ addPreviewOperation(system, operation->getOutputSocket(), 9);
+ }
+ else {
+ delete operation;
+ }
+ }
+}
+
+void RenderLayersNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ testSocketConnection(graph, 0, new RenderLayersColourProg());
+ testSocketConnection(graph, 1, new RenderLayersAlphaProg());
+ testSocketConnection(graph, 2, new RenderLayersDepthProg());
+ testSocketConnection(graph, 3, new RenderLayersNormalOperation());
+ testSocketConnection(graph, 4, new RenderLayersUVOperation());
+ testSocketConnection(graph, 5, new RenderLayersSpeedOperation());
+ testSocketConnection(graph, 6, new RenderLayersColorOperation());
+ testSocketConnection(graph, 7, new RenderLayersDiffuseOperation());
+ testSocketConnection(graph, 8, new RenderLayersSpecularOperation());
+ testSocketConnection(graph, 9, new RenderLayersShadowOperation());
+ testSocketConnection(graph, 10, new RenderLayersAOOperation());
+ testSocketConnection(graph, 11, new RenderLayersReflectionOperation());
+ testSocketConnection(graph, 12, new RenderLayersRefractionOperation());
+ testSocketConnection(graph, 13, new RenderLayersIndirectOperation());
+ testSocketConnection(graph, 14, new RenderLayersObjectIndexOperation());
+ testSocketConnection(graph, 15, new RenderLayersMaterialIndexOperation());
+ testSocketConnection(graph, 16, new RenderLayersMistOperation());
+ testSocketConnection(graph, 17, new RenderLayersEmitOperation());
+ testSocketConnection(graph, 18, new RenderLayersEnvironmentOperation());
+
+ // cycles passes
+ testSocketConnection(graph, 19, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_DIRECT));
+ testSocketConnection(graph, 20, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_INDIRECT));
+ testSocketConnection(graph, 21, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_COLOR));
+ testSocketConnection(graph, 22, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_DIRECT));
+ testSocketConnection(graph, 23, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_INDIRECT));
+ testSocketConnection(graph, 24, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_COLOR));
+ testSocketConnection(graph, 25, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_DIRECT));
+ testSocketConnection(graph, 26, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_INDIRECT));
+ testSocketConnection(graph, 27, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_COLOR));
+}
diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.h b/source/blender/compositor/nodes/COM_RenderLayersNode.h
new file mode 100644
index 00000000000..f796a7147d9
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_RenderLayersNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_RenderLayersBaseProg.h"
+
+/**
+ * @brief RenderLayersNode
+ * @ingroup Node
+ */
+class RenderLayersNode : public Node {
+public:
+ RenderLayersNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+private:
+ void testSocketConnection(ExecutionSystem *graph, int outputSocketNumber, RenderLayersBaseProg * operation);
+};
diff --git a/source/blender/compositor/nodes/COM_RotateNode.cpp b/source/blender/compositor/nodes/COM_RotateNode.cpp
new file mode 100644
index 00000000000..f5fdf19398d
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_RotateNode.cpp
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RotateNode.h"
+
+#include "COM_RotateOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SetSamplerOperation.h"
+
+RotateNode::RotateNode(bNode *editorNode) : Node(editorNode)
+{
+}
+
+void RotateNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ InputSocket *inputDegreeSocket = this->getInputSocket(1);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ RotateOperation *operation = new RotateOperation();
+ SetSamplerOperation *sampler = new SetSamplerOperation();
+
+ switch (this->getbNode()->custom1) {
+ case 0:
+ sampler->setSampler(COM_PS_NEAREST);
+ break ;
+ case 1:
+ sampler->setSampler(COM_PS_BILINEAR);
+ break;
+ case 2:
+ sampler->setSampler(COM_PS_BICUBIC);
+ break;
+
+ }
+
+ addLink(system, sampler->getOutputSocket(), operation->getInputSocket(0));
+
+ inputSocket->relinkConnections(sampler->getInputSocket(0), true, 0, system);
+ inputDegreeSocket->relinkConnections(operation->getInputSocket(1), true, 1, system);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ system->addOperation(sampler);
+ system->addOperation(operation);
+
+}
diff --git a/source/blender/compositor/nodes/COM_RotateNode.h b/source/blender/compositor/nodes/COM_RotateNode.h
new file mode 100644
index 00000000000..9b471742aab
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_RotateNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RotateNode_h_
+#define _COM_RotateNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief RotateNode
+ * @ingroup Node
+ */
+class RotateNode: public Node {
+public:
+ RotateNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ScaleNode.cpp b/source/blender/compositor/nodes/COM_ScaleNode.cpp
new file mode 100644
index 00000000000..fe5862da018
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ScaleNode.cpp
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ScaleNode.h"
+
+#include "COM_ScaleOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "BKE_node.h"
+#include "COM_SetValueOperation.h"
+
+ScaleNode::ScaleNode(bNode *editorNode) : Node(editorNode)
+{
+}
+
+void ScaleNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ InputSocket *inputXSocket = this->getInputSocket(1);
+ InputSocket *inputYSocket = this->getInputSocket(2);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ bNode *bnode = this->getbNode();
+ switch (bnode->custom1) {
+ case CMP_SCALE_RELATIVE: {
+ ScaleOperation *operation = new ScaleOperation();
+
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputXSocket->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ inputYSocket->relinkConnections(operation->getInputSocket(2), true, 2, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+ break;
+ case CMP_SCALE_SCENEPERCENT: {
+ SetValueOperation * scaleFactorOperation = new SetValueOperation();
+ scaleFactorOperation->setValue(context->getScene()->r.size/100.0f);
+ ScaleOperation * operation = new ScaleOperation();
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ addLink(graph, scaleFactorOperation->getOutputSocket(), operation->getInputSocket(1));
+ addLink(graph, scaleFactorOperation->getOutputSocket(), operation->getInputSocket(2));
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(scaleFactorOperation);
+ graph->addOperation(operation);
+ }
+ break;
+
+ case CMP_SCALE_RENDERPERCENT: {
+ const RenderData *data = &context->getScene()->r;
+ ScaleFixedSizeOperation * operation = new ScaleFixedSizeOperation();
+ operation->setNewWidth(data->xsch*data->size/100.0f);
+ operation->setNewHeight(data->ysch*data->size/100.0f);
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ operation->getInputSocket(0)->getConnection()->setIgnoreResizeCheck(true);
+ graph->addOperation(operation);
+ }
+ break;
+
+ case CMP_SCALE_ABSOLUTE: {
+ ScaleAbsoluteOperation *operation = new ScaleAbsoluteOperation(); // TODO: what is the use of this one.... perhaps some issues when the ui was updated....
+
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputXSocket->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ inputYSocket->relinkConnections(operation->getInputSocket(2), true, 2, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+ break;
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_ScaleNode.h b/source/blender/compositor/nodes/COM_ScaleNode.h
new file mode 100644
index 00000000000..310ae96a65e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ScaleNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ScaleNode_h_
+#define _COM_ScaleNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ScaleNode
+ * @ingroup Node
+ */
+class ScaleNode: public Node {
+public:
+ ScaleNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_SeparateHSVANode.cpp b/source/blender/compositor/nodes/COM_SeparateHSVANode.cpp
new file mode 100644
index 00000000000..cfce56a080a
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateHSVANode.cpp
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SeparateHSVANode.h"
+
+#include "COM_SeparateChannelOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ConvertRGBToHSVOperation.h"
+
+SeparateHSVANode::SeparateHSVANode(bNode *editorNode): SeparateRGBANode(editorNode)
+{
+}
+
+void SeparateHSVANode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ ConvertRGBToHSVOperation *operation = new ConvertRGBToHSVOperation();
+ InputSocket *inputSocket = this->getInputSocket(0);
+ if (inputSocket->isConnected()) {
+ inputSocket->relinkConnections(operation->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), inputSocket);
+ }
+ graph->addOperation(operation);
+ SeparateRGBANode::convertToOperations(graph, context);
+}
diff --git a/source/blender/compositor/nodes/COM_SeparateHSVANode.h b/source/blender/compositor/nodes/COM_SeparateHSVANode.h
new file mode 100644
index 00000000000..9fbd0212509
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateHSVANode.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SeparateHSVANode_h
+#define _COM_SeparateHSVANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_SeparateRGBANode.h"
+
+/**
+ * @brief SeparateHSVANode
+ * @ingroup Node
+ */
+class SeparateHSVANode : public SeparateRGBANode {
+public:
+ SeparateHSVANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_SeparateRGBANode.cpp b/source/blender/compositor/nodes/COM_SeparateRGBANode.cpp
new file mode 100644
index 00000000000..7079762d465
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateRGBANode.cpp
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SeparateRGBANode.h"
+
+#include "COM_SeparateChannelOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "DNA_material_types.h" // the ramp types
+
+
+SeparateRGBANode::SeparateRGBANode(bNode *editorNode): Node(editorNode)
+{
+}
+
+
+void SeparateRGBANode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *imageSocket = this->getInputSocket(0);
+ OutputSocket *outputRSocket = this->getOutputSocket(0);
+ OutputSocket *outputGSocket = this->getOutputSocket(1);
+ OutputSocket *outputBSocket = this->getOutputSocket(2);
+ OutputSocket *outputASocket = this->getOutputSocket(3);
+
+ if (outputRSocket->isConnected()) {
+ SeparateChannelOperation *operation = new SeparateChannelOperation();
+ operation->setChannel(0);
+ imageSocket->relinkConnections(operation->getInputSocket(0), true, 0, true, graph);
+ outputRSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+ if (outputGSocket->isConnected()) {
+ SeparateChannelOperation *operation = new SeparateChannelOperation();
+ operation->setChannel(1);
+ imageSocket->relinkConnections(operation->getInputSocket(0), true, 0, true, graph);
+ outputGSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+ if (outputBSocket->isConnected()) {
+ SeparateChannelOperation *operation = new SeparateChannelOperation();
+ operation->setChannel(2);
+ imageSocket->relinkConnections(operation->getInputSocket(0), true, 0, true, graph);
+ outputBSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+ if (outputASocket->isConnected()) {
+ SeparateChannelOperation *operation = new SeparateChannelOperation();
+ operation->setChannel(3);
+ imageSocket->relinkConnections(operation->getInputSocket(0), true, 0, true, graph);
+ outputASocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_SeparateRGBANode.h b/source/blender/compositor/nodes/COM_SeparateRGBANode.h
new file mode 100644
index 00000000000..5fb00600790
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateRGBANode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SeparateRGBANode_h
+#define _COM_SeparateRGBANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief SeparateRGBANode
+ * @ingroup Node
+ */
+class SeparateRGBANode : public Node {
+public:
+ SeparateRGBANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_SeparateYCCANode.cpp b/source/blender/compositor/nodes/COM_SeparateYCCANode.cpp
new file mode 100644
index 00000000000..68d20235de7
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateYCCANode.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_SeparateYCCANode.h"
+#include "COM_SeparateChannelOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ConvertRGBToYCCOperation.h"
+
+SeparateYCCANode::SeparateYCCANode(bNode *editorNode): SeparateRGBANode(editorNode)
+{
+}
+
+void SeparateYCCANode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ ConvertRGBToYCCOperation *operation = new ConvertRGBToYCCOperation();
+ InputSocket *inputSocket = this->getInputSocket(0);
+
+ bNode *node = this->getbNode();
+ operation->setMode(node->custom1);
+
+ if (inputSocket->isConnected()) {
+ inputSocket->relinkConnections(operation->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), inputSocket);
+ }
+ graph->addOperation(operation);
+ SeparateRGBANode::convertToOperations(graph, context);
+}
diff --git a/source/blender/compositor/nodes/COM_SeparateYCCANode.h b/source/blender/compositor/nodes/COM_SeparateYCCANode.h
new file mode 100644
index 00000000000..441eba9bc93
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateYCCANode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_SeparateYCCANode_h
+#define _COM_SeparateYCCANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_SeparateRGBANode.h"
+
+/**
+ * @brief SeparateYCCANode
+ * @ingroup Node
+ */
+class SeparateYCCANode : public SeparateRGBANode {
+public:
+ SeparateYCCANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_SeparateYUVANode.cpp b/source/blender/compositor/nodes/COM_SeparateYUVANode.cpp
new file mode 100644
index 00000000000..650e5d1340b
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateYUVANode.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_SeparateYUVANode.h"
+#include "COM_SeparateChannelOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ConvertRGBToYUVOperation.h"
+
+SeparateYUVANode::SeparateYUVANode(bNode *editorNode): SeparateRGBANode(editorNode)
+{
+}
+
+void SeparateYUVANode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
+{
+ ConvertRGBToYUVOperation *operation = new ConvertRGBToYUVOperation();
+ InputSocket *inputSocket = this->getInputSocket(0);
+ if (inputSocket->isConnected()) {
+ inputSocket->relinkConnections(operation->getInputSocket(0));
+ addLink(graph, operation->getOutputSocket(), inputSocket);
+ }
+ graph->addOperation(operation);
+ SeparateRGBANode::convertToOperations(graph, context);
+}
diff --git a/source/blender/compositor/nodes/COM_SeparateYUVANode.h b/source/blender/compositor/nodes/COM_SeparateYUVANode.h
new file mode 100644
index 00000000000..136ce1b4f20
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SeparateYUVANode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_SeparateYUVANode_h
+#define _COM_SeparateYUVANode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+#include "COM_SeparateRGBANode.h"
+
+/**
+ * @brief SeparateYUVANode
+ * @ingroup Node
+ */
+class SeparateYUVANode : public SeparateRGBANode {
+public:
+ SeparateYUVANode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext *context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_SetAlphaNode.cpp b/source/blender/compositor/nodes/COM_SetAlphaNode.cpp
new file mode 100644
index 00000000000..90db6682184
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SetAlphaNode.cpp
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SetAlphaNode.h"
+#include "COM_SetAlphaOperation.h"
+#include "COM_ExecutionSystem.h"
+
+void SetAlphaNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ SetAlphaOperation *operation = new SetAlphaOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 0, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_SetAlphaNode.h b/source/blender/compositor/nodes/COM_SetAlphaNode.h
new file mode 100644
index 00000000000..c6b603049c5
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SetAlphaNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SetAlphaNode_h
+#define _COM_SetAlphaNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief SetAlphaNode
+ * @ingroup Node
+ */
+class SetAlphaNode: public Node {
+public:
+ SetAlphaNode(bNode *editorNode) :Node(editorNode) {}
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_SocketProxyNode.cpp b/source/blender/compositor/nodes/COM_SocketProxyNode.cpp
new file mode 100644
index 00000000000..42dd49bd1da
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SocketProxyNode.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SocketProxyNode.h"
+#include "COM_SocketConnection.h"
+#include "COM_SocketProxyOperation.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_SetVectorOperation.h"
+#include "COM_SetColorOperation.h"
+
+SocketProxyNode::SocketProxyNode(bNode *editorNode, bNodeSocket *editorInput, bNodeSocket *editorOutput): Node(editorNode, false)
+{
+ DataType dt;
+
+ dt = COM_DT_VALUE;
+ if (editorInput->type == SOCK_RGBA) dt = COM_DT_COLOR;
+ if (editorInput->type == SOCK_VECTOR) dt = COM_DT_VECTOR;
+ this->addInputSocket(dt, (InputSocketResizeMode)editorInput->resizemode, editorInput);
+
+ dt = COM_DT_VALUE;
+ if (editorOutput->type == SOCK_RGBA) dt = COM_DT_COLOR;
+ if (editorOutput->type == SOCK_VECTOR) dt = COM_DT_VECTOR;
+ this->addOutputSocket(dt, editorOutput);
+}
+
+void SocketProxyNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ OutputSocket * outputsocket = this->getOutputSocket(0);
+ if (outputsocket->isConnected()) {
+ SocketProxyOperation *operation = new SocketProxyOperation();
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0));
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ }
+}
+
+void OutputSocketProxyNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ OutputSocket * outputsocket = this->getOutputSocket(0);
+ InputSocket * inputsocket = this->getInputSocket(0);
+ if (outputsocket->isConnected()) {
+ switch (outputsocket->getActualDataType()) {
+ case COM_DT_VALUE:
+ {
+ SetValueOperation *operation = new SetValueOperation();
+ bNodeSocketValueFloat *dval = (bNodeSocketValueFloat*)inputsocket->getbNodeSocket()->default_value;
+ operation->setValue(dval->value);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ break;
+ }
+ case COM_DT_COLOR:
+ {
+ SetColorOperation *operation = new SetColorOperation();
+ bNodeSocketValueRGBA *dval = (bNodeSocketValueRGBA*)inputsocket->getbNodeSocket()->default_value;
+ operation->setChannels(dval->value);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ break;
+ }
+ case COM_DT_VECTOR:
+ {
+ SetVectorOperation *operation = new SetVectorOperation();
+ bNodeSocketValueVector *dval = (bNodeSocketValueVector*)inputsocket->getbNodeSocket()->default_value;
+ operation->setVector(dval->value);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+ break;
+ }
+ /* quiet warnings */
+ case COM_DT_UNKNOWN:
+ break;
+ }
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_SocketProxyNode.h b/source/blender/compositor/nodes/COM_SocketProxyNode.h
new file mode 100644
index 00000000000..1b5ee699211
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SocketProxyNode.h
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SocketProxyNode_h_
+#define _COM_SocketProxyNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief SocketProxyNode
+ * @ingroup Node
+ */
+class SocketProxyNode: public Node {
+public:
+ SocketProxyNode(bNode *editorNode, bNodeSocket *editorInput, bNodeSocket *editorOutput);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+
+ virtual bool isProxyNode() const { return true; }
+};
+
+class OutputSocketProxyNode: public SocketProxyNode {
+public:
+ OutputSocketProxyNode(bNode *editorNode, bNodeSocket *editorInput, bNodeSocket *editorOutput): SocketProxyNode(editorNode, editorInput, editorOutput) {}
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_SplitViewerNode.cpp b/source/blender/compositor/nodes/COM_SplitViewerNode.cpp
new file mode 100644
index 00000000000..d1a2cccf758
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SplitViewerNode.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SplitViewerNode.h"
+#include "BKE_global.h"
+
+#include "COM_SplitViewerOperation.h"
+#include "COM_ExecutionSystem.h"
+
+SplitViewerNode::SplitViewerNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void SplitViewerNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *image1Socket = this->getInputSocket(0);
+ InputSocket *image2Socket = this->getInputSocket(1);
+ Image *image = (Image*)this->getbNode()->id;
+ ImageUser * imageUser = (ImageUser*) this->getbNode()->storage;
+ if (image1Socket->isConnected() && image2Socket->isConnected()) {
+ SplitViewerOperation *splitViewerOperation = new SplitViewerOperation();
+ splitViewerOperation->setImage(image);
+ splitViewerOperation->setImageUser(imageUser);
+ splitViewerOperation->setActive(this->getbNode()->flag & NODE_DO_OUTPUT);
+ splitViewerOperation->setSplitPercentage(this->getbNode()->custom1);
+ splitViewerOperation->setXSplit(!this->getbNode()->custom2);
+ image1Socket->relinkConnections(splitViewerOperation->getInputSocket(0), true, 1, graph);
+ image2Socket->relinkConnections(splitViewerOperation->getInputSocket(1), true, 1, graph);
+ addPreviewOperation(graph, splitViewerOperation->getInputSocket(0), 0);
+ graph->addOperation(splitViewerOperation);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_SplitViewerNode.h b/source/blender/compositor/nodes/COM_SplitViewerNode.h
new file mode 100644
index 00000000000..e2d7a8c0dc9
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SplitViewerNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SplitViewerNode_h
+#define _COM_SplitViewerNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief SplitViewerNode
+ * @ingroup Node
+ */
+class SplitViewerNode : public Node {
+public:
+ SplitViewerNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_Stabilize2dNode.cpp b/source/blender/compositor/nodes/COM_Stabilize2dNode.cpp
new file mode 100644
index 00000000000..047b4fa4bf6
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_Stabilize2dNode.cpp
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Stabilize2dNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_TranslateOperation.h"
+#include "COM_RotateOperation.h"
+#include "COM_ScaleOperation.h"
+#include "COM_MovieClipAttributeOperation.h"
+
+extern "C" {
+ #include "DNA_movieclip_types.h"
+ #include "BKE_tracking.h"
+}
+
+Stabilize2dNode::Stabilize2dNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void Stabilize2dNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *imageInput = this->getInputSocket(0);
+ MovieClip *clip = (MovieClip *)getbNode()->id;
+
+ ScaleOperation * scaleOperation = new ScaleOperation();
+ RotateOperation * rotateOperation = new RotateOperation();
+ TranslateOperation * translateOperation = new TranslateOperation();
+ MovieClipAttributeOperation *scaleAttribute = new MovieClipAttributeOperation();
+ MovieClipAttributeOperation *angleAttribute = new MovieClipAttributeOperation();
+ MovieClipAttributeOperation *xAttribute = new MovieClipAttributeOperation();
+ MovieClipAttributeOperation *yAttribute = new MovieClipAttributeOperation();
+
+ scaleAttribute->setAttribute(MCA_SCALE);
+ scaleAttribute->setFramenumber(context->getFramenumber());
+ scaleAttribute->setMovieClip(clip);
+
+ angleAttribute->setAttribute(MCA_ANGLE);
+ angleAttribute->setFramenumber(context->getFramenumber());
+ angleAttribute->setMovieClip(clip);
+
+ xAttribute->setAttribute(MCA_X);
+ xAttribute->setFramenumber(context->getFramenumber());
+ xAttribute->setMovieClip(clip);
+
+ yAttribute->setAttribute(MCA_Y);
+ yAttribute->setFramenumber(context->getFramenumber());
+ yAttribute->setMovieClip(clip);
+
+ imageInput->relinkConnections(scaleOperation->getInputSocket(0), true, 0, graph);
+ addLink(graph, scaleAttribute->getOutputSocket(), scaleOperation->getInputSocket(1));
+ addLink(graph, scaleAttribute->getOutputSocket(), scaleOperation->getInputSocket(2));
+
+ addLink(graph, scaleOperation->getOutputSocket(), rotateOperation->getInputSocket(0));
+ addLink(graph, angleAttribute->getOutputSocket(), rotateOperation->getInputSocket(1));
+ rotateOperation->setDoDegree2RadConversion(false);
+
+ addLink(graph, rotateOperation->getOutputSocket(), translateOperation->getInputSocket(0));
+ addLink(graph, xAttribute->getOutputSocket(), translateOperation->getInputSocket(1));
+ addLink(graph, yAttribute->getOutputSocket(), translateOperation->getInputSocket(2));
+
+ this->getOutputSocket()->relinkConnections(translateOperation->getOutputSocket());
+
+ graph->addOperation(scaleAttribute);
+ graph->addOperation(angleAttribute);
+ graph->addOperation(xAttribute);
+ graph->addOperation(yAttribute);
+ graph->addOperation(scaleOperation);
+ graph->addOperation(translateOperation);
+ graph->addOperation(rotateOperation);
+}
diff --git a/source/blender/compositor/nodes/COM_Stabilize2dNode.h b/source/blender/compositor/nodes/COM_Stabilize2dNode.h
new file mode 100644
index 00000000000..63bf50b4d69
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_Stabilize2dNode.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief Stabilize2dNode
+ * @ingroup Node
+ */
+class Stabilize2dNode : public Node {
+public:
+ Stabilize2dNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
diff --git a/source/blender/compositor/nodes/COM_SwitchNode.cpp b/source/blender/compositor/nodes/COM_SwitchNode.cpp
new file mode 100644
index 00000000000..c65d7fbdc61
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SwitchNode.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SwitchNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_SocketProxyOperation.h"
+
+SwitchNode::SwitchNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+
+void SwitchNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ SocketProxyOperation * operation = new SocketProxyOperation();
+ int switchFrame = this->getbNode()->custom1;
+
+ if (!switchFrame) {
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ }
+ else {
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(0), true, 1, graph);
+ }
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_SwitchNode.h b/source/blender/compositor/nodes/COM_SwitchNode.h
new file mode 100644
index 00000000000..da93af42489
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_SwitchNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SwitchNode_h
+#define _COM_SwitchNode_h
+
+#include "COM_Node.h"
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+/**
+ * @brief SwitchNode
+ * @ingroup Node
+ */
+class SwitchNode : public Node {
+public:
+ SwitchNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_TextureNode.cpp b/source/blender/compositor/nodes/COM_TextureNode.cpp
new file mode 100644
index 00000000000..0f9a2ca4c26
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TextureNode.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TextureNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_TextureOperation.h"
+
+TextureNode::TextureNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void TextureNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ bNode *editorNode = this->getbNode();
+ Tex *texture = (Tex*)editorNode->id;
+ TextureOperation *operation = new TextureOperation();
+ this->getOutputSocket(1)->relinkConnections(operation->getOutputSocket());
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, system);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, system);
+ operation->setTexture(texture);
+ system->addOperation(operation);
+ addPreviewOperation(system, operation->getOutputSocket(), 9);
+
+ if (this->getOutputSocket(0)->isConnected()) {
+ TextureAlphaOperation *alphaOperation = new TextureAlphaOperation();
+ this->getOutputSocket(0)->relinkConnections(alphaOperation->getOutputSocket());
+ addLink(system, operation->getInputSocket(0)->getConnection()->getFromSocket(), alphaOperation->getInputSocket(0));
+ addLink(system, operation->getInputSocket(1)->getConnection()->getFromSocket(), alphaOperation->getInputSocket(1));
+ alphaOperation->setTexture(texture);
+ system->addOperation(alphaOperation);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_TextureNode.h b/source/blender/compositor/nodes/COM_TextureNode.h
new file mode 100644
index 00000000000..15c39db9077
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TextureNode.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief TextureNode
+ * @ingroup Node
+ */
+class TextureNode : public Node {
+public:
+ TextureNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
diff --git a/source/blender/compositor/nodes/COM_TimeNode.cpp b/source/blender/compositor/nodes/COM_TimeNode.cpp
new file mode 100644
index 00000000000..b3ce27a3829
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TimeNode.cpp
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TimeNode.h"
+#include "DNA_scene_types.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ExecutionSystem.h"
+extern "C" {
+ #include "BKE_colortools.h"
+}
+#include "BLI_utildefines.h"
+
+TimeNode::TimeNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void TimeNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ SetValueOperation *operation = new SetValueOperation();
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ bNode *node = this->getbNode();
+
+ /* stack order output: fac */
+ float fac = 0.0f;
+ const int framenumber = context->getFramenumber();
+
+ if (framenumber < node->custom1) {
+ fac = 0.0f;
+ }
+ else if (framenumber > node->custom2) {
+ fac = 1.0f;
+ }
+ else if (node->custom1 < node->custom2) {
+ fac = (context->getFramenumber() - node->custom1)/(float)(node->custom2-node->custom1);
+ }
+
+ fac = curvemapping_evaluateF((CurveMapping*)node->storage, 0, fac);
+ operation->setValue(CLAMPIS(fac, 0.0f, 1.0f));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_TimeNode.h b/source/blender/compositor/nodes/COM_TimeNode.h
new file mode 100644
index 00000000000..26751f6f104
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TimeNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_TimeNode_h_
+#define _COM_TimeNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief TimeNode
+ * @ingroup Node
+ */
+class TimeNode: public Node {
+public:
+ TimeNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_TonemapNode.cpp b/source/blender/compositor/nodes/COM_TonemapNode.cpp
new file mode 100644
index 00000000000..7e170ea1704
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TonemapNode.cpp
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TonemapNode.h"
+#include "DNA_scene_types.h"
+#include "COM_TonemapOperation.h"
+#include "COM_ExecutionSystem.h"
+
+TonemapNode::TonemapNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void TonemapNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ NodeTonemap *data = (NodeTonemap*)this->getbNode()->storage;
+ TonemapOperation *operation = data->type==1?new PhotoreceptorTonemapOperation():new TonemapOperation();
+
+ operation->setData(data);
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, system);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+ system->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_TonemapNode.h b/source/blender/compositor/nodes/COM_TonemapNode.h
new file mode 100644
index 00000000000..d6dd8474afa
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TonemapNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_TonemapNode_h_
+#define _COM_TonemapNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief TonemapNode
+ * @ingroup Node
+ */
+class TonemapNode: public Node {
+public:
+ TonemapNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_TransformNode.cpp b/source/blender/compositor/nodes/COM_TransformNode.cpp
new file mode 100644
index 00000000000..6762cb0687a
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TransformNode.cpp
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TransformNode.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_TranslateOperation.h"
+#include "COM_RotateOperation.h"
+#include "COM_ScaleOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_SetSamplerOperation.h"
+
+TransformNode::TransformNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void TransformNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *imageInput = this->getInputSocket(0);
+ InputSocket *xInput = this->getInputSocket(1);
+ InputSocket *yInput = this->getInputSocket(2);
+ InputSocket *angleInput = this->getInputSocket(3);
+ InputSocket *scaleInput = this->getInputSocket(4);
+
+ ScaleOperation * scaleOperation = new ScaleOperation();
+ RotateOperation * rotateOperation = new RotateOperation();
+ TranslateOperation * translateOperation = new TranslateOperation();
+ SetSamplerOperation *sampler = new SetSamplerOperation();
+
+ switch (this->getbNode()->custom1) {
+ case 0:
+ sampler->setSampler(COM_PS_NEAREST);
+ break ;
+ case 1:
+ sampler->setSampler(COM_PS_BILINEAR);
+ break;
+ case 2:
+ sampler->setSampler(COM_PS_BICUBIC);
+ break;
+ }
+
+ imageInput->relinkConnections(sampler->getInputSocket(0), true, 0, graph);
+ addLink(graph, sampler->getOutputSocket(), scaleOperation->getInputSocket(0));
+ scaleInput->relinkConnections(scaleOperation->getInputSocket(1), true, 4, graph);
+ addLink(graph, scaleOperation->getInputSocket(1)->getConnection()->getFromSocket(), scaleOperation->getInputSocket(2)); // xscale = yscale
+
+ addLink(graph, scaleOperation->getOutputSocket(), rotateOperation->getInputSocket(0));
+ rotateOperation->setDoDegree2RadConversion(false);
+ angleInput->relinkConnections(rotateOperation->getInputSocket(1), true, 3, graph);
+
+ addLink(graph, rotateOperation->getOutputSocket(), translateOperation->getInputSocket(0));
+ xInput->relinkConnections(translateOperation->getInputSocket(1), true, 1, graph);
+ yInput->relinkConnections(translateOperation->getInputSocket(2), true, 2, graph);
+
+ this->getOutputSocket()->relinkConnections(translateOperation->getOutputSocket());
+
+ graph->addOperation(sampler);
+ graph->addOperation(scaleOperation);
+ graph->addOperation(rotateOperation);
+ graph->addOperation(translateOperation);
+}
diff --git a/source/blender/compositor/nodes/COM_TransformNode.h b/source/blender/compositor/nodes/COM_TransformNode.h
new file mode 100644
index 00000000000..237da44afd9
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TransformNode.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief TransformNode
+ * @ingroup Node
+ */
+class TransformNode : public Node {
+public:
+ TransformNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
diff --git a/source/blender/compositor/nodes/COM_TranslateNode.cpp b/source/blender/compositor/nodes/COM_TranslateNode.cpp
new file mode 100644
index 00000000000..f594db3c160
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TranslateNode.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TranslateNode.h"
+
+#include "COM_TranslateOperation.h"
+#include "COM_ExecutionSystem.h"
+
+TranslateNode::TranslateNode(bNode *editorNode) : Node(editorNode)
+{
+}
+
+void TranslateNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket *inputSocket = this->getInputSocket(0);
+ InputSocket *inputXSocket = this->getInputSocket(1);
+ InputSocket *inputYSocket = this->getInputSocket(2);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+ TranslateOperation *operation = new TranslateOperation();
+
+ inputSocket->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ inputXSocket->relinkConnections(operation->getInputSocket(1), true, 1, graph);
+ inputYSocket->relinkConnections(operation->getInputSocket(2), true, 2, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_TranslateNode.h b/source/blender/compositor/nodes/COM_TranslateNode.h
new file mode 100644
index 00000000000..295024d6beb
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_TranslateNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_TranslateNode_h_
+#define _COM_TranslateNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief TranslateNode
+ * @ingroup Node
+ */
+class TranslateNode: public Node {
+public:
+ TranslateNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ValueNode.cpp b/source/blender/compositor/nodes/COM_ValueNode.cpp
new file mode 100644
index 00000000000..39245e75a2f
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ValueNode.cpp
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ValueNode.h"
+#include "DNA_scene_types.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ExecutionSystem.h"
+
+ValueNode::ValueNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void ValueNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ SetValueOperation *operation = new SetValueOperation();
+ bNodeSocket *socket = this->getEditorOutputSocket(0);
+ bNodeSocketValueFloat *dval = (bNodeSocketValueFloat*)socket->default_value;
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ operation->setValue(dval->value);
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_ValueNode.h b/source/blender/compositor/nodes/COM_ValueNode.h
new file mode 100644
index 00000000000..4faf193fc8e
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ValueNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ValueNode_h_
+#define _COM_ValueNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ValueNode
+ * @ingroup Node
+ */
+class ValueNode: public Node {
+public:
+ ValueNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_VectorBlurNode.cpp b/source/blender/compositor/nodes/COM_VectorBlurNode.cpp
new file mode 100644
index 00000000000..4baa2315799
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_VectorBlurNode.cpp
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_VectorBlurNode.h"
+#include "DNA_node_types.h"
+#include "COM_FogGlowImageOperation.h"
+#include "COM_BokehBlurOperation.h"
+#include "COM_VectorBlurOperation.h"
+#include "COM_SetValueOperation.h"
+#include "COM_MixBlendOperation.h"
+
+VectorBlurNode::VectorBlurNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void VectorBlurNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ bNode *node = this->getbNode();
+ NodeBlurData *vectorBlurSettings = (NodeBlurData*)node->storage;
+ VectorBlurOperation *operation = new VectorBlurOperation();
+ operation->setVectorBlurSettings(vectorBlurSettings);
+ operation->setQuality(context->getQuality());
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, system);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, system);
+ this->getInputSocket(2)->relinkConnections(operation->getInputSocket(2), true, 2, system);
+ this->getOutputSocket()->relinkConnections(operation->getOutputSocket());
+ system->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_VectorBlurNode.h b/source/blender/compositor/nodes/COM_VectorBlurNode.h
new file mode 100644
index 00000000000..1df945731ce
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_VectorBlurNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_VectorBlurNode_h_
+#define _COM_VectorBlurNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief VectorBlurNode
+ * @ingroup Node
+ */
+class VectorBlurNode: public Node {
+public:
+ VectorBlurNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_VectorCurveNode.cpp b/source/blender/compositor/nodes/COM_VectorCurveNode.cpp
new file mode 100644
index 00000000000..2f216b5d5bd
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_VectorCurveNode.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_VectorCurveNode.h"
+#include "DNA_scene_types.h"
+#include "COM_VectorCurveOperation.h"
+#include "COM_ExecutionSystem.h"
+
+VectorCurveNode::VectorCurveNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void VectorCurveNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ VectorCurveOperation *operation = new VectorCurveOperation();
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+
+ operation->setCurveMapping((CurveMapping*)this->getbNode()->storage);
+
+ graph->addOperation(operation);
+}
diff --git a/source/blender/compositor/nodes/COM_VectorCurveNode.h b/source/blender/compositor/nodes/COM_VectorCurveNode.h
new file mode 100644
index 00000000000..9fbcfd50156
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_VectorCurveNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_VectorCurveNode_h_
+#define _COM_VectorCurveNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief VectorCurveNode
+ * @ingroup Node
+ */
+class VectorCurveNode: public Node {
+public:
+ VectorCurveNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp b/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp
new file mode 100644
index 00000000000..9aa922faa5d
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ViewLevelsNode.h"
+#include "DNA_scene_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_CalculateMeanOperation.h"
+#include "COM_CalculateStandardDeviationOperation.h"
+
+ViewLevelsNode::ViewLevelsNode(bNode *editorNode): Node(editorNode)
+{
+}
+void ViewLevelsNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
+{
+ InputSocket * input = this->getInputSocket(0);
+ bool firstOperationConnected = false;
+ if (input->isConnected()) {
+ OutputSocket *inputSocket = input->getConnection()->getFromSocket();
+ // add preview to inputSocket;
+
+ OutputSocket * socket = this->getOutputSocket(0);
+ if (socket->isConnected()) {
+ // calculate mean operation
+ CalculateMeanOperation * operation = new CalculateMeanOperation();
+ input->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ firstOperationConnected = true;
+ operation->setSetting(this->getbNode()->custom1);
+ socket->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+ }
+
+ socket = this->getOutputSocket(1);
+ if (socket->isConnected()) {
+ // calculate standard deviation operation
+ CalculateStandardDeviationOperation * operation = new CalculateStandardDeviationOperation();
+ if (firstOperationConnected) {
+ addLink(graph, inputSocket, operation->getInputSocket(0));
+ }
+ else {
+ input->relinkConnections(operation->getInputSocket(0), true, 0, graph);
+ }
+ operation->setSetting(this->getbNode()->custom1);
+ socket->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+ }
+ }
+}
+
diff --git a/source/blender/compositor/nodes/COM_ViewLevelsNode.h b/source/blender/compositor/nodes/COM_ViewLevelsNode.h
new file mode 100644
index 00000000000..11be6216cba
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ViewLevelsNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ViewLevelsNode_h_
+#define _COM_ViewLevelsNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ViewLevelsNode
+ * @ingroup Node
+ */
+class ViewLevelsNode: public Node {
+public:
+ ViewLevelsNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ViewerNode.cpp b/source/blender/compositor/nodes/COM_ViewerNode.cpp
new file mode 100644
index 00000000000..d518976143d
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ViewerNode.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ViewerNode.h"
+#include "BKE_global.h"
+
+#include "COM_ViewerOperation.h"
+#include "COM_ExecutionSystem.h"
+
+ViewerNode::ViewerNode(bNode *editorNode): Node(editorNode)
+{
+}
+
+void ViewerNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)\
+{
+ InputSocket *imageSocket = this->getInputSocket(0);
+ InputSocket *alphaSocket = this->getInputSocket(1);
+ Image *image = (Image*)this->getbNode()->id;
+ ImageUser * imageUser = (ImageUser*) this->getbNode()->storage;
+ if (imageSocket->isConnected()) {
+ bNode *editorNode = this->getbNode();
+ ViewerOperation *viewerOperation = new ViewerOperation();
+ viewerOperation->setColorManagement( context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT);
+ viewerOperation->setColorPredivide( context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT_PREDIVIDE);
+ viewerOperation->setbNodeTree(context->getbNodeTree());
+ viewerOperation->setImage(image);
+ viewerOperation->setImageUser(imageUser);
+ viewerOperation->setActive(editorNode->flag & NODE_DO_OUTPUT);
+ viewerOperation->setChunkOrder((OrderOfChunks)editorNode->custom1);
+ viewerOperation->setCenterX(editorNode->custom3);
+ viewerOperation->setCenterY(editorNode->custom4);
+ imageSocket->relinkConnections(viewerOperation->getInputSocket(0), true, 0, graph);
+ alphaSocket->relinkConnections(viewerOperation->getInputSocket(1));
+ graph->addOperation(viewerOperation);
+ addPreviewOperation(graph, viewerOperation->getInputSocket(0), 0);
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_ViewerNode.h b/source/blender/compositor/nodes/COM_ViewerNode.h
new file mode 100644
index 00000000000..59371f04e87
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ViewerNode.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ViewerNode_h
+#define _COM_ViewerNode_h
+
+#include "COM_Node.h"
+#include "DNA_node_types.h"
+/**
+ * @brief ViewerNode
+ * @ingroup Node
+ */
+class ViewerNode : public Node {
+public:
+ ViewerNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+#endif
diff --git a/source/blender/compositor/nodes/COM_ZCombineNode.cpp b/source/blender/compositor/nodes/COM_ZCombineNode.cpp
new file mode 100644
index 00000000000..25d9a6e97d2
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ZCombineNode.cpp
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ZCombineNode.h"
+
+#include "COM_ZCombineOperation.h"
+
+#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_MathBaseOperation.h"
+
+#include "DNA_material_types.h" // the ramp types
+
+void ZCombineNode::convertToOperations(ExecutionSystem *system, CompositorContext * context)
+{
+ if (this->getOutputSocket(0)->isConnected()) {
+ ZCombineOperation * operation = NULL;
+ if (this->getbNode()->custom1) {
+ operation = new ZCombineAlphaOperation();
+ }
+ else {
+ operation = new ZCombineOperation();
+ }
+
+ this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 0, system);
+ this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 1, system);
+ this->getInputSocket(2)->relinkConnections(operation->getInputSocket(2), true, 2, system);
+ this->getInputSocket(3)->relinkConnections(operation->getInputSocket(3), true, 3, system);
+ this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket());
+ system->addOperation(operation);
+ if (this->getOutputSocket(1)->isConnected()) {
+ MathMinimumOperation * zoperation = new MathMinimumOperation();
+ addLink(system, operation->getInputSocket(1)->getConnection()->getFromSocket(), zoperation->getInputSocket(0));
+ addLink(system, operation->getInputSocket(3)->getConnection()->getFromSocket(), zoperation->getInputSocket(1));
+ this->getOutputSocket(1)->relinkConnections(zoperation->getOutputSocket());
+ system->addOperation(zoperation);
+ }
+ }
+ else {
+ if (this->getOutputSocket(1)->isConnected()) {
+ MathMinimumOperation * zoperation = new MathMinimumOperation();
+ this->getInputSocket(1)->relinkConnections(zoperation->getInputSocket(0), true, 1, system);
+ this->getInputSocket(3)->relinkConnections(zoperation->getInputSocket(1), true, 3, system);
+ this->getOutputSocket(1)->relinkConnections(zoperation->getOutputSocket());
+ system->addOperation(zoperation);
+ }
+ }
+}
diff --git a/source/blender/compositor/nodes/COM_ZCombineNode.h b/source/blender/compositor/nodes/COM_ZCombineNode.h
new file mode 100644
index 00000000000..e9ce2f27469
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_ZCombineNode.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ZCombineNode_h
+#define _COM_ZCombineNode_h
+
+#include "COM_Node.h"
+
+/**
+ * @brief ZCombineNode
+ * @ingroup Node
+ */
+class ZCombineNode: public Node {
+public:
+ ZCombineNode(bNode *editorNode) :Node(editorNode) {}
+ void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_AlphaOverKeyOperation.cpp b/source/blender/compositor/operations/COM_AlphaOverKeyOperation.cpp
new file mode 100644
index 00000000000..c891142b808
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AlphaOverKeyOperation.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_AlphaOverKeyOperation.h"
+
+AlphaOverKeyOperation::AlphaOverKeyOperation(): MixBaseOperation()
+{
+}
+
+void AlphaOverKeyOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputOverColor[4];
+ float value[4];
+
+ inputValueOperation->read(value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers);
+ inputColor2Operation->read(inputOverColor, x, y, sampler, inputBuffers);
+
+ if (inputOverColor[3] <= 0.0f) {
+ outputValue[0] = inputColor1[0];
+ outputValue[1] = inputColor1[1];
+ outputValue[2] = inputColor1[2];
+ outputValue[3] = inputColor1[3];
+ }
+ else if (value[0] == 1.0f && inputOverColor[3] >= 1.0f) {
+ outputValue[0] = inputOverColor[0];
+ outputValue[1] = inputOverColor[1];
+ outputValue[2] = inputOverColor[2];
+ outputValue[3] = inputOverColor[3];
+ }
+ else {
+ float premul = value[0]*inputOverColor[3];
+ float mul = 1.0f - premul;
+
+ outputValue[0] = (mul*inputColor1[0]) + premul*inputOverColor[0];
+ outputValue[1] = (mul*inputColor1[1]) + premul*inputOverColor[1];
+ outputValue[2] = (mul*inputColor1[2]) + premul*inputOverColor[2];
+ outputValue[3] = (mul*inputColor1[3]) + value[0]*inputOverColor[3];
+ }
+}
diff --git a/source/blender/compositor/operations/COM_AlphaOverKeyOperation.h b/source/blender/compositor/operations/COM_AlphaOverKeyOperation.h
new file mode 100644
index 00000000000..d3077a05706
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AlphaOverKeyOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_AlphaOverKeyOperation_h
+#define _COM_AlphaOverKeyOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class AlphaOverKeyOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ AlphaOverKeyOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp b/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp
new file mode 100644
index 00000000000..aedf6ec5e9e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_AlphaOverMixedOperation.h"
+
+AlphaOverMixedOperation::AlphaOverMixedOperation(): MixBaseOperation()
+{
+ this->x = 0.0f;
+}
+
+void AlphaOverMixedOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputOverColor[4];
+ float value[4];
+
+ inputValueOperation->read(value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers);
+ inputColor2Operation->read(inputOverColor, x, y, sampler, inputBuffers);
+
+ if (inputOverColor[3] <= 0.0f) {
+ outputValue[0] = inputColor1[0];
+ outputValue[1] = inputColor1[1];
+ outputValue[2] = inputColor1[2];
+ outputValue[3] = inputColor1[3];
+ }
+ else if (value[0] == 1.0f && inputOverColor[3] >= 1.0f) {
+ outputValue[0] = inputOverColor[0];
+ outputValue[1] = inputOverColor[1];
+ outputValue[2] = inputOverColor[2];
+ outputValue[3] = inputOverColor[3];
+ }
+ else {
+ float addfac = 1.0f - this->x + inputOverColor[3]*this->x;
+ float premul = value[0]*addfac;
+ float mul = 1.0f - value[0]*inputOverColor[3];
+
+ outputValue[0] = (mul*inputColor1[0]) + premul*inputOverColor[0];
+ outputValue[1] = (mul*inputColor1[1]) + premul*inputOverColor[1];
+ outputValue[2] = (mul*inputColor1[2]) + premul*inputOverColor[2];
+ outputValue[3] = (mul*inputColor1[3]) + value[0]*inputOverColor[3];
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_AlphaOverMixedOperation.h b/source/blender/compositor/operations/COM_AlphaOverMixedOperation.h
new file mode 100644
index 00000000000..92936a20b79
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AlphaOverMixedOperation.h
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_AlphaOverMixedOperation_h
+#define _COM_AlphaOverMixedOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class AlphaOverMixedOperation : public MixBaseOperation {
+private:
+ float x;
+public:
+ /**
+ * Default constructor
+ */
+ AlphaOverMixedOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void setX(float x) {this->x = x;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp b/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp
new file mode 100644
index 00000000000..6cc33387917
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_AlphaOverPremultiplyOperation.h"
+
+AlphaOverPremultiplyOperation::AlphaOverPremultiplyOperation(): MixBaseOperation()
+{
+}
+
+void AlphaOverPremultiplyOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputOverColor[4];
+ float value[4];
+
+ inputValueOperation->read(value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers);
+ inputColor2Operation->read(inputOverColor, x, y, sampler, inputBuffers);
+
+ /* Zero alpha values should still permit an add of RGB data */
+ if (inputOverColor[3]<0.0f) {
+ outputValue[0] = inputColor1[0];
+ outputValue[1] = inputColor1[1];
+ outputValue[2] = inputColor1[2];
+ outputValue[3] = inputColor1[3];
+ }
+ else if (value[0] == 1.0f && inputOverColor[3] >= 1.0f) {
+ outputValue[0] = inputOverColor[0];
+ outputValue[1] = inputOverColor[1];
+ outputValue[2] = inputOverColor[2];
+ outputValue[3] = inputOverColor[3];
+ }
+ else {
+ float mul = 1.0f - value[0]*inputOverColor[3];
+
+ outputValue[0] = (mul*inputColor1[0]) + value[0]*inputOverColor[0];
+ outputValue[1] = (mul*inputColor1[1]) + value[0]*inputOverColor[1];
+ outputValue[2] = (mul*inputColor1[2]) + value[0]*inputOverColor[2];
+ outputValue[3] = (mul*inputColor1[3]) + value[0]*inputOverColor[3];
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.h b/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.h
new file mode 100644
index 00000000000..2fe4422d03e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_AlphaOverPremultiplyOperation_h
+#define _COM_AlphaOverPremultiplyOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class AlphaOverPremultiplyOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ AlphaOverPremultiplyOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_AntiAliasOperation.cpp b/source/blender/compositor/operations/COM_AntiAliasOperation.cpp
new file mode 100644
index 00000000000..62639eeb24a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AntiAliasOperation.cpp
@@ -0,0 +1,105 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_AntiAliasOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+extern "C" {
+ #include "RE_render_ext.h"
+}
+
+
+AntiAliasOperation::AntiAliasOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->valueReader = NULL;
+ this->buffer = NULL;
+ this->setComplex(true);
+}
+void AntiAliasOperation::initExecution()
+{
+ this->valueReader = this->getInputSocketReader(0);
+ NodeOperation::initMutex();
+}
+
+void AntiAliasOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data)
+{
+ if (y < 0 || y >= this->height || x < 0 || x >= this->width) {
+ color[0] = 0.0f;
+ }
+ else {
+ int offset = y*this->width + x;
+ color[0] = buffer[offset]/255.0f;
+ }
+
+}
+
+void AntiAliasOperation::deinitExecution()
+{
+ this->valueReader = NULL;
+ if (this->buffer) {
+ delete buffer;
+ }
+ NodeOperation::deinitMutex();
+}
+
+bool AntiAliasOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti imageInput;
+ if (this->buffer) {
+ return false;
+ }
+ else {
+ NodeOperation *operation = getInputOperation(0);
+ imageInput.xmax = operation->getWidth();
+ imageInput.xmin = 0;
+ imageInput.ymax = operation->getHeight();
+ imageInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&imageInput, readOperation, output) ) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void *AntiAliasOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ if (this->buffer) {return buffer;}
+ BLI_mutex_lock(getMutex());
+ if (this->buffer == NULL) {
+ MemoryBuffer *tile = (MemoryBuffer*)valueReader->initializeTileData(rect, memoryBuffers);
+ int size = tile->getHeight()*tile->getWidth();
+ float * input = tile->getBuffer();
+ char *valuebuffer = new char[size];
+ for (int i = 0 ; i < size ; i ++) {
+ float in = input[i * COM_NUMBER_OF_CHANNELS];
+ if (in < 0.0f) { in = 0.0f;}
+ if (in > 1.0f) {in = 1.0f;}
+ valuebuffer[i] = in * 255;
+ }
+ antialias_tagbuf(tile->getWidth(), tile->getHeight(), valuebuffer);
+ this->buffer = valuebuffer;
+ }
+ BLI_mutex_unlock(getMutex());
+ return this->buffer;
+}
diff --git a/source/blender/compositor/operations/COM_AntiAliasOperation.h b/source/blender/compositor/operations/COM_AntiAliasOperation.h
new file mode 100644
index 00000000000..fe160763828
--- /dev/null
+++ b/source/blender/compositor/operations/COM_AntiAliasOperation.h
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_AntiAliasOperation_h
+#define _COM_AntiAliasOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief AntiAlias operations
+ * it only supports anti aliasing on BW buffers.
+ * @ingroup operation
+ */
+class AntiAliasOperation : public NodeOperation {
+protected:
+ /**
+ * @brief Cached reference to the reader
+ */
+ SocketReader * valueReader;
+ char *buffer;
+public:
+ AntiAliasOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_BilateralBlurOperation.cpp b/source/blender/compositor/operations/COM_BilateralBlurOperation.cpp
new file mode 100644
index 00000000000..88fe17f633e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BilateralBlurOperation.cpp
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BilateralBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+BilateralBlurOperation::BilateralBlurOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+
+ this->inputColorProgram = NULL;
+ this->inputDeterminatorProgram = NULL;
+}
+
+void BilateralBlurOperation::initExecution()
+{
+ this->inputColorProgram = getInputSocketReader(0);
+ this->inputDeterminatorProgram = getInputSocketReader(1);
+ this->space = this->data->sigma_space + this->data->iter;
+ QualityStepHelper::initExecution(COM_QH_INCREASE);
+}
+
+void BilateralBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ // read the determinator color at x, y, this will be used as the reference color for the determinator
+ float determinatorReferenceColor[4];
+ float determinator[4];
+ float tempColor[4];
+ float blurColor[4];
+ float blurDivider;
+ float space = this->space;
+ float sigmacolor = this->data->sigma_color;
+ int minx = floor(x - space);
+ int maxx = ceil(x + space);
+ int miny = floor(y - space);
+ int maxy = ceil(y + space);
+ float deltaColor;
+ this->inputDeterminatorProgram->read(determinatorReferenceColor, x, y, inputBuffers, data);
+
+ blurColor[0] = 0.0f;
+ blurColor[1] = 0.0f;
+ blurColor[2] = 0.0f;
+ blurColor[3] = 0.0f;
+ blurDivider = 0.0f;
+ for (int yi = miny ; yi < maxy ; yi+=QualityStepHelper::getStep()) {
+ for (int xi = minx ; xi < maxx ; xi+=QualityStepHelper::getStep()) {
+ // read determinator
+ this->inputDeterminatorProgram->read(determinator, xi, yi, inputBuffers, data);
+ deltaColor = fabsf(determinatorReferenceColor[0] - determinator[0])+
+ fabsf(determinatorReferenceColor[1] - determinator[1])+
+ fabsf(determinatorReferenceColor[2] - determinator[2]); // do not take the alpha channel into account
+ if (deltaColor< sigmacolor) {
+ // add this to the blur
+ this->inputColorProgram->read(tempColor, xi, yi, inputBuffers, data);
+ blurColor[0]+=tempColor[0];
+ blurColor[1]+=tempColor[1];
+ blurColor[2]+=tempColor[2];
+ blurColor[3]+=tempColor[3];
+ blurDivider += 1.0f;
+ }
+ }
+ }
+
+ if (blurDivider > 0.0f) {
+ color[0] = blurColor[0]/blurDivider;
+ color[1] = blurColor[1]/blurDivider;
+ color[2] = blurColor[2]/blurDivider;
+ color[3] = blurColor[3]/blurDivider;
+ }
+ else {
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 1.0f;
+ }
+}
+
+void BilateralBlurOperation::deinitExecution()
+{
+ this->inputColorProgram = NULL;
+ this->inputDeterminatorProgram = NULL;
+}
+
+bool BilateralBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ int add = ceil(this->space)+1;
+
+ newInput.xmax = input->xmax + (add);
+ newInput.xmin = input->xmin - (add);
+ newInput.ymax = input->ymax + (add);
+ newInput.ymin = input->ymin - (add);
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_BilateralBlurOperation.h b/source/blender/compositor/operations/COM_BilateralBlurOperation.h
new file mode 100644
index 00000000000..8ec1ba8df99
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BilateralBlurOperation.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehBilateralBlurOperation_h
+#define _COM_BilateralBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_QualityStepHelper.h"
+
+class BilateralBlurOperation : public NodeOperation, public QualityStepHelper {
+private:
+ SocketReader *inputColorProgram;
+ SocketReader *inputDeterminatorProgram;
+ NodeBilateralBlurData *data;
+ float space;
+
+public:
+ BilateralBlurOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ void setData(NodeBilateralBlurData *data) {this->data = data;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_BlurBaseOperation.cpp b/source/blender/compositor/operations/COM_BlurBaseOperation.cpp
new file mode 100644
index 00000000000..6e1a7e2a908
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BlurBaseOperation.cpp
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BlurBaseOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+BlurBaseOperation::BlurBaseOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+ this->inputProgram = NULL;
+ this->data = NULL;
+ this->size = 1.0f;
+ this->deleteData = false;
+}
+void BlurBaseOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+ this->inputSize = this->getInputSocketReader(1);
+ this->data->image_in_width = this->getWidth();
+ this->data->image_in_height = this->getHeight();
+ if (this->data->relative) {
+ switch (this->data->aspect) {
+ case CMP_NODE_BLUR_ASPECT_NONE:
+ this->data->sizex = (int)(this->data->percentx*0.01f*this->data->image_in_width);
+ this->data->sizey = (int)(this->data->percenty*0.01f*this->data->image_in_height);
+ break;
+ case CMP_NODE_BLUR_ASPECT_Y:
+ this->data->sizex = (int)(this->data->percentx*0.01f*this->data->image_in_width);
+ this->data->sizey = (int)(this->data->percenty*0.01f*this->data->image_in_width);
+ break;
+ case CMP_NODE_BLUR_ASPECT_X:
+ this->data->sizex = (int)(this->data->percentx*0.01f*this->data->image_in_height);
+ this->data->sizey = (int)(this->data->percenty*0.01f*this->data->image_in_height);
+ break;
+ }
+ }
+
+ QualityStepHelper::initExecution(COM_QH_MULTIPLY);
+
+}
+
+float *BlurBaseOperation::make_gausstab(int rad)
+{
+ float *gausstab, sum, val;
+ int i, n;
+
+ n = 2 * rad + 1;
+
+ gausstab = new float[n];
+
+ sum = 0.0f;
+ for (i = -rad; i <= rad; i++) {
+ val = RE_filter_value(this->data->filtertype, (float)i/(float)rad);
+ sum += val;
+ gausstab[i+rad] = val;
+ }
+
+ sum = 1.0f/sum;
+ for (i=0; i<n; i++)
+ gausstab[i]*= sum;
+
+ return gausstab;
+}
+
+void BlurBaseOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+ this->inputSize = NULL;
+ if (this->deleteData) {
+ delete this->data;
+ }
+ this->data = NULL;
+}
+
+void BlurBaseOperation::updateSize(MemoryBuffer **memoryBuffers)
+{
+ float result[4];
+ this->getInputSocketReader(1)->read(result, 0, 0, COM_PS_NEAREST, memoryBuffers);
+ this->size = result[0];
+}
diff --git a/source/blender/compositor/operations/COM_BlurBaseOperation.h b/source/blender/compositor/operations/COM_BlurBaseOperation.h
new file mode 100644
index 00000000000..13e7eb52b77
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BlurBaseOperation.h
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BlurBaseOperation_h
+#define _COM_BlurBaseOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_QualityStepHelper.h"
+
+class BlurBaseOperation : public NodeOperation, public QualityStepHelper {
+private:
+
+protected:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputProgram;
+ SocketReader *inputSize;
+ NodeBlurData * data;
+ BlurBaseOperation();
+ float *make_gausstab(int rad);
+ float size;
+ bool deleteData;
+ void updateSize(MemoryBuffer **memoryBuffers);
+public:
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeBlurData *data) {this->data = data;}
+
+ void deleteDataWhenFinished() {this->deleteData = true;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_BokehBlurOperation.cpp b/source/blender/compositor/operations/COM_BokehBlurOperation.cpp
new file mode 100644
index 00000000000..1050fc57194
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BokehBlurOperation.cpp
@@ -0,0 +1,167 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BokehBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+BokehBlurOperation::BokehBlurOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+
+ this->size = .01;
+
+ this->inputProgram = NULL;
+ this->inputBokehProgram = NULL;
+ this->inputBoundingBoxReader = NULL;
+}
+
+void *BokehBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ void *buffer = getInputOperation(0)->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void BokehBlurOperation::initExecution()
+{
+ this->inputProgram = getInputSocketReader(0);
+ this->inputBokehProgram = getInputSocketReader(1);
+ this->inputBoundingBoxReader = getInputSocketReader(2);
+
+ int width = inputBokehProgram->getWidth();
+ int height = inputBokehProgram->getHeight();
+
+ float dimension;
+ if (width<height) {
+ dimension = width;
+ }
+ else {
+ dimension = height;
+ }
+ this->bokehMidX = width/2.0f;
+ this->bokehMidY = height/2.0f;
+ this->bokehDimension = dimension/2.0f;
+ QualityStepHelper::initExecution(COM_QH_INCREASE);
+}
+
+void BokehBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float tempColor[4];
+ float tempBoundingBox[4];
+ float bokeh[4];
+
+ inputBoundingBoxReader->read(tempBoundingBox, x, y, COM_PS_NEAREST, inputBuffers);
+ if (tempBoundingBox[0] >0.0f) {
+ tempColor[0] = 0;
+ tempColor[1] = 0;
+ tempColor[2] = 0;
+ tempColor[3] = 0;
+ float overallmultiplyerr = 0;
+ float overallmultiplyerg = 0;
+ float overallmultiplyerb = 0;
+ MemoryBuffer *inputBuffer = (MemoryBuffer*)data;
+ float *buffer = inputBuffer->getBuffer();
+ int bufferwidth = inputBuffer->getWidth();
+ int bufferstartx = inputBuffer->getRect()->xmin;
+ int bufferstarty = inputBuffer->getRect()->ymin;
+ int pixelSize = this->size*this->getWidth();
+
+ int miny = y - pixelSize;
+ int maxy = y + pixelSize;
+ int minx = x - pixelSize;
+ int maxx = x + pixelSize;
+ miny = max(miny, inputBuffer->getRect()->ymin);
+ minx = max(minx, inputBuffer->getRect()->xmin);
+ maxy = min(maxy, inputBuffer->getRect()->ymax);
+ maxx = min(maxx, inputBuffer->getRect()->xmax);
+
+ int step = getStep();
+ int offsetadd = getOffsetAdd();
+
+ float m = this->bokehDimension/pixelSize;
+ for (int ny = miny ; ny < maxy ; ny +=step) {
+ int bufferindex = ((minx - bufferstartx)*4)+((ny-bufferstarty)*4*bufferwidth);
+ for (int nx = minx ; nx < maxx ; nx +=step) {
+ float u = this->bokehMidX - (nx-x) *m;
+ float v = this->bokehMidY - (ny-y) *m;
+ inputBokehProgram->read(bokeh, u, v, COM_PS_NEAREST, inputBuffers);
+ tempColor[0] += bokeh[0] * buffer[bufferindex];
+ tempColor[1] += bokeh[1] * buffer[bufferindex+1];
+ tempColor[2] += bokeh[2]* buffer[bufferindex+2];
+ overallmultiplyerr += bokeh[0];
+ overallmultiplyerg += bokeh[1];
+ overallmultiplyerb += bokeh[2];
+ bufferindex +=offsetadd;
+ }
+ }
+ color[0] = tempColor[0]*(1.0/overallmultiplyerr);
+ color[1] = tempColor[1]*(1.0/overallmultiplyerg);
+ color[2] = tempColor[2]*(1.0/overallmultiplyerb);
+ color[3] = 1.0f;
+ }
+ else {
+ inputProgram->read(color, x, y, COM_PS_NEAREST, inputBuffers);
+ }
+}
+
+void BokehBlurOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+ this->inputBokehProgram = NULL;
+ this->inputBoundingBoxReader = NULL;
+}
+
+bool BokehBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ rcti bokehInput;
+
+ newInput.xmax = input->xmax + (size*this->getWidth());
+ newInput.xmin = input->xmin - (size*this->getWidth());
+ newInput.ymax = input->ymax + (size*this->getWidth());
+ newInput.ymin = input->ymin - (size*this->getWidth());
+
+ NodeOperation *operation = getInputOperation(1);
+ bokehInput.xmax = operation->getWidth();
+ bokehInput.xmin = 0;
+ bokehInput.ymax = operation->getHeight();
+ bokehInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&bokehInput, readOperation, output) ) {
+ return true;
+ }
+ operation = getInputOperation(0);
+ if (operation->determineDependingAreaOfInterest(&newInput, readOperation, output) ) {
+ return true;
+ }
+ operation = getInputOperation(2);
+ if (operation->determineDependingAreaOfInterest(input, readOperation, output) ) {
+ return true;
+ }
+ return false;
+}
diff --git a/source/blender/compositor/operations/COM_BokehBlurOperation.h b/source/blender/compositor/operations/COM_BokehBlurOperation.h
new file mode 100644
index 00000000000..ce14faa8596
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BokehBlurOperation.h
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehBokehBlurOperation_h
+#define _COM_BokehBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_QualityStepHelper.h"
+
+class BokehBlurOperation : public NodeOperation, public QualityStepHelper {
+private:
+ SocketReader *inputProgram;
+ SocketReader *inputBokehProgram;
+ SocketReader *inputBoundingBoxReader;
+ float size;
+ float bokehMidX;
+ float bokehMidY;
+ float bokehDimension;
+public:
+ BokehBlurOperation();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ void setSize(float size) {this->size = size;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_BokehImageOperation.cpp b/source/blender/compositor/operations/COM_BokehImageOperation.cpp
new file mode 100644
index 00000000000..4bc738052f6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BokehImageOperation.cpp
@@ -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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BokehImageOperation.h"
+#include "BLI_math.h"
+
+BokehImageOperation::BokehImageOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+ this->deleteData = false;
+}
+void BokehImageOperation::initExecution()
+{
+ this->centerX = getWidth() / 2;
+ this->centerY = getHeight() / 2;
+ this->center[0] = this->centerX;
+ this->center[1] = this->centerY;
+ this->inverseRounding = 1.0-this->data->rounding;
+ this->circularDistance = getWidth()/2;
+ this->flapRad = (M_PI*2)/this->data->flaps;
+ this->flapRadAdd = (this->data->angle/360.0)*M_PI*2;
+ if (this->flapRadAdd>M_PI) {
+ this->flapRadAdd-=M_PI*2;
+ }
+}
+void BokehImageOperation::detemineStartPointOfFlap(float r[2], int flapNumber, float distance)
+{
+ r[0] = sin(flapRad*flapNumber + flapRadAdd)*distance+centerX;
+ r[1] = cos(flapRad*flapNumber + flapRadAdd)*distance+centerY;
+}
+float BokehImageOperation::isInsideBokeh(float distance, float x, float y)
+{
+ float insideBokeh = 0.0;
+ const float deltaX = x - centerX;
+ const float deltaY = y - centerY;
+ float closestPoint[2];
+ float lineP1[2];
+ float lineP2[2];
+ float point[2];
+ point[0] = x;
+ point[1] = y;
+
+ const float distanceToCenter = len_v2v2(point, center);
+ const float bearing = (atan2f(deltaX, deltaY) + (M_PI*2));
+ int flapNumber = (int)((bearing-flapRadAdd)/flapRad);
+
+ detemineStartPointOfFlap(lineP1, flapNumber, distance);
+ detemineStartPointOfFlap(lineP2, flapNumber+1, distance);
+ closest_to_line_v2(closestPoint, point, lineP1, lineP2);
+
+ const float distanceLineToCenter = len_v2v2(center, closestPoint);
+ const float distanceRoundingToCenter = inverseRounding*distanceLineToCenter+this->data->rounding*distance;
+
+ const float catadioptricDistanceToCenter = distanceRoundingToCenter*this->data->catadioptric;
+ if (distanceRoundingToCenter>=distanceToCenter && catadioptricDistanceToCenter<=distanceToCenter) {
+ if (distanceRoundingToCenter-distanceToCenter<1.0) {
+ insideBokeh = (distanceRoundingToCenter-distanceToCenter);
+ }
+ else if (this->data->catadioptric != 0.0 && distanceToCenter-catadioptricDistanceToCenter<1.0) {
+ insideBokeh = (distanceToCenter-catadioptricDistanceToCenter);
+ }
+ else {
+ insideBokeh = 1.0;
+ }
+ }
+ return insideBokeh;
+}
+void BokehImageOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float shift = this->data->lensshift;
+ float shift2 = shift/2.0f;
+ float distance = this->circularDistance;
+ float insideBokehMax = isInsideBokeh(distance, x, y);
+ float insideBokehMed = isInsideBokeh(distance-fabs(shift2*distance), x, y);
+ float insideBokehMin = isInsideBokeh(distance-fabs(shift*distance), x, y);
+ if (shift<0) {
+ color[0] = insideBokehMax;
+ color[1] = insideBokehMed;
+ color[2] = insideBokehMin;
+ }
+ else {
+ color[0] = insideBokehMin;
+ color[1] = insideBokehMed;
+ color[2] = insideBokehMax;
+ }
+ color[3] = 1.0f;
+}
+
+void BokehImageOperation::deinitExecution()
+{
+ if (deleteData) {
+ if (data) {
+ delete data;
+ data = NULL;
+ }
+ }
+}
+
+void BokehImageOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ resolution[0] = 512;
+ resolution[1] = 512;
+}
diff --git a/source/blender/compositor/operations/COM_BokehImageOperation.h b/source/blender/compositor/operations/COM_BokehImageOperation.h
new file mode 100644
index 00000000000..516cc1da4f0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BokehImageOperation.h
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehImageOperation_h
+#define _COM_BokehImageOperation_h
+#include "COM_NodeOperation.h"
+
+
+class BokehImageOperation : public NodeOperation {
+private:
+ NodeBokehImage *data;
+
+ float center[2];
+ float centerX;
+ float centerY;
+ float inverseRounding;
+ float circularDistance;
+ float flapRad;
+ float flapRadAdd;
+
+ bool deleteData;
+
+ void detemineStartPointOfFlap(float r[2], int flapNumber, float distance);
+ float isInsideBokeh(float distance, float x, float y);
+public:
+ BokehImageOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ void setData(NodeBokehImage *data) {this->data = data;}
+ void deleteDataOnFinish() {this->deleteData = true;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_BoxMaskOperation.cpp b/source/blender/compositor/operations/COM_BoxMaskOperation.cpp
new file mode 100644
index 00000000000..0244be4cad3
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BoxMaskOperation.cpp
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BoxMaskOperation.h"
+#include "BLI_math.h"
+#include "DNA_node_types.h"
+
+BoxMaskOperation::BoxMaskOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputMask = NULL;
+ this->inputValue = NULL;
+ this->cosine = 0.0f;
+ this->sine = 0.0f;
+}
+void BoxMaskOperation::initExecution()
+{
+ this->inputMask = this->getInputSocketReader(0);
+ this->inputValue = this->getInputSocketReader(1);
+ const double rad = DEG2RAD(this->data->rotation);
+ this->cosine = cos(rad);
+ this->sine = sin(rad);
+ this->aspectRatio = ((float)this->getWidth())/this->getHeight();
+}
+
+void BoxMaskOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputMask[4];
+ float inputValue[4];
+
+ float rx = x/this->getWidth();
+ float ry = y/this->getHeight();
+
+ const float dy = (ry - this->data->y)/this->aspectRatio;
+ const float dx = rx - this->data->x;
+ rx = this->data->x+(this->cosine*dx + this->sine*dy);
+ ry = this->data->y+(-this->sine*dx + this->cosine*dy);
+
+ this->inputMask->read(inputMask, x, y, sampler, inputBuffers);
+ this->inputValue->read(inputValue, x, y, sampler, inputBuffers);
+
+ float halfHeight = (this->data->height)/2.0f;
+ float halfWidth = this->data->width/2.0f;
+ bool inside = rx > this->data->x-halfWidth
+ && rx < this->data->x+halfWidth
+ && ry > this->data->y-halfHeight
+ && ry < this->data->y+halfHeight;
+
+ switch (this->maskType) {
+ case CMP_NODE_MASKTYPE_ADD:
+ if (inside) {
+ color[0] = max(inputMask[0],inputValue[0]);
+ }
+ else {
+ color[0] = inputMask[0];
+ }
+ break;
+ case CMP_NODE_MASKTYPE_SUBTRACT:
+ if (inside) {
+ color[0] = inputMask[0]-inputValue[0];
+ CLAMP(color[0], 0, 1);
+ }
+ else {
+ color[0] = inputMask[0];
+ }
+ break;
+ case CMP_NODE_MASKTYPE_MULTIPLY:
+ if (inside) {
+ color[0] = inputMask[0]*inputValue[0];
+ }
+ else {
+ color[0] = 0;
+ }
+ break;
+ case CMP_NODE_MASKTYPE_NOT:
+ if (inside) {
+ if (inputMask[0]>0.0f) {
+ color[0] = 0;
+ }
+ else {
+ color[0] = inputValue[0];
+ }
+ }
+ else {
+ color[0] = inputMask[0];
+ }
+ break;
+ }
+
+
+}
+
+void BoxMaskOperation::deinitExecution()
+{
+ this->inputMask = NULL;
+ this->inputValue = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_BoxMaskOperation.h b/source/blender/compositor/operations/COM_BoxMaskOperation.h
new file mode 100644
index 00000000000..c3af95578d4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BoxMaskOperation.h
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BoxMaskOperation_h
+#define _COM_BoxMaskOperation_h
+#include "COM_NodeOperation.h"
+
+
+class BoxMaskOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputMask;
+ SocketReader * inputValue;
+
+ float sine;
+ float cosine;
+ float aspectRatio;
+ int maskType;
+
+ NodeBoxMask *data;
+public:
+ BoxMaskOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeBoxMask *data) {this->data = data;}
+
+ void setMaskType(int maskType) {this->maskType = maskType;}
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_BrightnessOperation.cpp b/source/blender/compositor/operations/COM_BrightnessOperation.cpp
new file mode 100644
index 00000000000..a4396a43cf7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BrightnessOperation.cpp
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_BrightnessOperation.h"
+
+BrightnessOperation::BrightnessOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+}
+void BrightnessOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+ this->inputBrightnessProgram = this->getInputSocketReader(1);
+ this->inputContrastProgram = this->getInputSocketReader(2);
+}
+
+void BrightnessOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ float a, b;
+ float inputBrightness[4];
+ float inputContrast[4];
+ this->inputProgram->read(inputValue, x, y, sampler, inputBuffers);
+ this->inputBrightnessProgram->read(inputBrightness, x, y, sampler, inputBuffers);
+ this->inputContrastProgram->read(inputContrast, x, y, sampler, inputBuffers);
+ float brightness = inputBrightness[0];
+ float contrast = inputContrast[0];
+ brightness /= 100.0f;
+ float delta = contrast / 200.0f;
+ a = 1.0f - delta * 2.0f;
+ /*
+ * The algorithm is by Werner D. Streidt
+ * (http://visca.com/ffactory/archives/5-99/msg00021.html)
+ * Extracted of OpenCV demhist.c
+ */
+ if (contrast > 0) {
+ a = 1.0f / a;
+ b = a * (brightness - delta);
+ }
+ else {
+ delta *= -1;
+ b = a * (brightness + delta);
+ }
+
+ color[0] = a*inputValue[0]+b;
+ color[1] = a*inputValue[1]+b;
+ color[2] = a*inputValue[2]+b;
+ color[3] = inputValue[3];
+}
+
+void BrightnessOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+ this->inputBrightnessProgram = NULL;
+ this->inputContrastProgram = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_BrightnessOperation.h b/source/blender/compositor/operations/COM_BrightnessOperation.h
new file mode 100644
index 00000000000..0c718a8b131
--- /dev/null
+++ b/source/blender/compositor/operations/COM_BrightnessOperation.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BrightnessOperation_h
+#define _COM_BrightnessOperation_h
+#include "COM_NodeOperation.h"
+
+
+class BrightnessOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputProgram;
+ SocketReader *inputBrightnessProgram;
+ SocketReader *inputContrastProgram;
+
+public:
+ BrightnessOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp b/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp
new file mode 100644
index 00000000000..a3438cea27b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp
@@ -0,0 +1,129 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CalculateMeanOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+
+
+CalculateMeanOperation::CalculateMeanOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->imageReader = NULL;
+ this->iscalculated = false;
+ this->setting = 1;
+ this->setComplex(true);
+}
+void CalculateMeanOperation::initExecution()
+{
+ this->imageReader = this->getInputSocketReader(0);
+ this->iscalculated = false;
+ NodeOperation::initMutex();
+}
+
+void CalculateMeanOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data)
+{
+ color[0] = this->result;
+}
+
+void CalculateMeanOperation::deinitExecution()
+{
+ this->imageReader = NULL;
+ NodeOperation::deinitMutex();
+}
+
+bool CalculateMeanOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti imageInput;
+ if (iscalculated) {
+ return false;
+ }
+ NodeOperation *operation = getInputOperation(0);
+ imageInput.xmax = operation->getWidth();
+ imageInput.xmin = 0;
+ imageInput.ymax = operation->getHeight();
+ imageInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&imageInput, readOperation, output) ) {
+ return true;
+ }
+ return false;
+}
+
+void *CalculateMeanOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ BLI_mutex_lock(getMutex());
+ if (!this->iscalculated) {
+ MemoryBuffer *tile = (MemoryBuffer*)imageReader->initializeTileData(rect, memoryBuffers);
+ calculateMean(tile);
+ this->iscalculated = true;
+ }
+ BLI_mutex_unlock(getMutex());
+ return NULL;
+}
+
+void CalculateMeanOperation::calculateMean(MemoryBuffer * tile)
+{
+ this->result = 0.0f;
+ float *buffer = tile->getBuffer();
+ int size = tile->getWidth()*tile->getHeight();
+ int pixels = 0;
+ float sum;
+ for (int i = 0, offset = 0 ; i < size ; i ++, offset +=4) {
+ if (buffer[offset+3] > 0) {
+ pixels ++;
+
+ switch (this->setting)
+ {
+ case 1:
+ {
+ sum += buffer[offset]*0.35f + buffer[offset+1]*0.45f + buffer[offset+2]*0.2f;
+ break;
+ }
+ case 2:
+ {
+ sum+= buffer[offset];
+ break;
+ }
+ case 3:
+ {
+ sum+= buffer[offset+1];
+ break;
+ }
+ case 4:
+ {
+ sum+= buffer[offset+2];
+ break;
+ }
+ case 5:
+ {
+ float yuv[3];
+ rgb_to_yuv(buffer[offset], buffer[offset+1], buffer[offset+2], &yuv[0], &yuv[1], &yuv[2]);
+ sum+=yuv[0];
+ break;
+ }
+ }
+ }
+ }
+ this->result = sum / pixels;
+}
diff --git a/source/blender/compositor/operations/COM_CalculateMeanOperation.h b/source/blender/compositor/operations/COM_CalculateMeanOperation.h
new file mode 100644
index 00000000000..b21743aa8bc
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CalculateMeanOperation.h
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CalculateMeanOperation_h
+#define _COM_CalculateMeanOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief base class of CalculateMean, implementing the simple CalculateMean
+ * @ingroup operation
+ */
+class CalculateMeanOperation : public NodeOperation {
+protected:
+ /**
+ * @brief Cached reference to the reader
+ */
+ SocketReader * imageReader;
+
+ bool iscalculated;
+ float result;
+ int setting;
+
+public:
+ CalculateMeanOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void setSetting(int setting) {this->setting = setting;}
+
+protected:
+ void calculateMean(MemoryBuffer *tile);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.cpp b/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.cpp
new file mode 100644
index 00000000000..651c6674fdb
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.cpp
@@ -0,0 +1,97 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CalculateStandardDeviationOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+
+
+CalculateStandardDeviationOperation::CalculateStandardDeviationOperation(): CalculateMeanOperation()
+{
+}
+
+void CalculateStandardDeviationOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data)
+{
+ color[0] = this->standardDeviation;
+}
+
+void *CalculateStandardDeviationOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ BLI_mutex_lock(getMutex());
+ if (!this->iscalculated) {
+ MemoryBuffer *tile = (MemoryBuffer*)imageReader->initializeTileData(rect, memoryBuffers);
+ CalculateMeanOperation::calculateMean(tile);
+ this->standardDeviation = 0.0f;
+ float *buffer = tile->getBuffer();
+ int size = tile->getWidth()*tile->getHeight();
+ int pixels = 0;
+ float sum;
+ float mean = this->result;
+ for (int i = 0, offset = 0 ; i < size ; i ++, offset +=4) {
+ if (buffer[offset+3] > 0) {
+ pixels ++;
+
+ switch (this->setting)
+ {
+ case 1:
+ {
+ float value = buffer[offset]*0.35f + buffer[offset+1]*0.45f + buffer[offset+2]*0.2f;
+ sum+=(value-mean)*(value-mean);
+ break;
+ }
+ case 2:
+ {
+ float value = buffer[offset];
+ sum+=value;
+ sum+=(value-mean)*(value-mean);
+ break;
+ }
+ case 3:
+ {
+ float value = buffer[offset+1];
+ sum+=value;
+ sum+=(value-mean)*(value-mean);
+ break;
+ }
+ case 4:
+ {
+ float value = buffer[offset+2];
+ sum+=value;
+ sum+=(value-mean)*(value-mean);
+ }
+ case 5:
+ {
+ float yuv[3];
+ rgb_to_yuv(buffer[offset], buffer[offset+1], buffer[offset+2], &yuv[0], &yuv[1], &yuv[2]);
+ sum+=(yuv[0]-mean)*(yuv[0]-mean);
+ break;
+ }
+ }
+ }
+ }
+ this->standardDeviation = sqrt(sum / (float)(pixels-1));
+ this->iscalculated = true;
+ }
+ BLI_mutex_unlock(getMutex());
+ return NULL;
+}
diff --git a/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.h b/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.h
new file mode 100644
index 00000000000..05c94401c86
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.h
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CalculateStandardDeviationOperation_h
+#define _COM_CalculateStandardDeviationOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+#include "COM_CalculateMeanOperation.h"
+/**
+ * @brief base class of CalculateStandardDeviation, implementing the simple CalculateStandardDeviation
+ * @ingroup operation
+ */
+class CalculateStandardDeviationOperation : public CalculateMeanOperation {
+protected:
+ float standardDeviation;
+
+public:
+ CalculateStandardDeviationOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ChangeHSVOperation.cpp b/source/blender/compositor/operations/COM_ChangeHSVOperation.cpp
new file mode 100644
index 00000000000..9b7f87e38bc
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ChangeHSVOperation.cpp
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ChangeHSVOperation.h"
+
+ChangeHSVOperation::ChangeHSVOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ChangeHSVOperation::initExecution()
+{
+ this->inputOperation = getInputSocketReader(0);
+}
+
+void ChangeHSVOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
+void ChangeHSVOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+
+ inputOperation->read(inputColor1, x, y, sampler, inputBuffers);
+
+ outputValue[0] = inputColor1[0] + (this->hue - 0.5f);
+ if (outputValue[0]>1.0f) outputValue[0]-=1.0; else if (outputValue[0]<0.0) outputValue[0]+= 1.0;
+ outputValue[1] = inputColor1[1] * this->saturation;
+ outputValue[2] = inputColor1[2] * this->value;
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_ChangeHSVOperation.h b/source/blender/compositor/operations/COM_ChangeHSVOperation.h
new file mode 100644
index 00000000000..a89487f9d7b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ChangeHSVOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ChangeHSVOperation_h
+#define _COM_ChangeHSVOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ChangeHSVOperation : public NodeOperation {
+private:
+ SocketReader * inputOperation;
+
+ float hue;
+ float saturation;
+ float value;
+
+public:
+ /**
+ * Default constructor
+ */
+ ChangeHSVOperation();
+
+ void initExecution();
+ void deinitExecution();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void setHue(float hue) {this->hue = hue;}
+ void setSaturation(float saturation) {this->saturation = saturation;}
+ void setValue(float value) {this->value = value;}
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ChannelMatteOperation.cpp b/source/blender/compositor/operations/COM_ChannelMatteOperation.cpp
new file mode 100644
index 00000000000..70bfc8f8cfa
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ChannelMatteOperation.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ChannelMatteOperation.h"
+#include "BLI_math.h"
+
+ChannelMatteOperation::ChannelMatteOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addOutputSocket(COM_DT_VALUE);
+
+ inputImageProgram = NULL;
+}
+
+void ChannelMatteOperation::initExecution()
+{
+ this->inputImageProgram = this->getInputSocketReader(0);
+
+ this->limit_range = this->limit_max - this->limit_min;
+
+ switch (this->limit_method) {
+ /* SINGLE */
+ case 0: {
+ /* 123 / RGB / HSV / YUV / YCC */
+ const int matte_channel=this->matte_channel-1;
+ const int limit_channel=this->limit_channel-1;
+ this->ids[0] = matte_channel;
+ this->ids[1] = limit_channel;
+ this->ids[2] = limit_channel;
+ break;
+ }
+ /* MAX */
+ case 1: {
+ switch (this->matte_channel) {
+ case 1: {
+ this->ids[0] = 0;
+ this->ids[1] = 1;
+ this->ids[2] = 2;
+ break;
+ }
+ case 2: {
+ this->ids[0] = 1;
+ this->ids[1] = 0;
+ this->ids[2] = 2;
+ break;
+ }
+ case 3: {
+ this->ids[0] = 2;
+ this->ids[1] = 0;
+ this->ids[2] = 1;
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+void ChannelMatteOperation::deinitExecution()
+{
+ this->inputImageProgram = NULL;
+}
+
+void ChannelMatteOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inColor[4];
+ float alpha;
+
+ const float limit_max = this->limit_max;
+ const float limit_min = this->limit_min;
+ const float limit_range = this->limit_range;
+
+ this->inputImageProgram->read(inColor, x, y, sampler, inputBuffers);
+
+ /* matte operation */
+ alpha = inColor[this->ids[0]] - max(inColor[this->ids[1]], inColor[this->ids[2]]);
+
+ /* flip because 0.0 is transparent, not 1.0 */
+ alpha = 1.f - alpha;
+
+ /* test range*/
+ if (alpha > limit_max) {
+ alpha = inColor[3]; /*whatever it was prior */
+ }
+ else if (alpha < limit_min) {
+ alpha = 0.f;
+ }
+ else {/*blend */
+ alpha = (alpha - limit_min) / limit_range;
+ }
+
+ /* store matte(alpha) value in [0] to go with
+ * COM_SetAlphaOperation and the Value output
+ */
+
+ /* don't make something that was more transparent less transparent */
+ outputValue[0] = min(alpha, inColor[3]);
+}
+
diff --git a/source/blender/compositor/operations/COM_ChannelMatteOperation.h b/source/blender/compositor/operations/COM_ChannelMatteOperation.h
new file mode 100644
index 00000000000..a4b5f454f92
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ChannelMatteOperation.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ChannelMatteOperation_h
+#define _COM_ChannelMatteOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ChannelMatteOperation : public NodeOperation {
+private:
+ SocketReader *inputImageProgram;
+
+ int color_space; /* node->custom1 */
+ int matte_channel; /* node->custom2 */
+ int limit_method; /* node->algorithm */
+ int limit_channel; /* node->channel */
+ float limit_max; /* node->storage->t1 */
+ float limit_min; /* node->storage->t2 */
+
+ float limit_range;
+
+ /** ids to use for the operations (max and simple)
+ * alpha = in[ids[0]] - max(in[ids[1]], in[ids[2]])
+ * the simple operation is using:
+ * alpha = in[ids[0]] - in[ids[1]]
+ * but to use the same formula and operation for both we do:
+ * ids[2] = ids[1]
+ * alpha = in[ids[0]] - max(in[ids[1]], in[ids[2]])
+ */
+ int ids[3];
+public:
+ /**
+ * Default constructor
+ */
+ ChannelMatteOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeChroma *nodeChroma, const int custom2)
+ {
+ this->limit_max = nodeChroma->t1;
+ this->limit_min = nodeChroma->t2;
+ this->limit_method = nodeChroma->algorithm;
+ this->limit_channel = nodeChroma->channel;
+ this->matte_channel = custom2;
+ }
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ChromaMatteOperation.cpp b/source/blender/compositor/operations/COM_ChromaMatteOperation.cpp
new file mode 100644
index 00000000000..e082ffed2b6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ChromaMatteOperation.cpp
@@ -0,0 +1,101 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ChromaMatteOperation.h"
+#include "BLI_math.h"
+
+ChromaMatteOperation::ChromaMatteOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addInputSocket(COM_DT_COLOR);
+ addOutputSocket(COM_DT_VALUE);
+
+ inputImageProgram = NULL;
+ inputKeyProgram = NULL;
+}
+
+void ChromaMatteOperation::initExecution()
+{
+ this->inputImageProgram = this->getInputSocketReader(0);
+ this->inputKeyProgram = this->getInputSocketReader(1);
+}
+
+void ChromaMatteOperation::deinitExecution()
+{
+ this->inputImageProgram = NULL;
+ this->inputKeyProgram = NULL;
+}
+
+void ChromaMatteOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inKey[4];
+ float inImage[4];
+
+ const float acceptance = this->settings->t1; /* in radians */
+ const float cutoff = this->settings->t2; /* in radians */
+ const float gain = this->settings->fstrength;
+
+ float x_angle, z_angle, alpha;
+ float theta, beta;
+ float kfg;
+
+ this->inputKeyProgram->read(inKey, x, y, sampler, inputBuffers);
+ this->inputImageProgram->read(inImage, x, y, sampler, inputBuffers);
+
+ /* store matte(alpha) value in [0] to go with
+ * COM_SetAlphaOperation and the Value output
+ */
+
+ /* Algorithm from book "Video Demistified," does not include the spill reduction part */
+ /* find theta, the angle that the color space should be rotated based on key*/
+ theta=atan2(inKey[2], inKey[1]);
+
+ /*rotate the cb and cr into x/z space */
+ x_angle=inImage[1]*cosf(theta)+inImage[2]*sinf(theta);
+ z_angle=inImage[2]*cosf(theta)-inImage[1]*sinf(theta);
+
+ /*if within the acceptance angle */
+ /* if kfg is <0 then the pixel is outside of the key color */
+ kfg = x_angle-(fabsf(z_angle)/tanf(acceptance/2.f));
+
+ if (kfg>0.f) { /* found a pixel that is within key color */
+ alpha=(1.f-kfg)*(gain);
+
+ beta=atan2(z_angle,x_angle);
+
+ /* if beta is within the cutoff angle */
+ if (fabsf(beta) < (cutoff/2.f)) {
+ alpha=0.f;
+ }
+
+ /* don't make something that was more transparent less transparent */
+ if (alpha<inImage[3]) {
+ outputValue[0]=alpha;
+ }
+ else {
+ outputValue[0]=inImage[3];
+ }
+ }
+ else { /*pixel is outside key color */
+ outputValue[0]=inImage[3]; /* make pixel just as transparent as it was before */
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_ChromaMatteOperation.h b/source/blender/compositor/operations/COM_ChromaMatteOperation.h
new file mode 100644
index 00000000000..9c5a5ff997b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ChromaMatteOperation.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ChromaMatteOperation_h
+#define _COM_ChromaMatteOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ChromaMatteOperation : public NodeOperation {
+private:
+ NodeChroma *settings;
+ SocketReader *inputImageProgram;
+ SocketReader *inputKeyProgram;
+public:
+ /**
+ * Default constructor
+ */
+ ChromaMatteOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeChroma *nodeChroma) {this->settings = nodeChroma;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cpp b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cpp
new file mode 100644
index 00000000000..cc535cd95df
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cpp
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorBalanceASCCDLOperation.h"
+#include "BLI_math.h"
+
+inline float colorbalance_cdl(float in, float offset, float power, float slope)
+{
+ float x = in * slope + offset;
+
+ /* prevent NaN */
+ CLAMP(x, 0.0, 1.0);
+
+ return powf(x, power);
+}
+
+ColorBalanceASCCDLOperation::ColorBalanceASCCDLOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputValueOperation = NULL;
+ this->inputColorOperation = NULL;
+ this->setResolutionInputSocketIndex(1);
+}
+
+void ColorBalanceASCCDLOperation::initExecution()
+{
+ this->inputValueOperation = this->getInputSocketReader(0);
+ this->inputColorOperation = this->getInputSocketReader(1);
+}
+
+void ColorBalanceASCCDLOperation::executePixel(float *outputColor, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ float value[4];
+
+ inputValueOperation->read(value, x, y, sampler, inputBuffers);
+ inputColorOperation->read(inputColor, x, y, sampler, inputBuffers);
+
+ float fac = value[0];
+ fac = min(1.0f, fac);
+ const float mfac = 1.0f - fac;
+
+ outputColor[0] = mfac*inputColor[0] + fac * colorbalance_cdl(inputColor[0], this->lift[0], this->gamma[0], this->gain[0]);
+ outputColor[1] = mfac*inputColor[1] + fac * colorbalance_cdl(inputColor[1], this->lift[1], this->gamma[1], this->gain[1]);
+ outputColor[2] = mfac*inputColor[2] + fac * colorbalance_cdl(inputColor[2], this->lift[2], this->gamma[2], this->gain[2]);
+ outputColor[3] = inputColor[3];
+
+}
+
+void ColorBalanceASCCDLOperation::deinitExecution()
+{
+ this->inputValueOperation = NULL;
+ this->inputColorOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h
new file mode 100644
index 00000000000..fb973e75c15
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorBalanceASCCDLOperation_h
+#define _COM_ColorBalanceASCCDLOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ColorBalanceASCCDLOperation : public NodeOperation {
+protected:
+ /**
+ * Prefetched reference to the inputProgram
+ */
+ SocketReader * inputValueOperation;
+ SocketReader * inputColorOperation;
+
+ float gain[3];
+ float lift[3];
+ float gamma[3];
+
+public:
+ /**
+ * Default constructor
+ */
+ ColorBalanceASCCDLOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setGain(float gain[3]) {
+ this->gain[0] = gain[0];
+ this->gain[1] = gain[1];
+ this->gain[2] = gain[2];
+ }
+ void setLift(float lift[3]) {
+ this->lift[0] = lift[0];
+ this->lift[1] = lift[1];
+ this->lift[2] = lift[2];
+ }
+ void setGamma(float gamma[3]) {
+ this->gamma[0] = gamma[0];
+ this->gamma[1] = gamma[1];
+ this->gamma[2] = gamma[2];
+ }
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp
new file mode 100644
index 00000000000..82958a7086e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorBalanceLGGOperation.h"
+#include "BLI_math.h"
+
+
+inline float colorbalance_lgg(float in, float lift_lgg, float gamma_inv, float gain)
+{
+ /* 1:1 match with the sequencer with linear/srgb conversions, the conversion isnt pretty
+ * but best keep it this way, sice testing for durian shows a similar calculation
+ * without lin/srgb conversions gives bad results (over-saturated shadows) with colors
+ * slightly below 1.0. some correction can be done but it ends up looking bad for shadows or lighter tones - campbell */
+ float x = (((linearrgb_to_srgb(in) - 1.0f) * lift_lgg) + 1.0f) * gain;
+
+ /* prevent NaN */
+ if (x < 0.f) x = 0.f;
+
+ return powf(srgb_to_linearrgb(x), gamma_inv);
+}
+
+ColorBalanceLGGOperation::ColorBalanceLGGOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputValueOperation = NULL;
+ this->inputColorOperation = NULL;
+ this->setResolutionInputSocketIndex(1);
+}
+
+void ColorBalanceLGGOperation::initExecution()
+{
+ this->inputValueOperation = this->getInputSocketReader(0);
+ this->inputColorOperation = this->getInputSocketReader(1);
+}
+
+void ColorBalanceLGGOperation::executePixel(float *outputColor, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ float value[4];
+
+ inputValueOperation->read(value, x, y, sampler, inputBuffers);
+ inputColorOperation->read(inputColor, x, y, sampler, inputBuffers);
+
+ float fac = value[0];
+ fac = min(1.0f, fac);
+ const float mfac = 1.0f - fac;
+
+ outputColor[0] = mfac*inputColor[0] + fac * colorbalance_lgg(inputColor[0], this->lift[0], this->gamma_inv[0], this->gain[0]);
+ outputColor[1] = mfac*inputColor[1] + fac * colorbalance_lgg(inputColor[1], this->lift[1], this->gamma_inv[1], this->gain[1]);
+ outputColor[2] = mfac*inputColor[2] + fac * colorbalance_lgg(inputColor[2], this->lift[2], this->gamma_inv[2], this->gain[2]);
+ outputColor[3] = inputColor[3];
+
+}
+
+void ColorBalanceLGGOperation::deinitExecution()
+{
+ this->inputValueOperation = NULL;
+ this->inputColorOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h
new file mode 100644
index 00000000000..e0df76cf2c5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorBalanceLGGOperation_h
+#define _COM_ColorBalanceLGGOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ColorBalanceLGGOperation : public NodeOperation {
+protected:
+ /**
+ * Prefetched reference to the inputProgram
+ */
+ SocketReader * inputValueOperation;
+ SocketReader * inputColorOperation;
+
+ float gain[3];
+ float lift[3];
+ float gamma_inv[3];
+
+public:
+ /**
+ * Default constructor
+ */
+ ColorBalanceLGGOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setGain(float gain[3]) {
+ this->gain[0] = gain[0];
+ this->gain[1] = gain[1];
+ this->gain[2] = gain[2];
+ }
+ void setLift(float lift[3]) {
+ this->lift[0] = lift[0];
+ this->lift[1] = lift[1];
+ this->lift[2] = lift[2];
+ }
+ void setGammaInv(float gamma_inv[3]) {
+ this->gamma_inv[0] = gamma_inv[0];
+ this->gamma_inv[1] = gamma_inv[1];
+ this->gamma_inv[2] = gamma_inv[2];
+ }
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorCorrectionOperation.cpp b/source/blender/compositor/operations/COM_ColorCorrectionOperation.cpp
new file mode 100644
index 00000000000..0a257b22ab8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorCorrectionOperation.cpp
@@ -0,0 +1,145 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorCorrectionOperation.h"
+#include "BLI_math.h"
+
+ColorCorrectionOperation::ColorCorrectionOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputImage = NULL;
+ this->inputMask = NULL;
+ this->redChannelEnabled = true;
+ this->greenChannelEnabled = true;
+ this->blueChannelEnabled = true;
+}
+void ColorCorrectionOperation::initExecution()
+{
+ this->inputImage = this->getInputSocketReader(0);
+ this->inputMask = this->getInputSocketReader(1);
+}
+
+void ColorCorrectionOperation::executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputImageColor[4];
+ float inputMask[4];
+ this->inputImage->read(inputImageColor, x, y, sampler, inputBuffers);
+ this->inputMask->read(inputMask, x, y, sampler, inputBuffers);
+
+ float level = (inputImageColor[0] + inputImageColor[1] + inputImageColor[2])/3.0f;
+ float contrast = this->data->master.contrast;
+ float saturation = this->data->master.saturation;
+ float gamma = this->data->master.gamma;
+ float gain = this->data->master.gain;
+ float lift = this->data->master.lift;
+ float r, g, b;
+
+ float value = inputMask[0];
+ value = min(1.0f, value);
+ const float mvalue = 1.0f - value;
+
+ float levelShadows = 0.0;
+ float levelMidtones = 0.0;
+ float levelHighlights = 0.0;
+#define MARGIN 0.10
+#define MARGIN_DIV (0.5/MARGIN)
+ if ( level < this->data->startmidtones-MARGIN) {
+ levelShadows = 1.0f;
+ }
+ else if (level < this->data->startmidtones+MARGIN) {
+ levelMidtones = ((level-this->data->startmidtones)*MARGIN_DIV)+0.5;
+ levelShadows = 1.0 - levelMidtones;
+ }
+ else if (level < this->data->endmidtones-MARGIN) {
+ levelMidtones = 1.0f;
+ }
+ else if (level < this->data->endmidtones+MARGIN) {
+ levelHighlights = ((level-this->data->endmidtones)*MARGIN_DIV)+0.5;
+ levelMidtones = 1.0 - levelHighlights;
+ }
+ else {
+ levelHighlights = 1.0f;
+ }
+#undef MARGIN
+#undef MARGIN_DIV
+ contrast *= (levelShadows*this->data->shadows.contrast)+(levelMidtones*this->data->midtones.contrast)+(levelHighlights*this->data->highlights.contrast);
+ saturation *= (levelShadows*this->data->shadows.saturation)+(levelMidtones*this->data->midtones.saturation)+(levelHighlights*this->data->highlights.saturation);
+ gamma *= (levelShadows*this->data->shadows.gamma)+(levelMidtones*this->data->midtones.gamma)+(levelHighlights*this->data->highlights.gamma);
+ gain *= (levelShadows*this->data->shadows.gain)+(levelMidtones*this->data->midtones.gain)+(levelHighlights*this->data->highlights.gain);
+ lift += (levelShadows*this->data->shadows.lift)+(levelMidtones*this->data->midtones.lift)+(levelHighlights*this->data->highlights.lift);
+
+ r = inputImageColor[0];
+ g = inputImageColor[1];
+ b = inputImageColor[2];
+
+ float invgamma = 1.0f/gamma;
+ float luma = 0.2126 * r + 0.7152 * g + 0.0722 * b;
+ r = ( luma + saturation * (r - luma));
+ g = ( luma + saturation * (g - luma));
+ b = ( luma + saturation * (b - luma));
+ CLAMP (r, 0.0f, 1.0f);
+ CLAMP (g, 0.0f, 1.0f);
+ CLAMP (b, 0.0f, 1.0f);
+
+ r = 0.5+((r-0.5)*contrast);
+ g = 0.5+((g-0.5)*contrast);
+ b = 0.5+((b-0.5)*contrast);
+
+ r = powf(r*gain+lift, invgamma);
+ g = powf(g*gain+lift, invgamma);
+ b = powf(b*gain+lift, invgamma);
+
+
+ // mix with mask
+ r = mvalue*inputImageColor[0] + value * r;
+ g = mvalue*inputImageColor[1] + value * g;
+ b = mvalue*inputImageColor[2] + value * b;
+
+ if (this->redChannelEnabled) {
+ output[0] = r;
+ }
+ else {
+ output[0] = inputImageColor[0];
+ }
+ if (this->greenChannelEnabled) {
+ output[1] = g;
+ }
+ else {
+ output[1] = inputImageColor[1];
+ }
+ if (this->blueChannelEnabled) {
+ output[2] = b;
+ }
+ else {
+ output[2] = inputImageColor[2];
+ }
+ output[3] = inputImageColor[3];
+}
+
+void ColorCorrectionOperation::deinitExecution()
+{
+ this->inputImage = NULL;
+ this->inputMask = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_ColorCorrectionOperation.h b/source/blender/compositor/operations/COM_ColorCorrectionOperation.h
new file mode 100644
index 00000000000..89107150ebd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorCorrectionOperation.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorCorrectionOperation_h
+#define _COM_ColorCorrectionOperation_h
+#include "COM_NodeOperation.h"
+
+
+class ColorCorrectionOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputImage;
+ SocketReader *inputMask;
+ NodeColorCorrection *data;
+
+ bool redChannelEnabled;
+ bool greenChannelEnabled;
+ bool blueChannelEnabled;
+
+public:
+ ColorCorrectionOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeColorCorrection * data) {this->data = data;}
+ void setRedChannelEnabled(bool enabled) {this->redChannelEnabled = enabled;}
+ void setGreenChannelEnabled(bool enabled) {this->greenChannelEnabled = enabled;}
+ void setBlueChannelEnabled(bool enabled) {this->blueChannelEnabled = enabled;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorCurveOperation.cpp b/source/blender/compositor/operations/COM_ColorCurveOperation.cpp
new file mode 100644
index 00000000000..8aee54013b1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorCurveOperation.cpp
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorCurveOperation.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ #include "BKE_colortools.h"
+#ifdef __cplusplus
+}
+#endif
+
+ColorCurveOperation::ColorCurveOperation(): CurveBaseOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputFacProgram = NULL;
+ this->inputImageProgram = NULL;
+ this->inputBlackProgram = NULL;
+ this->inputWhiteProgram = NULL;
+
+ this->setResolutionInputSocketIndex(1);
+}
+void ColorCurveOperation::initExecution()
+{
+ CurveBaseOperation::initExecution();
+ this->inputFacProgram = this->getInputSocketReader(0);
+ this->inputImageProgram = this->getInputSocketReader(1);
+ this->inputBlackProgram = this->getInputSocketReader(2);
+ this->inputWhiteProgram = this->getInputSocketReader(3);
+
+ curvemapping_premultiply(this->curveMapping, 0);
+
+}
+
+void ColorCurveOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float black[4];
+ float white[4];
+ float fac[4];
+ float image[4];
+
+ this->inputBlackProgram->read(black, x, y, sampler, inputBuffers);
+ this->inputWhiteProgram->read(white, x, y, sampler, inputBuffers);
+
+ curvemapping_set_black_white(this->curveMapping, black, white);
+
+ this->inputFacProgram->read(fac, x, y, sampler, inputBuffers);
+ this->inputImageProgram->read(image, x, y, sampler, inputBuffers);
+
+ if (fac[0] >= 1.0)
+ curvemapping_evaluate_premulRGBF(this->curveMapping, color, image);
+ else if (*fac<=0.0) {
+ color[0] = image[0];
+ color[1] = image[1];
+ color[2] = image[2];
+ }
+ else {
+ float col[4], mfac = 1.0f-*fac;
+ curvemapping_evaluate_premulRGBF(this->curveMapping, col, image);
+ color[0] = mfac*image[0] + *fac*col[0];
+ color[1] = mfac*image[1] + *fac*col[1];
+ color[2] = mfac*image[2] + *fac*col[2];
+ }
+ color[3] = image[3];
+}
+
+void ColorCurveOperation::deinitExecution()
+{
+ this->inputFacProgram = NULL;
+ this->inputImageProgram = NULL;
+ this->inputBlackProgram = NULL;
+ this->inputWhiteProgram = NULL;
+ curvemapping_premultiply(this->curveMapping, 1);
+}
diff --git a/source/blender/compositor/operations/COM_ColorCurveOperation.h b/source/blender/compositor/operations/COM_ColorCurveOperation.h
new file mode 100644
index 00000000000..15f9fd25e81
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorCurveOperation.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorCurveOperation_h
+#define _COM_ColorCurveOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_color_types.h"
+#include "COM_CurveBaseOperation.h"
+
+class ColorCurveOperation : public CurveBaseOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputFacProgram;
+ SocketReader * inputImageProgram;
+ SocketReader * inputBlackProgram;
+ SocketReader * inputWhiteProgram;
+public:
+ ColorCurveOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorMatteOperation.cpp b/source/blender/compositor/operations/COM_ColorMatteOperation.cpp
new file mode 100644
index 00000000000..7706559be00
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorMatteOperation.cpp
@@ -0,0 +1,84 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ColorMatteOperation.h"
+#include "BLI_math.h"
+
+ColorMatteOperation::ColorMatteOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addInputSocket(COM_DT_COLOR);
+ addOutputSocket(COM_DT_VALUE);
+
+ inputImageProgram = NULL;
+ inputKeyProgram = NULL;
+}
+
+void ColorMatteOperation::initExecution()
+{
+ this->inputImageProgram = this->getInputSocketReader(0);
+ this->inputKeyProgram = this->getInputSocketReader(1);
+}
+
+void ColorMatteOperation::deinitExecution()
+{
+ this->inputImageProgram = NULL;
+ this->inputKeyProgram = NULL;
+}
+
+void ColorMatteOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inColor[4];
+ float inKey[4];
+
+ const float hue = this->settings->t1;
+ const float sat = this->settings->t2;
+ const float val = this->settings->t3;
+
+ float h_wrap;
+
+ this->inputImageProgram->read(inColor, x, y, sampler, inputBuffers);
+ this->inputKeyProgram->read(inKey, x, y, sampler, inputBuffers);
+
+
+ /* store matte(alpha) value in [0] to go with
+ * COM_SetAlphaOperation and the Value output
+ */
+
+ if (
+ /* do hue last because it needs to wrap, and does some more checks */
+
+ /* sat */ (fabsf(inColor[1] - inKey[1]) < sat) &&
+ /* val */ (fabsf(inColor[2] - inKey[2]) < val) &&
+
+ /* multiply by 2 because it wraps on both sides of the hue,
+ * otherwise 0.5 would key all hue's */
+
+ /* hue */ ((h_wrap = 2.f * fabsf(inColor[0]-inKey[0])) < hue || (2.f - h_wrap) < hue)
+ ) {
+ outputValue[0] = 0.0f; /*make transparent*/
+ }
+
+ else { /*pixel is outside key color */
+ outputValue[0] = inColor[3]; /* make pixel just as transparent as it was before */
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_ColorMatteOperation.h b/source/blender/compositor/operations/COM_ColorMatteOperation.h
new file mode 100644
index 00000000000..904a51128c8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorMatteOperation.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ColorMatteOperation_h
+#define _COM_ColorMatteOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ColorMatteOperation : public NodeOperation {
+private:
+ NodeChroma *settings;
+ SocketReader *inputImageProgram;
+ SocketReader *inputKeyProgram;
+public:
+ /**
+ * Default constructor
+ */
+ ColorMatteOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeChroma *nodeChroma) {this->settings = nodeChroma;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorRampOperation.cpp b/source/blender/compositor/operations/COM_ColorRampOperation.cpp
new file mode 100644
index 00000000000..992bf3b9d1d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorRampOperation.cpp
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorRampOperation.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ #include "BKE_texture.h"
+#ifdef __cplusplus
+}
+#endif
+
+ColorRampOperation::ColorRampOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputProgram = NULL;
+ this->colorBand = NULL;
+}
+void ColorRampOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void ColorRampOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float values[4];
+
+ this->inputProgram->read(values, x, y, sampler, inputBuffers);
+ do_colorband(this->colorBand, values[0], color);
+}
+
+void ColorRampOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ColorRampOperation.h b/source/blender/compositor/operations/COM_ColorRampOperation.h
new file mode 100644
index 00000000000..8b8635cc5cd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorRampOperation.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorRampOperation_h
+#define _COM_ColorRampOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_texture_types.h"
+
+class ColorRampOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+ ColorBand *colorBand;
+public:
+ ColorRampOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setColorBand(ColorBand *colorBand) {this->colorBand = colorBand;}
+
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ColorSpillOperation.cpp b/source/blender/compositor/operations/COM_ColorSpillOperation.cpp
new file mode 100644
index 00000000000..56141efe681
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorSpillOperation.cpp
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2011, Blender Foundation.
+ *
+ * This Reader 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 Reader 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 Reader; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ColorSpillOperation.h"
+#include "BLI_math.h"
+#define avg(a,b) ((a+b)/2)
+
+ColorSpillOperation::ColorSpillOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addInputSocket(COM_DT_VALUE);
+ addOutputSocket(COM_DT_COLOR);
+
+ inputImageReader = NULL;
+ inputFacReader = NULL;
+ this->spillChannel = 1; // GREEN
+}
+
+void ColorSpillOperation::initExecution()
+{
+ this->inputImageReader = this->getInputSocketReader(0);
+ this->inputFacReader = this->getInputSocketReader(1);
+ if (spillChannel == 0) {
+ rmut = -1.0f;
+ gmut = 1.0f;
+ bmut = 1.0f;
+ this->channel2 = 1;
+ this->channel3 = 2;
+ if (settings->unspill == 0) {
+ settings->uspillr = 1.0f;
+ settings->uspillg = 0.0f;
+ settings->uspillb = 0.0f;
+ }
+ }
+ else if (spillChannel == 1) {
+ rmut = 1.0f;
+ gmut = -1.0f;
+ bmut = 1.0f;
+ this->channel2 = 0;
+ this->channel3 = 2;
+ if (settings->unspill == 0) {
+ settings->uspillr = 0.0f;
+ settings->uspillg = 1.0f;
+ settings->uspillb = 0.0f;
+ }
+ }
+ else {
+ rmut = 1.0f;
+ gmut = 1.0f;
+ bmut = -1.0f;
+
+ this->channel2 = 0;
+ this->channel3 = 1;
+ if (settings->unspill == 0) {
+ settings->uspillr = 0.0f;
+ settings->uspillg = 0.0f;
+ settings->uspillb = 1.0f;
+ }
+ }
+}
+
+void ColorSpillOperation::deinitExecution()
+{
+ this->inputImageReader = NULL;
+ this->inputFacReader = NULL;
+}
+
+void ColorSpillOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float fac[4];
+ float input[4];
+ float map;
+ this->inputFacReader->read(fac, x, y, sampler, inputBuffers);
+ this->inputImageReader->read(input, x, y, sampler, inputBuffers);
+ float rfac = min(1.0f, fac[0]);
+ map = calculateMapValue(rfac, input);
+ if (map>0) {
+ outputValue[0]=input[0]+rmut*(settings->uspillr*map);
+ outputValue[1]=input[1]+gmut*(settings->uspillg*map);
+ outputValue[2]=input[2]+bmut*(settings->uspillb*map);
+ outputValue[3]=input[3];
+ }
+ else {
+ outputValue[0]=input[0];
+ outputValue[1]=input[1];
+ outputValue[2]=input[2];
+ outputValue[3]=input[3];
+ }
+}
+float ColorSpillOperation::calculateMapValue(float fac, float *input)
+{
+ return fac * (input[this->spillChannel]-(this->settings->limscale*input[settings->limchan]));
+}
+
+
+float ColorSpillAverageOperation::calculateMapValue(float fac, float *input)
+{
+ return fac * (input[this->spillChannel]-(this->settings->limscale*avg(input[this->channel2], input[this->channel3])));
+}
diff --git a/source/blender/compositor/operations/COM_ColorSpillOperation.h b/source/blender/compositor/operations/COM_ColorSpillOperation.h
new file mode 100644
index 00000000000..69f51882496
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ColorSpillOperation.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ColorSpillOperation_h
+#define _COM_ColorSpillOperation_h
+#include "COM_NodeOperation.h"
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ColorSpillOperation : public NodeOperation {
+protected:
+ NodeColorspill *settings;
+ SocketReader *inputImageReader;
+ SocketReader *inputFacReader;
+ int spillChannel;
+ int channel2;
+ int channel3;
+ float rmut, gmut, bmut;
+public:
+ /**
+ * Default constructor
+ */
+ ColorSpillOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeColorspill *nodeColorSpill) {this->settings = nodeColorSpill;}
+ void setSpillChannel(int channel) {this->spillChannel = channel;}
+
+ float calculateMapValue(float fac, float *input);
+};
+
+class ColorSpillAverageOperation: public ColorSpillOperation {
+public:
+ float calculateMapValue(float fac, float *input);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp b/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp
new file mode 100644
index 00000000000..6b64934f0b8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CombineChannelsOperation.cpp
@@ -0,0 +1,76 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CombineChannelsOperation.h"
+#include <stdio.h>
+
+CombineChannelsOperation::CombineChannelsOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputChannel1Operation = NULL;
+ this->inputChannel2Operation = NULL;
+ this->inputChannel3Operation = NULL;
+ this->inputChannel4Operation = NULL;
+}
+void CombineChannelsOperation::initExecution()
+{
+ this->inputChannel1Operation = this->getInputSocketReader(0);
+ this->inputChannel2Operation = this->getInputSocketReader(1);
+ this->inputChannel3Operation = this->getInputSocketReader(2);
+ this->inputChannel4Operation = this->getInputSocketReader(3);
+}
+
+void CombineChannelsOperation::deinitExecution()
+{
+ this->inputChannel1Operation = NULL;
+ this->inputChannel2Operation = NULL;
+ this->inputChannel3Operation = NULL;
+ this->inputChannel4Operation = NULL;
+}
+
+
+void CombineChannelsOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float input[4];
+ /// @todo: remove if statements
+ if (this->inputChannel1Operation) {
+ this->inputChannel1Operation->read(input, x, y, sampler, inputBuffers);
+ color[0] = input[0];
+ }
+ if (this->inputChannel2Operation) {
+ this->inputChannel2Operation->read(input, x, y, sampler, inputBuffers);
+ color[1] = input[0];
+ }
+ if (this->inputChannel3Operation) {
+ this->inputChannel3Operation->read(input, x, y, sampler, inputBuffers);
+ color[2] = input[0];
+ }
+ if (this->inputChannel4Operation) {
+ this->inputChannel4Operation->read(input, x, y, sampler, inputBuffers);
+ color[3] = input[0];
+ }
+}
diff --git a/source/blender/compositor/operations/COM_CombineChannelsOperation.h b/source/blender/compositor/operations/COM_CombineChannelsOperation.h
new file mode 100644
index 00000000000..18dd1fd2ec9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CombineChannelsOperation.h
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CombineChannelsOperation_h_
+#define _COM_CombineChannelsOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class CombineChannelsOperation: public NodeOperation {
+private:
+ SocketReader *inputChannel1Operation;
+ SocketReader *inputChannel2Operation;
+ SocketReader *inputChannel3Operation;
+ SocketReader *inputChannel4Operation;
+public:
+ CombineChannelsOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_CompositorOperation.cpp b/source/blender/compositor/operations/COM_CompositorOperation.cpp
new file mode 100644
index 00000000000..ce9484d0d9f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CompositorOperation.cpp
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CompositorOperation.h"
+#include "COM_SocketConnection.h"
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "BKE_image.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+ #include "RE_shader_ext.h"
+ #include "RE_render_ext.h"
+ #include "MEM_guardedalloc.h"
+#include "render_types.h"
+}
+#include "PIL_time.h"
+
+
+CompositorOperation::CompositorOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+
+ this->setScene(NULL);
+ this->outputBuffer = NULL;
+ this->imageInput = NULL;
+ this->alphaInput = NULL;
+}
+
+void CompositorOperation::initExecution()
+{
+ // When initializing the tree during initial load the width and height can be zero.
+ this->imageInput = getInputSocketReader(0);
+ this->alphaInput = getInputSocketReader(1);
+ if (this->getWidth() * this->getHeight() != 0) {
+ this->outputBuffer=(float*) MEM_callocN(this->getWidth()*this->getHeight()*4*sizeof(float), "CompositorOperation");
+ }
+ const Scene * scene = this->scene;
+ Render *re = RE_GetRender(scene->id.name);
+ RenderResult *rr = RE_AcquireResultWrite(re);
+ if (rr) {
+ if (rr->rectf != NULL) {
+ MEM_freeN(rr->rectf);
+ }
+ rr->rectf = outputBuffer;
+ }
+ if (re) {
+ RE_ReleaseResult(re);
+ re = NULL;
+ }
+
+}
+
+void CompositorOperation::deinitExecution()
+{
+ this->outputBuffer = NULL;
+ this->imageInput = NULL;
+ this->alphaInput = NULL;
+}
+
+
+void CompositorOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers)
+{
+ float color[8]; // 7 is enough
+ float *buffer = this->outputBuffer;
+
+ if (!buffer) return;
+ int x1 = rect->xmin;
+ int y1 = rect->ymin;
+ int x2 = rect->xmax;
+ int y2 = rect->ymax;
+ int offset = (y1*this->getWidth() + x1 ) * 4;
+ int x;
+ int y;
+ bool breaked = false;
+
+ for (y = y1 ; y < y2 && (!breaked); y++) {
+ for (x = x1 ; x < x2 && (!breaked) ; x++) {
+ imageInput->read(color, x, y, COM_PS_NEAREST, memoryBuffers);
+ if (alphaInput != NULL) {
+ alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST, memoryBuffers);
+ }
+ buffer[offset] = color[0];
+ buffer[offset+1] = color[1];
+ buffer[offset+2] = color[2];
+ buffer[offset+3] = color[3];
+ offset +=4;
+ if (tree->test_break && tree->test_break(tree->tbh)) {
+ breaked = true;
+ }
+ }
+ offset += (this->getWidth()-(x2-x1))*4;
+ }
+}
+
+void CompositorOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ int width = this->scene->r.xsch*this->scene->r.size/100;
+ int height = this->scene->r.ysch*this->scene->r.size/100;
+ preferredResolution[0] = width;
+ preferredResolution[1] = height;
+
+ NodeOperation::determineResolution(resolution, preferredResolution);
+
+ resolution[0] = width;
+ resolution[1] = height;
+}
diff --git a/source/blender/compositor/operations/COM_CompositorOperation.h b/source/blender/compositor/operations/COM_CompositorOperation.h
new file mode 100644
index 00000000000..39c81b8292a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CompositorOperation.h
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CompositorOperation_h
+#define _COM_CompositorOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_scene_types.h"
+#include "BLI_rect.h"
+
+/**
+ * @brief Compositor output operation
+ */
+class CompositorOperation : public NodeOperation {
+private:
+ /**
+ * @brief local reference to the scene
+ */
+ const Scene *scene;
+
+ /**
+ * @brief local reference to the node tree
+ */
+ const bNodeTree *tree;
+
+ /**
+ * @brief reference to the output float buffer
+ */
+ float *outputBuffer;
+
+ /**
+ * @brief local reference to the input image operation
+ */
+ SocketReader *imageInput;
+
+ /**
+ * @brief local reference to the input alpha operation
+ */
+ SocketReader *alphaInput;
+public:
+ CompositorOperation();
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers);
+ void setScene(const Scene *scene) {this->scene = scene;}
+ void setbNodeTree(const bNodeTree *tree) {this->tree = tree;}
+ bool isOutputOperation(bool rendering) const {return rendering;}
+ void initExecution();
+ void deinitExecution();
+ const int getRenderPriority() const {return 7;}
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertColorProfileOperation.cpp b/source/blender/compositor/operations/COM_ConvertColorProfileOperation.cpp
new file mode 100644
index 00000000000..df12a7d6b49
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColorProfileOperation.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertColorProfileOperation.h"
+
+extern "C" {
+ #include "IMB_imbuf.h"
+}
+ConvertColorProfileOperation::ConvertColorProfileOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+ this->predivided = false;
+}
+
+void ConvertColorProfileOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertColorProfileOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float color[4];
+ inputOperation->read(color, x, y, sampler, inputBuffers);
+ IMB_buffer_float_from_float(outputValue, color, 4, this->toProfile, this->fromProfile, this->predivided, 1, 1, 0, 0);
+}
+
+void ConvertColorProfileOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertColorProfileOperation.h b/source/blender/compositor/operations/COM_ConvertColorProfileOperation.h
new file mode 100644
index 00000000000..1868de6d815
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColorProfileOperation.h
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertColorProfileOperation_h
+#define _COM_ConvertColorProfileOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertColorProfileOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+
+ /**
+ * @brief color profile where to convert from
+ */
+ int fromProfile;
+
+ /**
+ * @brief color profile where to convert to
+ */
+ int toProfile;
+
+ /**
+ * @brief is color predivided
+ */
+ bool predivided;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertColorProfileOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setFromColorProfile(int colorProfile) {this->fromProfile = colorProfile;}
+ void setToColorProfile(int colorProfile) {this->toProfile = colorProfile;}
+ void setPredivided(bool predivided) {this->predivided = predivided;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp b/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp
new file mode 100644
index 00000000000..4421dec319a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertColorToBWOperation.h"
+
+ConvertColorToBWOperation::ConvertColorToBWOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputOperation = NULL;
+}
+
+void ConvertColorToBWOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertColorToBWOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(&inputColor[0], x, y, sampler, inputBuffers);
+ outputValue[0] = (inputColor[0]*0.35f + inputColor[1]*0.45f + inputColor[2]*0.2f)*inputColor[3];
+}
+
+void ConvertColorToBWOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertColorToBWOperation.h b/source/blender/compositor/operations/COM_ConvertColorToBWOperation.h
new file mode 100644
index 00000000000..616cf0f2d01
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColorToBWOperation.h
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertColorToBWOperation_h
+#define _COM_ConvertColorToBWOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertColorToBWOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertColorToBWOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertColorToVectorOperation.cpp b/source/blender/compositor/operations/COM_ConvertColorToVectorOperation.cpp
new file mode 100644
index 00000000000..ce45266ace0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColorToVectorOperation.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertColorToVectorOperation.h"
+
+ConvertColorToVectorOperation::ConvertColorToVectorOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_VECTOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertColorToVectorOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertColorToVectorOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ inputOperation->read(outputValue, x, y, sampler, inputBuffers);
+}
+
+void ConvertColorToVectorOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertColorToVectorOperation.h b/source/blender/compositor/operations/COM_ConvertColorToVectorOperation.h
new file mode 100644
index 00000000000..11a1bf30a07
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColorToVectorOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertColorToVectorOperation_h
+#define _COM_ConvertColorToVectorOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertColorToVectorOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertColorToVectorOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertColourToValueProg.cpp b/source/blender/compositor/operations/COM_ConvertColourToValueProg.cpp
new file mode 100644
index 00000000000..84a33f652cd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColourToValueProg.cpp
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertColourToValueProg.h"
+
+ConvertColourToValueProg::ConvertColourToValueProg(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputOperation = NULL;
+}
+
+void ConvertColourToValueProg::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertColourToValueProg::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(&inputColor[0], x, y, sampler, inputBuffers);
+ outputValue[0] = ((inputColor[0] + inputColor[1] + inputColor[2])/3.0f)*inputColor[3];
+}
+
+void ConvertColourToValueProg::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertColourToValueProg.h b/source/blender/compositor/operations/COM_ConvertColourToValueProg.h
new file mode 100644
index 00000000000..7aa07dd46f2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertColourToValueProg.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertColourToValueProg_h
+#define _COM_ConvertColourToValueProg_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertColourToValueProg : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertColourToValueProg();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cpp b/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cpp
new file mode 100644
index 00000000000..f64f0c054b1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cpp
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertDepthToRadiusOperation.h"
+#include "BLI_math.h"
+#include "DNA_camera_types.h"
+
+ConvertDepthToRadiusOperation::ConvertDepthToRadiusOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputOperation = NULL;
+ this->fStop = 128.0f;
+ this->cameraObject = NULL;
+ this->maxRadius = 32.0f;
+}
+
+float ConvertDepthToRadiusOperation::determineFocalDistance()
+{
+
+ if (cameraObject == NULL || cameraObject->type != OB_CAMERA) {
+ return 10.0f;
+ }
+ else {
+ Camera *camera = (Camera*)this->cameraObject->data;
+ cam_lens = camera->lens;
+ if (camera->dof_ob) {
+ /* too simple, better to return the distance on the view axis only
+ * return len_v3v3(ob->obmat[3], cam->dof_ob->obmat[3]); */
+ float mat[4][4], imat[4][4], obmat[4][4];
+
+ copy_m4_m4(obmat, cameraObject->obmat);
+ normalize_m4(obmat);
+ invert_m4_m4(imat, obmat);
+ mult_m4_m4m4(mat, imat, camera->dof_ob->obmat);
+ return (float)fabs(mat[3][2]);
+ }
+ return camera->YF_dofdist;
+ }
+}
+
+void ConvertDepthToRadiusOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ float focalDistance = determineFocalDistance();
+ if (focalDistance == 0.0f) focalDistance = 1e10f; /* if the dof is 0.0 then set it be be far away */
+ inverseFocalDistance = 1.f/focalDistance;
+ this->aspect = (this->getWidth() > this->getHeight()) ? (this->getHeight() / (float)this->getWidth()) : (this->getWidth() / (float)this->getHeight());
+ this->aperture = 0.5f*(this->cam_lens / (this->aspect*32.f)) / this->fStop;
+ float minsz = MIN2(getWidth(), getHeight());
+ this->dof_sp = (float)minsz / (16.f / cam_lens); // <- == aspect * MIN2(img->x, img->y) / tan(0.5f * fov);
+}
+
+void ConvertDepthToRadiusOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ float z;
+ float radius;
+ inputOperation->read(inputValue, x, y, sampler, inputBuffers);
+ z = inputValue[0];
+ if (z!=0.f) {
+ float iZ = (1.f/z);
+
+ // bug #6656 part 2b, do not rescale
+ /*
+ bcrad = 0.5f*fabs(aperture*(dof_sp*(cam_invfdist - iZ) - 1.f));
+ // scale crad back to original maximum and blend
+ crad->rect[px] = bcrad + wts->rect[px]*(scf*crad->rect[px] - bcrad);
+ */
+ radius = 0.5f*fabsf(this->aperture*(dof_sp*(inverseFocalDistance - iZ) - 1.f));
+ // 'bug' #6615, limit minimum radius to 1 pixel, not really a solution, but somewhat mitigates the problem
+ if (radius < 0.5f) radius = 0.5f;
+ if (radius > maxRadius) {
+ radius = maxRadius;
+ }
+ outputValue[0] = radius;
+ }
+ else outputValue[0] = 0.0f;
+}
+
+void ConvertDepthToRadiusOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.h b/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.h
new file mode 100644
index 00000000000..c199ea87fe3
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.h
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertDepthToRadiusOperation_h
+#define _COM_ConvertDepthToRadiusOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_object_types.h"
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertDepthToRadiusOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+ float fStop;
+ float aspect;
+ float maxRadius;
+ float inverseFocalDistance;
+ float aperture;
+ float cam_lens;
+ float dof_sp;
+ Object *cameraObject;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertDepthToRadiusOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setfStop(float fStop) {this->fStop = fStop;}
+ void setMaxRadius(float maxRadius) {this->maxRadius = maxRadius;}
+ void setCameraObject(Object *camera) {this->cameraObject = camera;}
+ float determineFocalDistance();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.cpp b/source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.cpp
new file mode 100644
index 00000000000..97dd7e69092
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertHSVToRGBOperation.h"
+#include "BLI_math_color.h"
+
+ConvertHSVToRGBOperation::ConvertHSVToRGBOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertHSVToRGBOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertHSVToRGBOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(inputColor, x, y, sampler, inputBuffers);
+ hsv_to_rgb(inputColor[0], inputColor[1], inputColor[2], &outputValue[0], &outputValue[1], &outputValue[2]);
+ outputValue[3] = inputColor[3];
+}
+
+void ConvertHSVToRGBOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.h b/source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.h
new file mode 100644
index 00000000000..327b4089934
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertHSVToRGBOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertHSVToRGBOperation_h
+#define _COM_ConvertHSVToRGBOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertHSVToRGBOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertHSVToRGBOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.cpp b/source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.cpp
new file mode 100644
index 00000000000..547915f58c9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertKeyToPremulOperation.h"
+#include "BLI_math.h"
+
+ConvertKeyToPremulOperation::ConvertKeyToPremulOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputColor = NULL;
+}
+
+void ConvertKeyToPremulOperation::initExecution()
+{
+ this->inputColor = getInputSocketReader(0);
+}
+
+void ConvertKeyToPremulOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ float alpha;
+
+ this->inputColor->read(inputValue, x, y, sampler, inputBuffers);
+ alpha = inputValue[3];
+
+ outputValue[0] = inputValue[0] * alpha;
+ outputValue[1] = inputValue[1] * alpha;
+ outputValue[2] = inputValue[2] * alpha;
+
+ /* never touches the alpha */
+ outputValue[3] = alpha;
+}
+
+void ConvertKeyToPremulOperation::deinitExecution()
+{
+ this->inputColor = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.h b/source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.h
new file mode 100644
index 00000000000..1d5a1c1c4a6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertKeyToPremulOperation.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertKeyToPremulOperation_h
+#define _COM_ConvertKeyToPremulOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertKeyToPremulOperation : public NodeOperation {
+private:
+ SocketReader *inputColor;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertKeyToPremulOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.cpp b/source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.cpp
new file mode 100644
index 00000000000..16636ee2afc
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertPremulToKeyOperation.h"
+#include "BLI_math.h"
+
+ConvertPremulToKeyOperation::ConvertPremulToKeyOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputColor = NULL;
+}
+
+void ConvertPremulToKeyOperation::initExecution()
+{
+ this->inputColor = getInputSocketReader(0);
+}
+
+void ConvertPremulToKeyOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ float alpha;
+
+ this->inputColor->read(inputValue, x, y, sampler, inputBuffers);
+ alpha = inputValue[3];
+
+ if (fabsf(alpha) < 1e-5f) {
+ outputValue[0] = 0.f;
+ outputValue[1] = 0.f;
+ outputValue[2] = 0.f;
+ }
+ else {
+ outputValue[0] = inputValue[0] / alpha;
+ outputValue[1] = inputValue[1] / alpha;
+ outputValue[2] = inputValue[2] / alpha;
+ }
+
+ /* never touches the alpha */
+ outputValue[3] = alpha;
+}
+
+void ConvertPremulToKeyOperation::deinitExecution()
+{
+ this->inputColor = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.h b/source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.h
new file mode 100644
index 00000000000..17597fa8f15
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertPremulToKeyOperation.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertPremulToKeyOperation_h
+#define _COM_ConvertPremulToKeyOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertPremulToKeyOperation : public NodeOperation {
+private:
+ SocketReader *inputColor;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertPremulToKeyOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.cpp b/source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.cpp
new file mode 100644
index 00000000000..99054efc267
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertRGBToHSVOperation.h"
+#include "BLI_math_color.h"
+
+ConvertRGBToHSVOperation::ConvertRGBToHSVOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertRGBToHSVOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertRGBToHSVOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(inputColor, x, y, sampler, inputBuffers);
+ rgb_to_hsv(inputColor[0], inputColor[1], inputColor[2], &outputValue[0], &outputValue[1], &outputValue[2]);
+ outputValue[3] = inputColor[3];
+}
+
+void ConvertRGBToHSVOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.h b/source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.h
new file mode 100644
index 00000000000..5064bd06993
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertRGBToHSVOperation.h
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertRGBToHSVOperation_h
+#define _COM_ConvertRGBToHSVOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertRGBToHSVOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertRGBToHSVOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.cpp b/source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.cpp
new file mode 100644
index 00000000000..c626dc03000
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.cpp
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertRGBToYCCOperation.h"
+#include "BLI_math_color.h"
+
+ConvertRGBToYCCOperation::ConvertRGBToYCCOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertRGBToYCCOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertRGBToYCCOperation::setMode(int mode)
+{
+ switch (mode)
+ {
+ case 1:
+ this->mode = BLI_YCC_ITU_BT709;
+ break;
+ case 2:
+ this->mode = BLI_YCC_JFIF_0_255;
+ break;
+ case 0:
+ default:
+ this->mode = BLI_YCC_ITU_BT601;
+ break;
+ }
+}
+
+void ConvertRGBToYCCOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ float color[3];
+
+ inputOperation->read(inputColor, x, y, sampler, inputBuffers);
+ rgb_to_ycc(inputColor[0], inputColor[1], inputColor[2], &color[0], &color[1], &color[2], this->mode);
+
+ /* divided by 255 to normalize for viewing in */
+ outputValue[0] = color[0]/255.f; /* Y */
+ outputValue[1] = color[1]/255.f; /* Cb*/
+ outputValue[2] = color[2]/255.f; /* Cr*/
+ outputValue[3] = inputColor[3];
+}
+
+void ConvertRGBToYCCOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.h b/source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.h
new file mode 100644
index 00000000000..a952627893b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertRGBToYCCOperation.h
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertRGBToYCCOperation_h
+#define _COM_ConvertRGBToYCCOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertRGBToYCCOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+
+ /**
+ * YCbCr mode (Jpeg, ITU601, ITU709)
+ */
+ int mode;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertRGBToYCCOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ /**
+ * Set the YCC mode
+ */
+ void setMode(int mode);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.cpp b/source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.cpp
new file mode 100644
index 00000000000..c4b870d6ad5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.cpp
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertRGBToYUVOperation.h"
+#include "BLI_math_color.h"
+
+ConvertRGBToYUVOperation::ConvertRGBToYUVOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertRGBToYUVOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertRGBToYUVOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(inputColor, x, y, sampler, inputBuffers);
+ rgb_to_yuv(inputColor[0], inputColor[1], inputColor[2], &outputValue[0], &outputValue[1], &outputValue[2]);
+ outputValue[3] = inputColor[3];
+}
+
+void ConvertRGBToYUVOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.h b/source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.h
new file mode 100644
index 00000000000..5bc763dde00
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertRGBToYUVOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertRGBToYUVOperation_h
+#define _COM_ConvertRGBToYUVOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertRGBToYUVOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertRGBToYUVOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertValueToColourProg.cpp b/source/blender/compositor/operations/COM_ConvertValueToColourProg.cpp
new file mode 100644
index 00000000000..dce554efbac
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertValueToColourProg.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertValueToColourProg.h"
+
+ConvertValueToColourProg::ConvertValueToColourProg(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+}
+void ConvertValueToColourProg::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void ConvertValueToColourProg::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ this->inputProgram->read(inputValue, x, y, sampler, inputBuffers);
+ color[0] = inputValue[0];
+ color[1] = inputValue[0];
+ color[2] = inputValue[0];
+ color[3] = 1.0f;
+}
+
+void ConvertValueToColourProg::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertValueToColourProg.h b/source/blender/compositor/operations/COM_ConvertValueToColourProg.h
new file mode 100644
index 00000000000..4956f7196f5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertValueToColourProg.h
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertValueToColourProg_h
+#define _COM_ConvertValueToColourProg_h
+#include "COM_NodeOperation.h"
+
+
+class ConvertValueToColourProg : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputProgram;
+public:
+ ConvertValueToColourProg();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertValueToVectorOperation.cpp b/source/blender/compositor/operations/COM_ConvertValueToVectorOperation.cpp
new file mode 100644
index 00000000000..ba7913d24ee
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertValueToVectorOperation.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertValueToVectorOperation.h"
+
+ConvertValueToVectorOperation::ConvertValueToVectorOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VECTOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertValueToVectorOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertValueToVectorOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float input[4];
+ inputOperation->read(input, x, y, sampler, inputBuffers);
+ outputValue[0] = input[0];
+ outputValue[1] = input[0];
+ outputValue[2] = input[0];
+ outputValue[3] = 0.0f;
+}
+
+void ConvertValueToVectorOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertValueToVectorOperation.h b/source/blender/compositor/operations/COM_ConvertValueToVectorOperation.h
new file mode 100644
index 00000000000..1e6a7d4b3e7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertValueToVectorOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertValueToVectorOperation_h
+#define _COM_ConvertValueToVectorOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertValueToVectorOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertValueToVectorOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertVectorToColorOperation.cpp b/source/blender/compositor/operations/COM_ConvertVectorToColorOperation.cpp
new file mode 100644
index 00000000000..5a4cc4d3549
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertVectorToColorOperation.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertVectorToColorOperation.h"
+
+ConvertVectorToColorOperation::ConvertVectorToColorOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertVectorToColorOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertVectorToColorOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ inputOperation->read(outputValue, x, y, sampler, inputBuffers);
+ outputValue[3] = 1.0f;
+}
+
+void ConvertVectorToColorOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertVectorToColorOperation.h b/source/blender/compositor/operations/COM_ConvertVectorToColorOperation.h
new file mode 100644
index 00000000000..45ffd0675bd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertVectorToColorOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertVectorToColorOperation_h
+#define _COM_ConvertVectorToColorOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertVectorToColorOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertVectorToColorOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertVectorToValueOperation.cpp b/source/blender/compositor/operations/COM_ConvertVectorToValueOperation.cpp
new file mode 100644
index 00000000000..67cc42ac8fc
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertVectorToValueOperation.cpp
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvertVectorToValueOperation.h"
+
+ConvertVectorToValueOperation::ConvertVectorToValueOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputOperation = NULL;
+}
+
+void ConvertVectorToValueOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertVectorToValueOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float input[4];
+ inputOperation->read(input, x, y, sampler, inputBuffers);
+ outputValue[0] = (input[0]+input[1]+input[2])/3.0f;
+}
+
+void ConvertVectorToValueOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ConvertVectorToValueOperation.h b/source/blender/compositor/operations/COM_ConvertVectorToValueOperation.h
new file mode 100644
index 00000000000..59bae18ed26
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertVectorToValueOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvertVectorToValueOperation_h
+#define _COM_ConvertVectorToValueOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertVectorToValueOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertVectorToValueOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.cpp b/source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.cpp
new file mode 100644
index 00000000000..d3048c131e4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.cpp
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertYCCToRGBOperation.h"
+#include "BLI_math_color.h"
+
+ConvertYCCToRGBOperation::ConvertYCCToRGBOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertYCCToRGBOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertYCCToRGBOperation::setMode(int mode)
+{
+ switch (mode)
+ {
+ case 1:
+ this->mode = BLI_YCC_ITU_BT709;
+ break;
+ case 2:
+ this->mode = BLI_YCC_JFIF_0_255;
+ break;
+ case 0:
+ default:
+ this->mode = BLI_YCC_ITU_BT601;
+ break;
+ }
+}
+
+void ConvertYCCToRGBOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(inputColor, x, y, sampler, inputBuffers);
+
+ /* need to un-normalize the data */
+ inputColor[0] *= 255.f; /* Y */
+ inputColor[1] *= 255.f; /* Cb*/
+ inputColor[2] *= 255.f; /* Cr*/
+
+ ycc_to_rgb(inputColor[0], inputColor[1], inputColor[2], &outputValue[0], &outputValue[1], &outputValue[2], this->mode);
+ outputValue[3] = inputColor[3];
+}
+
+void ConvertYCCToRGBOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.h b/source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.h
new file mode 100644
index 00000000000..a13c2826a79
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertYCCToRGBOperation.h
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertYCCToRGBOperation_h
+#define _COM_ConvertYCCToRGBOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertYCCToRGBOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+
+ /**
+ * YCbCr mode (Jpeg, ITU601, ITU709)
+ */
+ int mode;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertYCCToRGBOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ /**
+ * Set the YCC mode
+ */
+ void setMode(int mode);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.cpp b/source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.cpp
new file mode 100644
index 00000000000..d7037a2c2d1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_ConvertYUVToRGBOperation.h"
+#include "BLI_math_color.h"
+
+ConvertYUVToRGBOperation::ConvertYUVToRGBOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void ConvertYUVToRGBOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void ConvertYUVToRGBOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ inputOperation->read(inputColor, x, y, sampler, inputBuffers);
+ yuv_to_rgb(inputColor[0], inputColor[1], inputColor[2], &outputValue[0], &outputValue[1], &outputValue[2]);
+ outputValue[3] = inputColor[3];
+}
+
+void ConvertYUVToRGBOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.h b/source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.h
new file mode 100644
index 00000000000..380510d0100
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvertYUVToRGBOperation.h
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_ConvertYUVToRGBOperation_h
+#define _COM_ConvertYUVToRGBOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ConvertYUVToRGBOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+public:
+ /**
+ * Default constructor
+ */
+ ConvertYUVToRGBOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.cpp b/source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.cpp
new file mode 100644
index 00000000000..0daa2b9c08a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.cpp
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvolutionEdgeFilterOperation.h"
+#include "BLI_math.h"
+
+ConvolutionEdgeFilterOperation::ConvolutionEdgeFilterOperation() : ConvolutionFilterOperation()
+{
+}
+inline void addFilter(float *result, float*input, float value)
+{
+ result[0] += input[0] * value;
+ result[1] += input[1] * value;
+ result[2] += input[2] * value;
+}
+
+void ConvolutionEdgeFilterOperation::executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float in1[4],in2[4], res1[4], res2[4];
+
+ float value[4];
+ this->inputValueOperation->read(value, x, y, inputBuffers, NULL);
+ float mval = 1.0f - value[0];
+
+ res1[0] = 0.0f;
+ res1[1] = 0.0f;
+ res1[2] = 0.0f;
+ res1[3] = 0.0f;
+ res2[0] = 0.0f;
+ res2[1] = 0.0f;
+ res2[2] = 0.0f;
+ res2[3] = 0.0f;
+
+ this->inputOperation->read(in1, x-1, y-1, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[0]);
+ addFilter(res2, in1, this->filter[0]);
+
+ this->inputOperation->read(in1, x, y-1, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[1]);
+ addFilter(res2, in1, this->filter[3]);
+
+ this->inputOperation->read(in1, x+1, y-1, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[2]);
+ addFilter(res2, in1, this->filter[6]);
+
+ this->inputOperation->read(in1, x-1, y, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[3]);
+ addFilter(res2, in1, this->filter[1]);
+
+ this->inputOperation->read(in2, x, y, inputBuffers, NULL);
+ addFilter(res1, in2, this->filter[4]);
+ addFilter(res2, in2, this->filter[4]);
+
+ this->inputOperation->read(in1, x+1, y, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[5]);
+ addFilter(res2, in1, this->filter[7]);
+
+ this->inputOperation->read(in1, x-1, y+1, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[6]);
+ addFilter(res2, in1, this->filter[2]);
+
+ this->inputOperation->read(in1, x, y+1, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[7]);
+ addFilter(res2, in1, this->filter[5]);
+
+ this->inputOperation->read(in1, x+1, y+1, inputBuffers, NULL);
+ addFilter(res1, in1, this->filter[8]);
+ addFilter(res2, in1, this->filter[8]);
+
+ color[0] = sqrt(res1[0]*res1[0]+res2[0]*res2[0]);
+ color[1] = sqrt(res1[1]*res1[1]+res2[1]*res2[1]);
+ color[2] = sqrt(res1[2]*res1[2]+res2[2]*res2[2]);
+
+ color[0] = color[0]*value[0] + in2[0] * mval;
+ color[1] = color[1]*value[0] + in2[1] * mval;
+ color[2] = color[2]*value[0] + in2[2] * mval;
+
+ color[3] = in2[3];
+}
diff --git a/source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.h b/source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.h
new file mode 100644
index 00000000000..a0f9c1b3452
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvolutionEdgeFilterOperation.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvolutionEdgeFilterOperation_h_
+#define _COM_ConvolutionEdgeFilterOperation_h_
+
+#include "COM_ConvolutionFilterOperation.h"
+
+class ConvolutionEdgeFilterOperation: public ConvolutionFilterOperation {
+public:
+ ConvolutionEdgeFilterOperation();
+ void executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_ConvolutionFilterOperation.cpp b/source/blender/compositor/operations/COM_ConvolutionFilterOperation.cpp
new file mode 100644
index 00000000000..05cd570feaa
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvolutionFilterOperation.cpp
@@ -0,0 +1,142 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ConvolutionFilterOperation.h"
+
+ConvolutionFilterOperation::ConvolutionFilterOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+ this->filter = NULL;
+ this->setComplex(true);
+}
+void ConvolutionFilterOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ this->inputValueOperation = this->getInputSocketReader(1);
+}
+
+void ConvolutionFilterOperation::set3x3Filter(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9)
+{
+ this->filter = new float[9];
+ this->filter[0] = f1;
+ this->filter[1] = f2;
+ this->filter[2] = f3;
+ this->filter[3] = f4;
+ this->filter[4] = f5;
+ this->filter[5] = f6;
+ this->filter[6] = f7;
+ this->filter[7] = f8;
+ this->filter[8] = f9;
+ this->filterHeight = 3;
+ this->filterWidth = 3;
+}
+
+void ConvolutionFilterOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+ this->inputValueOperation = NULL;
+ if (this->filter) {
+ delete this->filter;
+ this->filter = NULL;
+ }
+}
+
+
+void ConvolutionFilterOperation::executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ color[0] = 0.0;
+ color[1] = 0.0;
+ color[2] = 0.0;
+ color[3] = 0.0;
+ float in1[4];
+ float in2[4];
+ float value[4];
+ this->inputValueOperation->read(value, x, y, inputBuffers, NULL);
+ float mval = 1.0f - value[0];
+
+ this->inputOperation->read(in1, x-1, y-1, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[0];
+ color[1] += in1[1] * this->filter[0];
+ color[2] += in1[2] * this->filter[0];
+ color[3] += in1[3] * this->filter[0];
+ this->inputOperation->read(in1, x, y-1, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[1];
+ color[1] += in1[1] * this->filter[1];
+ color[2] += in1[2] * this->filter[1];
+ color[3] += in1[3] * this->filter[1];
+ this->inputOperation->read(in1, x+1, y-1, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[2];
+ color[1] += in1[1] * this->filter[2];
+ color[2] += in1[2] * this->filter[2];
+ color[3] += in1[3] * this->filter[2];
+ this->inputOperation->read(in1, x-1, y, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[3];
+ color[1] += in1[1] * this->filter[3];
+ color[2] += in1[2] * this->filter[3];
+ color[3] += in1[3] * this->filter[3];
+ this->inputOperation->read(in2, x, y, inputBuffers, NULL);
+ color[0] += in2[0] * this->filter[4];
+ color[1] += in2[1] * this->filter[4];
+ color[2] += in2[2] * this->filter[4];
+ color[3] += in2[3] * this->filter[4];
+ this->inputOperation->read(in1, x+1, y, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[5];
+ color[1] += in1[1] * this->filter[5];
+ color[2] += in1[2] * this->filter[5];
+ color[3] += in1[3] * this->filter[5];
+ this->inputOperation->read(in1, x-1, y+1, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[6];
+ color[1] += in1[1] * this->filter[6];
+ color[2] += in1[2] * this->filter[6];
+ color[3] += in1[3] * this->filter[6];
+ this->inputOperation->read(in1, x, y+1, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[7];
+ color[1] += in1[1] * this->filter[7];
+ color[2] += in1[2] * this->filter[7];
+ color[3] += in1[3] * this->filter[7];
+ this->inputOperation->read(in1, x+1, y+1, inputBuffers, NULL);
+ color[0] += in1[0] * this->filter[8];
+ color[1] += in1[1] * this->filter[8];
+ color[2] += in1[2] * this->filter[8];
+ color[3] += in1[3] * this->filter[8];
+
+ color[0] = color[0]*value[0] + in2[0] * mval;
+ color[1] = color[1]*value[0] + in2[1] * mval;
+ color[2] = color[2]*value[0] + in2[2] * mval;
+}
+
+bool ConvolutionFilterOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ int addx = (this->filterWidth-1)/2+1;
+ int addy = (this->filterHeight-1)/2+1;
+ newInput.xmax = input->xmax + addx;
+ newInput.xmin = input->xmin - addx;
+ newInput.ymax = input->ymax + addy;
+ newInput.ymin = input->ymin - addy;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_ConvolutionFilterOperation.h b/source/blender/compositor/operations/COM_ConvolutionFilterOperation.h
new file mode 100644
index 00000000000..3276038726b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ConvolutionFilterOperation.h
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ConvolutionFilterOperation_h_
+#define _COM_ConvolutionFilterOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class ConvolutionFilterOperation: public NodeOperation {
+private:
+ int filterWidth;
+ int filterHeight;
+
+protected:
+ SocketReader *inputOperation;
+ SocketReader *inputValueOperation;
+ float *filter;
+
+public:
+ ConvolutionFilterOperation();
+ void set3x3Filter(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9);
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ void initExecution();
+ void deinitExecution();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_CropOperation.cpp b/source/blender/compositor/operations/COM_CropOperation.cpp
new file mode 100644
index 00000000000..192ad8d0bda
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CropOperation.cpp
@@ -0,0 +1,115 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CropOperation.h"
+#include "BLI_math.h"
+
+CropBaseOperation::CropBaseOperation() :NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+ this->settings = NULL;
+}
+
+void CropBaseOperation::updateArea()
+{
+ SocketReader * inputReference = this->getInputSocketReader(0);
+ float width = inputReference->getWidth();
+ float height = inputReference->getHeight();
+ if (this->relative) {
+ settings->x1 = width * settings->fac_x1;
+ settings->x2 = width * settings->fac_x2;
+ settings->y1 = height * settings->fac_y1;
+ settings->y2 = height * settings->fac_y2;
+ }
+ if (width <= settings->x1 + 1)
+ settings->x1 = width - 1;
+ if (height <= settings->y1 + 1)
+ settings->y1 = height - 1;
+ if (width <= settings->x2 + 1)
+ settings->x2 = width - 1;
+ if (height <= settings->y2 + 1)
+ settings->y2 = height - 1;
+
+ this->xmax = MAX2(settings->x1, settings->x2) + 1;
+ this->xmin = MIN2(settings->x1, settings->x2);
+ this->ymax = MAX2(settings->y1, settings->y2) + 1;
+ this->ymin = MIN2(settings->y1, settings->y2);
+}
+
+void CropBaseOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ updateArea();
+}
+
+void CropBaseOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
+CropOperation::CropOperation() :CropBaseOperation()
+{
+}
+
+void CropOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ if ((x < this->xmax && x >= xmin) && (y < ymax && y >= ymin)) {
+ inputOperation->read(color, x, y, sampler, inputBuffers);
+ }
+ else {
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 0.0f;
+ }
+}
+
+CropImageOperation::CropImageOperation() :CropBaseOperation()
+{
+}
+
+bool CropImageOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmax = input->xmax + this->xmin;
+ newInput.xmin = input->xmin + this->xmin;
+ newInput.ymax = input->ymax + this->ymin;
+ newInput.ymin = input->ymin + this->ymin;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
+
+void CropImageOperation::determineResolution(unsigned int resolution[], unsigned int preferedResolution[])
+{
+ NodeOperation::determineResolution(resolution, preferedResolution);
+ updateArea();
+ resolution[0] = this->xmax - this->xmin;
+ resolution[1] = this->ymax - this->ymin;
+}
+
+void CropImageOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ this->inputOperation->read(color, (x + this->xmin), (y + this->ymin), sampler, inputBuffers);
+}
diff --git a/source/blender/compositor/operations/COM_CropOperation.h b/source/blender/compositor/operations/COM_CropOperation.h
new file mode 100644
index 00000000000..e8edabf08ed
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CropOperation.h
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CropOperation_h_
+#define _COM_CropOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class CropBaseOperation: public NodeOperation {
+protected:
+ SocketReader *inputOperation;
+ NodeTwoXYs *settings;
+ bool relative;
+ int xmax;
+ int xmin;
+ int ymax;
+ int ymin;
+
+ void updateArea();
+public:
+ CropBaseOperation();
+ void initExecution();
+ void deinitExecution();
+ void setCropSettings(NodeTwoXYs *settings) {this->settings = settings;}
+ void setRelative(bool rel) {this->relative = rel;}
+};
+
+class CropOperation: public CropBaseOperation {
+private:
+public:
+ CropOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+class CropImageOperation: public CropBaseOperation {
+private:
+public:
+ CropImageOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void determineResolution(unsigned int resolution[], unsigned int preferedResolution[]);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_CurveBaseOperation.cpp b/source/blender/compositor/operations/COM_CurveBaseOperation.cpp
new file mode 100644
index 00000000000..fda5b00e2a0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CurveBaseOperation.cpp
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CurveBaseOperation.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ #include "BKE_colortools.h"
+#ifdef __cplusplus
+}
+#endif
+
+CurveBaseOperation::CurveBaseOperation(): NodeOperation()
+{
+ this->curveMapping = NULL;
+}
+void CurveBaseOperation::initExecution()
+{
+ curvemapping_initialize(this->curveMapping);
+}
diff --git a/source/blender/compositor/operations/COM_CurveBaseOperation.h b/source/blender/compositor/operations/COM_CurveBaseOperation.h
new file mode 100644
index 00000000000..366af5b07cb
--- /dev/null
+++ b/source/blender/compositor/operations/COM_CurveBaseOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_CurveBaseOperation_h
+#define _COM_CurveBaseOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_color_types.h"
+
+class CurveBaseOperation : public NodeOperation {
+protected:
+ /**
+ * Cached reference to the inputProgram
+ */
+ CurveMapping *curveMapping;
+public:
+ CurveBaseOperation();
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void setCurveMapping(CurveMapping *mapping) {this->curveMapping = mapping;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DifferenceMatteOperation.cpp b/source/blender/compositor/operations/COM_DifferenceMatteOperation.cpp
new file mode 100644
index 00000000000..628daa7c775
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DifferenceMatteOperation.cpp
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DifferenceMatteOperation.h"
+#include "BLI_math.h"
+
+DifferenceMatteOperation::DifferenceMatteOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addInputSocket(COM_DT_COLOR);
+ addOutputSocket(COM_DT_VALUE);
+
+ inputImage1Program = NULL;
+ inputImage2Program = NULL;
+}
+
+void DifferenceMatteOperation::initExecution()
+{
+ this->inputImage1Program = this->getInputSocketReader(0);
+ this->inputImage2Program = this->getInputSocketReader(1);
+}
+void DifferenceMatteOperation::deinitExecution()
+{
+ this->inputImage1Program = NULL;
+ this->inputImage2Program = NULL;
+}
+
+void DifferenceMatteOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inColor1[4];
+ float inColor2[4];
+
+ const float tolerence=this->settings->t1;
+ const float falloff=this->settings->t2;
+ float difference;
+ float alpha;
+
+ this->inputImage1Program->read(inColor1, x, y, sampler, inputBuffers);
+ this->inputImage2Program->read(inColor2, x, y, sampler, inputBuffers);
+
+ difference = (fabs(inColor2[0] - inColor1[0]) +
+ fabs(inColor2[1] - inColor1[1]) +
+ fabs(inColor2[2] - inColor1[2]));
+
+ /*average together the distances*/
+ difference=difference/3.0;
+
+ /*make 100% transparent*/
+ if (difference < tolerence) {
+ outputValue[0]=0.0;
+ }
+ /*in the falloff region, make partially transparent */
+ else if (difference < falloff+tolerence) {
+ difference=difference-tolerence;
+ alpha=difference/falloff;
+ /*only change if more transparent than before */
+ if (alpha < inColor1[3]) {
+ outputValue[0]=alpha;
+ }
+ else { /* leave as before */
+ outputValue[0]=inColor1[3];
+ }
+ }
+ else {
+ /*foreground object*/
+ outputValue[0] = inColor1[3];
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_DifferenceMatteOperation.h b/source/blender/compositor/operations/COM_DifferenceMatteOperation.h
new file mode 100644
index 00000000000..95ebed6f63d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DifferenceMatteOperation.h
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DifferenceMatteOperation_h
+#define _COM_DifferenceMatteOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class DifferenceMatteOperation : public NodeOperation {
+private:
+ NodeChroma *settings;
+ SocketReader * inputImage1Program;
+ SocketReader *inputImage2Program;
+public:
+ /**
+ * Default constructor
+ */
+ DifferenceMatteOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeChroma *nodeChroma) {this->settings = nodeChroma;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DilateErodeOperation.cpp b/source/blender/compositor/operations/COM_DilateErodeOperation.cpp
new file mode 100644
index 00000000000..d9c0350eb09
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DilateErodeOperation.cpp
@@ -0,0 +1,159 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DilateErodeOperation.h"
+#include "BLI_math.h"
+
+DilateErodeOperation::DilateErodeOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->setComplex(true);
+ this->inputProgram = NULL;
+ this->inset = 0.0f;
+ this->_switch = 0.5f;
+ this->distance = 0.0f;
+}
+void DilateErodeOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+ if (this->distance < 0.0f) {
+ this->scope = - this->distance + this->inset;
+ }
+ else {
+ if (this->inset*2 > this->distance) {
+ this->scope = max(this->inset*2 - this->distance, this->distance);
+ }
+ else {
+ this->scope = distance;
+ }
+ }
+ if (scope < 3) {
+ scope = 3;
+ }
+}
+
+void *DilateErodeOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ void *buffer = inputProgram->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void DilateErodeOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float inputValue[4];
+ const float sw = this->_switch;
+ const float distance = this->distance;
+ float pixelvalue;
+ const float rd = scope * scope;
+ const float inset = this->inset;
+ float mindist = rd*2;
+
+ MemoryBuffer *inputBuffer = (MemoryBuffer*)data;
+ float *buffer = inputBuffer->getBuffer();
+ rcti *rect = inputBuffer->getRect();
+ const int minx = max(x - scope, rect->xmin);
+ const int miny = max(y - scope, rect->ymin);
+ const int maxx = min(x + scope, rect->xmax);
+ const int maxy = min(y + scope, rect->ymax);
+ const int bufferWidth = rect->xmax-rect->xmin;
+ int offset;
+
+ this->inputProgram->read(inputValue, x, y, inputBuffers, NULL);
+ if (inputValue[0]>sw) {
+ for (int yi = miny ; yi<maxy;yi++) {
+ offset = ((yi-rect->ymin)*bufferWidth+(minx-rect->xmin))*4;
+ for (int xi = minx ; xi<maxx;xi++) {
+ if (buffer[offset]<sw) {
+ const float dx = xi-x;
+ const float dy = yi-y;
+ const float dis = dx*dx+dy*dy;
+ mindist = min(mindist, dis);
+ }
+ offset +=4;
+ }
+ }
+ pixelvalue = -sqrtf(mindist);
+ }
+ else {
+ for (int yi = miny ; yi<maxy;yi++) {
+ offset = ((yi-rect->ymin)*bufferWidth+(minx-rect->xmin))*4;
+ for (int xi = minx ; xi<maxx;xi++) {
+ if (buffer[offset]>sw) {
+ const float dx = xi-x;
+ const float dy = yi-y;
+ const float dis = dx*dx+dy*dy;
+ mindist = min(mindist, dis);
+ }
+ offset +=4;
+
+ }
+ }
+ pixelvalue = sqrtf(mindist);
+ }
+
+ if (distance > 0.0f) {
+ const float delta = distance - pixelvalue;
+ if (delta >= 0.0f) {
+ if (delta >= inset) {
+ color[0] = 1.0f;
+ }
+ else {
+ color[0] = delta/inset;
+ }
+ }
+ else {
+ color[0] = 0.0f;
+ }
+ }
+ else {
+ const float delta = -distance+pixelvalue;
+ if (delta < 0.0f) {
+ if (delta < -inset) {
+ color[0] = 1.0f;
+ }
+ else {
+ color[0] = (-delta)/inset;
+ }
+ }
+ else {
+ color[0] = 0.0f;
+ }
+ }
+}
+
+void DilateErodeOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
+
+bool DilateErodeOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmax = input->xmax + scope;
+ newInput.xmin = input->xmin - scope;
+ newInput.ymax = input->ymax + scope;
+ newInput.ymin = input->ymin - scope;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_DilateErodeOperation.h b/source/blender/compositor/operations/COM_DilateErodeOperation.h
new file mode 100644
index 00000000000..102d1165bc8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DilateErodeOperation.h
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DilateErodeOperation_h
+#define _COM_DilateErodeOperation_h
+#include "COM_NodeOperation.h"
+
+
+class DilateErodeOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+
+ float distance;
+ float _switch;
+ float inset;
+
+ /**
+ * determines the area of interest to track pixels
+ * keep this one as small as possible for speed gain.
+ */
+ int scope;
+public:
+ DilateErodeOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setDistance(float distance) {this->distance = distance;}
+ void setSwitch(float sw) {this->_switch = sw;}
+ void setInset(float inset) {this->inset = inset;}
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DirectionalBlurOperation.cpp b/source/blender/compositor/operations/COM_DirectionalBlurOperation.cpp
new file mode 100644
index 00000000000..30a09a45ade
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DirectionalBlurOperation.cpp
@@ -0,0 +1,120 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DirectionalBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+DirectionalBlurOperation::DirectionalBlurOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+
+ this->inputProgram = NULL;
+}
+
+void DirectionalBlurOperation::initExecution()
+{
+ this->inputProgram = getInputSocketReader(0);
+ QualityStepHelper::initExecution(COM_QH_INCREASE);
+ const float angle = this->data->angle;
+ const float zoom = this->data->zoom;
+ const float spin = this->data->spin;
+ const float iterations = this->data->iter;
+ const float distance = this->data->distance;
+ const float center_x = this->data->center_x;
+ const float center_y = this->data->center_y;
+ const float width = getWidth();
+ const float height = getHeight();
+
+ const float a = angle;
+ const float itsc = 1.f / pow(2.f, (float)iterations);
+ float D;
+
+ D = distance * sqrtf(width*width + height*height);
+ center_x_pix = center_x * width;
+ center_y_pix = center_y * height;
+
+ tx= itsc * D * cos(a);
+ ty= -itsc * D * sin(a);
+ sc= itsc * zoom;
+ rot = itsc * spin;
+
+}
+
+void DirectionalBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ const int iterations = pow(2.f, this->data->iter);
+ float col[4] = {0,0,0,0};
+ float col2[4] = {0,0,0,0};
+ this->inputProgram->read(col2, x, y, COM_PS_NEAREST, inputBuffers);
+ float ltx = tx;
+ float lty = ty;
+ float lsc = sc;
+ float lrot = rot;
+ /* blur the image */
+ for (int i = 0; i < iterations; ++i) {
+ const float cs = cos(lrot), ss = sin(lrot);
+ const float isc = 1.f / (1.f + lsc);
+
+ const float v = isc * (y - center_y_pix) + lty;
+ const float u = isc * (x - center_x_pix) + ltx;
+
+ this->inputProgram->read(col, cs * u + ss * v + center_x_pix, cs * v - ss * u + center_y_pix, COM_PS_NEAREST, inputBuffers);
+
+ col2[0] += col[0];
+ col2[1] += col[1];
+ col2[2] += col[2];
+ col2[3] += col[3];
+
+ /* double transformations */
+ ltx += tx;
+ lty += ty;
+ lrot += rot;
+ lsc += sc;
+ }
+ color[0] = col2[0]/iterations;
+ color[1] = col2[1]/iterations;
+ color[2] = col2[2]/iterations;
+ color[3] = col2[3]/iterations;
+}
+
+void DirectionalBlurOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
+
+bool DirectionalBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_DirectionalBlurOperation.h b/source/blender/compositor/operations/COM_DirectionalBlurOperation.h
new file mode 100644
index 00000000000..280e9247c1b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DirectionalBlurOperation.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehDirectionalBlurOperation_h
+#define _COM_DirectionalBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_QualityStepHelper.h"
+
+class DirectionalBlurOperation : public NodeOperation, public QualityStepHelper {
+private:
+ SocketReader *inputProgram;
+ NodeDBlurData *data;
+
+ float center_x_pix, center_y_pix;
+ float tx, ty;
+ float sc, rot;
+
+public:
+ DirectionalBlurOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ void setData(NodeDBlurData *data) {this->data = data;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DisplaceOperation.cpp b/source/blender/compositor/operations/COM_DisplaceOperation.cpp
new file mode 100644
index 00000000000..2add367f39e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DisplaceOperation.cpp
@@ -0,0 +1,151 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_DisplaceOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+DisplaceOperation::DisplaceOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+
+ this->inputColorProgram = NULL;
+ this->inputVectorProgram = NULL;
+ this->inputScaleXProgram = NULL;
+ this->inputScaleYProgram = NULL;
+}
+
+void DisplaceOperation::initExecution()
+{
+ this->inputColorProgram = this->getInputSocketReader(0);
+ this->inputVectorProgram = this->getInputSocketReader(1);
+ this->inputScaleXProgram = this->getInputSocketReader(2);
+ this->inputScaleYProgram = this->getInputSocketReader(3);
+
+ width_x4 = this->getWidth() * 4;
+ height_x4 = this->getHeight() * 4;
+}
+
+
+/* minimum distance (in pixels) a pixel has to be displaced
+ * in order to take effect */
+#define DISPLACE_EPSILON 0.01f
+
+void DisplaceOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float inVector[4];
+ float inScale[4];
+
+ float p_dx, p_dy; /* main displacement in pixel space */
+ float d_dx, d_dy;
+ float dxt, dyt;
+ float u, v;
+
+ this->inputScaleXProgram->read(inScale, x, y, COM_PS_NEAREST, inputBuffers);
+ float xs = inScale[0];
+ this->inputScaleYProgram->read(inScale, x, y, COM_PS_NEAREST, inputBuffers);
+ float ys = inScale[0];
+
+ /* clamp x and y displacement to triple image resolution -
+ * to prevent hangs from huge values mistakenly plugged in eg. z buffers */
+ CLAMP(xs, -width_x4, width_x4);
+ CLAMP(ys, -height_x4, height_x4);
+
+ this->inputVectorProgram->read(inVector, x, y, COM_PS_NEAREST, inputBuffers);
+ p_dx = inVector[0] * xs;
+ p_dy = inVector[1] * ys;
+
+ /* displaced pixel in uv coords, for image sampling */
+ u = x - p_dx + 0.5f;
+ v = y - p_dy + 0.5f;
+
+ /* calc derivatives */
+ this->inputVectorProgram->read(inVector, x+1, y, COM_PS_NEAREST, inputBuffers);
+ d_dx = inVector[0] * xs;
+ this->inputVectorProgram->read(inVector, x, y+1, COM_PS_NEAREST, inputBuffers);
+ d_dy = inVector[0] * ys;
+
+ /* clamp derivatives to minimum displacement distance in UV space */
+ dxt = p_dx - d_dx;
+ dyt = p_dy - d_dy;
+
+ dxt = signf(dxt)*maxf(fabsf(dxt), DISPLACE_EPSILON)/this->getWidth();
+ dyt = signf(dyt)*maxf(fabsf(dyt), DISPLACE_EPSILON)/this->getHeight();
+
+ /* EWA filtering */
+ this->inputColorProgram->read(color, u, v, dxt, dyt, inputBuffers);
+}
+
+void DisplaceOperation::deinitExecution()
+{
+ this->inputColorProgram = NULL;
+ this->inputVectorProgram = NULL;
+ this->inputScaleXProgram = NULL;
+ this->inputScaleYProgram = NULL;
+}
+
+bool DisplaceOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti colorInput;
+ rcti vectorInput;
+ NodeOperation *operation=NULL;
+
+ /* the vector buffer only needs a 2x2 buffer. The image needs whole buffer */
+ /* image */
+ operation = getInputOperation(0);
+ colorInput.xmax = operation->getWidth();
+ colorInput.xmin = 0;
+ colorInput.ymax = operation->getHeight();
+ colorInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&colorInput, readOperation, output)) {
+ return true;
+ }
+
+ /* vector */
+ operation = getInputOperation(1);
+ vectorInput.xmax = input->xmax + 2;
+ vectorInput.xmin = input->xmin;
+ vectorInput.ymax = input->ymax + 2;
+ vectorInput.ymin = input->ymin;
+ if (operation->determineDependingAreaOfInterest(&vectorInput, readOperation, output)) {
+ return true;
+ }
+
+ /* scale x */
+ operation = getInputOperation(2);
+ if (operation->determineDependingAreaOfInterest(input, readOperation, output) ) {
+ return true;
+ }
+
+ /* scale y */
+ operation = getInputOperation(3);
+ if (operation->determineDependingAreaOfInterest(input, readOperation, output) ) {
+ return true;
+ }
+
+ return false;
+}
+
diff --git a/source/blender/compositor/operations/COM_DisplaceOperation.h b/source/blender/compositor/operations/COM_DisplaceOperation.h
new file mode 100644
index 00000000000..9c59c928854
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DisplaceOperation.h
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_DisplaceOperation_h
+#define _COM_DisplaceOperation_h
+#include "COM_NodeOperation.h"
+
+
+class DisplaceOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputColorProgram;
+ SocketReader *inputVectorProgram;
+ SocketReader *inputScaleXProgram;
+ SocketReader *inputScaleYProgram;
+
+ float width_x4;
+ float height_x4;
+
+public:
+ DisplaceOperation();
+
+ /**
+ * we need a 2x2 differential filter for Vector Input and full buffer for the image
+ */
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp b/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp
new file mode 100644
index 00000000000..8675caca1e2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_DisplaceSimpleOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+DisplaceSimpleOperation::DisplaceSimpleOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputColorProgram = NULL;
+ this->inputVectorProgram = NULL;
+ this->inputScaleXProgram = NULL;
+ this->inputScaleYProgram = NULL;
+}
+
+void DisplaceSimpleOperation::initExecution()
+{
+ this->inputColorProgram = this->getInputSocketReader(0);
+ this->inputVectorProgram = this->getInputSocketReader(1);
+ this->inputScaleXProgram = this->getInputSocketReader(2);
+ this->inputScaleYProgram = this->getInputSocketReader(3);
+
+ width_x4 = this->getWidth() * 4;
+ height_x4 = this->getHeight() * 4;
+}
+
+
+/* minimum distance (in pixels) a pixel has to be displaced
+ * in order to take effect */
+#define DISPLACE_EPSILON 0.01f
+
+void DisplaceSimpleOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inVector[4];
+ float inScale[4];
+
+ float p_dx, p_dy; /* main displacement in pixel space */
+ float u, v;
+
+ this->inputScaleXProgram->read(inScale, x, y, sampler, inputBuffers);
+ float xs = inScale[0];
+ this->inputScaleYProgram->read(inScale, x, y, sampler, inputBuffers);
+ float ys = inScale[0];
+
+ /* clamp x and y displacement to triple image resolution -
+ * to prevent hangs from huge values mistakenly plugged in eg. z buffers */
+ CLAMP(xs, -width_x4, width_x4);
+ CLAMP(ys, -height_x4, height_x4);
+
+ this->inputVectorProgram->read(inVector, x, y, sampler, inputBuffers);
+ p_dx = inVector[0] * xs;
+ p_dy = inVector[1] * ys;
+
+ /* displaced pixel in uv coords, for image sampling */
+ /* clamp nodes to avoid glitches */
+ u = x - p_dx + 0.5f;
+ v = y - p_dy + 0.5f;
+ CLAMP(u, 0.f, this->getWidth()-1.f);
+ CLAMP(v, 0.f, this->getHeight()-1.f);
+
+ this->inputColorProgram->read(color, u, v, sampler, inputBuffers);
+}
+
+void DisplaceSimpleOperation::deinitExecution()
+{
+ this->inputColorProgram = NULL;
+ this->inputVectorProgram = NULL;
+ this->inputScaleXProgram = NULL;
+ this->inputScaleYProgram = NULL;
+}
+
+bool DisplaceSimpleOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti colorInput;
+ NodeOperation *operation=NULL;
+
+ /* the vector buffer only needs a 2x2 buffer. The image needs whole buffer */
+ /* image */
+ operation = getInputOperation(0);
+ colorInput.xmax = operation->getWidth();
+ colorInput.xmin = 0;
+ colorInput.ymax = operation->getHeight();
+ colorInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&colorInput, readOperation, output)) {
+ return true;
+ }
+
+ /* vector */
+ if (operation->determineDependingAreaOfInterest(input, readOperation, output)) {
+ return true;
+ }
+
+ /* scale x */
+ operation = getInputOperation(2);
+ if (operation->determineDependingAreaOfInterest(input, readOperation, output) ) {
+ return true;
+ }
+
+ /* scale y */
+ operation = getInputOperation(3);
+ if (operation->determineDependingAreaOfInterest(input, readOperation, output) ) {
+ return true;
+ }
+
+ return false;
+}
+
diff --git a/source/blender/compositor/operations/COM_DisplaceSimpleOperation.h b/source/blender/compositor/operations/COM_DisplaceSimpleOperation.h
new file mode 100644
index 00000000000..0e3bcc1b1f0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DisplaceSimpleOperation.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_DisplaceSimpleOperation_h
+#define _COM_DisplaceSimpleOperation_h
+#include "COM_NodeOperation.h"
+
+
+class DisplaceSimpleOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputColorProgram;
+ SocketReader *inputVectorProgram;
+ SocketReader *inputScaleXProgram;
+ SocketReader *inputScaleYProgram;
+
+ float width_x4;
+ float height_x4;
+
+public:
+ DisplaceSimpleOperation();
+
+ /**
+ * we need a full buffer for the image
+ */
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DistanceMatteOperation.cpp b/source/blender/compositor/operations/COM_DistanceMatteOperation.cpp
new file mode 100644
index 00000000000..304f7fa5066
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DistanceMatteOperation.cpp
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_DistanceMatteOperation.h"
+#include "BLI_math.h"
+
+DistanceMatteOperation::DistanceMatteOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addInputSocket(COM_DT_COLOR);
+ addOutputSocket(COM_DT_VALUE);
+
+ inputImageProgram = NULL;
+ inputKeyProgram = NULL;
+}
+
+void DistanceMatteOperation::initExecution()
+{
+ this->inputImageProgram = this->getInputSocketReader(0);
+ this->inputKeyProgram = this->getInputSocketReader(1);
+}
+
+void DistanceMatteOperation::deinitExecution()
+{
+ this->inputImageProgram = NULL;
+ this->inputKeyProgram = NULL;
+}
+
+void DistanceMatteOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inKey[4];
+ float inImage[4];
+
+ const float tolerence=this->settings->t1;
+ const float falloff=this->settings->t2;
+
+ float distance;
+ float alpha;
+
+ this->inputKeyProgram->read(inKey, x, y, sampler, inputBuffers);
+ this->inputImageProgram->read(inImage, x, y, sampler, inputBuffers);
+
+ distance = sqrt(pow((inKey[0]-inImage[0]),2)+
+ pow((inKey[1]-inImage[1]),2)+
+ pow((inKey[2]-inImage[2]),2));
+
+ /* store matte(alpha) value in [0] to go with
+ * COM_SetAlphaOperation and the Value output
+ */
+
+ /*make 100% transparent */
+ if (distance < tolerence) {
+ outputValue[0]=0.f;
+ }
+ /*in the falloff region, make partially transparent */
+ else if (distance < falloff+tolerence) {
+ distance=distance-tolerence;
+ alpha=distance/falloff;
+ /*only change if more transparent than before */
+ if (alpha < inImage[3]) {
+ outputValue[0]=alpha;
+ }
+ else { /* leave as before */
+ outputValue[0]=inImage[3];
+ }
+ }
+ else {
+ /* leave as before */
+ outputValue[0]=inImage[3];
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_DistanceMatteOperation.h b/source/blender/compositor/operations/COM_DistanceMatteOperation.h
new file mode 100644
index 00000000000..2a668f31f8f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DistanceMatteOperation.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_DistanceMatteOperation_h
+#define _COM_DistanceMatteOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class DistanceMatteOperation : public NodeOperation {
+private:
+ NodeChroma *settings;
+ SocketReader *inputImageProgram;
+ SocketReader *inputKeyProgram;
+public:
+ /**
+ * Default constructor
+ */
+ DistanceMatteOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeChroma *nodeChroma) {this->settings = nodeChroma;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_DotproductOperation.cpp b/source/blender/compositor/operations/COM_DotproductOperation.cpp
new file mode 100644
index 00000000000..b03b176f08a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DotproductOperation.cpp
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DotproductOperation.h"
+
+DotproductOperation::DotproductOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->setResolutionInputSocketIndex(0);
+ this->input1Operation = NULL;
+ this->input2Operation = NULL;
+}
+void DotproductOperation::initExecution()
+{
+ this->input1Operation = this->getInputSocketReader(0);
+ this->input2Operation = this->getInputSocketReader(1);
+}
+
+void DotproductOperation::deinitExecution()
+{
+ this->input1Operation = NULL;
+ this->input2Operation = NULL;
+}
+
+/** @todo: current implementation is the inverse of a dotproduct. not 'logically' correct
+ */
+void DotproductOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float input1[4];
+ float input2[4];
+ this->input1Operation->read(input1, x, y, sampler, inputBuffers);
+ this->input2Operation->read(input2, x, y, sampler, inputBuffers);
+ color[0] = -(input1[0]*input2[0]+input1[1]*input2[1]+input1[2]*input2[2]);
+}
diff --git a/source/blender/compositor/operations/COM_DotproductOperation.h b/source/blender/compositor/operations/COM_DotproductOperation.h
new file mode 100644
index 00000000000..0244fffa110
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DotproductOperation.h
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DotproductOperation_h_
+#define _COM_DotproductOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class DotproductOperation: public NodeOperation {
+private:
+ SocketReader *input1Operation;
+ SocketReader *input2Operation;
+public:
+ DotproductOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.cpp b/source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.cpp
new file mode 100644
index 00000000000..9e911e7ba40
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.cpp
@@ -0,0 +1,1301 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_DoubleEdgeMaskOperation.h"
+#include "BLI_math.h"
+#include "DNA_node_types.h"
+
+// this part has been copied from the double edge mask
+// Contributor(s): Peter Larabell.
+static void do_adjacentKeepBorders(unsigned int t, unsigned int rw, unsigned int *limask, unsigned int *lomask, unsigned int *lres, float *res, unsigned int *rsize)
+{
+ int x;
+ unsigned int isz=0; // inner edge size
+ unsigned int osz=0; // outer edge size
+ unsigned int gsz=0; // gradient fill area size
+ /* Test the four corners */
+ /* upper left corner */
+ x=t-rw+1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or to the right, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x] = 1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x] = 3; // flag pixel as outer edge
+ }
+ /* upper right corner */
+ x=t;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or to the left, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x-1] && lomask[x-1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ /* lower left corner */
+ x=0;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel above, or to the right, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x+rw] && lomask[x+rw]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ /* lower right corner */
+ x=rw-1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel above, or to the left, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x+rw] && lomask[x+rw]) || (!limask[x-1] && lomask[x-1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+
+ /* Test the TOP row of pixels in buffer, except corners */
+ for (x = t-1; x>=(t-rw)+2; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel to the right, or to the left, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-1] && lomask[x-1]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+
+ /* Test the BOTTOM row of pixels in buffer, except corners */
+ for (x = rw-2; x; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel to the right, or to the left, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-1] && lomask[x-1]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+ /* Test the LEFT edge of pixels in buffer, except corners */
+ for (x = t-(rw<<1)+1; x>=rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or above, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x+rw] && lomask[x+rw])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+
+ /* Test the RIGHT edge of pixels in buffer, except corners */
+ for (x = t-rw; x>rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or above, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x+rw] && lomask[x+rw])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+
+ rsize[0]=isz; // fill in our return sizes for edges + fill
+ rsize[1]=osz;
+ rsize[2]=gsz;
+}
+
+static void do_adjacentBleedBorders(unsigned int t, unsigned int rw, unsigned int *limask, unsigned int *lomask, unsigned int *lres, float *res, unsigned int *rsize)
+{
+ int x;
+ unsigned int isz=0; // inner edge size
+ unsigned int osz=0; // outer edge size
+ unsigned int gsz=0; // gradient fill area size
+ /* Test the four corners */
+ /* upper left corner */
+ x=t-rw+1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or to the right, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x+1]) { // test if outer mask is empty underneath or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* upper right corner */
+ x=t;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or to the left, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x-1] && lomask[x-1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x-1]) { // test if outer mask is empty underneath or to the left
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* lower left corner */
+ x=0;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel above, or to the right, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x+rw] && lomask[x+rw]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x+rw] || !lomask[x+1]) { // test if outer mask is empty above or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* lower right corner */
+ x=rw-1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel above, or to the left, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x+rw] && lomask[x+rw]) || (!limask[x-1] && lomask[x-1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x+rw] || !lomask[x-1]) { // test if outer mask is empty above or to the left
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* Test the TOP row of pixels in buffer, except corners */
+ for (x = t-1; x>=(t-rw)+2; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel to the left, or to the right, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-1] && lomask[x-1]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-1] || !lomask[x+1]) { // test if outer mask is empty to the left or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+
+ /* Test the BOTTOM row of pixels in buffer, except corners */
+ for (x = rw-2; x; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel to the left, or to the right, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-1] && lomask[x-1]) || (!limask[x+1] && lomask[x+1])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-1] || !lomask[x+1]) { // test if outer mask is empty to the left or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+ /* Test the LEFT edge of pixels in buffer, except corners */
+ for (x = t-(rw<<1)+1; x>=rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or above, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x+rw] && lomask[x+rw])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x+rw]) { // test if outer mask is empty underneath or above
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+
+ /* Test the RIGHT edge of pixels in buffer, except corners */
+ for (x = t-rw; x>rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if pixel underneath, or above, are empty in the inner mask,
+ // but filled in the outer mask
+ if ((!limask[x-rw] && lomask[x-rw]) || (!limask[x+rw] && lomask[x+rw])) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x+rw]) { // test if outer mask is empty underneath or above
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+
+ rsize[0]=isz; // fill in our return sizes for edges + fill
+ rsize[1]=osz;
+ rsize[2]=gsz;
+}
+
+static void do_allKeepBorders(unsigned int t, unsigned int rw, unsigned int *limask, unsigned int *lomask, unsigned int *lres, float *res, unsigned int *rsize)
+{
+ int x;
+ unsigned int isz=0; // inner edge size
+ unsigned int osz=0; // outer edge size
+ unsigned int gsz=0; // gradient fill area size
+ /* Test the four corners */
+ /* upper left corner */
+ x=t-rw+1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if the inner mask is empty underneath or to the right
+ if (!limask[x-rw] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ /* upper right corner */
+ x=t;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if the inner mask is empty underneath or to the left
+ if (!limask[x-rw] || !limask[x-1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ /* lower left corner */
+ x=0;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty above or to the right
+ if (!limask[x+rw] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ /* lower right corner */
+ x=rw-1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty above or to the left
+ if (!limask[x+rw] || !limask[x-1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+
+ /* Test the TOP row of pixels in buffer, except corners */
+ for (x = t-1; x>=(t-rw)+2; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty to the left or to the right
+ if (!limask[x-1] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+
+ /* Test the BOTTOM row of pixels in buffer, except corners */
+ for (x = rw-2; x; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty to the left or to the right
+ if (!limask[x-1] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+ /* Test the LEFT edge of pixels in buffer, except corners */
+ for (x = t-(rw<<1)+1; x>=rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty underneath or above
+ if (!limask[x-rw] || !limask[x+rw]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+
+ /* Test the RIGHT edge of pixels in buffer, except corners */
+ for (x = t-rw; x>rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty underneath or above
+ if (!limask[x-rw] || !limask[x+rw]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ }
+
+ rsize[0]=isz; // fill in our return sizes for edges + fill
+ rsize[1]=osz;
+ rsize[2]=gsz;
+}
+
+static void do_allBleedBorders(unsigned int t, unsigned int rw, unsigned int *limask, unsigned int *lomask, unsigned int *lres, float *res, unsigned int *rsize)
+{
+ int x;
+ unsigned int isz=0; // inner edge size
+ unsigned int osz=0; // outer edge size
+ unsigned int gsz=0; // gradient fill area size
+ /* Test the four corners */
+ /* upper left corner */
+ x=t-rw+1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if the inner mask is empty underneath or to the right
+ if (!limask[x-rw] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x+1]) { // test if outer mask is empty underneath or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* upper right corner */
+ x=t;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if the inner mask is empty underneath or to the left
+ if (!limask[x-rw] || !limask[x-1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x-1]) { // test if outer mask is empty above or to the left
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* lower left corner */
+ x=0;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty above or to the right
+ if (!limask[x+rw] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x+rw] || !lomask[x+1]) { // test if outer mask is empty underneath or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* lower right corner */
+ x=rw-1;
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty above or to the left
+ if (!limask[x+rw] || !limask[x-1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x+rw] || !lomask[x-1]) { // test if outer mask is empty underneath or to the left
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ /* Test the TOP row of pixels in buffer, except corners */
+ for (x = t-1; x>=(t-rw)+2; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty to the left or to the right
+ if (!limask[x-1] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-1] || !lomask[x+1]) { // test if outer mask is empty to the left or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+
+ /* Test the BOTTOM row of pixels in buffer, except corners */
+ for (x = rw-2; x; x--) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty to the left or to the right
+ if (!limask[x-1] || !limask[x+1]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-1] || !lomask[x+1]) { // test if outer mask is empty to the left or to the right
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+ /* Test the LEFT edge of pixels in buffer, except corners */
+ for (x = t-(rw<<1)+1; x>=rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty underneath or above
+ if (!limask[x-rw] || !limask[x+rw]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x+rw]) { // test if outer mask is empty underneath or above
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+
+ /* Test the RIGHT edge of pixels in buffer, except corners */
+ for (x = t-rw; x>rw; x-=rw) {
+ // test if inner mask is filled
+ if (limask[x]) {
+ // test if inner mask is empty underneath or above
+ if (!limask[x-rw] || !limask[x+rw]) {
+ isz++; // increment inner edge size
+ lres[x]=4; // flag pixel as inner edge
+ }
+ else {
+ res[x]=1.0f; // pixel is just part of inner mask, and it's not an edge
+ }
+ }
+ else if (lomask[x]) { // inner mask was empty, test if outer mask is filled
+ if (!lomask[x-rw] || !lomask[x+rw]) { // test if outer mask is empty underneath or above
+ osz++; // increment outer edge size
+ lres[x]=3; // flag pixel as outer edge
+ }
+ else {
+ gsz++; // increment the gradient pixel count
+ lres[x]=2; // flag pixel as gradient
+ }
+ }
+ }
+
+ rsize[0]=isz; // fill in our return sizes for edges + fill
+ rsize[1]=osz;
+ rsize[2]=gsz;
+}
+
+static void do_allEdgeDetection(unsigned int t, unsigned int rw, unsigned int *limask, unsigned int *lomask, unsigned int *lres, float *res, unsigned int *rsize, unsigned int in_isz, unsigned int in_osz, unsigned int in_gsz)
+{
+ int x; // x = pixel loop counter
+ int a; // a = pixel loop counter
+ int dx; // dx = delta x
+ int pix_prevRow; // pix_prevRow = pixel one row behind the one we are testing in a loop
+ int pix_nextRow; // pix_nextRow = pixel one row in front of the one we are testing in a loop
+ int pix_prevCol; // pix_prevCol = pixel one column behind the one we are testing in a loop
+ int pix_nextCol; // pix_nextCol = pixel one column in front of the one we are testing in a loop
+ /* Test all rows between the FIRST and LAST rows, excluding left and right edges */
+ for (x = (t-rw)+1, dx=x-(rw-2); dx>rw; x-=rw,dx-=rw) {
+ a=x-2;
+ pix_prevRow=a+rw;
+ pix_nextRow=a-rw;
+ pix_prevCol=a+1;
+ pix_nextCol=a-1;
+ while (a>dx-2) {
+ if (!limask[a]) { // if the inner mask is empty
+ if (lomask[a]) { // if the outer mask is full
+ /*
+ Next we test all 4 directions around the current pixel: next/prev/up/down
+ The test ensures that the outer mask is empty and that the inner mask
+ is also empty. If both conditions are true for any one of the 4 adjacent pixels
+ then the current pixel is counted as being a true outer edge pixel.
+ */
+ if ((!lomask[pix_nextCol] && !limask[pix_nextCol]) ||
+ (!lomask[pix_prevCol] && !limask[pix_prevCol]) ||
+ (!lomask[pix_nextRow] && !limask[pix_nextRow]) ||
+ (!lomask[pix_prevRow] && !limask[pix_prevRow]))
+ {
+ in_osz++; // increment the outer boundary pixel count
+ lres[a]=3; // flag pixel as part of outer edge
+ }
+ else { // it's not a boundary pixel, but it is a gradient pixel
+ in_gsz++; // increment the gradient pixel count
+ lres[a]=2; // flag pixel as gradient
+ }
+ }
+
+ }
+ else {
+ if (!limask[pix_nextCol] || !limask[pix_prevCol] || !limask[pix_nextRow] || !limask[pix_prevRow]) {
+ in_isz++; // increment the inner boundary pixel count
+ lres[a]=4; // flag pixel as part of inner edge
+ }
+ else {
+ res[a]=1.0f; // pixel is part of inner mask, but not at an edge
+ }
+ }
+ a--;
+ pix_prevRow--;
+ pix_nextRow--;
+ pix_prevCol--;
+ pix_nextCol--;
+ }
+ }
+
+ rsize[0]=in_isz; // fill in our return sizes for edges + fill
+ rsize[1]=in_osz;
+ rsize[2]=in_gsz;
+}
+
+static void do_adjacentEdgeDetection(unsigned int t, unsigned int rw, unsigned int *limask, unsigned int *lomask, unsigned int *lres, float *res, unsigned int *rsize, unsigned int in_isz, unsigned int in_osz, unsigned int in_gsz)
+{
+ int x; // x = pixel loop counter
+ int a; // a = pixel loop counter
+ int dx; // dx = delta x
+ int pix_prevRow; // pix_prevRow = pixel one row behind the one we are testing in a loop
+ int pix_nextRow; // pix_nextRow = pixel one row in front of the one we are testing in a loop
+ int pix_prevCol; // pix_prevCol = pixel one column behind the one we are testing in a loop
+ int pix_nextCol; // pix_nextCol = pixel one column in front of the one we are testing in a loop
+ /* Test all rows between the FIRST and LAST rows, excluding left and right edges */
+ for (x = (t-rw)+1, dx=x-(rw-2); dx>rw; x-=rw,dx-=rw) {
+ a=x-2;
+ pix_prevRow=a+rw;
+ pix_nextRow=a-rw;
+ pix_prevCol=a+1;
+ pix_nextCol=a-1;
+ while (a>dx-2) {
+ if (!limask[a]) { // if the inner mask is empty
+ if (lomask[a]) { // if the outer mask is full
+ /*
+ Next we test all 4 directions around the current pixel: next/prev/up/down
+ The test ensures that the outer mask is empty and that the inner mask
+ is also empty. If both conditions are true for any one of the 4 adjacent pixels
+ then the current pixel is counted as being a true outer edge pixel.
+ */
+ if ((!lomask[pix_nextCol] && !limask[pix_nextCol]) ||
+ (!lomask[pix_prevCol] && !limask[pix_prevCol]) ||
+ (!lomask[pix_nextRow] && !limask[pix_nextRow]) ||
+ (!lomask[pix_prevRow] && !limask[pix_prevRow]))
+ {
+ in_osz++; // increment the outer boundary pixel count
+ lres[a]=3; // flag pixel as part of outer edge
+ }
+ else { // it's not a boundary pixel, but it is a gradient pixel
+ in_gsz++; // increment the gradient pixel count
+ lres[a]=2; // flag pixel as gradient
+ }
+ }
+
+ }
+ else {
+ if ((!limask[pix_nextCol] && lomask[pix_nextCol]) ||
+ (!limask[pix_prevCol] && lomask[pix_prevCol]) ||
+ (!limask[pix_nextRow] && lomask[pix_nextRow]) ||
+ (!limask[pix_prevRow] && lomask[pix_prevRow]))
+ {
+ in_isz++; // increment the inner boundary pixel count
+ lres[a]=4; // flag pixel as part of inner edge
+ }
+ else {
+ res[a]=1.0f; // pixel is part of inner mask, but not at an edge
+ }
+ }
+ a--;
+ pix_prevRow--; // advance all four "surrounding" pixel pointers
+ pix_nextRow--;
+ pix_prevCol--;
+ pix_nextCol--;
+ }
+ }
+
+ rsize[0]=in_isz; // fill in our return sizes for edges + fill
+ rsize[1]=in_osz;
+ rsize[2]=in_gsz;
+}
+
+static void do_createEdgeLocationBuffer(unsigned int t, unsigned int rw, unsigned int *lres, float *res, unsigned short *gbuf, unsigned int *innerEdgeOffset, unsigned int *outerEdgeOffset, unsigned int isz, unsigned int gsz)
+{
+ int x; // x = pixel loop counter
+ int a; // a = temporary pixel index buffer loop counter
+ unsigned int ud; // ud = unscaled edge distance
+ unsigned int dmin; // dmin = minimun edge distance
+
+ unsigned int rsl; // long used for finding fast 1.0/sqrt
+ unsigned int gradientFillOffset;
+ unsigned int innerAccum=0; // for looping inner edge pixel indexes, represents current position from offset
+ unsigned int outerAccum=0; // for looping outer edge pixel indexes, represents current position from offset
+ unsigned int gradientAccum=0; // for looping gradient pixel indexes, represents current position from offset
+ /*
+ Here we compute the size of buffer needed to hold (row,col) coordinates
+ for each pixel previously determined to be either gradient, inner edge,
+ or outer edge.
+
+ Allocation is done by requesting 4 bytes "sizeof(int)" per pixel, even
+ though gbuf[] is declared as unsigned short* (2 bytes) because we don't
+ store the pixel indexes, we only store x,y location of pixel in buffer.
+
+ This does make the assumption that x and y can fit in 16 unsigned bits
+ so if Blender starts doing renders greater than 65536 in either direction
+ this will need to allocate gbuf[] as unsigned int *and allocate 8 bytes
+ per flagged pixel.
+
+ In general, the buffer on-screen:
+
+ Example: 9 by 9 pixel block
+
+ . = pixel non-white in both outer and inner mask
+ o = pixel white in outer, but not inner mask, adjacent to "." pixel
+ g = pixel white in outer, but not inner mask, not adjacent to "." pixel
+ i = pixel white in inner mask, adjacent to "g" or "." pixel
+ F = pixel white in inner mask, only adjacent to other pixels white in the inner mask
+
+
+ ......... <----- pixel #80
+ ..oooo...
+ .oggggo..
+ .oggiggo.
+ .ogiFigo.
+ .oggiggo.
+ .oggggo..
+ ..oooo...
+ pixel #00 -----> .........
+
+ gsz = 18 (18 "g" pixels above)
+ isz = 4 (4 "i" pixels above)
+ osz = 18 (18 "o" pixels above)
+
+
+ The memory in gbuf[] after filling will look like this:
+
+ gradientFillOffset (0 pixels) innerEdgeOffset (18 pixels) outerEdgeOffset (22 pixels)
+ / / /
+ / / /
+ |X Y X Y X Y X Y > <X Y X Y > <X Y X Y X Y > <X Y X Y | <- (x,y)
+ +--------------------------------> <----------------> <------------------------> <----------------+
+ |0 2 4 6 8 10 12 14 > ... <68 70 72 74 > ... <80 82 84 86 88 90 > ... <152 154 156 158 | <- bytes
+ +--------------------------------> <----------------> <------------------------> <----------------+
+ |g0 g0 g1 g1 g2 g2 g3 g3 > <g17 g17 i0 i0 > <i2 i2 i3 i3 o0 o0 > <o16 o16 o17 o17 | <- pixel
+ / / /
+ / / /
+ / / /
+ +---------- gradientAccum (18) ---------+ +--- innerAccum (22) ---+ +--- outerAccum (40) ---+
+
+
+ Ultimately we do need the pixel's memory buffer index to set the output
+ pixel color, but it's faster to reconstruct the memory buffer location
+ each iteration of the final gradient calculation than it is to deconstruct
+ a memory location into x,y pairs each round.
+*/
+
+
+ gradientFillOffset=0; // since there are likely "more" of these, put it first. :)
+ *innerEdgeOffset=gradientFillOffset+gsz; // set start of inner edge indexes
+ *outerEdgeOffset=(*innerEdgeOffset)+isz; // set start of outer edge indexes
+ /* set the accumulators to correct positions */ // set up some accumulator variables for loops
+ gradientAccum = gradientFillOffset; // each accumulator variable starts at its respective
+ innerAccum = *innerEdgeOffset; // section's offset so when we start filling, each
+ outerAccum = *outerEdgeOffset; // section fills up it's allocated space in gbuf
+ //uses dmin=row, rsl=col
+ for (x=0,dmin=0; x<t; x+=rw,dmin++) {
+ for (rsl=0; rsl<rw; rsl++) {
+ a=x+rsl;
+ if (lres[a]==2) { // it is a gradient pixel flagged by 2
+ ud=gradientAccum<<1; // double the index to reach correct unsigned short location
+ gbuf[ud]=dmin; // insert pixel's row into gradient pixel location buffer
+ gbuf[ud+1]=rsl; // insert pixel's column into gradient pixel location buffer
+ gradientAccum++; // increment gradient index buffer pointer
+ }
+ else if (lres[a]==3) { // it is an outer edge pixel flagged by 3
+ ud=outerAccum<<1; // double the index to reach correct unsigned short location
+ gbuf[ud]=dmin; // insert pixel's row into outer edge pixel location buffer
+ gbuf[ud+1]=rsl; // insert pixel's column into outer edge pixel location buffer
+ outerAccum++; // increment outer edge index buffer pointer
+ res[a]=0.0f; // set output pixel intensity now since it won't change later
+ }
+ else if (lres[a]==4) { // it is an inner edge pixel flagged by 4
+ ud=innerAccum<<1; // double int index to reach correct unsigned short location
+ gbuf[ud]=dmin; // insert pixel's row into inner edge pixel location buffer
+ gbuf[ud+1]=rsl; // insert pixel's column into inner edge pixel location buffer
+ innerAccum++; // increment inner edge index buffer pointer
+ res[a]=1.0f; // set output pixel intensity now since it won't change later
+ }
+ }
+ }
+
+}
+
+static void do_fillGradientBuffer(unsigned int rw, float *res, unsigned short *gbuf, unsigned int isz, unsigned int osz, unsigned int gsz, unsigned int innerEdgeOffset, unsigned int outerEdgeOffset)
+{
+ int x; // x = pixel loop counter
+ int a; // a = temporary pixel index buffer loop counter
+ int fsz; // size of the frame
+ unsigned int rsl; // long used for finding fast 1.0/sqrt
+ float rsf; // float used for finding fast 1.0/sqrt
+ const float rsopf = 1.5f; // constant float used for finding fast 1.0/sqrt
+
+ unsigned int gradientFillOffset;
+ unsigned int t;
+ unsigned int ud; // ud = unscaled edge distance
+ unsigned int dmin; // dmin = minimun edge distance
+ float odist; // odist = current outer edge distance
+ float idist; // idist = current inner edge distance
+ int dx; // dx = X-delta (used for distance proportion calculation)
+ int dy; // dy = Y-delta (used for distance proportion calculation)
+
+ /*
+ The general algorithm used to color each gradient pixel is:
+
+ 1.) Loop through all gradient pixels.
+ A.) For each gradient pixel:
+ a.) Loop though all outside edge pixels, looking for closest one
+ to the gradient pixel we are in.
+ b.) Loop through all inside edge pixels, looking for closest one
+ to the gradient pixel we are in.
+ c.) Find proportion of distance from gradient pixel to inside edge
+ pixel compared to sum of distance to inside edge and distance to
+ outside edge.
+
+ In an image where:
+ . = blank (black) pixels, not covered by inner mask or outer mask
+ + = desired gradient pixels, covered only by outer mask
+ * = white full mask pixels, covered by at least inner mask
+
+ ...............................
+ ...............+++++++++++.....
+ ...+O++++++..++++++++++++++....
+ ..+++\++++++++++++++++++++.....
+ .+++++G+++++++++*******+++.....
+ .+++++|+++++++*********+++.....
+ .++***I****************+++.....
+ .++*******************+++......
+ .+++*****************+++.......
+ ..+++***************+++........
+ ....+++**********+++...........
+ ......++++++++++++.............
+ ...............................
+
+ O = outside edge pixel
+ \
+ G = gradient pixel
+ |
+ I = inside edge pixel
+
+ __
+ *note that IO does not need to be a straight line, in fact
+ many cases can arise where straight lines do not work
+ correctly.
+
+ __ __ __
+ d.) Pixel color is assigned as |GO| / ( |GI| + |GO| )
+
+ The implementation does not compute distance, but the reciprocal of the
+ distance. This is done to avoid having to compute a square root, as a
+ reciprocal square root can be computed faster. Therefore, the code computes
+ pixel color as |GI| / (|GI| + |GO|). Since these are reciprocals, GI serves the
+ purpose of GO for the proportion calculation.
+
+ For the purposes of the minimun distance comparisons, we only check
+ the sums-of-squares against eachother, since they are in the same
+ mathematical sort-order as if we did go ahead and take square roots
+
+ Loop through all gradient pixels.
+ */
+
+ for (x = gsz-1; x>=0; x--) {
+ gradientFillOffset=x<<1;
+ t=gbuf[gradientFillOffset]; // calculate column of pixel indexed by gbuf[x]
+ fsz=gbuf[gradientFillOffset+1]; // calculate row of pixel indexed by gbuf[x]
+ dmin=0xffffffff; // reset min distance to edge pixel
+ for (a=outerEdgeOffset+osz-1; a>=outerEdgeOffset; a--) { // loop through all outer edge buffer pixels
+ ud=a<<1;
+ dy=t-gbuf[ud]; // set dx to gradient pixel column - outer edge pixel row
+ dx=fsz-gbuf[ud+1]; // set dy to gradient pixel row - outer edge pixel column
+ ud=dx*dx+dy*dy; // compute sum of squares
+ if (ud<dmin) { // if our new sum of squares is less than the current minimum
+ dmin=ud; // set a new minimum equal to the new lower value
+ }
+ }
+ odist=(float)(dmin); // cast outer min to a float
+ rsf=odist*0.5f; //
+ rsl=*(unsigned int*)&odist; // use some peculiar properties of the way bits are stored
+ rsl=0x5f3759df-(rsl>>1); // in floats vs. unsigned ints to compute an approximate
+ odist=*(float*)&rsl; // reciprocal square root
+ odist=odist*(rsopf-(rsf*odist*odist)); // -- ** this line can be iterated for more accuracy ** --
+ dmin=0xffffffff; // reset min distance to edge pixel
+ for (a = innerEdgeOffset+isz-1; a>=innerEdgeOffset; a--) { // loop through all inside edge pixels
+ ud=a<<1;
+ dy=t-gbuf[ud]; // compute delta in Y from gradient pixel to inside edge pixel
+ dx=fsz-gbuf[ud+1]; // compute delta in X from gradient pixel to inside edge pixel
+ ud=dx*dx+dy*dy; // compute sum of squares
+ if (ud<dmin) { // if our new sum of squares is less than the current minimum we've found
+ dmin=ud; // set a new minimum equal to the new lower value
+ }
+ }
+ idist=(float)(dmin); // cast inner min to a float
+ rsf=idist*0.5f; //
+ rsl=*(unsigned int*)&idist; //
+ rsl=0x5f3759df-(rsl>>1); // see notes above
+ idist=*(float*)&rsl; //
+ idist=idist*(rsopf-(rsf*idist*idist)); //
+ /*
+ Note once again that since we are using reciprocals of distance values our
+ proportion is already the correct intensity, and does not need to be
+ subracted from 1.0 like it would have if we used real distances.
+ */
+
+ /*
+ Here we reconstruct the pixel's memory location in the CompBuf by
+ Pixel Index = Pixel Column + ( Pixel Row * Row Width )
+ */
+ res[gbuf[gradientFillOffset+1]+(gbuf[gradientFillOffset]*rw)]=(idist/(idist+odist)); //set intensity
+ }
+
+}
+
+// end of copy
+
+void DoubleEdgeMaskOperation::doDoubleEdgeMask(float *imask, float *omask, float *res)
+{
+ unsigned int *lres; // lres = unsigned int pointer to output pixel buffer (for bit operations)
+ unsigned int *limask; // limask = unsigned int pointer to inner mask (for bit operations)
+ unsigned int *lomask; // lomask = unsigned int pointer to outer mask (for bit operations)
+
+ int rw; // rw = pixel row width
+ int t; // t = total number of pixels in buffer - 1 (used for loop starts)
+ int fsz; // size of the frame
+
+ unsigned int isz=0; // size (in pixels) of inside edge pixel index buffer
+ unsigned int osz=0; // size (in pixels) of outside edge pixel index buffer
+ unsigned int gsz=0; // size (in pixels) of gradient pixel index buffer
+ unsigned int rsize[3]; // size storage to pass to helper functions
+ unsigned int innerEdgeOffset=0; // offset into final buffer where inner edge pixel indexes start
+ unsigned int outerEdgeOffset=0; // offset into final buffer where outer edge pixel indexes start
+
+ unsigned short *gbuf; // gradient/inner/outer pixel location index buffer
+
+ if (true) { // if both input sockets have some data coming in...
+
+ t=(this->getWidth()*this->getHeight())-1; // determine size of the frame
+
+ lres = (unsigned int*)res; // unsigned int pointer to output buffer (for bit level ops)
+ limask=(unsigned int*)imask; // unsigned int pointer to input mask (for bit level ops)
+ lomask=(unsigned int*)omask; // unsigned int pointer to output mask (for bit level ops)
+ rw = this->getWidth(); // width of a row of pixels
+
+
+ /*
+ The whole buffer is broken up into 4 parts. The four CORNERS, the FIRST and LAST rows, the
+ LEFT and RIGHT edges (excluding the corner pixels), and all OTHER rows.
+ This allows for quick computation of outer edge pixels where
+ a screen edge pixel is marked to be gradient.
+
+ The pixel type (gradient vs inner-edge vs outer-edge) tests change
+ depending on the user selected "Inner Edge Mode" and the user selected
+ "Buffer Edge Mode" on the node's GUI. There are 4 sets of basically the
+ same algorithm:
+
+ 1.) Inner Edge -> Adjacent Only
+ Buffer Edge -> Keep Inside
+
+ 2.) Inner Edge -> Adjacent Only
+ Buffer Edge -> Bleed Out
+
+ 3.) Inner Edge -> All
+ Buffer Edge -> Keep Inside
+
+ 4.) Inner Edge -> All
+ Buffer Edge -> Bleed Out
+
+ Each version has slightly different criteria for detecting an edge pixel.
+ */
+ if (this->adjecentOnly) { // if "adjacent only" inner edge mode is turned on
+ if (this->keepInside) { // if "keep inside" buffer edge mode is turned on
+ do_adjacentKeepBorders(t,rw,limask,lomask,lres,res,rsize);
+ }
+ else { // "bleed out" buffer edge mode is turned on
+ do_adjacentBleedBorders(t,rw,limask,lomask,lres,res,rsize);
+ }
+ isz=rsize[0]; // set up inner edge, outer edge, and gradient buffer sizes after border pass
+ osz=rsize[1];
+ gsz=rsize[2];
+ // detect edges in all non-border pixels in the buffer
+ do_adjacentEdgeDetection(t,rw,limask,lomask,lres,res,rsize,isz,osz,gsz);
+ }
+ else { // "all" inner edge mode is turned on
+ if (this->keepInside) { // if "keep inside" buffer edge mode is turned on
+ do_allKeepBorders(t,rw,limask,lomask,lres,res,rsize);
+ }
+ else { // "bleed out" buffer edge mode is turned on
+ do_allBleedBorders(t,rw,limask,lomask,lres,res,rsize);
+ }
+ isz=rsize[0]; // set up inner edge, outer edge, and gradient buffer sizes after border pass
+ osz=rsize[1];
+ gsz=rsize[2];
+ // detect edges in all non-border pixels in the buffer
+ do_allEdgeDetection(t,rw,limask,lomask,lres,res,rsize,isz,osz,gsz);
+ }
+
+ isz=rsize[0]; // set edge and gradient buffer sizes once again...
+ osz=rsize[1]; // the sizes in rsize[] may have been modified
+ gsz=rsize[2]; // by the do_*EdgeDetection() function.
+
+ fsz=gsz+isz+osz; // calculate size of pixel index buffer needed
+ gbuf = new unsigned short[fsz*2]; // allocate edge/gradient pixel index buffer
+
+ do_createEdgeLocationBuffer(t,rw,lres,res,gbuf,&innerEdgeOffset,&outerEdgeOffset,isz,gsz);
+ do_fillGradientBuffer(rw,res,gbuf,isz,osz,gsz,innerEdgeOffset,outerEdgeOffset);
+
+ delete gbuf; // free the gradient index buffer
+ }
+}
+
+DoubleEdgeMaskOperation::DoubleEdgeMaskOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputInnerMask = NULL;
+ this->inputOuterMask = NULL;
+ this->adjecentOnly = false;
+ this->keepInside = false;
+ this->setComplex(true);
+}
+
+bool DoubleEdgeMaskOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ if (this->cachedInstance == NULL) {
+ rcti newInput;
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+ else {
+ return false;
+ }
+}
+
+void DoubleEdgeMaskOperation::initExecution()
+{
+ this->inputInnerMask = this->getInputSocketReader(0);
+ this->inputOuterMask = this->getInputSocketReader(1);
+ initMutex();
+ this->cachedInstance = NULL;
+}
+
+void *DoubleEdgeMaskOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ if (this->cachedInstance) return this->cachedInstance;
+
+ BLI_mutex_lock(getMutex());
+ if (this->cachedInstance == NULL) {
+ MemoryBuffer *innerMask = (MemoryBuffer*)inputInnerMask->initializeTileData(rect, memoryBuffers);
+ MemoryBuffer *outerMask = (MemoryBuffer*)inputOuterMask->initializeTileData(rect, memoryBuffers);
+ float *data = new float[this->getWidth()*this->getHeight()];
+ float *imask = innerMask->convertToValueBuffer();
+ float *omask = outerMask->convertToValueBuffer();
+ doDoubleEdgeMask(imask, omask, data);
+ delete imask;
+ delete omask;
+ this->cachedInstance = data;
+ }
+ BLI_mutex_unlock(getMutex());
+ return this->cachedInstance;
+}
+void DoubleEdgeMaskOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float *buffer = (float*) data;
+ int index = (y*this->getWidth() + x);
+ color[0] = buffer[index];
+ color[1] = buffer[index+1];
+ color[2] = buffer[index+2];
+ color[3] = buffer[index+3];
+}
+
+void DoubleEdgeMaskOperation::deinitExecution()
+{
+ this->inputInnerMask = NULL;
+ this->inputOuterMask = NULL;
+ deinitMutex();
+ if (this->cachedInstance) {
+ delete cachedInstance;
+ this->cachedInstance = NULL;
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.h b/source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.h
new file mode 100644
index 00000000000..85c4fd9e5b7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_DoubleEdgeMaskOperation_h
+#define _COM_DoubleEdgeMaskOperation_h
+#include "COM_NodeOperation.h"
+
+
+class DoubleEdgeMaskOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOuterMask;
+ SocketReader * inputInnerMask;
+ bool adjecentOnly;
+ bool keepInside;
+ float *cachedInstance;
+public:
+ DoubleEdgeMaskOperation();
+
+ void doDoubleEdgeMask(float *inner, float *outer, float *res);
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ void setAdjecentOnly(bool adjecentOnly) {this->adjecentOnly = adjecentOnly;}
+ void setKeepInside(bool keepInside) {this->keepInside = keepInside;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_EllipseMaskOperation.cpp b/source/blender/compositor/operations/COM_EllipseMaskOperation.cpp
new file mode 100644
index 00000000000..85a629f7365
--- /dev/null
+++ b/source/blender/compositor/operations/COM_EllipseMaskOperation.cpp
@@ -0,0 +1,123 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_EllipseMaskOperation.h"
+#include "BLI_math.h"
+#include "DNA_node_types.h"
+
+EllipseMaskOperation::EllipseMaskOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputMask = NULL;
+ this->inputValue = NULL;
+ this->cosine = 0.0f;
+ this->sine = 0.0f;
+}
+void EllipseMaskOperation::initExecution()
+{
+ this->inputMask = this->getInputSocketReader(0);
+ this->inputValue = this->getInputSocketReader(1);
+ const double rad = DEG2RAD(this->data->rotation);
+ this->cosine = cos(rad);
+ this->sine = sin(rad);
+ this->aspectRatio = ((float)this->getWidth())/this->getHeight();
+}
+
+void EllipseMaskOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputMask[4];
+ float inputValue[4];
+
+ float rx = x/this->getWidth();
+ float ry = y/this->getHeight();
+
+ const float dy = (ry - this->data->y)/this->aspectRatio;
+ const float dx = rx - this->data->x;
+ rx = this->data->x+(this->cosine*dx + this->sine*dy);
+ ry = this->data->y+(-this->sine*dx + this->cosine*dy);
+
+ this->inputMask->read(inputMask, x, y, sampler, inputBuffers);
+ this->inputValue->read(inputValue, x, y, sampler, inputBuffers);
+
+ const float halfHeight = (this->data->height)/2.0f;
+ const float halfWidth = this->data->width/2.0f;
+ float sx = rx-this->data->x;
+ sx *= sx;
+ const float tx = halfWidth * halfWidth;
+ float sy = ry-this->data->y;
+ sy *= sy;
+ const float ty = halfHeight * halfHeight;
+
+ bool inside = ((sx/tx)+(sy/ty))<1.0f;
+
+ switch (this->maskType) {
+ case CMP_NODE_MASKTYPE_ADD:
+ if (inside) {
+ color[0] = max(inputMask[0],inputValue[0]);
+ }
+ else {
+ color[0] = inputMask[0];
+ }
+ break;
+ case CMP_NODE_MASKTYPE_SUBTRACT:
+ if (inside) {
+ color[0] = inputMask[0]-inputValue[0];
+ CLAMP(color[0], 0, 1);
+ }
+ else {
+ color[0] = inputMask[0];
+ }
+ break;
+ case CMP_NODE_MASKTYPE_MULTIPLY:
+ if (inside) {
+ color[0] = inputMask[0]*inputValue[0];
+ }
+ else {
+ color[0] = 0;
+ }
+ break;
+ case CMP_NODE_MASKTYPE_NOT:
+ if (inside) {
+ if (inputMask[0]>0.0f) {
+ color[0] = 0;
+ }
+ else {
+ color[0] = inputValue[0];
+ }
+ }
+ else {
+ color[0] = inputMask[0];
+ }
+ break;
+ }
+
+
+}
+
+void EllipseMaskOperation::deinitExecution()
+{
+ this->inputMask = NULL;
+ this->inputValue = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_EllipseMaskOperation.h b/source/blender/compositor/operations/COM_EllipseMaskOperation.h
new file mode 100644
index 00000000000..bff94941190
--- /dev/null
+++ b/source/blender/compositor/operations/COM_EllipseMaskOperation.h
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_EllipseMaskOperation_h
+#define _COM_EllipseMaskOperation_h
+#include "COM_NodeOperation.h"
+
+
+class EllipseMaskOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputMask;
+ SocketReader * inputValue;
+
+ float sine;
+ float cosine;
+ float aspectRatio;
+ int maskType;
+
+ NodeEllipseMask *data;
+public:
+ EllipseMaskOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeEllipseMask *data) {this->data = data;}
+
+ void setMaskType(int maskType) {this->maskType = maskType;}
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_FastGaussianBlurOperation.cpp b/source/blender/compositor/operations/COM_FastGaussianBlurOperation.cpp
new file mode 100644
index 00000000000..ad8f3b12387
--- /dev/null
+++ b/source/blender/compositor/operations/COM_FastGaussianBlurOperation.cpp
@@ -0,0 +1,205 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_FastGaussianBlurOperation.h"
+#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
+
+FastGaussianBlurOperation::FastGaussianBlurOperation(): BlurBaseOperation()
+{
+ this->iirgaus = false;
+}
+
+void FastGaussianBlurOperation::executePixel(float *color,int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ MemoryBuffer *newData = (MemoryBuffer*)data;
+
+ newData->read(color, x, y);
+}
+
+bool FastGaussianBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ rcti sizeInput;
+ sizeInput.xmin = 0;
+ sizeInput.ymin = 0;
+ sizeInput.xmax = 5;
+ sizeInput.ymax = 5;
+
+ NodeOperation * operation = this->getInputOperation(1);
+ if (operation->determineDependingAreaOfInterest(&sizeInput, readOperation, output)) {
+ return true;
+ }
+ else {
+ if (this->iirgaus) {
+ newInput.xmax = input->xmax + (sx);
+ newInput.xmin = input->xmin - (sx);
+ newInput.ymax = input->ymax + (sy);
+ newInput.ymin = input->ymin - (sy);
+ }
+ else {
+ newInput.xmin = 0;
+ newInput.ymin = 0;
+ newInput.xmax = this->getWidth();
+ newInput.ymax = this->getHeight();
+ }
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+}
+
+void *FastGaussianBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ MemoryBuffer *newBuf = (MemoryBuffer*)this->inputProgram->initializeTileData(rect, memoryBuffers);
+ MemoryBuffer *copy = newBuf->duplicate();
+ updateSize(memoryBuffers);
+
+ int c;
+ sx = data->sizex * this->size/2.0f;
+ sy = data->sizey * this->size/2.0f;
+ this->iirgaus = true;
+
+ if ((sx == sy) && (sx > 0.f)) {
+ for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
+ IIR_gauss(copy, sx, c, 3);
+ }
+ else {
+ if (sx > 0.f) {
+ for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
+ IIR_gauss(copy, sx, c, 1);
+ }
+ if (sy > 0.f) {
+ for (c=0; c<COM_NUMBER_OF_CHANNELS; ++c)
+ IIR_gauss(copy, sy, c, 2);
+ }
+ }
+ return copy;
+}
+
+void FastGaussianBlurOperation::deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data)
+{
+ MemoryBuffer *newData = (MemoryBuffer*)data;
+ delete newData;
+}
+
+void FastGaussianBlurOperation::IIR_gauss(MemoryBuffer *src, float sigma, int chan, int xy)
+{
+ double q, q2, sc, cf[4], tsM[9], tsu[3], tsv[3];
+ double *X, *Y, *W;
+ int i, x, y, sz;
+ float *buffer = src->getBuffer();
+
+ // <0.5 not valid, though can have a possibly useful sort of sharpening effect
+ if (sigma < 0.5f) return;
+
+ if ((xy < 1) || (xy > 3)) xy = 3;
+
+ // XXX The YVV macro defined below explicitly expects sources of at least 3x3 pixels,
+ // so just skiping blur along faulty direction if src's def is below that limit!
+ if (src->getWidth() < 3) xy &= ~(int) 1;
+ if (src->getHeight() < 3) xy &= ~(int) 2;
+ if (xy < 1) return;
+
+ // see "Recursive Gabor Filtering" by Young/VanVliet
+ // all factors here in double.prec. Required, because for single.prec it seems to blow up if sigma > ~200
+ if (sigma >= 3.556f)
+ q = 0.9804f*(sigma - 3.556f) + 2.5091f;
+ else // sigma >= 0.5
+ q = (0.0561f*sigma + 0.5784f)*sigma - 0.2568f;
+ q2 = q*q;
+ sc = (1.1668 + q)*(3.203729649 + (2.21566 + q)*q);
+ // no gabor filtering here, so no complex multiplies, just the regular coefs.
+ // all negated here, so as not to have to recalc Triggs/Sdika matrix
+ cf[1] = q*(5.788961737 + (6.76492 + 3.0*q)*q)/ sc;
+ cf[2] = -q2*(3.38246 + 3.0*q)/sc;
+ // 0 & 3 unchanged
+ cf[3] = q2*q/sc;
+ cf[0] = 1.0 - cf[1] - cf[2] - cf[3];
+
+ // Triggs/Sdika border corrections,
+ // it seems to work, not entirely sure if it is actually totally correct,
+ // Besides J.M.Geusebroek's anigauss.c (see http://www.science.uva.nl/~mark),
+ // found one other implementation by Cristoph Lampert,
+ // but neither seem to be quite the same, result seems to be ok so far anyway.
+ // Extra scale factor here to not have to do it in filter,
+ // though maybe this had something to with the precision errors
+ sc = cf[0]/((1.0 + cf[1] - cf[2] + cf[3])*(1.0 - cf[1] - cf[2] - cf[3])*(1.0 + cf[2] + (cf[1] - cf[3])*cf[3]));
+ tsM[0] = sc*(-cf[3]*cf[1] + 1.0 - cf[3]*cf[3] - cf[2]);
+ tsM[1] = sc*((cf[3] + cf[1])*(cf[2] + cf[3]*cf[1]));
+ tsM[2] = sc*(cf[3]*(cf[1] + cf[3]*cf[2]));
+ tsM[3] = sc*(cf[1] + cf[3]*cf[2]);
+ tsM[4] = sc*(-(cf[2] - 1.0)*(cf[2] + cf[3]*cf[1]));
+ tsM[5] = sc*(-(cf[3]*cf[1] + cf[3]*cf[3] + cf[2] - 1.0)*cf[3]);
+ tsM[6] = sc*(cf[3]*cf[1] + cf[2] + cf[1]*cf[1] - cf[2]*cf[2]);
+ tsM[7] = sc*(cf[1]*cf[2] + cf[3]*cf[2]*cf[2] - cf[1]*cf[3]*cf[3] - cf[3]*cf[3]*cf[3] - cf[3]*cf[2] + cf[3]);
+ tsM[8] = sc*(cf[3]*(cf[1] + cf[3]*cf[2]));
+
+#define YVV(L) \
+{ \
+W[0] = cf[0]*X[0] + cf[1]*X[0] + cf[2]*X[0] + cf[3]*X[0]; \
+W[1] = cf[0]*X[1] + cf[1]*W[0] + cf[2]*X[0] + cf[3]*X[0]; \
+W[2] = cf[0]*X[2] + cf[1]*W[1] + cf[2]*W[0] + cf[3]*X[0]; \
+for (i=3; i<L; i++) \
+W[i] = cf[0]*X[i] + cf[1]*W[i-1] + cf[2]*W[i-2] + cf[3]*W[i-3]; \
+tsu[0] = W[L-1] - X[L-1]; \
+tsu[1] = W[L-2] - X[L-1]; \
+tsu[2] = W[L-3] - X[L-1]; \
+tsv[0] = tsM[0]*tsu[0] + tsM[1]*tsu[1] + tsM[2]*tsu[2] + X[L-1]; \
+tsv[1] = tsM[3]*tsu[0] + tsM[4]*tsu[1] + tsM[5]*tsu[2] + X[L-1]; \
+tsv[2] = tsM[6]*tsu[0] + tsM[7]*tsu[1] + tsM[8]*tsu[2] + X[L-1]; \
+Y[L-1] = cf[0]*W[L-1] + cf[1]*tsv[0] + cf[2]*tsv[1] + cf[3]*tsv[2]; \
+Y[L-2] = cf[0]*W[L-2] + cf[1]*Y[L-1] + cf[2]*tsv[0] + cf[3]*tsv[1]; \
+Y[L-3] = cf[0]*W[L-3] + cf[1]*Y[L-2] + cf[2]*Y[L-1] + cf[3]*tsv[0]; \
+for (i=L-4; i>=0; i--) \
+Y[i] = cf[0]*W[i] + cf[1]*Y[i+1] + cf[2]*Y[i+2] + cf[3]*Y[i+3]; \
+}
+
+ // intermediate buffers
+ sz = MAX2(src->getWidth(), src->getHeight());
+ X = (double*)MEM_callocN(sz*sizeof(double), "IIR_gauss X buf");
+ Y = (double*)MEM_callocN(sz*sizeof(double), "IIR_gauss Y buf");
+ W = (double*)MEM_callocN(sz*sizeof(double), "IIR_gauss W buf");
+ if (xy & 1) { // H
+ for (y=0; y<src->getHeight(); ++y) {
+ const int yx = y*src->getWidth();
+ for (x=0; x<src->getWidth(); ++x)
+ X[x] = buffer[(x + yx)*COM_NUMBER_OF_CHANNELS + chan];
+ YVV(src->getWidth());
+ for (x=0; x<src->getWidth(); ++x)
+ buffer[(x + yx)*COM_NUMBER_OF_CHANNELS + chan] = Y[x];
+ }
+ }
+ if (xy & 2) { // V
+ for (x=0; x<src->getWidth(); ++x) {
+ for (y=0; y<src->getHeight(); ++y)
+ X[y] = buffer[(x + y*src->getWidth())*COM_NUMBER_OF_CHANNELS + chan];
+ YVV(src->getHeight());
+ for (y=0; y<src->getHeight(); ++y)
+ buffer[(x + y*src->getWidth())*COM_NUMBER_OF_CHANNELS + chan] = Y[y];
+ }
+ }
+
+ MEM_freeN(X);
+ MEM_freeN(W);
+ MEM_freeN(Y);
+#undef YVV
+
+}
diff --git a/source/blender/compositor/operations/COM_FastGaussianBlurOperation.h b/source/blender/compositor/operations/COM_FastGaussianBlurOperation.h
new file mode 100644
index 00000000000..cf36e7f6ebe
--- /dev/null
+++ b/source/blender/compositor/operations/COM_FastGaussianBlurOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_FastGaussianBlurOperation_h
+#define _COM_FastGaussianBlurOperation_h
+
+#include "COM_BlurBaseOperation.h"
+#include "DNA_node_types.h"
+
+class FastGaussianBlurOperation: public BlurBaseOperation {
+private:
+ float sx;
+ float sy;
+ bool iirgaus;
+public:
+ FastGaussianBlurOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ void IIR_gauss(MemoryBuffer *src, float sigma, int channel, int xy);
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ void deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data);
+
+};
+#endif
+
diff --git a/source/blender/compositor/operations/COM_FlipOperation.cpp b/source/blender/compositor/operations/COM_FlipOperation.cpp
new file mode 100644
index 00000000000..38018ffc3f7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_FlipOperation.cpp
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_FlipOperation.h"
+
+FlipOperation::FlipOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+ this->flipX = true;
+ this->flipY = false;
+}
+void FlipOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void FlipOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
+
+void FlipOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float nx = this->flipX?this->getWidth()-1-x:x;
+ float ny = this->flipY?this->getHeight()-1-y:y;
+
+ this->inputOperation->read(color, nx, ny, sampler, inputBuffers);
+}
+
+bool FlipOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ if (this->flipX) {
+ newInput.xmax = (this->getWidth()- 1 - input->xmin)+1;
+ newInput.xmin = (this->getWidth()- 1 - input->xmax)-1;
+ }
+ else {
+ newInput.xmin = input->xmin;
+ newInput.xmax = input->xmax;
+ }
+ if (this->flipY) {
+ newInput.ymax = (this->getHeight()- 1 - input->ymin)+1;
+ newInput.ymin = (this->getHeight()- 1 - input->ymax)-1;
+ }
+ else {
+ newInput.ymin = input->ymin;
+ newInput.ymax = input->ymax;
+ }
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_FlipOperation.h b/source/blender/compositor/operations/COM_FlipOperation.h
new file mode 100644
index 00000000000..9774cfd7bcd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_FlipOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_FlipOperation_h_
+#define _COM_FlipOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class FlipOperation: public NodeOperation {
+private:
+ SocketReader *inputOperation;
+ bool flipX;
+ bool flipY;
+public:
+ FlipOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+ void setFlipX(bool flipX) {this->flipX = flipX;}
+ void setFlipY(bool flipY) {this->flipY = flipY;}
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_FogGlowImageOperation.cpp b/source/blender/compositor/operations/COM_FogGlowImageOperation.cpp
new file mode 100644
index 00000000000..600bfde64d9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_FogGlowImageOperation.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_FogGlowImageOperation.h"
+#include "BLI_math.h"
+
+FogGlowImageOperation::FogGlowImageOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
+void FogGlowImageOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ const float cs_r = 1.f, cs_g = 1.f, cs_b = 1.f;
+
+ float u, v, w, d, r;
+
+ v = 2.f*(y / (float)512) - 1.f;
+ u = 2.f*(x / (float)512) - 1.f;
+ r = (u*u + v*v)*256;
+ d = -sqrtf(sqrtf(sqrtf(r)));
+ w = (0.5f + 0.5f*cos((double)u*M_PI))*(0.5f + 0.5f*cos((double)v*M_PI));
+ color[0] = expf(d*cs_r) * w;
+ color[1] = expf(d*cs_g) * w;
+ color[2] = expf(d*cs_b) * w;
+ color[3] = 1.0f;
+}
+
+void FogGlowImageOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ resolution[0] = 512;
+ resolution[1] = 512;
+}
diff --git a/source/blender/compositor/operations/COM_FogGlowImageOperation.h b/source/blender/compositor/operations/COM_FogGlowImageOperation.h
new file mode 100644
index 00000000000..d0fc107638e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_FogGlowImageOperation.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_FogGlowOperation_h
+#define _COM_FogGlowOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_lamp_types.h"
+
+class FogGlowImageOperation : public NodeOperation {
+public:
+ FogGlowImageOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GammaCorrectOperation.cpp b/source/blender/compositor/operations/COM_GammaCorrectOperation.cpp
new file mode 100644
index 00000000000..a4fb20402a4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GammaCorrectOperation.cpp
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GammaCorrectOperation.h"
+#include "BLI_math.h"
+
+GammaCorrectOperation::GammaCorrectOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+}
+void GammaCorrectOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void GammaCorrectOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ this->inputProgram->read(inputColor, x, y, sampler, inputBuffers);
+ if (inputColor[3] > 0.0f) {
+ inputColor[0] /= inputColor[3];
+ inputColor[1] /= inputColor[3];
+ inputColor[2] /= inputColor[3];
+ }
+
+ /* check for negative to avoid nan's */
+ color[0] = inputColor[0]>0.0f?inputColor[0]*inputColor[0] :0.0f;
+ color[1] = inputColor[1]>0.0f?inputColor[1]*inputColor[1] :0.0f;
+ color[2] = inputColor[2]>0.0f?inputColor[2]*inputColor[2] :0.0f;
+
+ inputColor[0] *= inputColor[3];
+ inputColor[1] *= inputColor[3];
+ inputColor[2] *= inputColor[3];
+
+ color[0] = inputColor[0];
+ color[1] = inputColor[1];
+ color[2] = inputColor[2];
+ color[3] = inputColor[3];
+}
+
+void GammaCorrectOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
+
+GammaUncorrectOperation::GammaUncorrectOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+}
+void GammaUncorrectOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void GammaUncorrectOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor[4];
+ this->inputProgram->read(inputColor, x, y, sampler, inputBuffers);
+
+ if (inputColor[3] > 0.0f) {
+ inputColor[0] /= inputColor[3];
+ inputColor[1] /= inputColor[3];
+ inputColor[2] /= inputColor[3];
+ }
+
+ color[0] = inputColor[0]>0.0f?sqrtf(inputColor[0]) :0.0f;
+ color[1] = inputColor[1]>0.0f?sqrtf(inputColor[1]) :0.0f;
+ color[2] = inputColor[2]>0.0f?sqrtf(inputColor[2]) :0.0f;
+
+ inputColor[0] *= inputColor[3];
+ inputColor[1] *= inputColor[3];
+ inputColor[2] *= inputColor[3];
+
+ color[0] = inputColor[0];
+ color[1] = inputColor[1];
+ color[2] = inputColor[2];
+ color[3] = inputColor[3];
+}
+
+void GammaUncorrectOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_GammaCorrectOperation.h b/source/blender/compositor/operations/COM_GammaCorrectOperation.h
new file mode 100644
index 00000000000..6132f04edba
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GammaCorrectOperation.h
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GammaCorrectOperation_h
+#define _COM_GammaCorrectOperation_h
+#include "COM_NodeOperation.h"
+
+
+class GammaCorrectOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+
+public:
+ GammaCorrectOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+
+class GammaUncorrectOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+
+public:
+ GammaUncorrectOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_GammaOperation.cpp b/source/blender/compositor/operations/COM_GammaOperation.cpp
new file mode 100644
index 00000000000..f0887d4adee
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GammaOperation.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GammaOperation.h"
+#include "BLI_math.h"
+
+GammaOperation::GammaOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+ this->inputGammaProgram = NULL;
+}
+void GammaOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+ this->inputGammaProgram = this->getInputSocketReader(1);
+}
+
+void GammaOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ float inputGamma[4];
+
+ this->inputProgram->read(inputValue, x, y, sampler, inputBuffers);
+ this->inputGammaProgram->read(inputGamma, x, y, sampler, inputBuffers);
+ const float gamma = inputGamma[0];
+ /* check for negative to avoid nan's */
+ color[0] = inputValue[0]>0.0f?pow(inputValue[0], gamma):inputValue[0];
+ color[1] = inputValue[1]>0.0f?pow(inputValue[1], gamma):inputValue[1];
+ color[2] = inputValue[2]>0.0f?pow(inputValue[2], gamma):inputValue[2];
+
+ color[3] = inputValue[3];
+}
+
+void GammaOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+ this->inputGammaProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_GammaOperation.h b/source/blender/compositor/operations/COM_GammaOperation.h
new file mode 100644
index 00000000000..2f3d8cdf9f7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GammaOperation.h
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GammaOperation_h
+#define _COM_GammaOperation_h
+#include "COM_NodeOperation.h"
+
+
+class GammaOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+ SocketReader *inputGammaProgram;
+
+public:
+ GammaOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp b/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
new file mode 100644
index 00000000000..af10791590b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
@@ -0,0 +1,182 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GaussianBokehBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+GaussianBokehBlurOperation::GaussianBokehBlurOperation(): BlurBaseOperation()
+{
+ this->gausstab = NULL;
+}
+
+void *GaussianBokehBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ updateGauss(memoryBuffers);
+ void *buffer = getInputOperation(0)->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void GaussianBokehBlurOperation::updateGauss(MemoryBuffer **memoryBuffers)
+{
+ if (this->gausstab == NULL) {
+ float radxf;
+ float radyf;
+ int n;
+ float *dgauss;
+ float *ddgauss;
+ float val;
+ int j, i;
+ const float width = this->getWidth();
+ const float height = this->getHeight();
+ updateSize(memoryBuffers);
+
+ radxf = size*(float)this->data->sizex;
+ if (radxf>width/2.0f)
+ radxf = width/2.0f;
+ else if (radxf<1.0f)
+ radxf = 1.0f;
+
+ /* vertical */
+ radyf = size*(float)this->data->sizey;
+ if (radyf>height/2.0f)
+ radyf = height/2.0f;
+ else if (radyf<1.0f)
+ radyf = 1.0f;
+
+ radx = ceil(radxf);
+ rady = ceil(radyf);
+
+ n = (2*radx+1)*(2*rady+1);
+
+ /* create a full filter image */
+ ddgauss = new float[n];
+ dgauss = ddgauss;
+ val = 0.0f;
+ for (j=-rady; j<=rady; j++) {
+ for (i=-radx; i<=radx; i++, dgauss++) {
+ float fj = (float)j / radyf;
+ float fi = (float)i / radxf;
+ float dist = sqrt(fj * fj + fi * fi);
+ *dgauss = RE_filter_value(this->data->filtertype, dist);
+
+ val+= *dgauss;
+ }
+ }
+ if (val!=0.0f) {
+ val = 1.0f/val;
+ for (j = n - 1; j>=0; j--)
+ ddgauss[j]*= val;
+ }
+ else ddgauss[4] = 1.0f;
+
+ gausstab = ddgauss;
+ }
+}
+
+void GaussianBokehBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float tempColor[4];
+ tempColor[0] = 0;
+ tempColor[1] = 0;
+ tempColor[2] = 0;
+ tempColor[3] = 0;
+ float overallmultiplyer = 0;
+ MemoryBuffer *inputBuffer = (MemoryBuffer*)data;
+ float *buffer = inputBuffer->getBuffer();
+ int bufferwidth = inputBuffer->getWidth();
+ int bufferstartx = inputBuffer->getRect()->xmin;
+ int bufferstarty = inputBuffer->getRect()->ymin;
+
+ int miny = y - this->rady;
+ int maxy = y + this->rady;
+ int minx = x - this->radx;
+ int maxx = x + this->radx;
+ miny = max(miny, inputBuffer->getRect()->ymin);
+ minx = max(minx, inputBuffer->getRect()->xmin);
+ maxy = min(maxy, inputBuffer->getRect()->ymax);
+ maxx = min(maxx, inputBuffer->getRect()->xmax);
+
+ int index = 0;
+ int step = QualityStepHelper::getStep();
+ int offsetadd = QualityStepHelper::getOffsetAdd();
+ for (int ny = miny ; ny < maxy ; ny +=step) {
+ int bufferindex = ((minx - bufferstartx)*4)+((ny-bufferstarty)*4*bufferwidth);
+ for (int nx = minx ; nx < maxx ; nx +=step) {
+ float multiplyer = gausstab[index];
+ tempColor[0] += multiplyer * buffer[bufferindex];
+ tempColor[1] += multiplyer * buffer[bufferindex+1];
+ tempColor[2] += multiplyer * buffer[bufferindex+2];
+ tempColor[3] += multiplyer * buffer[bufferindex+3];
+ overallmultiplyer += multiplyer;
+ index += step;
+ bufferindex +=offsetadd;
+ }
+ }
+ float divider = 1.0/overallmultiplyer;
+ color[0] = tempColor[0]*divider;
+ color[1] = tempColor[1]*divider;
+ color[2] = tempColor[2]*divider;
+ color[3] = tempColor[3]*divider;
+}
+
+void GaussianBokehBlurOperation::deinitExecution()
+{
+ BlurBaseOperation::deinitExecution();
+ delete this->gausstab;
+ this->gausstab = NULL;
+}
+
+bool GaussianBokehBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ rcti sizeInput;
+ sizeInput.xmin = 0;
+ sizeInput.ymin = 0;
+ sizeInput.xmax = 5;
+ sizeInput.ymax = 5;
+ NodeOperation * operation = this->getInputOperation(1);
+
+ if (operation->determineDependingAreaOfInterest(&sizeInput, readOperation, output)) {
+ return true;
+ }
+ else {
+ if (this->gausstab) {
+ int addx = radx;
+ int addy = rady;
+ newInput.xmax = input->xmax + addx;
+ newInput.xmin = input->xmin - addx;
+ newInput.ymax = input->ymax + addy;
+ newInput.ymin = input->ymin - addy;
+ }
+ else {
+ newInput.xmin = 0;
+ newInput.ymin = 0;
+ newInput.xmax = this->getWidth();
+ newInput.ymax = this->getHeight();
+ }
+ return BlurBaseOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+}
diff --git a/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.h b/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.h
new file mode 100644
index 00000000000..a7a0ee74364
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.h
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehGaussianBokehBlurOperation_h
+#define _COM_GaussianBokehBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_BlurBaseOperation.h"
+#include "COM_QualityStepHelper.h"
+
+class GaussianBokehBlurOperation : public BlurBaseOperation {
+private:
+ float *gausstab;
+ int radx, rady;
+ void updateGauss(MemoryBuffer **memoryBuffers);
+
+public:
+ GaussianBokehBlurOperation();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp b/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
new file mode 100644
index 00000000000..276efd90740
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GaussianXBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+GaussianXBlurOperation::GaussianXBlurOperation(): BlurBaseOperation()
+{
+ this->gausstab = NULL;
+ this->rad = 0;
+
+}
+
+void *GaussianXBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ updateGauss(memoryBuffers);
+ void *buffer = getInputOperation(0)->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void GaussianXBlurOperation::updateGauss(MemoryBuffer **memoryBuffers)
+{
+ if (this->gausstab == NULL) {
+ updateSize(memoryBuffers);
+ float rad = size*this->data->sizex;
+ if (rad<1)
+ rad = 1;
+
+ this->rad = rad;
+ this->gausstab = BlurBaseOperation::make_gausstab(rad);
+ }
+}
+
+void GaussianXBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float tempColor[4];
+ tempColor[0] = 0;
+ tempColor[1] = 0;
+ tempColor[2] = 0;
+ tempColor[3] = 0;
+ float overallmultiplyer = 0;
+ MemoryBuffer *inputBuffer = (MemoryBuffer*)data;
+ float *buffer = inputBuffer->getBuffer();
+ int bufferwidth = inputBuffer->getWidth();
+ int bufferstartx = inputBuffer->getRect()->xmin;
+ int bufferstarty = inputBuffer->getRect()->ymin;
+
+ int miny = y;
+ int maxy = y;
+ int minx = x - this->rad;
+ int maxx = x + this->rad;
+ miny = max(miny, inputBuffer->getRect()->ymin);
+ minx = max(minx, inputBuffer->getRect()->xmin);
+ maxy = min(maxy, inputBuffer->getRect()->ymax);
+ maxx = min(maxx, inputBuffer->getRect()->xmax);
+
+ int index = 0;
+ int step = getStep();
+ int offsetadd = getOffsetAdd();
+ int bufferindex = ((minx - bufferstartx)*4)+((miny-bufferstarty)*4*bufferwidth);
+ for (int nx = minx ; nx < maxx ; nx +=step) {
+ float multiplyer = gausstab[index++];
+ tempColor[0] += multiplyer * buffer[bufferindex];
+ tempColor[1] += multiplyer * buffer[bufferindex+1];
+ tempColor[2] += multiplyer * buffer[bufferindex+2];
+ tempColor[3] += multiplyer * buffer[bufferindex+3];
+ overallmultiplyer += multiplyer;
+ bufferindex +=offsetadd;
+ }
+ float divider = 1.0/overallmultiplyer;
+ color[0] = tempColor[0]*divider;
+ color[1] = tempColor[1]*divider;
+ color[2] = tempColor[2]*divider;
+ color[3] = tempColor[3]*divider;
+}
+
+void GaussianXBlurOperation::deinitExecution()
+{
+ BlurBaseOperation::deinitExecution();
+ delete this->gausstab;
+ this->gausstab = NULL;
+}
+
+bool GaussianXBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ rcti sizeInput;
+ sizeInput.xmin = 0;
+ sizeInput.ymin = 0;
+ sizeInput.xmax = 5;
+ sizeInput.ymax = 5;
+
+ NodeOperation * operation = this->getInputOperation(1);
+ if (operation->determineDependingAreaOfInterest(&sizeInput, readOperation, output)) {
+ return true;
+ }
+ else {
+ if (this->gausstab == NULL) {
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+ }
+ else {
+ newInput.xmax = input->xmax + rad;
+ newInput.xmin = input->xmin - rad;
+ newInput.ymax = input->ymax;
+ newInput.ymin = input->ymin;
+ }
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+}
diff --git a/source/blender/compositor/operations/COM_GaussianXBlurOperation.h b/source/blender/compositor/operations/COM_GaussianXBlurOperation.h
new file mode 100644
index 00000000000..704d063d28f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GaussianXBlurOperation.h
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GaussianXBlurOperation_h
+#define _COM_GaussianXBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_BlurBaseOperation.h"
+
+class GaussianXBlurOperation : public BlurBaseOperation {
+private:
+ float *gausstab;
+ int rad;
+ void updateGauss(MemoryBuffer **memoryBuffers);
+public:
+ GaussianXBlurOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp b/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp
new file mode 100644
index 00000000000..faef152dc31
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp
@@ -0,0 +1,132 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GaussianYBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+GaussianYBlurOperation::GaussianYBlurOperation(): BlurBaseOperation()
+{
+ this->gausstab = NULL;
+ this->rad = 0;
+}
+
+void *GaussianYBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ updateGauss(memoryBuffers);
+ void *buffer = getInputOperation(0)->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void GaussianYBlurOperation::updateGauss(MemoryBuffer **memoryBuffers)
+{
+ if (this->gausstab == NULL) {
+ updateSize(memoryBuffers);
+ float rad = size*this->data->sizey;
+ if (rad<1)
+ rad = 1;
+
+ this->rad = rad;
+ this->gausstab = BlurBaseOperation::make_gausstab(rad);
+ }
+}
+
+void GaussianYBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float tempColor[4];
+ tempColor[0] = 0;
+ tempColor[1] = 0;
+ tempColor[2] = 0;
+ tempColor[3] = 0;
+ float overallmultiplyer = 0;
+ MemoryBuffer *inputBuffer = (MemoryBuffer*)data;
+ float *buffer = inputBuffer->getBuffer();
+ int bufferwidth = inputBuffer->getWidth();
+ int bufferstartx = inputBuffer->getRect()->xmin;
+ int bufferstarty = inputBuffer->getRect()->ymin;
+
+ int miny = y - this->rad;
+ int maxy = y + this->rad;
+ int minx = x;
+ int maxx = x;
+ miny = max(miny, inputBuffer->getRect()->ymin);
+ minx = max(minx, inputBuffer->getRect()->xmin);
+ maxy = min(maxy, inputBuffer->getRect()->ymax);
+ maxx = min(maxx, inputBuffer->getRect()->xmax);
+
+ int step = getStep();
+ int index = 0;
+ for (int ny = miny ; ny < maxy ; ny +=step) {
+ int bufferindex = ((minx - bufferstartx)*4)+((ny-bufferstarty)*4*bufferwidth);
+ float multiplyer = gausstab[index++];
+ tempColor[0] += multiplyer * buffer[bufferindex];
+ tempColor[1] += multiplyer * buffer[bufferindex+1];
+ tempColor[2] += multiplyer * buffer[bufferindex+2];
+ tempColor[3] += multiplyer * buffer[bufferindex+3];
+ overallmultiplyer += multiplyer;
+ }
+ float divider = 1.0/overallmultiplyer;
+ color[0] = tempColor[0]*divider;
+ color[1] = tempColor[1]*divider;
+ color[2] = tempColor[2]*divider;
+ color[3] = tempColor[3]*divider;
+}
+
+void GaussianYBlurOperation::deinitExecution()
+{
+ BlurBaseOperation::deinitExecution();
+ delete this->gausstab;
+ this->gausstab = NULL;
+}
+
+bool GaussianYBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ rcti sizeInput;
+ sizeInput.xmin = 0;
+ sizeInput.ymin = 0;
+ sizeInput.xmax = 5;
+ sizeInput.ymax = 5;
+
+ NodeOperation * operation = this->getInputOperation(1);
+ if (operation->determineDependingAreaOfInterest(&sizeInput, readOperation, output)) {
+ return true;
+ }
+ else {
+ if (this->gausstab == NULL) {
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+ }
+ else {
+ newInput.xmax = input->xmax;
+ newInput.xmin = input->xmin;
+ newInput.ymax = input->ymax + rad;
+ newInput.ymin = input->ymin - rad;
+ }
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+}
diff --git a/source/blender/compositor/operations/COM_GaussianYBlurOperation.h b/source/blender/compositor/operations/COM_GaussianYBlurOperation.h
new file mode 100644
index 00000000000..c9baf27b1d6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GaussianYBlurOperation.h
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GaussianYBlurOperation_h
+#define _COM_GaussianYBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_BlurBaseOperation.h"
+
+class GaussianYBlurOperation : public BlurBaseOperation {
+private:
+ float *gausstab;
+ int rad;
+ void updateGauss(MemoryBuffer **memoryBuffers);
+public:
+ GaussianYBlurOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GlareBaseOperation.cpp b/source/blender/compositor/operations/COM_GlareBaseOperation.cpp
new file mode 100644
index 00000000000..6715d50bb95
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareBaseOperation.cpp
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GlareBaseOperation.h"
+#include "BLI_math.h"
+
+GlareBaseOperation::GlareBaseOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->settings = NULL;
+ this->cachedInstance = NULL;
+ setComplex(true);
+}
+void GlareBaseOperation::initExecution()
+{
+ initMutex();
+ this->inputProgram = getInputSocketReader(0);
+ this->cachedInstance = NULL;
+}
+
+void GlareBaseOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)\
+{
+ float *buffer = (float*) data;
+ int index = (y*this->getWidth() + x) * COM_NUMBER_OF_CHANNELS;
+ color[0] = buffer[index];
+ color[1] = buffer[index+1];
+ color[2] = buffer[index+2];
+ color[3] = buffer[index+3];
+}
+
+void GlareBaseOperation::deinitExecution()
+{
+ deinitMutex();
+ this->inputProgram = NULL;
+ if (this->cachedInstance) {
+ delete cachedInstance;
+ this->cachedInstance = NULL;
+ }
+}
+void *GlareBaseOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ BLI_mutex_lock(getMutex());
+ if (this->cachedInstance == NULL) {
+ MemoryBuffer *tile = (MemoryBuffer*)inputProgram->initializeTileData(rect, memoryBuffers);
+ float *data = new float[this->getWidth()*this->getHeight()*COM_NUMBER_OF_CHANNELS];
+ this->generateGlare(data, tile, this->settings);
+ this->cachedInstance = data;
+ }
+ BLI_mutex_unlock(getMutex());
+ return this->cachedInstance;
+}
+
+bool GlareBaseOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_GlareBaseOperation.h b/source/blender/compositor/operations/COM_GlareBaseOperation.h
new file mode 100644
index 00000000000..e06244d3cdd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareBaseOperation.h
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GlareBaseOperation_h
+#define _COM_GlareBaseOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+class GlareBaseOperation : public NodeOperation {
+private:
+ /**
+ * @brief Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+
+ /**
+ * @brief settings of the glare node.
+ */
+ NodeGlare * settings;
+
+ float *cachedInstance;
+
+public:
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+
+ void setGlareSettings(NodeGlare * settings) {this->settings = settings;}
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+protected:
+ GlareBaseOperation();
+
+ virtual void generateGlare(float *data, MemoryBuffer *inputTile, NodeGlare *settings) = 0;
+
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp b/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp
new file mode 100644
index 00000000000..602e18521ee
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GlareSimpleStarOperation.h"
+
+void GlareSimpleStarOperation::generateGlare(float *data, MemoryBuffer *inputTile, NodeGlare *settings)
+{
+ int i, x, y, ym, yp, xm, xp;
+ float c[4] = {0,0,0,0}, tc[4] = {0,0,0,0};
+ const float f1 = 1.f - settings->fade, f2 = (1.f - f1)*0.5f;
+
+
+ MemoryBuffer *tbuf1 = inputTile->duplicate();
+ MemoryBuffer *tbuf2 = inputTile->duplicate();
+
+ for (i=0; i<settings->iter; i++) {
+// // (x || x-1, y-1) to (x || x+1, y+1)
+// // F
+ for (y=0; y<this->getHeight(); y++) {
+ ym = y - i;
+ yp = y + i;
+ for (x=0; x<this->getWidth(); x++) {
+ xm = x - i;
+ xp = x + i;
+ tbuf1->read(c, x, y);
+ c[0]*=f1; c[1]*=f1 ; c[2] *=f1;
+ tbuf1->read(tc, (settings->angle ? xm : x), ym);
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ tbuf1->read(tc, (settings->angle ? xp : x), yp);
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ c[3] = 1.0f;
+ tbuf1->writePixel(x, y, c);
+
+ tbuf2->read(c, x, y);
+ c[0]*=f1; c[1]*=f1 ; c[2] *=f1;
+ tbuf2->read(tc, xm, (settings->angle ? yp : y));
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ tbuf2->read(tc, xp, (settings->angle ? ym : y));
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ c[3] = 1.0f;
+ tbuf2->writePixel(x, y, c);
+
+ }
+ }
+// // B
+ for (y=tbuf1->getHeight()-1; y>=0; y--) {
+ ym = y - i;
+ yp = y + i;
+ for (x=tbuf1->getWidth()-1; x>=0; x--) {
+ xm = x - i;
+ xp = x + i;
+ tbuf1->read(c, x, y);
+ c[0]*=f1; c[1]*=f1 ; c[2] *=f1;
+ tbuf1->read(tc, (settings->angle ? xm : x), ym);
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ tbuf1->read(tc, (settings->angle ? xp : x), yp);
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ c[3] = 1.0f;
+ tbuf1->writePixel(x, y, c);
+
+ tbuf2->read(c, x, y);
+ c[0]*=f1; c[1]*=f1 ; c[2] *=f1;
+ tbuf2->read(tc, xm, (settings->angle ? yp : y));
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ tbuf2->read(tc, xp, (settings->angle ? ym : y));
+ c[0]+=tc[0]*f2;
+ c[1]+=tc[1]*f2;
+ c[2]+=tc[2]*f2;
+ c[3] = 1.0f;
+ tbuf2->writePixel(x, y, c);
+ }
+ }
+ }
+
+ for (i = 0 ; i < this->getWidth()*this->getHeight()*4 ; i++) {
+ data[i] = tbuf1->getBuffer()[i] + tbuf2->getBuffer()[i];
+ }
+
+ delete tbuf1;
+ delete tbuf2;
+}
diff --git a/source/blender/compositor/operations/COM_GlareSimpleStarOperation.h b/source/blender/compositor/operations/COM_GlareSimpleStarOperation.h
new file mode 100644
index 00000000000..22040da9bc5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareSimpleStarOperation.h
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GlareSimpleStarOperation_h
+#define _COM_GlareSimpleStarOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+#include "COM_GlareBaseOperation.h"
+
+class GlareSimpleStarOperation : public GlareBaseOperation {
+public:
+ GlareSimpleStarOperation() : GlareBaseOperation() {}
+protected:
+ void generateGlare(float *data, MemoryBuffer *inputTile, NodeGlare *settings);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp b/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp
new file mode 100644
index 00000000000..42b6a2b5e50
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GlareStreaksOperation.h"
+#include "BLI_math.h"
+
+void GlareStreaksOperation::generateGlare(float *data, MemoryBuffer *inputTile, NodeGlare *settings)
+{
+ int x, y, n;
+ unsigned int nump=0;
+ float c1[4], c2[4], c3[4], c4[4];
+ float a, ang = DEG2RADF(360.0f)/(float)settings->angle;
+
+ int size = inputTile->getWidth()*inputTile->getHeight();
+ int size4 = size*4;
+
+
+ MemoryBuffer *tsrc = inputTile->duplicate();
+ MemoryBuffer *tdst = new MemoryBuffer(NULL, inputTile->getRect());
+ tdst->clear();
+ memset(data, 0, size4*sizeof(float));
+
+ for (a=0.f; a<DEG2RADF(360.0f); a+=ang) {
+ const float an = a + settings->angle_ofs;
+ const float vx = cos((double)an), vy = sin((double)an);
+ for (n=0; n<settings->iter; ++n) {
+ const float p4 = pow(4.0, (double)n);
+ const float vxp = vx*p4, vyp = vy*p4;
+ const float wt = pow((double)settings->fade, (double)p4);
+ const float cmo = 1.f - (float)pow((double)settings->colmod, (double)n+1); // colormodulation amount relative to current pass
+ float *tdstcol = tdst->getBuffer();
+ for (y=0; y<tsrc->getHeight(); ++y) {
+ for (x=0; x<tsrc->getWidth(); ++x, tdstcol+=4) {
+ // first pass no offset, always same for every pass, exact copy,
+ // otherwise results in uneven brightness, only need once
+ if (n==0) tsrc->read(c1, x, y); else c1[0]=c1[1]=c1[2]=0;
+ tsrc->readCubic(c2, x + vxp, y + vyp);
+ tsrc->readCubic(c3, x + vxp*2.f, y + vyp*2.f);
+ tsrc->readCubic(c4, x + vxp*3.f, y + vyp*3.f);
+ // modulate color to look vaguely similar to a color spectrum
+ c2[1] *= cmo;
+ c2[2] *= cmo;
+
+ c3[0] *= cmo;
+ c3[1] *= cmo;
+
+ c4[0] *= cmo;
+ c4[2] *= cmo;
+
+ tdstcol[0] = 0.5f*(tdstcol[0] + c1[0] + wt*(c2[0] + wt*(c3[0] + wt*c4[0])));
+ tdstcol[1] = 0.5f*(tdstcol[1] + c1[1] + wt*(c2[1] + wt*(c3[1] + wt*c4[1])));
+ tdstcol[2] = 0.5f*(tdstcol[2] + c1[2] + wt*(c2[2] + wt*(c3[2] + wt*c4[2])));
+ tdstcol[3] = 1.0f;
+ }
+ }
+ memcpy(tsrc->getBuffer(), tdst->getBuffer(), sizeof(float)*size4);
+ }
+
+// addImage(sbuf, tsrc, 1.f/(float)(6 - ndg->iter)); // add result to data @todo
+ float *sourcebuffer = tsrc->getBuffer();
+ float factor = 1.f/(float)(6 - settings->iter);
+ for (int i = 0 ; i < size4; i ++) {
+ data[i] += sourcebuffer[i] * factor;
+ }
+ for (int i = 0 ; i < size; i ++) {
+ data[i*4+3] = 1.0f;
+ }
+
+ tdst->clear();
+ memcpy(tsrc->getBuffer(), inputTile->getBuffer(), sizeof(float)*size4);
+ nump++;
+ }
+
+ delete tsrc;
+ delete tdst;
+}
diff --git a/source/blender/compositor/operations/COM_GlareStreaksOperation.h b/source/blender/compositor/operations/COM_GlareStreaksOperation.h
new file mode 100644
index 00000000000..07155a4713a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareStreaksOperation.h
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GlareStreaksOperation_h
+#define _COM_GlareStreaksOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+#include "COM_GlareBaseOperation.h"
+
+class GlareStreaksOperation : public GlareBaseOperation {
+public:
+ GlareStreaksOperation() : GlareBaseOperation() {}
+protected:
+ void generateGlare(float *data, MemoryBuffer *inputTile, NodeGlare *settings);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp b/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp
new file mode 100644
index 00000000000..e8def72b7da
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_GlareThresholdOperation.h"
+#include "BLI_math.h"
+
+GlareThresholdOperation::GlareThresholdOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+}
+void GlareThresholdOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void GlareThresholdOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ this->inputProgram->read(color, x, y, sampler, inputBuffers);
+ if ((0.212671f*color[0] + 0.71516f*color[1] + 0.072169f*color[2]) >= threshold) {
+ color[0] -= threshold, color[1] -= threshold, color[2] -= threshold;
+ color[0] = MAX2(color[0], 0.f);
+ color[1] = MAX2(color[1], 0.f);
+ color[2] = MAX2(color[2], 0.f);
+ }
+ else color[0] = color[1] = color[2] = 0.f;
+}
+
+void GlareThresholdOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_GlareThresholdOperation.h b/source/blender/compositor/operations/COM_GlareThresholdOperation.h
new file mode 100644
index 00000000000..3dfa2f44339
--- /dev/null
+++ b/source/blender/compositor/operations/COM_GlareThresholdOperation.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_GlareScaleOperation_h
+#define _COM_GlareScaleOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_lamp_types.h"
+
+class GlareThresholdOperation : public NodeOperation {
+private:
+ /**
+ * @brief Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+
+ float threshold;
+
+public:
+ GlareThresholdOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setThreshold(float threshold) {this->threshold = threshold;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp b/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp
new file mode 100644
index 00000000000..2970c396493
--- /dev/null
+++ b/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_HueSaturationValueCorrectOperation.h"
+
+#include "BLI_math.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ #include "BKE_colortools.h"
+#ifdef __cplusplus
+}
+#endif
+
+HueSaturationValueCorrectOperation::HueSaturationValueCorrectOperation(): CurveBaseOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputProgram = NULL;
+}
+void HueSaturationValueCorrectOperation::initExecution()
+{
+ CurveBaseOperation::initExecution();
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void HueSaturationValueCorrectOperation::executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float hsv[4], f;
+
+ this->inputProgram->read(hsv, x, y, sampler, inputBuffers);
+
+ /* adjust hue, scaling returned default 0.5 up to 1 */
+ f = curvemapping_evaluateF(this->curveMapping, 0, hsv[0]);
+ hsv[0] += f-0.5f;
+
+ /* adjust saturation, scaling returned default 0.5 up to 1 */
+ f = curvemapping_evaluateF(this->curveMapping, 1, hsv[0]);
+ hsv[1] *= (f * 2.f);
+
+ /* adjust value, scaling returned default 0.5 up to 1 */
+ f = curvemapping_evaluateF(this->curveMapping, 2, hsv[0]);
+ hsv[2] *= (f * 2.f);
+
+ hsv[0] = hsv[0] - floor(hsv[0]); /* mod 1.0 */
+ CLAMP(hsv[1], 0.f, 1.f);
+
+ output[0] = hsv[0];
+ output[1] = hsv[1];
+ output[2] = hsv[2];
+ output[3] = hsv[3];
+}
+
+void HueSaturationValueCorrectOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.h b/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.h
new file mode 100644
index 00000000000..860bb71a0f1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.h
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_HueSaturationValueCorrectOperation_h
+#define _COM_HueSaturationValueCorrectOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_CurveBaseOperation.h"
+
+class HueSaturationValueCorrectOperation : public CurveBaseOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+public:
+ HueSaturationValueCorrectOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *Vector, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_IDMaskOperation.cpp b/source/blender/compositor/operations/COM_IDMaskOperation.cpp
new file mode 100644
index 00000000000..834ca4fc5ed
--- /dev/null
+++ b/source/blender/compositor/operations/COM_IDMaskOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_IDMaskOperation.h"
+
+IDMaskOperation::IDMaskOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputProgram = NULL;
+}
+void IDMaskOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void IDMaskOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+
+ this->inputProgram->read(inputValue, x, y, sampler, inputBuffers);
+ const float a = (inputValue[0] == this->objectIndex)?1.0f:0.0f;
+ color[0] = a;
+}
+
+void IDMaskOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_IDMaskOperation.h b/source/blender/compositor/operations/COM_IDMaskOperation.h
new file mode 100644
index 00000000000..9f897c53d18
--- /dev/null
+++ b/source/blender/compositor/operations/COM_IDMaskOperation.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_IDMaskOperation_h
+#define _COM_IDMaskOperation_h
+#include "COM_NodeOperation.h"
+
+
+class IDMaskOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputProgram;
+
+ float objectIndex;
+public:
+ IDMaskOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setObjectIndex(float objectIndex) {this->objectIndex = objectIndex;}
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ImageOperation.cpp b/source/blender/compositor/operations/COM_ImageOperation.cpp
new file mode 100644
index 00000000000..be3d9e80337
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ImageOperation.cpp
@@ -0,0 +1,163 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ImageOperation.h"
+
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "DNA_image_types.h"
+#include "BKE_image.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+ #include "RE_shader_ext.h"
+ #include "RE_render_ext.h"
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+BaseImageOperation::BaseImageOperation(): NodeOperation()
+{
+ this->image = NULL;
+ this->buffer = NULL;
+ this->imageBuffer = NULL;
+ this->imageUser = NULL;
+ this->imagewidth = 0;
+ this->imageheight = 0;
+ this->framenumber = 0;
+ this->depthBuffer = NULL;
+ this->numberOfChannels = 0;
+}
+ImageOperation::ImageOperation(): BaseImageOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
+ImageAlphaOperation::ImageAlphaOperation(): BaseImageOperation()
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
+ImageDepthOperation::ImageDepthOperation(): BaseImageOperation()
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
+
+ImBuf *BaseImageOperation::getImBuf()
+{
+ ImBuf *ibuf;
+
+ ibuf = BKE_image_get_ibuf(this->image, this->imageUser);
+ if (ibuf==NULL || (ibuf->rect==NULL && ibuf->rect_float==NULL)) {
+ return NULL;
+ }
+
+ if (ibuf->rect_float == NULL) {
+ IMB_float_from_rect(ibuf);
+ }
+ return ibuf;
+}
+
+
+void BaseImageOperation::initExecution()
+{
+ ImBuf *stackbuf = getImBuf();
+ this->buffer = stackbuf;
+ if (stackbuf) {
+ this->imageBuffer = stackbuf->rect_float;
+ this->depthBuffer = stackbuf->zbuf_float;
+ this->imagewidth = stackbuf->x;
+ this->imageheight = stackbuf->y;
+ this->numberOfChannels = stackbuf->channels;
+ }
+}
+
+void BaseImageOperation::deinitExecution()
+{
+ this->imageBuffer = NULL;
+}
+
+void BaseImageOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ ImBuf *stackbuf = getImBuf();
+ if (stackbuf) {
+ resolution[0] = stackbuf->x;
+ resolution[1] = stackbuf->y;
+ }
+}
+
+void ImageOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])\
+{
+ if (this->imageBuffer == NULL || x < 0 || y < 0 || x >= this->getWidth() || y >= this->getHeight() ) {
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 0.0f;
+ }
+ else {
+ switch (sampler) {
+ case COM_PS_NEAREST:
+ neareast_interpolation_color(this->buffer, NULL, color, x, y);
+ break;
+ case COM_PS_BILINEAR:
+ bilinear_interpolation_color(this->buffer, NULL, color, x, y);
+ break;
+ case COM_PS_BICUBIC:
+ bicubic_interpolation_color(this->buffer, NULL, color, x, y);
+ break;
+ }
+ }
+}
+
+void ImageAlphaOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float tempcolor[4];
+
+ if (this->imageBuffer == NULL || x < 0 || y < 0 || x >= this->getWidth() || y >= this->getHeight() ) {
+ color[0] = 0.0f;
+ }
+ else {
+ tempcolor[3] = 1.0f;
+ switch (sampler) {
+ case COM_PS_NEAREST:
+ neareast_interpolation_color(this->buffer, NULL, tempcolor, x, y);
+ break;
+ case COM_PS_BILINEAR:
+ bilinear_interpolation_color(this->buffer, NULL, tempcolor, x, y);
+ break;
+ case COM_PS_BICUBIC:
+ bicubic_interpolation_color(this->buffer, NULL, tempcolor, x, y);
+ break;
+ }
+ color[0] = tempcolor[3];
+ }
+}
+
+void ImageDepthOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ if (this->depthBuffer == NULL || x < 0 || y < 0 || x >= this->getWidth() || y >= this->getHeight() ) {
+ color[0] = 0.0f;
+ }
+ else {
+ int offset = y * width + x;
+ color[0] = this->depthBuffer[offset];
+ }
+}
diff --git a/source/blender/compositor/operations/COM_ImageOperation.h b/source/blender/compositor/operations/COM_ImageOperation.h
new file mode 100644
index 00000000000..0bd112304a8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ImageOperation.h
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+
+#ifndef _COM_ImageOperation_h
+#define _COM_ImageOperation_h
+
+#include "COM_NodeOperation.h"
+#include "DNA_scene_types.h"
+#include "BLI_listbase.h"
+#include "BKE_image.h"
+extern "C" {
+ #include "RE_pipeline.h"
+ #include "RE_shader_ext.h"
+ #include "RE_render_ext.h"
+ #include "MEM_guardedalloc.h"
+}
+
+/**
+ * @brief Base class for all image operations
+ */
+class BaseImageOperation : public NodeOperation {
+protected:
+ ImBuf *buffer;
+ Image *image;
+ ImageUser *imageUser;
+ float *imageBuffer;
+ float *depthBuffer;
+ int imageheight;
+ int imagewidth;
+ int framenumber;
+ int numberOfChannels;
+
+ BaseImageOperation();
+ /**
+ * Determine the output resolution. The resolution is retrieved from the Renderer
+ */
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ virtual ImBuf *getImBuf();
+
+public:
+
+ void initExecution();
+ void deinitExecution();
+ void setImage(Image *image) {this->image = image;}
+ void setImageUser(ImageUser *imageuser) {this->imageUser = imageuser;}
+
+ void setFramenumber(int framenumber) {this->framenumber = framenumber;}
+};
+class ImageOperation: public BaseImageOperation {
+public:
+ /**
+ * Constructor
+ */
+ ImageOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class ImageAlphaOperation: public BaseImageOperation {
+public:
+ /**
+ * Constructor
+ */
+ ImageAlphaOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class ImageDepthOperation: public BaseImageOperation {
+public:
+ /**
+ * Constructor
+ */
+ ImageDepthOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_InvertOperation.cpp b/source/blender/compositor/operations/COM_InvertOperation.cpp
new file mode 100644
index 00000000000..982fe1a5450
--- /dev/null
+++ b/source/blender/compositor/operations/COM_InvertOperation.cpp
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_InvertOperation.h"
+
+InvertOperation::InvertOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputValueProgram = NULL;
+ this->inputColorProgram = NULL;
+ this->color = true;
+ this->alpha = false;
+ setResolutionInputSocketIndex(1);
+}
+void InvertOperation::initExecution()
+{
+ this->inputValueProgram = this->getInputSocketReader(0);
+ this->inputColorProgram = this->getInputSocketReader(1);
+}
+
+void InvertOperation::executePixel(float *out, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue[4];
+ float inputColor[4];
+ this->inputValueProgram->read(inputValue, x, y, sampler, inputBuffers);
+ this->inputColorProgram->read(inputColor, x, y, sampler, inputBuffers);
+
+ const float value = inputValue[0];
+ const float invertedValue = 1.0f - value;
+
+ if (color) {
+ out[0] = (1.0f - inputColor[0])*value + inputColor[0]*invertedValue;
+ out[1] = (1.0f - inputColor[1])*value + inputColor[1]*invertedValue;
+ out[2] = (1.0f - inputColor[2])*value + inputColor[2]*invertedValue;
+ }
+ else {
+ out[0] = inputColor[0];
+ out[1] = inputColor[1];
+ out[2] = inputColor[2];
+ }
+
+ if (alpha)
+ out[3] = (1.0f - inputColor[3])*value + inputColor[3]*invertedValue;
+ else
+ out[3] = inputColor[3];
+
+}
+
+void InvertOperation::deinitExecution()
+{
+ this->inputValueProgram = NULL;
+ this->inputColorProgram = NULL;
+}
+
diff --git a/source/blender/compositor/operations/COM_InvertOperation.h b/source/blender/compositor/operations/COM_InvertOperation.h
new file mode 100644
index 00000000000..27a995238c7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_InvertOperation.h
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_InvertOperation_h
+#define _COM_InvertOperation_h
+#include "COM_NodeOperation.h"
+
+
+class InvertOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputValueProgram;
+ SocketReader * inputColorProgram;
+
+ bool alpha;
+ bool color;
+
+public:
+ InvertOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setColor(bool color) {this->color = color;}
+ void setAlpha(bool alpha) {this->alpha = alpha;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_LensGhostOperation.cpp b/source/blender/compositor/operations/COM_LensGhostOperation.cpp
new file mode 100644
index 00000000000..e99bbb536f7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LensGhostOperation.cpp
@@ -0,0 +1,815 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_LensGhostOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#define MAX_STEP 256
+class Ray {
+public:
+ float position[3];
+ float direction[3];
+ float uv[2];
+ double wavelength;
+ float intensity;
+ bool valid;
+ void copyFrom(Ray *other) {
+ copy_v3_v3(position, other->position);
+ copy_v3_v3(direction, other->direction);
+ copy_v2_v2(uv, other->uv);
+ wavelength = other->wavelength;
+ intensity = other->intensity;
+ this->valid = other->valid;
+ }
+};
+
+class Intersection {
+public:
+ float position[3];
+ float normal[3];
+ double theta;
+ bool hit;
+ bool inverted;
+};
+
+class LensInterface {
+public:
+ float position[3];
+ float radius;
+ float nominalRadius;
+ double refraction1;
+ double refraction2;
+ double refraction3;
+ float thicknessCoathing;
+ virtual bool isFlat() = 0;
+ virtual void intersect(Intersection *result, Ray *ray) = 0;
+};
+
+class FlatInterface: public LensInterface {
+public:
+ bool isFlat() {return true;}
+ FlatInterface(float positionX, float positionY, float positionZ, float radius) {
+ this->position[0] = positionX;
+ this->position[1] = positionY;
+ this->position[2] = positionZ;
+ this->radius = radius;
+ this->nominalRadius = radius;
+ this->refraction1 = 1.0f;
+ this->refraction2 = 1.0f;
+ this->refraction3 = 1.0f;
+ this->thicknessCoathing = 0.0f;
+
+ }
+ void intersect(Intersection *result, Ray *ray) {
+ const float dz = this->position[2]-ray->position[2];
+ result->position[0] = ray->position[0] + ray->direction[0]*(dz)/ray->direction[2];
+ result->position[1] = ray->position[1] + ray->direction[1]*(dz)/ray->direction[2];
+ result->position[2] = ray->position[2] + ray->direction[2]*(dz)/ray->direction[2];
+ result->normal[0] = 0.0f;
+ result->normal[1] = 0.0f;
+ result->normal[2] = ray->direction[2]>0?-1.0f:1.0f;
+ result->theta = 0.0f;
+// result->hit = this->nominalRadius>maxf(fabs(result->position[0]), fabs(result->position[1]));
+ result->hit = true;
+ result->inverted = false;
+ }
+};
+
+class SphereInterface: public LensInterface {
+public:
+ SphereInterface(float positionX, float positionY, float positionZ, float radius, float nominalRadius, float n0, float n2, float coatingPhase) {
+ this->position[0] = positionX;
+ this->position[1] = positionY;
+ this->position[2] = positionZ;
+ this->radius = radius;
+ this->nominalRadius = nominalRadius;
+ this->refraction1 = n0;
+ this->refraction3 = n2;
+ this->refraction2 = maxf(sqrtf(n0*n2), 1.38);
+
+ this->thicknessCoathing = coatingPhase/4/this->refraction2;
+ }
+ bool isFlat() {return false;}
+ void intersect(Intersection *result, Ray *ray) {
+ float delta[3] ={ray->position[0] - this->position[0],
+ ray->position[1] - this->position[1],
+ ray->position[2] - this->position[2]};
+ float b = dot_v3v3(delta, ray->direction);
+ float c = dot_v3v3(delta, delta) - this->radius*this->radius;
+ float b2c = b*b-c;
+ if (b2c < 0) {
+ result->hit = false;
+ }
+ else {
+ float sgn = (this->radius*ray->direction[2])>0?1.0f:-1.0f;
+ float t = sqrtf(b2c)*sgn-b;
+ result->position[0] = ray->direction[0]*t+ray->position[0];
+ result->position[1] = ray->direction[1]*t+ray->position[1];
+ result->position[2] = ray->direction[2]*t+ray->position[2];
+
+ float p[3] = {
+ result->position[0] - this->position[0],
+ result->position[1] - this->position[1],
+ result->position[2] - this->position[2]
+ };
+ normalize_v3(p);
+
+ if (dot_v3v3(p, ray->direction)> 0) {
+ result->normal[0] = -p[0];
+ result->normal[1] = -p[1];
+ result->normal[2] = -p[2];
+ }
+ else {
+ result->normal[0] = p[0];
+ result->normal[1] = p[1];
+ result->normal[2] = p[2];
+ }
+
+ float inverse[3] ={
+ -ray->direction[0],
+ -ray->direction[1],
+ -ray->direction[2]};
+
+ result->theta = acosf(dot_v3v3(inverse, result->normal));
+ result->hit = this->nominalRadius>sqrt(result->position[0]*result->position[0]+result->position[1]*result->position[1]);
+// result->hit = this->nominalRadius>maxf(fabs(result->position[0]), fabs(result->position[1]));
+// result->hit = true;
+ result->inverted = t < 0;
+ }
+ }
+};
+class RayResult {
+public:
+ float x;
+ float y;
+ float intensity[3];
+ float u;
+ float v;
+ float screenX;
+ float screenY;
+ bool valid;
+ bool hasIntensity;
+};
+class Bounce {
+public:
+ LensInterface *interface1;
+ LensInterface *interface2;
+ RayResult *raster;
+ int length; // number of interfaces to travel
+ int rasterLength;
+ Bounce(LensInterface *interface1, LensInterface *interface2, int length, int rasterStep) {
+ this->interface1 = interface1;
+ this->interface2 = interface2;
+ this->length = length;
+ this->rasterLength = rasterStep;
+ this->raster = new RayResult[rasterLength*rasterLength];
+ for (int i = 0 ; i < rasterLength*rasterLength ; i++) {
+ RayResult * res = &this->raster[i];
+ res->intensity[0] = 0.0f;
+ res->intensity[1] = 0.0f;
+ res->intensity[2] = 0.0f;
+ res->x = 0.0f;
+ res->y = 0.0f;
+ res->u = 0.0f;
+ res->v = 0.0f;
+ res->valid = false;
+ }
+ }
+ ~Bounce() {
+ delete raster;
+
+ }
+
+ RayResult *getRayResult(int x, int y) {
+ return &(raster[x+y*rasterLength]);
+ }
+};
+class LensSystem {
+public:
+ vector<LensInterface*> interfaces;
+ vector<Bounce*> bounces;
+ int bokehIndex;
+ int lensIndex;
+
+ ~LensSystem() {
+ for (int index = 0 ; index <bounces.size();index++) {delete bounces[index];}
+ for (int index = 0 ; index <interfaces.size();index++) {delete interfaces[index];}
+ }
+
+ void updateBounces(int step) {
+ for (int i = 0; i < interfaces.size()-1 ; i ++) {
+ if (!interfaces[i]->isFlat()) {
+ for (int j = i+1; j < interfaces.size()-1 ; j ++) {
+ if (!interfaces[j]->isFlat()) {
+ int length = interfaces.size()+2*(j-i);
+ Bounce *bounce = new Bounce(interfaces[j], interfaces[i], length, step);
+ bounces.push_back(bounce);
+ }
+ }
+ }
+ }
+
+ }
+
+ void addInterface(LensInterface *pinterface) {
+ this->interfaces.push_back(pinterface);
+ this->lensIndex = this->interfaces.size()-1;
+ }
+
+ static int refraction(float *refract, float *n, float *view, double index)
+ {
+
+ return 1;
+
+// float dot, fac;
+
+// VECCOPY(refract, view);
+
+// dot = view[0]*n[0] + view[1]*n[1] + view[2]*n[2];
+
+// if (dot>0.0f) {
+// index = 1.0f/index;
+// fac = 1.0f - (1.0f - dot*dot)*index*index;
+// if (fac<= 0.0f) return 0;
+// fac= -dot*index + sqrt(fac);
+// }
+// else {
+// fac = 1.0f - (1.0f - dot*dot)*index*index;
+// if (fac<= 0.0f) return 0;
+// fac= -dot*index - sqrt(fac);
+// }
+
+// refract[0] = index*view[0] + fac*n[0];
+// refract[1] = index*view[1] + fac*n[1];
+// refract[2] = index*view[2] + fac*n[2];
+
+// normalize_v3(refract);
+// return 1;
+ //---
+// const double cosI = dot_v3v3(n, view);
+// const double sinT2 = index * index * (1.0 - cosI * cosI);
+// if (sinT2 >= 1.0f)
+// {
+// return 0;
+// }
+// refract[0] = index*view[0] - (index + sqrt(1.0-sinT2))*n[0];
+// refract[1] = index*view[1] - (index + sqrt(1.0-sinT2))*n[1];
+// refract[2] = index*view[2] - (index + sqrt(1.0-sinT2))*n[2];
+// normalize_v3(refract);
+// return 1;
+ //---
+
+// double ni = -dot_v3v3(view, n);
+// double test = 1.0f - index*index*(1.0f-ni*ni);
+// if (test < 0) {
+// return 0;
+// }
+// else {
+// double mul = index*ni + sqrt(test);
+// refract[0] = index * view[0] - mul*n[0];
+// refract[1] = index * view[1] - mul*n[1];
+// refract[2] = index * view[2] - mul*n[2];
+// normalize_v3(refract);
+// return 1;
+// }
+ }
+
+ /* orn = original face normal */
+ static void reflection(float *ref, float *n, float *view)
+ {
+ float f1;
+
+ f1= -2.0f*dot_v3v3(n, view);
+
+ ref[0] = (view[0]+f1*n[0]);
+ ref[1] = (view[1]+f1*n[1]);
+ ref[2] = (view[2]+f1*n[2]);
+ normalize_v3(ref);
+ }
+
+ static float fresnelAR(float theta0, float lambda, float d1, float n0, float n1, float n2) {
+ // refractionangles in coating and the 2nd medium
+ float theta1 = asin(sin(theta0)*n0/n1);
+ float theta2 = asin(sin(theta0)*n0/n2);
+
+ float rs01 = -sin(theta0-theta1)/sin(theta0+theta1);
+ float rp01 = tan( theta0-theta1)/tan(theta0+theta1);
+ float ts01 = 2 * sin ( theta1 ) * cos ( theta0 ) / sin ( theta0+theta1 ) ;
+ float tp01 = ts01*cos(theta0-theta1);
+ // amplitude for inner reflection
+ float rs12 = -sin ( theta1-theta2 ) / sin ( theta1+theta2 ) ;
+ float rp12 = +tan ( theta1-theta2 ) / tan ( theta1+theta2 ) ;
+ // after passing through first surface twice :
+ // 2 transmissions and 1 reflection
+ float ris = ts01 * ts01 * rs12 ;
+ float rip = tp01 * tp01 * rp12 ;
+ // phase difference between outer and inner reflections
+ float dy = d1 * n1 ;
+ float dx = tan ( theta1 ) * dy ;
+ float delay = sqrt ( dx * dx+dy * dy ) ;
+ float relPhase = 4 * M_PI / lambda * ( delay-dx * sin ( theta0 ) ) ;
+ // Add up sines of different phase and amplitude
+ float out_s2 = rs01 * rs01 + ris * ris + 2 * rs01 * ris * cos ( relPhase ) ;
+ float out_p2 = rp01 * rp01 + rip * rip + 2 * rp01 * rip * cos ( relPhase ) ;
+ return ( out_s2+out_p2 ) / 2 ;
+ }
+
+ void detectHit(Ray *result, Ray *inputRay, Bounce *bounce) {
+ int phase = 0;
+ int delta = 1;
+ int t = 1;
+ int k;
+ result->copyFrom(inputRay);
+ result->valid = false;
+ LensInterface *next = bounce->interface1;
+ LensInterface *f = NULL;
+ Intersection intersection;
+ for (k = 0 ; k < bounce->length-1;k++, t+=delta) {
+ f = this->interfaces[t];
+ bool breflect = next == f;
+ if (breflect) {
+ delta = -delta;
+ if (phase == 0) {
+ next = bounce->interface2;
+ }
+ else {
+ next = NULL;
+ }
+ phase ++;
+ }
+
+ f->intersect(&intersection, result);
+ if (!intersection.hit) {
+ break;
+ }
+ if (f->isFlat()) {
+ if (t == this->bokehIndex) {
+ result->uv[0] = intersection.position[0]/f->nominalRadius;
+ result->uv[1] = intersection.position[1]/f->nominalRadius;
+ }
+ }
+
+ float p[3] = {
+ intersection.position[0]-result->position[0],
+ intersection.position[1]-result->position[1],
+ intersection.position[2]-result->position[2]
+ };
+
+ float nfac = sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
+
+ if (intersection.inverted) {
+ nfac *= -1;
+ }
+
+ result->direction[0] = p[0]/nfac;
+ result->direction[1] = p[1]/nfac;
+ result->direction[2] = p[2]/nfac;
+ result->position[0] = intersection.position[0];
+ result->position[1] = intersection.position[1];
+ result->position[2] = intersection.position[2];
+
+ if (!f->isFlat()) {
+ // do refraction and reflection
+ double n0 = result->direction[2]<0?f->refraction1:f->refraction3;
+ double n1 = f->refraction2;
+ double n2 = result->direction[2]<0?f->refraction3:f->refraction1;
+ if (!breflect) {
+ float view[3] ={
+ result->direction[0],
+ result->direction[1],
+ result->direction[2]
+ };
+ int ref = this->refraction(result->direction, intersection.normal, view, n0/n1);
+ if (ref == 0) {
+ break;
+ }
+ }
+ else {
+ this->reflection(result->direction, intersection.normal, result->direction);
+ float fresnelMultiplyer = fresnelAR(intersection.theta, result->wavelength, f->thicknessCoathing, n0, n1, n2);
+ if (isnan(fresnelMultiplyer)) {
+ fresnelMultiplyer = 0.0f;
+ }
+ result->intensity *= fresnelMultiplyer;
+ }
+ }
+
+ }
+ if (k < bounce->length-1) {
+ result->intensity = 0;
+ }
+ else {
+ result->valid = true;
+ }
+ }
+};
+
+typedef struct LensFace {
+ RayResult *v1;
+ RayResult *v2;
+ RayResult *v3;
+} LensFace;
+
+LensGhostProjectionOperation::LensGhostProjectionOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->lampObject = NULL;
+ this->cameraObject = NULL;
+ this->system = NULL;
+ this->quality = COM_QUALITY_HIGH;
+ this->setComplex(false);
+}
+
+LensGhostOperation::LensGhostOperation(): LensGhostProjectionOperation()
+{
+ this->setComplex(true);
+
+}
+
+void LensGhostProjectionOperation::initExecution()
+{
+ if (this->cameraObject != NULL && this->lampObject != NULL) {
+ if (lampObject == NULL || cameraObject == NULL) {
+ visualLampPosition[0] = 0;
+ visualLampPosition[1] = 0;
+ visualLampPosition[2] = 0;
+ }
+ else {
+ /* too simple, better to return the distance on the view axis only
+ * return len_v3v3(ob->obmat[3], cam->dof_ob->obmat[3]); */
+ float matt[4][4], imat[4][4], obmat[4][4];
+
+ copy_m4_m4(obmat, cameraObject->obmat);
+ normalize_m4(obmat);
+ invert_m4_m4(imat, obmat);
+ mult_m4_m4m4(matt, imat, lampObject->obmat);
+
+ visualLampPosition[0] = (float)(matt[3][0]);
+ visualLampPosition[1] = (float)(matt[3][1]);
+ visualLampPosition[2] = (float)fabs(matt[3][2]);
+ }
+ }
+ this->lamp = (Lamp*)lampObject->data;
+
+ this->step = this->quality==COM_QUALITY_LOW?64:this->quality==COM_QUALITY_MEDIUM?128:256;
+ this->bokehReader = this->getInputSocketReader(1);
+
+#define MM *0.001f
+#define CM *0.01f
+#define NM *0.000000001
+#define RED 650 NM
+#define GREEN 510 NM
+#define BLUE 475 NM
+#define AIR 1.000293f
+#define GLASS 1.5200f
+#define TEST 0.000002f
+ // determine interfaces
+ LensSystem *system = new LensSystem();
+ system->addInterface(new FlatInterface(0.0f,0.0f, 6.5 CM, 30 MM)); //ENTRANCE
+ system->addInterface(new SphereInterface(0.0f,0.0f, -3 CM, 8 CM, 3 CM, AIR, GLASS , 0.f));
+ system->addInterface(new SphereInterface(0.0f,0.0f, -4 CM, 8 CM, 3 CM, GLASS, AIR, GREEN));
+ system->addInterface(new FlatInterface(0.0f,0.0f, 3.0 CM, 15 MM)); // BOKEH
+ system->addInterface(new SphereInterface(0.0f,0.0f, 6 CM, 3 CM, 2 CM, AIR, GLASS, 0.0f));
+ system->addInterface(new SphereInterface(0.0f,0.0f, 5.5 CM, 3 CM, 2 CM, GLASS, AIR, 0.f));
+ system->addInterface(new FlatInterface(0.0f,0.0f,0 CM, 30 MM)); // SENSOR
+ system->bokehIndex = 3;
+
+ // determine interfaces
+// LensSystem *system = new LensSystem();
+// system->addInterface(new FlatInterface(0.0f,0.0f, 6.5 CM, 30 MM)); //ENTRANCE
+// system->addInterface(new SphereInterface(0.0f,0.0f, 14 CM, 8 CM, 6 CM, AIR, GLASS , 0.0f));
+// system->addInterface(new SphereInterface(0.0f,0.0f, 12 CM, 8 CM, 6 CM, GLASS, AIR, GREEN));
+// system->addInterface(new FlatInterface(0.0f,0.0f, 3.0 CM, 30 MM)); // BOKEH
+// system->addInterface(new SphereInterface(0.0f,0.0f, 1 CM, 3 CM, 2 CM, AIR, GLASS, GREEN));
+// system->addInterface(new SphereInterface(0.0f,0.0f, -2 CM, 3 CM, 2 CM, GLASS, AIR, RED));
+// system->addInterface(new FlatInterface(0.0f,0.0f,0 CM, 20 MM)); // SENSOR
+// system->bokehIndex = 3;
+#undef CM
+#undef MM
+ // determine bounces
+ system->updateBounces(step);
+ this->system = system;
+}
+
+void LensGhostOperation::initExecution()
+{
+ LensGhostProjectionOperation::initExecution();
+ LensSystem *system = (LensSystem*)this->system;
+ LensInterface *interface1 = system->interfaces[0];
+
+ // for every herz
+ float HERZ[3]={650 NM,510 NM,475 NM}; /// @todo use 7 for high quality?
+ for (int iw = 0 ; iw < 3 ; iw ++) {
+ float wavelength = HERZ[iw];
+ // for every bounce
+ for (int ib = 0 ; ib < system->bounces.size() ; ib++) {
+ Bounce *bounce = system->bounces[ib];
+ // based on quality setting the number of iteration will be different (128^2, 64^2, 32^2)
+ for (int xi = 0 ; xi < step ; xi ++) {
+ float x = -interface1->radius+xi*(interface1->radius*2/step);
+ for (int yi = 0 ; yi < step ; yi ++) {
+ float y = -interface1->radius+yi*(interface1->radius*2/step);
+ Ray r;
+ Ray result;
+ r.wavelength = wavelength;
+ r.intensity = this->lamp->energy;
+ r.uv[0] = 0.0f;
+ r.uv[1] = 0.0f;
+ r.position[0] = visualLampPosition[0];
+ r.position[1] = visualLampPosition[1];
+ r.position[2] = visualLampPosition[2];
+ r.direction[0] = interface1->position[0]+x - r.position[0];
+ r.direction[1] = interface1->position[1]+y - r.position[1];
+ r.direction[2] = interface1->position[2] - r.position[2];
+ normalize_v3(r.direction);
+ system->detectHit(&result, &r, bounce);
+ RayResult *res = bounce->getRayResult(xi, yi);
+ if (iw == 0) {
+ res->x = result.position[0];
+ res->y = result.position[1];
+ res->u = result.uv[0];
+ res->v = result.uv[1];
+ }
+ res->intensity[iw] = result.intensity;
+ if (result.valid) {
+ res->valid = true;
+ }
+ }
+ }
+ }
+ }
+#undef NM
+ const int width = this->getWidth();
+ const int height = this->getHeight();
+ const float width2 = width/2.0f;
+ const float height2 = height/2.0f;
+ float *data = new float[width*height*4];
+ for (int i = 0 ; i < width*height ; i ++) {
+ data[i*4+0] = 0.0f;
+ data[i*4+1] = 0.0f;
+ data[i*4+2] = 0.0f;
+ data[i*4+3] = 1.0f;
+ }
+ /// @todo every bounce creates own image. these images are added together at the end
+// LensSystem *system = (LensSystem*)this->system;
+ LensInterface * lens = system->interfaces[system->lensIndex];
+ for (int i = 0 ; i < system->bounces.size() ; i ++) {
+ Bounce *bounce = system->bounces[i];
+ for (int r = 0 ; r < bounce->rasterLength*bounce->rasterLength ; r ++) {
+ RayResult *result = &bounce->raster[r];
+// if (result->valid) {
+ float ru = result->x/lens->nominalRadius*width2+width2;
+ float rv = result->y/lens->nominalRadius*height2+height2;
+ result->screenX = ru;
+ result->screenY = rv;
+ result->hasIntensity = result->intensity[0]>0.0f &&result->intensity[1]>0.0f&& result->intensity[2]>0.0f;
+// }
+ }
+ }
+}
+
+void *LensGhostOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ vector<LensFace*>* result = new vector<LensFace*>();
+ LensSystem *system = (LensSystem*)this->system;
+ const float minx = rect->xmin;
+ const float miny = rect->ymin;
+ const float maxx = rect->xmax;
+ const float maxy = rect->ymax;
+ for (int i = 0 ; i < system->bounces.size() ; i ++) {
+ Bounce *bounce = system->bounces[i];
+ int faceX, faceY;
+ for (faceX = 0 ; faceX < bounce->rasterLength-1 ; faceX++) {
+ for (faceY = 0 ; faceY < bounce->rasterLength-1 ; faceY++) {
+ RayResult *vertex1 = bounce->getRayResult(faceX, faceY);
+ RayResult *vertex2 = bounce->getRayResult(faceX+1, faceY);
+ RayResult *vertex3 = bounce->getRayResult(faceX+1, faceY+1);
+ RayResult *vertex4 = bounce->getRayResult(faceX, faceY+1);
+ // early hit test
+ if (!((vertex1->screenX < minx && vertex2->screenX < minx && vertex3->screenX < minx && vertex4->screenX < minx) ||
+ (vertex1->screenX > maxx && vertex2->screenX > maxx && vertex3->screenX > maxx && vertex4->screenX > maxx) ||
+ (vertex1->screenY < miny && vertex2->screenY < miny && vertex3->screenY < miny && vertex4->screenY < miny) ||
+ (vertex1->screenY > maxy && vertex2->screenY > maxy && vertex3->screenY > maxy && vertex4->screenY > maxy))) {
+ int number = vertex1->hasIntensity + vertex2->hasIntensity + vertex3->hasIntensity + vertex4->hasIntensity;
+ if (number == 4) {
+ LensFace *face = new LensFace();
+ face->v1 = vertex1;
+ face->v2 = vertex2;
+ face->v3 = vertex3;
+ result->push_back(face);
+ face = new LensFace();
+ face->v1 = vertex3;
+ face->v2 = vertex4;
+ face->v3 = vertex1;
+ result->push_back(face);
+ }
+ else if (number == 3) {
+ LensFace *face = new LensFace();
+ if (!vertex1->hasIntensity) {
+ face->v1 = vertex2;
+ face->v2 = vertex3;
+ face->v3 = vertex4;
+ }
+ else if (!vertex2->hasIntensity) {
+ face->v1 = vertex1;
+ face->v2 = vertex3;
+ face->v3 = vertex4;
+ }
+ else if (!vertex3->hasIntensity) {
+ face->v1 = vertex1;
+ face->v2 = vertex2;
+ face->v3 = vertex4;
+ }
+ else {
+ face->v1 = vertex1;
+ face->v2 = vertex2;
+ face->v3 = vertex3;
+ }
+ result->push_back(face);
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+void LensGhostOperation::deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data)
+{
+ if (data) {
+ vector<LensFace*>* faces = (vector<LensFace*>*)data;
+ while (faces->size() != 0) {
+ LensFace *face = faces->back();
+ faces->pop_back();
+ delete face;
+ }
+ delete faces;
+ }
+}
+
+
+void LensGhostProjectionOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float bokeh[4];
+ LensSystem *system = (LensSystem*)this->system;
+ LensInterface *interface1 = system->interfaces[0];
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 0.0f;
+ const float width = this->getWidth();
+ const float height = this->getHeight();
+ const float size = min(height, width);
+ const float width2 = width/2;
+ const float height2 = height/2;
+ const float size2 = size/2;
+
+#define NM *0.000000001
+ float HERZ[3]={650 NM,510 NM,475 NM}; /// @todo use 7 for high quality?
+ float rx = ((x-width2)/size2) * interface1->radius;
+ float ry = ((y-height2)/size2) * interface1->radius;
+
+ for (int iw = 0 ; iw < 3 ; iw ++) {
+ float intensity = 0.0f;
+ float wavelength = HERZ[iw];
+ float colorcomponent = 0.0f;
+ if (iw ==0 ) colorcomponent = lamp->r;
+ if (iw ==1 ) colorcomponent = lamp->g;
+ if (iw ==2 ) colorcomponent = lamp->b;
+
+
+ // for every bounce
+ for (int ib = 0 ; ib < system->bounces.size() ; ib++) {
+ Bounce *bounce = system->bounces[ib];
+ // based on quality setting the number of iteration will be different (128^2, 64^2, 32^2)
+
+ Ray r;
+ Ray result;
+ r.wavelength = wavelength;
+ r.intensity = this->lamp->energy;
+ r.uv[0] = 0.0f;
+ r.uv[1] = 0.0f;
+ r.position[0] = visualLampPosition[0];
+ r.position[1] = visualLampPosition[1];
+ r.position[2] = visualLampPosition[2];
+ r.direction[0] = interface1->position[0]+rx - r.position[0];
+ r.direction[1] = interface1->position[1]+ry - r.position[1];
+ r.direction[2] = interface1->position[2] - r.position[2];
+ normalize_v3(r.direction);
+ system->detectHit(&result, &r, bounce);
+ if (result.valid) {
+ float u = ((result.uv[0]+1.0f)/2)*bokehReader->getWidth();
+ float v = ((result.uv[1]+1.0f)/2)*bokehReader->getHeight();
+
+ bokehReader->read(bokeh, u, v, sampler, inputBuffers);
+
+ intensity += result.intensity *bokeh[iw];
+ }
+ }
+ intensity = maxf(0.0f, intensity);
+ color[iw] = intensity*colorcomponent;
+ }
+ color[3] = 1.0f;
+#undef NM
+
+}
+
+
+
+void LensGhostOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ vector<LensFace*>* faces = (vector<LensFace*>*)data;
+#if 0 /* UNUSED */
+ const float bokehWidth = bokehReader->getWidth();
+ const float bokehHeight = bokehReader->getHeight();
+ float bokeh[4];
+#endif
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 1.0f;
+
+ unsigned int index;
+ for (index = 0 ; index < faces->size() ; index ++) {
+ LensFace * face = faces->operator [](index);
+ RayResult *vertex1 = face->v1;
+ RayResult *vertex2 = face->v2;
+ RayResult *vertex3 = face->v3;
+ if (!((vertex1->screenX < x && vertex2->screenX < x && vertex3->screenX < x) ||
+ (vertex1->screenX > x && vertex2->screenX > x && vertex3->screenX > x) ||
+ (vertex1->screenY < y && vertex2->screenY < y && vertex3->screenY < y) ||
+ (vertex1->screenY > y && vertex2->screenY > y && vertex3->screenY > y))) {
+
+ const float v1[2] = {vertex1->screenX, vertex1->screenY};
+ const float v2[2] = {vertex2->screenX, vertex2->screenY};
+ const float v3[2] = {vertex3->screenX, vertex3->screenY};
+ const float co[2] = {x, y};
+ float weights[3];
+
+ barycentric_weights_v2(v1, v2, v3, co, weights);
+ if (weights[0]>=0.0f && weights[0]<=1.0f &&
+ weights[1]>=0.0f && weights[1]<=1.0f &&
+ weights[2]>=0.0f && weights[2]<=1.0f) {
+// const float u = (vertex1->u*weights[0]+vertex2->u*weights[1]+vertex3->u*weights[2]);
+// const float v = (vertex1->v*weights[0]+vertex2->v*weights[1]+vertex3->v*weights[2]);
+// const float tu = ((u+1.0f)/2.0f)*bokehWidth;
+// const float tv = ((v+1.0f)/2.0f)*bokehHeight;
+// bokehReader->read(bokeh, tu, tv, inputBuffers);
+
+// color[0] = max(color[0], bokeh[0]*(vertex1->intensity[0]*weights[0]+vertex2->intensity[0]*weights[1]+vertex3->intensity[0]*weights[2]));
+// color[1] = max(color[1], bokeh[1]*(vertex1->intensity[1]*weights[0]+vertex2->intensity[1]*weights[1]+vertex3->intensity[1]*weights[2]));
+// color[2] = max(color[2], bokeh[2]*(vertex1->intensity[2]*weights[0]+vertex2->intensity[2]*weights[1]+vertex3->intensity[2]*weights[2]));
+ color[0] = max(color[0], (vertex1->intensity[0]*weights[0]+vertex2->intensity[0]*weights[1]+vertex3->intensity[0]*weights[2]));
+ color[1] = max(color[1], (vertex1->intensity[1]*weights[0]+vertex2->intensity[1]*weights[1]+vertex3->intensity[1]*weights[2]));
+ color[2] = max(color[2], (vertex1->intensity[2]*weights[0]+vertex2->intensity[2]*weights[1]+vertex3->intensity[2]*weights[2]));
+ }
+ }
+ }
+}
+
+
+void LensGhostProjectionOperation::deinitExecution()
+{
+ if (this->system) delete (LensSystem*)this->system;
+ this->system = NULL;
+ this->bokehReader = NULL;
+}
+
+bool LensGhostProjectionOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti bokehInput;
+
+ NodeOperation *operation = this->getInputOperation(1);
+ bokehInput.xmax = operation->getWidth();
+ bokehInput.xmin = 0;
+ bokehInput.ymax = operation->getHeight();
+ bokehInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&bokehInput, readOperation, output) ) {
+ return true;
+ }
+
+ return NodeOperation::determineDependingAreaOfInterest(input, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_LensGhostOperation.h b/source/blender/compositor/operations/COM_LensGhostOperation.h
new file mode 100644
index 00000000000..5546ce96fd1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LensGhostOperation.h
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_LensGhostOperation_h
+#define _COM_LensGhostOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_lamp_types.h"
+#include "DNA_object_types.h"
+#include "DNA_camera_types.h"
+
+class LensGhostProjectionOperation : public NodeOperation {
+protected:
+ Object *lampObject;
+ Lamp *lamp;
+ Object *cameraObject;
+
+ void *system;
+ float visualLampPosition[3];
+ CompositorQuality quality;
+ int step;
+ SocketReader * bokehReader;
+
+public:
+ LensGhostProjectionOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ void setLampObject(Object *lampObject) {this->lampObject = lampObject;}
+ void setCameraObject(Object *cameraObject) {this->cameraObject = cameraObject;}
+
+ void setQuality(CompositorQuality quality) {this->quality = quality;}
+};
+
+class LensGhostOperation : public LensGhostProjectionOperation {
+public:
+ LensGhostOperation();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ void deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data);
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_LensGlowImageOperation.cpp b/source/blender/compositor/operations/COM_LensGlowImageOperation.cpp
new file mode 100644
index 00000000000..ee0a02e5fae
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LensGlowImageOperation.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_LensGlowImageOperation.h"
+#include "BLI_math.h"
+
+LensGlowImageOperation::LensGlowImageOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
+void LensGlowImageOperation::initExecution()
+{
+ this->scale = 1/20000.0f;
+}
+void LensGlowImageOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ const float cs_r = 1.f, cs_g = 1.f, cs_b = 1.f;
+ const float v = 2.f*(y / (float)512.0f) - 1.f;
+ const float u = 2.f*(x / (float)512.0f) - 1.f;
+ const float r = (u*u + v*v)*scale;
+ const float d = -sqrtf(sqrtf(sqrtf(r)))*9.f;
+ const float w = (0.5f + 0.5f*cos((double)u*M_PI))*(0.5f + 0.5f*cos((double)v*M_PI));
+ color[0] = expf(d*cs_r) * w;
+ color[1] = expf(d*cs_g) * w;
+ color[2] = expf(d*cs_b) * w;
+ color[3] = 1.0f;
+}
+
+void LensGlowImageOperation::deinitExecution()
+{
+}
+
+void LensGlowImageOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ resolution[0] = 512;
+ resolution[1] = 512;
+}
diff --git a/source/blender/compositor/operations/COM_LensGlowImageOperation.h b/source/blender/compositor/operations/COM_LensGlowImageOperation.h
new file mode 100644
index 00000000000..424b4d4fc3d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LensGlowImageOperation.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_LensGlowImageOperation_h
+#define _COM_LensGlowImageOperation_h
+#include "COM_NodeOperation.h"
+
+
+class LensGlowImageOperation : public NodeOperation {
+private:
+ float scale;
+
+public:
+ LensGlowImageOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_LensGlowOperation.cpp b/source/blender/compositor/operations/COM_LensGlowOperation.cpp
new file mode 100644
index 00000000000..492dc715f10
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LensGlowOperation.cpp
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_LensGlowOperation.h"
+#include "BLI_math.h"
+
+LensGlowOperation::LensGlowOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputProgram = NULL;
+ this->lamp = NULL;
+}
+void LensGlowOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void LensGlowOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+// const float emit100 = this->lamp->energy*100;
+// const float emit200 = emit100*2;
+// const float deltaX = 160-x;
+// const float deltaY = 100-y;
+// const float distance = deltaX * deltaX + deltaY*deltaY;
+
+// float glow = (emit100-(distance))/(emit200);
+// if (glow<0) glow=0;
+
+// color[0] = glow*lamp->r;
+// color[1] = glow*lamp->g;
+// color[2] = glow*lamp->b;
+// color[3] = 1.0f;
+}
+
+void LensGlowOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_LensGlowOperation.h b/source/blender/compositor/operations/COM_LensGlowOperation.h
new file mode 100644
index 00000000000..77e13e88418
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LensGlowOperation.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_LensGlowOperation_h
+#define _COM_LensGlowOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_lamp_types.h"
+
+class LensGlowOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+ Lamp *lamp;
+
+public:
+ LensGlowOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setLamp(Lamp *lamp) {this->lamp = lamp;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_LuminanceMatteOperation.cpp b/source/blender/compositor/operations/COM_LuminanceMatteOperation.cpp
new file mode 100644
index 00000000000..f206bf4df8e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LuminanceMatteOperation.cpp
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_LuminanceMatteOperation.h"
+#include "BLI_math.h"
+
+LuminanceMatteOperation::LuminanceMatteOperation(): NodeOperation()
+{
+ addInputSocket(COM_DT_COLOR);
+ addOutputSocket(COM_DT_VALUE);
+
+ inputImageProgram = NULL;
+}
+
+void LuminanceMatteOperation::initExecution()
+{
+ this->inputImageProgram = this->getInputSocketReader(0);
+}
+
+void LuminanceMatteOperation::deinitExecution()
+{
+ this->inputImageProgram = NULL;
+}
+
+void LuminanceMatteOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inColor[4];
+
+ const float high=this->settings->t1;
+ const float low=this->settings->t2;
+
+ float alpha;
+
+ this->inputImageProgram->read(inColor, x, y, sampler, inputBuffers);
+
+ /* one line thread-friend algorithm:
+ outputValue[0] = max(inputValue[3], min(high, max(low, ((inColor[0]-low)/(high-low))))
+ */
+
+ /* test range*/
+ if (inColor[0] > high) {
+ alpha=1.f;
+ }
+ else if (inColor[0] < low) {
+ alpha=0.f;
+ }
+ else {/*blend */
+ alpha=(inColor[0]-low)/(high-low);
+ }
+
+
+ /* store matte(alpha) value in [0] to go with
+ * COM_SetAlphaOperation and the Value output
+ */
+
+ /* don't make something that was more transparent less transparent */
+ if (alpha<inColor[3]) {
+ outputValue[0]=alpha;
+ }
+ else {
+ /* leave now it was before */
+ outputValue[0]=inColor[3];
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_LuminanceMatteOperation.h b/source/blender/compositor/operations/COM_LuminanceMatteOperation.h
new file mode 100644
index 00000000000..1c2cd2dca51
--- /dev/null
+++ b/source/blender/compositor/operations/COM_LuminanceMatteOperation.h
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_LuminanceMatteOperation_h
+#define _COM_LuminanceMatteOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class LuminanceMatteOperation : public NodeOperation {
+private:
+ NodeChroma *settings;
+ SocketReader *inputImageProgram;
+public:
+ /**
+ * Default constructor
+ */
+ LuminanceMatteOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setSettings(NodeChroma *nodeChroma) {this->settings = nodeChroma;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MapUVOperation.cpp b/source/blender/compositor/operations/COM_MapUVOperation.cpp
new file mode 100644
index 00000000000..7b393cc04a8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MapUVOperation.cpp
@@ -0,0 +1,158 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_MapUVOperation.h"
+#include "BLI_math.h"
+
+MapUVOperation::MapUVOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->alpha = 0.f;
+ this->setComplex(true);
+
+ this->inputUVProgram = NULL;
+ this->inputColorProgram = NULL;
+}
+
+void MapUVOperation::initExecution()
+{
+ this->inputColorProgram = this->getInputSocketReader(0);
+ this->inputUVProgram = this->getInputSocketReader(1);
+}
+
+void MapUVOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputUV[4];
+ float uv_a[4], uv_b[4];
+ float u,v;
+
+ float dx, dy;
+ float uv_l, uv_r;
+ float uv_u, uv_d;
+
+ this->inputUVProgram->read(inputUV, x, y, sampler, inputBuffers);
+ if (inputUV[2] == 0.f) {
+ color[0] = 0.f;
+ color[1] = 0.f;
+ color[2] = 0.f;
+ color[3] = 0.f;
+ return;
+ }
+ /* adaptive sampling, red (U) channel */
+ this->inputUVProgram->read(uv_a, x-1, y, COM_PS_NEAREST, inputBuffers);
+ this->inputUVProgram->read(uv_b, x+1, y, COM_PS_NEAREST, inputBuffers);
+ uv_l = uv_a[2]!=0.f? fabs(inputUV[0] - uv_a[0]) : 0.f;
+ uv_r = uv_b[2]!=0.f? fabs(inputUV[0] - uv_b[0]) : 0.f;
+
+ dx = 0.5f * (uv_l + uv_r);
+
+ /* adaptive sampling, green (V) channel */
+ this->inputUVProgram->read(uv_a, x, y-1, COM_PS_NEAREST, inputBuffers);
+ this->inputUVProgram->read(uv_b, x, y+1, COM_PS_NEAREST, inputBuffers);
+ uv_u = uv_a[2]!=0.f? fabs(inputUV[1] - uv_a[1]) : 0.f;
+ uv_d = uv_b[2]!=0.f? fabs(inputUV[1] - uv_b[1]) : 0.f;
+
+ dy = 0.5f * (uv_u + uv_d);
+
+ /* more adaptive sampling, red and green (UV) channels */
+ this->inputUVProgram->read(uv_a, x-1, y-1, COM_PS_NEAREST, inputBuffers);
+ this->inputUVProgram->read(uv_b, x-1, y+1, COM_PS_NEAREST, inputBuffers);
+ uv_l = uv_a[2]!=0.f? fabsf(inputUV[0] - uv_a[0]) : 0.f;
+ uv_r = uv_b[2]!=0.f? fabsf(inputUV[0] - uv_b[0]) : 0.f;
+ uv_u = uv_a[2]!=0.f? fabsf(inputUV[1] - uv_a[1]) : 0.f;
+ uv_d = uv_b[2]!=0.f? fabsf(inputUV[1] - uv_b[1]) : 0.f;
+
+ dx+= 0.25f * (uv_l + uv_r);
+ dy+= 0.25f * (uv_u + uv_d);
+
+ this->inputUVProgram->read(uv_a, x+1, y-1, COM_PS_NEAREST, inputBuffers);
+ this->inputUVProgram->read(uv_b, x+1, y+1, COM_PS_NEAREST, inputBuffers);
+ uv_l = uv_a[2]!=0.f? fabsf(inputUV[0] - uv_a[0]) : 0.f;
+ uv_r = uv_b[2]!=0.f? fabsf(inputUV[0] - uv_b[0]) : 0.f;
+ uv_u = uv_a[2]!=0.f? fabsf(inputUV[1] - uv_a[1]) : 0.f;
+ uv_d = uv_b[2]!=0.f? fabsf(inputUV[1] - uv_b[1]) : 0.f;
+
+ dx+= 0.25f * (uv_l + uv_r);
+ dy+= 0.25f * (uv_u + uv_d);
+
+ /* UV to alpha threshold */
+ const float threshold = this->alpha * 0.05f;
+ float alpha = 1.0f - threshold * (dx + dy);
+ if (alpha < 0.f) alpha = 0.f;
+ else alpha *= inputUV[2];
+
+ /* should use mipmap */
+ dx = min(dx, 0.2f);
+ dy = min(dy, 0.2f);
+
+
+ /* EWA filtering */
+ u = inputUV[0] * inputColorProgram->getWidth();
+ v = inputUV[1] * inputColorProgram->getHeight();
+
+ this->inputColorProgram->read(color, u, v, dx, dy, inputBuffers);
+
+ /* "premul" */
+ if (alpha < 1.0f) {
+ color[0]*= alpha;
+ color[1]*= alpha;
+ color[2]*= alpha;
+ color[3]*= alpha;
+ }
+}
+
+void MapUVOperation::deinitExecution()
+{
+ this->inputUVProgram = NULL;
+ this->inputColorProgram = NULL;
+}
+
+bool MapUVOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti colorInput;
+ rcti uvInput;
+ NodeOperation *operation=NULL;
+
+ /* the uv buffer only needs a 3x3 buffer. The image needs whole buffer */
+
+ operation = getInputOperation(0);
+ colorInput.xmax = operation->getWidth();
+ colorInput.xmin = 0;
+ colorInput.ymax = operation->getHeight();
+ colorInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&colorInput, readOperation, output)) {
+ return true;
+ }
+
+ operation = getInputOperation(1);
+ uvInput.xmax = input->xmax + 1;
+ uvInput.xmin = input->xmin - 1;
+ uvInput.ymax = input->ymax + 1;
+ uvInput.ymin = input->ymin - 1;
+ if (operation->determineDependingAreaOfInterest(&uvInput, readOperation, output)) {
+ return true;
+ }
+
+ return false;
+}
+
diff --git a/source/blender/compositor/operations/COM_MapUVOperation.h b/source/blender/compositor/operations/COM_MapUVOperation.h
new file mode 100644
index 00000000000..069f454895d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MapUVOperation.h
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_MapUVOperation_h
+#define _COM_MapUVOperation_h
+#include "COM_NodeOperation.h"
+
+
+class MapUVOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputUVProgram;
+ SocketReader *inputColorProgram;
+
+ float alpha;
+
+public:
+ MapUVOperation();
+
+ /**
+ * we need a 3x3 differential filter for UV Input and full buffer for the image
+ */
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setAlpha(float alpha){this->alpha = alpha;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MapValueOperation.cpp b/source/blender/compositor/operations/COM_MapValueOperation.cpp
new file mode 100644
index 00000000000..bf6d29c0456
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MapValueOperation.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MapValueOperation.h"
+
+MapValueOperation::MapValueOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputOperation = NULL;
+}
+
+void MapValueOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void MapValueOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float src[4];
+ inputOperation->read(src, x, y, sampler, inputBuffers);
+ TexMapping *texmap = this->settings;
+ float value = (src[0] + texmap->loc[0])*texmap->size[0];
+ if (texmap->flag & TEXMAP_CLIP_MIN)
+ if (value<texmap->min[0])
+ value = texmap->min[0];
+ if (texmap->flag & TEXMAP_CLIP_MAX)
+ if (value>texmap->max[0])
+ value = texmap->max[0];
+
+ outputValue[0] = value;
+}
+
+void MapValueOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_MapValueOperation.h b/source/blender/compositor/operations/COM_MapValueOperation.h
new file mode 100644
index 00000000000..ac320256fe4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MapValueOperation.h
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MapValueOperation_h
+#define _COM_MapValueOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_texture_types.h"
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MapValueOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputOperation;
+ TexMapping * settings;
+public:
+ /**
+ * Default constructor
+ */
+ MapValueOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ /**
+ * @brief set the TexMapping settings
+ */
+ void setSettings(TexMapping *settings) {this->settings = settings;}
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MathBaseOperation.cpp b/source/blender/compositor/operations/COM_MathBaseOperation.cpp
new file mode 100644
index 00000000000..2f315855652
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MathBaseOperation.cpp
@@ -0,0 +1,261 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MathBaseOperation.h"
+extern "C" {
+#include "BLI_math.h"
+}
+
+MathBaseOperation::MathBaseOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputValue1Operation = NULL;
+ this->inputValue2Operation = NULL;
+}
+
+void MathBaseOperation::initExecution()
+{
+ this->inputValue1Operation = this->getInputSocketReader(0);
+ this->inputValue2Operation = this->getInputSocketReader(1);
+}
+
+
+void MathBaseOperation::deinitExecution()
+{
+ this->inputValue1Operation = NULL;
+ this->inputValue2Operation = NULL;
+}
+
+void MathAddOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = inputValue1[0] + inputValue2[0];
+}
+
+void MathSubtractOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = inputValue1[0] - inputValue2[0];
+}
+
+void MathMultiplyOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = inputValue1[0] * inputValue2[0];
+}
+
+void MathDivideOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ if (inputValue2[0]==0) /* We don't want to divide by zero. */
+ outputValue[0] = 0.0;
+ else
+ outputValue[0] = inputValue1[0] / inputValue2[0];
+}
+
+void MathSineOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = sin(inputValue1[0]);
+}
+
+void MathCosineOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = cos(inputValue1[0]);
+}
+
+void MathTangentOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = tan(inputValue1[0]);
+}
+
+void MathArcSineOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ if (inputValue1[0] <= 1 && inputValue1[0] >= -1 )
+ outputValue[0] = asin(inputValue1[0]);
+ else
+ outputValue[0] = 0.0;
+}
+
+void MathArcCosineOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ if (inputValue1[0] <= 1 && inputValue1[0] >= -1 )
+ outputValue[0] = acos(inputValue1[0]);
+ else
+ outputValue[0] = 0.0;
+}
+
+void MathArcTangentOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = atan(inputValue1[0]);
+}
+
+void MathPowerOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ if ( inputValue1[0] >= 0 ) {
+ outputValue[0] = pow(inputValue1[0], inputValue2[0]);
+ }
+ else {
+ float y_mod_1 = fmod(inputValue2[0], 1);
+ /* if input value is not nearly an integer, fall back to zero, nicer than straight rounding */
+ if (y_mod_1 > 0.999 || y_mod_1 < 0.001) {
+ outputValue[0] = pow(inputValue1[0], (float)floor(inputValue2[0] + 0.5));
+ }
+ else {
+ outputValue[0] = 0.0;
+ }
+ }
+}
+
+void MathLogarithmOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ if ( inputValue1[0] > 0 && inputValue2[0] > 0 )
+ outputValue[0] = log(inputValue1[0]) / log(inputValue2[0]);
+ else
+ outputValue[0] = 0.0;
+}
+
+void MathMinimumOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = min(inputValue1[0], inputValue2[0]);
+}
+
+void MathMaximumOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = max(inputValue1[0], inputValue2[0]);
+}
+
+void MathRoundOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = round(inputValue1[0]);
+}
+
+void MathLessThanOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = inputValue1[0]<inputValue2[0]?1.0f:0.0f;
+}
+
+void MathGreaterThanOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputValue1[4];
+ float inputValue2[4];
+
+ inputValue1Operation->read(&inputValue1[0], x, y, sampler, inputBuffers);
+ inputValue2Operation->read(&inputValue2[0], x, y, sampler, inputBuffers);
+
+ outputValue[0] = inputValue1[0]>inputValue2[0]?1.0f:0.0f;
+}
+
+
diff --git a/source/blender/compositor/operations/COM_MathBaseOperation.h b/source/blender/compositor/operations/COM_MathBaseOperation.h
new file mode 100644
index 00000000000..87f8a304158
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MathBaseOperation.h
@@ -0,0 +1,150 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MathBaseOperation_h
+#define _COM_MathBaseOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MathBaseOperation : public NodeOperation {
+protected:
+ /**
+ * Prefetched reference to the inputProgram
+ */
+ SocketReader * inputValue1Operation;
+ SocketReader * inputValue2Operation;
+
+protected:
+ /**
+ * Default constructor
+ */
+ MathBaseOperation();
+public:
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]) = 0;
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+};
+
+class MathAddOperation: public MathBaseOperation {
+public:
+ MathAddOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathSubtractOperation: public MathBaseOperation {
+public:
+ MathSubtractOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathMultiplyOperation: public MathBaseOperation {
+public:
+ MathMultiplyOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathDivideOperation: public MathBaseOperation {
+public:
+ MathDivideOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathSineOperation: public MathBaseOperation {
+public:
+ MathSineOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathCosineOperation: public MathBaseOperation {
+public:
+ MathCosineOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathTangentOperation: public MathBaseOperation {
+public:
+ MathTangentOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+class MathArcSineOperation: public MathBaseOperation {
+public:
+ MathArcSineOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathArcCosineOperation: public MathBaseOperation {
+public:
+ MathArcCosineOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathArcTangentOperation: public MathBaseOperation {
+public:
+ MathArcTangentOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathPowerOperation: public MathBaseOperation {
+public:
+ MathPowerOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathLogarithmOperation: public MathBaseOperation {
+public:
+ MathLogarithmOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathMinimumOperation: public MathBaseOperation {
+public:
+ MathMinimumOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathMaximumOperation: public MathBaseOperation {
+public:
+ MathMaximumOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathRoundOperation: public MathBaseOperation {
+public:
+ MathRoundOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathLessThanOperation: public MathBaseOperation {
+public:
+ MathLessThanOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+class MathGreaterThanOperation: public MathBaseOperation {
+public:
+ MathGreaterThanOperation() : MathBaseOperation() {}
+ void executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_MixAddOperation.cpp b/source/blender/compositor/operations/COM_MixAddOperation.cpp
new file mode 100644
index 00000000000..a4f601ae9e6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixAddOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixAddOperation.h"
+
+MixAddOperation::MixAddOperation(): MixBaseOperation()
+{
+}
+
+void MixAddOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float inputValue[4];
+
+ inputValueOperation->read(inputValue, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers);
+ inputColor2Operation->read(inputColor2, x, y, sampler, inputBuffers);
+
+
+ float value = inputValue[0];
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ outputValue[0] = inputColor1[0]+value*inputColor2[0];
+ outputValue[1] = inputColor1[1]+value*inputColor2[1];
+ outputValue[2] = inputColor1[2]+value*inputColor2[2];
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixAddOperation.h b/source/blender/compositor/operations/COM_MixAddOperation.h
new file mode 100644
index 00000000000..99a6af67d7d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixAddOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixAddOperation_h
+#define _COM_MixAddOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixAddOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixAddOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixBaseOperation.cpp b/source/blender/compositor/operations/COM_MixBaseOperation.cpp
new file mode 100644
index 00000000000..49ae67a06f7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixBaseOperation.cpp
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixBaseOperation.h"
+
+MixBaseOperation::MixBaseOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputValueOperation = NULL;
+ this->inputColor1Operation = NULL;
+ this->inputColor2Operation = NULL;
+ this->setUseValueAlphaMultiply(false);
+}
+
+void MixBaseOperation::initExecution()
+{
+ this->inputValueOperation = this->getInputSocketReader(0);
+ this->inputColor1Operation = this->getInputSocketReader(1);
+ this->inputColor2Operation = this->getInputSocketReader(2);
+}
+
+void MixBaseOperation::executePixel(float *outputColor, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+ outputColor[0] = valuem*(inputColor1[0])+value*(inputColor2[0]);
+ outputColor[1] = valuem*(inputColor1[1])+value*(inputColor2[1]);
+ outputColor[2] = valuem*(inputColor1[2])+value*(inputColor2[2]);
+ outputColor[3] = inputColor1[3];
+}
+
+void MixBaseOperation::deinitExecution()
+{
+ this->inputValueOperation = NULL;
+ this->inputColor1Operation = NULL;
+ this->inputColor2Operation = NULL;
+}
+
+void MixBaseOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ InputSocket *socket;
+ unsigned int tempPreferredResolution[] = {0,0};
+ unsigned int tempResolution[2];
+
+ socket = this->getInputSocket(1);
+ socket->determineResolution(tempResolution, tempPreferredResolution);
+ if ((tempResolution[0] != 0) && (tempResolution[1] != 0)) {
+ this->setResolutionInputSocketIndex(1);
+ }
+ else {
+ socket = this->getInputSocket(2);
+ tempPreferredResolution[0] = 0;
+ tempPreferredResolution[1] = 0;
+ socket->determineResolution(tempResolution, tempPreferredResolution);
+ if ((tempResolution[0] != 0) && (tempResolution[1] != 0)) {
+ this->setResolutionInputSocketIndex(2);
+ }
+ else {
+ this->setResolutionInputSocketIndex(0);
+ }
+ }
+ NodeOperation::determineResolution(resolution, preferredResolution);
+}
+
diff --git a/source/blender/compositor/operations/COM_MixBaseOperation.h b/source/blender/compositor/operations/COM_MixBaseOperation.h
new file mode 100644
index 00000000000..b9bb94d58d8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixBaseOperation.h
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixBaseOperation_h
+#define _COM_MixBaseOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixBaseOperation : public NodeOperation {
+protected:
+ /**
+ * Prefetched reference to the inputProgram
+ */
+ SocketReader *inputValueOperation;
+ SocketReader *inputColor1Operation;
+ SocketReader *inputColor2Operation;
+ bool valueAlphaMultiply;
+public:
+ /**
+ * Default constructor
+ */
+ MixBaseOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ void setUseValueAlphaMultiply(const bool value) {this->valueAlphaMultiply = value;}
+ bool useValueAlphaMultiply() {return this->valueAlphaMultiply;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixBlendOperation.cpp b/source/blender/compositor/operations/COM_MixBlendOperation.cpp
new file mode 100644
index 00000000000..579f15bcc27
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixBlendOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixBlendOperation.h"
+
+MixBlendOperation::MixBlendOperation(): MixBaseOperation()
+{
+}
+
+void MixBlendOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float inputValue[4];
+ float value;
+
+ inputValueOperation->read(inputValue, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers);
+ inputColor2Operation->read(inputColor2, x, y, sampler, inputBuffers);
+ value = inputValue[0];
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+ outputValue[0] = valuem*(inputColor1[0])+value*(inputColor2[0]);
+ outputValue[1] = valuem*(inputColor1[1])+value*(inputColor2[1]);
+ outputValue[2] = valuem*(inputColor1[2])+value*(inputColor2[2]);
+ outputValue[3] = inputColor1[3];
+}
diff --git a/source/blender/compositor/operations/COM_MixBlendOperation.h b/source/blender/compositor/operations/COM_MixBlendOperation.h
new file mode 100644
index 00000000000..da3342c0e4a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixBlendOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixBlendOperation_h
+#define _COM_MixBlendOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixBlendOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixBlendOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixBurnOperation.cpp b/source/blender/compositor/operations/COM_MixBurnOperation.cpp
new file mode 100644
index 00000000000..7cad107c5e9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixBurnOperation.cpp
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixBurnOperation.h"
+
+MixBurnOperation::MixBurnOperation(): MixBaseOperation()
+{
+}
+
+void MixBurnOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+ float tmp;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ tmp = valuem + value*inputColor2[0];
+ if (tmp <= 0.0f)
+ outputValue[0] = 0.0f;
+ else {
+ tmp = 1.0f - (1.0f - inputColor1[0]) / tmp;
+ if (tmp < 0.0f)
+ outputValue[0] = 0.0f;
+ else if (tmp > 1.0f)
+ outputValue[0] = 1.0f;
+ else
+ outputValue[0] = tmp;
+ }
+
+ tmp = valuem + value*inputColor2[1];
+ if (tmp <= 0.0f)
+ outputValue[1] = 0.0f;
+ else {
+ tmp = 1.0f - (1.0f - inputColor1[1]) / tmp;
+ if (tmp < 0.0f)
+ outputValue[1] = 0.0f;
+ else if (tmp > 1.0f)
+ outputValue[1] = 1.0f;
+ else
+ outputValue[1] = tmp;
+ }
+
+ tmp = valuem + value*inputColor2[2];
+ if (tmp <= 0.0f)
+ outputValue[2] = 0.0f;
+ else {
+ tmp = 1.0f - (1.0f - inputColor1[2]) / tmp;
+ if (tmp < 0.0f)
+ outputValue[2] = 0.0f;
+ else if (tmp > 1.0f)
+ outputValue[2] = 1.0f;
+ else
+ outputValue[2] = tmp;
+ }
+
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixBurnOperation.h b/source/blender/compositor/operations/COM_MixBurnOperation.h
new file mode 100644
index 00000000000..ff7de119605
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixBurnOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixBurnOperation_h
+#define _COM_MixBurnOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixBurnOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixBurnOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixColorOperation.cpp b/source/blender/compositor/operations/COM_MixColorOperation.cpp
new file mode 100644
index 00000000000..e14b10b305e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixColorOperation.cpp
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixColorOperation.h"
+
+extern "C" {
+ #include "BLI_math.h"
+}
+
+MixColorOperation::MixColorOperation(): MixBaseOperation()
+{
+}
+
+void MixColorOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ float colH,colS,colV;
+ rgb_to_hsv(inputColor2[0], inputColor2[1], inputColor2[2], &colH, &colS, &colV);
+ if (colS!=0.0f) {
+ float rH,rS,rV;
+ float tmpr,tmpg,tmpb;
+ rgb_to_hsv(inputColor1[0], inputColor1[1], inputColor1[2], &rH, &rS, &rV);
+ hsv_to_rgb(colH , colS, rV, &tmpr, &tmpg, &tmpb);
+ outputValue[0] = valuem*(inputColor1[0]) + value*tmpr;
+ outputValue[1] = valuem*(inputColor1[1]) + value*tmpg;
+ outputValue[2] = valuem*(inputColor1[2]) + value*tmpb;
+ }
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixColorOperation.h b/source/blender/compositor/operations/COM_MixColorOperation.h
new file mode 100644
index 00000000000..1a98e847ccd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixColorOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixColorOperation_h
+#define _COM_MixColorOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixColorOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixColorOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixDarkenOperation.cpp b/source/blender/compositor/operations/COM_MixDarkenOperation.cpp
new file mode 100644
index 00000000000..666db9d8f32
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDarkenOperation.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixDarkenOperation.h"
+
+MixDarkenOperation::MixDarkenOperation(): MixBaseOperation()
+{
+}
+
+void MixDarkenOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+ float tmp;
+ tmp=inputColor2[0]+((1.0f-inputColor2[0])*valuem);
+ if (tmp < inputColor1[0]) outputValue[0] = tmp;
+ else outputValue[0] = inputColor1[0];
+ tmp=inputColor2[1]+((1.0f-inputColor2[1])*valuem);
+ if (tmp < inputColor1[1]) outputValue[1] = tmp;
+ else outputValue[1] = inputColor1[1];
+ tmp=inputColor2[2]+((1.0f-inputColor2[2])*valuem);
+ if (tmp < inputColor1[2]) outputValue[2] = tmp;
+ else outputValue[2] = inputColor1[2];
+
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixDarkenOperation.h b/source/blender/compositor/operations/COM_MixDarkenOperation.h
new file mode 100644
index 00000000000..b1792d4930e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDarkenOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixDarkenOperation_h
+#define _COM_MixDarkenOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixDarkenOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixDarkenOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixDifferenceOperation.cpp b/source/blender/compositor/operations/COM_MixDifferenceOperation.cpp
new file mode 100644
index 00000000000..497bb9c2bb5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDifferenceOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixDifferenceOperation.h"
+#include "BLI_math.h"
+
+MixDifferenceOperation::MixDifferenceOperation(): MixBaseOperation()
+{
+}
+
+void MixDifferenceOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+ outputValue[0] = valuem*inputColor1[0] + value*fabsf(inputColor1[0]-inputColor2[0]);
+ outputValue[1] = valuem*inputColor1[1] + value*fabsf(inputColor1[1]-inputColor2[1]);
+ outputValue[2] = valuem*inputColor1[2] + value*fabsf(inputColor1[2]-inputColor2[2]);
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixDifferenceOperation.h b/source/blender/compositor/operations/COM_MixDifferenceOperation.h
new file mode 100644
index 00000000000..554d7b2f1fe
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDifferenceOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixDifferenceOperation_h
+#define _COM_MixDifferenceOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixDifferenceOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixDifferenceOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixDivideOperation.cpp b/source/blender/compositor/operations/COM_MixDivideOperation.cpp
new file mode 100644
index 00000000000..c522fcf225a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDivideOperation.cpp
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixDivideOperation.h"
+
+MixDivideOperation::MixDivideOperation(): MixBaseOperation()
+{
+}
+
+void MixDivideOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ if (inputColor2[0] != 0.0f)
+ outputValue[0] = valuem*(inputColor1[0]) + value*(inputColor1[0])/inputColor2[0];
+ else
+ outputValue[0] = 0.0f;
+ if (inputColor2[1] != 0.0f)
+ outputValue[1] = valuem*(inputColor1[1]) + value*(inputColor1[1])/inputColor2[1];
+ else
+ outputValue[1] = 0.0f;
+ if (inputColor2[2] != 0.0f)
+ outputValue[2] = valuem*(inputColor1[2]) + value*(inputColor1[2])/inputColor2[2];
+ else
+ outputValue[2] = 0.0f;
+
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixDivideOperation.h b/source/blender/compositor/operations/COM_MixDivideOperation.h
new file mode 100644
index 00000000000..e9c4cf81cd3
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDivideOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixDivideOperation_h
+#define _COM_MixDivideOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixDivideOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixDivideOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixDodgeOperation.cpp b/source/blender/compositor/operations/COM_MixDodgeOperation.cpp
new file mode 100644
index 00000000000..10c04ba376b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDodgeOperation.cpp
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixDodgeOperation.h"
+
+MixDodgeOperation::MixDodgeOperation(): MixBaseOperation()
+{
+}
+
+void MixDodgeOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+ float tmp;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+
+ if (inputColor1[0] != 0.0f) {
+ tmp = 1.0f - value*inputColor2[0];
+ if (tmp <= 0.0f)
+ outputValue[0] = 1.0f;
+ else {
+ tmp = inputColor1[0] / tmp;
+ if (tmp > 1.0f)
+ outputValue[0] = 1.0f;
+ else
+ outputValue[0] = tmp;
+ }
+ }
+ else
+ outputValue[0] = 0.0f;
+
+ if (inputColor1[1] != 0.0f) {
+ tmp = 1.0f - value*inputColor2[1];
+ if (tmp <= 0.0f)
+ outputValue[1] = 1.0f;
+ else {
+ tmp = inputColor1[1] / tmp;
+ if (tmp > 1.0f)
+ outputValue[1] = 1.0f;
+ else
+ outputValue[1] = tmp;
+ }
+ }
+ else
+ outputValue[1] = 0.0f;
+
+ if (inputColor1[2] != 0.0f) {
+ tmp = 1.0f - value*inputColor2[2];
+ if (tmp <= 0.0f)
+ outputValue[2] = 1.0f;
+ else {
+ tmp = inputColor1[2] / tmp;
+ if (tmp > 1.0f)
+ outputValue[2] = 1.0f;
+ else
+ outputValue[2] = tmp;
+ }
+ }
+ else
+ outputValue[2] = 0.0f;
+
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixDodgeOperation.h b/source/blender/compositor/operations/COM_MixDodgeOperation.h
new file mode 100644
index 00000000000..6baa73e8f6f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixDodgeOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixDodgeOperation_h
+#define _COM_MixDodgeOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixDodgeOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixDodgeOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixHueOperation.cpp b/source/blender/compositor/operations/COM_MixHueOperation.cpp
new file mode 100644
index 00000000000..de376f3500c
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixHueOperation.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixHueOperation.h"
+
+extern "C" {
+ #include "BLI_math.h"
+}
+
+MixHueOperation::MixHueOperation(): MixBaseOperation()
+{
+}
+
+void MixHueOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ float colH,colS,colV;
+ rgb_to_hsv(inputColor2[0], inputColor2[1], inputColor2[2], &colH, &colS, &colV);
+ if (colS!=0.0f) {
+ float rH,rS,rV;
+ float tmpr,tmpg,tmpb;
+ rgb_to_hsv(inputColor1[0], inputColor1[1], inputColor1[2], &rH, &rS, &rV);
+ hsv_to_rgb(colH , rS, rV, &tmpr, &tmpg, &tmpb);
+ outputValue[0] = valuem*(inputColor1[0]) + value*tmpr;
+ outputValue[1] = valuem*(inputColor1[1]) + value*tmpg;
+ outputValue[2] = valuem*(inputColor1[2]) + value*tmpb;
+ }
+ outputValue[3] = inputColor1[3];
+}
diff --git a/source/blender/compositor/operations/COM_MixHueOperation.h b/source/blender/compositor/operations/COM_MixHueOperation.h
new file mode 100644
index 00000000000..d3d1717f448
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixHueOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixHueOperation_h
+#define _COM_MixHueOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixHueOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixHueOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixLightenOperation.cpp b/source/blender/compositor/operations/COM_MixLightenOperation.cpp
new file mode 100644
index 00000000000..bc3e5090bd8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixLightenOperation.cpp
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixLightenOperation.h"
+
+MixLightenOperation::MixLightenOperation(): MixBaseOperation()
+{
+}
+
+void MixLightenOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float tmp;
+ tmp=value * inputColor2[0];
+ if (tmp > inputColor1[0]) outputValue[0] = tmp;
+ else outputValue[0] = inputColor1[0];
+ tmp=value * inputColor2[1];
+ if (tmp > inputColor1[1]) outputValue[1] = tmp;
+ else outputValue[1] = inputColor1[1];
+ tmp=value * inputColor2[2];
+ if (tmp > inputColor1[2]) outputValue[2] = tmp;
+ else outputValue[2] = inputColor1[2];
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixLightenOperation.h b/source/blender/compositor/operations/COM_MixLightenOperation.h
new file mode 100644
index 00000000000..73ac3e6e165
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixLightenOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixLightenOperation_h
+#define _COM_MixLightenOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixLightenOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixLightenOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixLinearLightOperation.cpp b/source/blender/compositor/operations/COM_MixLinearLightOperation.cpp
new file mode 100644
index 00000000000..b68064f0e47
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixLinearLightOperation.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixLinearLightOperation.h"
+
+MixLinearLightOperation::MixLinearLightOperation(): MixBaseOperation()
+{
+}
+
+void MixLinearLightOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ if (inputColor2[0] > 0.5f)
+ outputValue[0] = inputColor1[0] + value*(2.0f*(inputColor2[0]-0.5f));
+ else
+ outputValue[0] = inputColor1[0] + value*(2.0f*(inputColor2[0]) - 1.0f);
+ if (inputColor2[1] > 0.5f)
+ outputValue[1] = inputColor1[1] + value*(2.0f*(inputColor2[1]-0.5f));
+ else
+ outputValue[1] = inputColor1[1] + value*(2.0f*(inputColor2[1]) - 1.0f);
+ if (inputColor2[2] > 0.5f)
+ outputValue[2] = inputColor1[2] + value*(2.0f*(inputColor2[2]-0.5f));
+ else
+ outputValue[2] = inputColor1[2] + value*(2.0f*(inputColor2[2]) - 1.0f);
+
+ outputValue[3] = inputColor1[3];
+}
diff --git a/source/blender/compositor/operations/COM_MixLinearLightOperation.h b/source/blender/compositor/operations/COM_MixLinearLightOperation.h
new file mode 100644
index 00000000000..7e26b25e5c0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixLinearLightOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixLinearLightOperation_h
+#define _COM_MixLinearLightOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixLinearLightOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixLinearLightOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixMultiplyOperation.cpp b/source/blender/compositor/operations/COM_MixMultiplyOperation.cpp
new file mode 100644
index 00000000000..fdf8c1ca51b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixMultiplyOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixMultiplyOperation.h"
+
+MixMultiplyOperation::MixMultiplyOperation(): MixBaseOperation()
+{
+}
+
+void MixMultiplyOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float inputValue[4];
+
+ inputValueOperation->read(inputValue, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers);
+ inputColor2Operation->read(inputColor2, x, y, sampler, inputBuffers);
+
+ float value = inputValue[0];
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+ outputValue[0] = inputColor1[0] *(valuem+value*inputColor2[0]);
+ outputValue[1] = inputColor1[1] *(valuem+value*inputColor2[1]);
+ outputValue[2] = inputColor1[2] *(valuem+value*inputColor2[2]);
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixMultiplyOperation.h b/source/blender/compositor/operations/COM_MixMultiplyOperation.h
new file mode 100644
index 00000000000..5d4468e7271
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixMultiplyOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixMultiplyOperation_h
+#define _COM_MixMultiplyOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixMultiplyOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixMultiplyOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixOverlayOperation.cpp b/source/blender/compositor/operations/COM_MixOverlayOperation.cpp
new file mode 100644
index 00000000000..0025daeb3f5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixOverlayOperation.cpp
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixOverlayOperation.h"
+
+MixOverlayOperation::MixOverlayOperation(): MixBaseOperation()
+{
+}
+
+void MixOverlayOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+
+ float valuem = 1.0f - value;
+
+ if (inputColor1[0] < 0.5f) {
+ outputValue[0] = inputColor1[0] * (valuem + 2.0f*value*inputColor2[0]);
+ }
+ else {
+ outputValue[0] = 1.0f - (valuem + 2.0f*value*(1.0f - inputColor2[0])) * (1.0f - inputColor1[0]);
+ }
+ if (inputColor1[1] < 0.5f) {
+ outputValue[1] = inputColor1[1] * (valuem + 2.0f*value*inputColor2[1]);
+ }
+ else {
+ outputValue[1] = 1.0f - (valuem + 2.0f*value*(1.0f - inputColor2[1])) * (1.0f - inputColor1[1]);
+ }
+ if (inputColor1[2] < 0.5f) {
+ outputValue[2] = inputColor1[2] * (valuem + 2.0f*value*inputColor2[2]);
+ }
+ else {
+ outputValue[2] = 1.0f - (valuem + 2.0f*value*(1.0f - inputColor2[2])) * (1.0f - inputColor1[2]);
+ }
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixOverlayOperation.h b/source/blender/compositor/operations/COM_MixOverlayOperation.h
new file mode 100644
index 00000000000..dd1d16a53d3
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixOverlayOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixOverlayOperation_h
+#define _COM_MixOverlayOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixOverlayOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixOverlayOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixSaturationOperation.cpp b/source/blender/compositor/operations/COM_MixSaturationOperation.cpp
new file mode 100644
index 00000000000..f6f6ec73c6e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixSaturationOperation.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixSaturationOperation.h"
+
+extern "C" {
+ #include "BLI_math.h"
+}
+
+MixSaturationOperation::MixSaturationOperation(): MixBaseOperation()
+{
+}
+
+void MixSaturationOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ float rH,rS,rV;
+ rgb_to_hsv(inputColor1[0], inputColor1[1], inputColor1[2], &rH, &rS, &rV);
+ if (rS!=0.0f) {
+ float colH,colS,colV;
+ rgb_to_hsv(inputColor2[0], inputColor2[1], inputColor2[2], &colH, &colS, &colV);
+ hsv_to_rgb(rH , (valuem*rS+value*colS), rV, &outputValue[0], &outputValue[1], &outputValue[2]);
+ }
+ outputValue[3] = inputColor1[3];
+}
diff --git a/source/blender/compositor/operations/COM_MixSaturationOperation.h b/source/blender/compositor/operations/COM_MixSaturationOperation.h
new file mode 100644
index 00000000000..7e746c02e09
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixSaturationOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixSaturationOperation_h
+#define _COM_MixSaturationOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixSaturationOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixSaturationOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixScreenOperation.cpp b/source/blender/compositor/operations/COM_MixScreenOperation.cpp
new file mode 100644
index 00000000000..a1a98bd82a2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixScreenOperation.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixScreenOperation.h"
+
+MixScreenOperation::MixScreenOperation(): MixBaseOperation()
+{
+}
+
+void MixScreenOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float valuev[4];
+
+ inputValueOperation->read(valuev, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ float value = valuev[0];
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ outputValue[0] = 1.0f - (valuem + value*(1.0f-inputColor2[0])) *(1.0f-inputColor1[0]);
+ outputValue[1] = 1.0f - (valuem + value*(1.0f-inputColor2[1])) *(1.0f-inputColor1[1]);
+ outputValue[2] = 1.0f - (valuem + value*(1.0f-inputColor2[2])) *(1.0f-inputColor1[2]);
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixScreenOperation.h b/source/blender/compositor/operations/COM_MixScreenOperation.h
new file mode 100644
index 00000000000..6522907f295
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixScreenOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixScreenOperation_h
+#define _COM_MixScreenOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixScreenOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixScreenOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixSoftLightOperation.cpp b/source/blender/compositor/operations/COM_MixSoftLightOperation.cpp
new file mode 100644
index 00000000000..ea6a3ddd498
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixSoftLightOperation.cpp
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixSoftLightOperation.h"
+
+MixSoftLightOperation::MixSoftLightOperation(): MixBaseOperation()
+{
+}
+
+void MixSoftLightOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])\
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+ float scr, scg, scb;
+
+ /* first calculate non-fac based Screen mix */
+ scr = 1.0f - (1.0f - inputColor2[0]) * (1.0f - inputColor1[0]);
+ scg = 1.0f - (1.0f - inputColor2[1]) * (1.0f - inputColor1[1]);
+ scb = 1.0f - (1.0f - inputColor2[2]) * (1.0f - inputColor1[2]);
+
+ outputValue[0] = valuem*(inputColor1[0]) + value*(((1.0f - inputColor1[0]) * inputColor2[0] * (inputColor1[0])) + (inputColor1[0] * scr));
+ outputValue[1] = valuem*(inputColor1[1]) + value*(((1.0f - inputColor1[1]) * inputColor2[1] * (inputColor1[1])) + (inputColor1[1] * scg));
+ outputValue[2] = valuem*(inputColor1[2]) + value*(((1.0f - inputColor1[2]) * inputColor2[2] * (inputColor1[2])) + (inputColor1[2] * scb));
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixSoftLightOperation.h b/source/blender/compositor/operations/COM_MixSoftLightOperation.h
new file mode 100644
index 00000000000..fcbd8dab8b8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixSoftLightOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixSoftLightOperation_h
+#define _COM_MixSoftLightOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixSoftLightOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixSoftLightOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixSubtractOperation.cpp b/source/blender/compositor/operations/COM_MixSubtractOperation.cpp
new file mode 100644
index 00000000000..57320dcd611
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixSubtractOperation.cpp
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixSubtractOperation.h"
+
+MixSubtractOperation::MixSubtractOperation(): MixBaseOperation()
+{
+}
+
+void MixSubtractOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ outputValue[0] = inputColor1[0]-value*(inputColor2[0]);
+ outputValue[1] = inputColor1[1]-value*(inputColor2[1]);
+ outputValue[2] = inputColor1[2]-value*(inputColor2[2]);
+ outputValue[3] = inputColor1[3];
+}
+
diff --git a/source/blender/compositor/operations/COM_MixSubtractOperation.h b/source/blender/compositor/operations/COM_MixSubtractOperation.h
new file mode 100644
index 00000000000..441857a8aca
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixSubtractOperation.h
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixSubtractOperation_h
+#define _COM_MixSubtractOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixSubtractOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixSubtractOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MixValueOperation.cpp b/source/blender/compositor/operations/COM_MixValueOperation.cpp
new file mode 100644
index 00000000000..8c43bb6af8c
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixValueOperation.cpp
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MixValueOperation.h"
+
+extern "C" {
+ #include "BLI_math.h"
+}
+
+MixValueOperation::MixValueOperation(): MixBaseOperation()
+{
+}
+
+void MixValueOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float inputColor1[4];
+ float inputColor2[4];
+ float value;
+
+ inputValueOperation->read(&value, x, y, sampler, inputBuffers);
+ inputColor1Operation->read(&inputColor1[0], x, y, sampler, inputBuffers);
+ inputColor2Operation->read(&inputColor2[0], x, y, sampler, inputBuffers);
+
+ if (this->useValueAlphaMultiply()) {
+ value *= inputColor2[3];
+ }
+ float valuem = 1.0f - value;
+
+ float rH,rS,rV;
+ float colH,colS,colV;
+ rgb_to_hsv(inputColor1[0], inputColor1[1], inputColor1[2], &rH, &rS, &rV);
+ rgb_to_hsv(inputColor2[0], inputColor2[1], inputColor2[2], &colH, &colS, &colV);
+ hsv_to_rgb(rH , rS, (valuem*rV+value*colV), &outputValue[0], &outputValue[1], &outputValue[2]);
+ outputValue[3] = inputColor1[3];
+}
diff --git a/source/blender/compositor/operations/COM_MixValueOperation.h b/source/blender/compositor/operations/COM_MixValueOperation.h
new file mode 100644
index 00000000000..89461b3ba40
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MixValueOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MixValueOperation_h
+#define _COM_MixValueOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MixValueOperation : public MixBaseOperation {
+public:
+ /**
+ * Default constructor
+ */
+ MixValueOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MovieClipAttributeOperation.cpp b/source/blender/compositor/operations/COM_MovieClipAttributeOperation.cpp
new file mode 100644
index 00000000000..a81288be3f7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MovieClipAttributeOperation.cpp
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MovieClipAttributeOperation.h"
+extern "C" {
+ #include "BKE_tracking.h"
+}
+MovieClipAttributeOperation::MovieClipAttributeOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_VALUE);
+ this->valueSet = false;
+ this->framenumber = 0;
+ this->attribute = MCA_X;
+}
+
+void MovieClipAttributeOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ if (!valueSet) {
+ float loc[2], scale, angle;
+ loc[0] = 0.0f;
+ loc[1] = 0.0f;
+ scale = 1.0f;
+ angle = 0.0f;
+ if (clip) {
+ BKE_tracking_stabilization_data(&clip->tracking, framenumber, getWidth(), getHeight(), loc, &scale, &angle);
+ }
+ switch (this->attribute) {
+ case MCA_SCALE:
+ this->value = scale;
+ break;
+ case MCA_ANGLE:
+ this->value = angle;
+ break;
+ case MCA_X:
+ this->value = loc[0];
+ break;
+ case MCA_Y:
+ this->value = loc[1];
+ break;
+ }
+ valueSet = true;
+ }
+ outputValue[0] = this->value;
+}
+
+void MovieClipAttributeOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ resolution[0] = preferredResolution[0];
+ resolution[1] = preferredResolution[1];
+}
+
diff --git a/source/blender/compositor/operations/COM_MovieClipAttributeOperation.h b/source/blender/compositor/operations/COM_MovieClipAttributeOperation.h
new file mode 100644
index 00000000000..aca2ec2eff7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MovieClipAttributeOperation.h
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MovieClipAttributeOperation_h
+#define _COM_MovieClipAttributeOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_movieclip_types.h"
+
+typedef enum MovieClipAttribute {
+ MCA_SCALE,
+ MCA_X,
+ MCA_Y,
+ MCA_ANGLE
+} MovieClipAttribute;
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class MovieClipAttributeOperation : public NodeOperation {
+private:
+ MovieClip * clip;
+ float value;
+ bool valueSet;
+ int framenumber;
+ MovieClipAttribute attribute;
+public:
+ /**
+ * Default constructor
+ */
+ MovieClipAttributeOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ void setMovieClip(MovieClip *clip) {this->clip = clip;}
+ void setFramenumber(int framenumber) {this->framenumber = framenumber;}
+ void setAttribute(MovieClipAttribute attribute) {this->attribute = attribute;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_MovieClipOperation.cpp b/source/blender/compositor/operations/COM_MovieClipOperation.cpp
new file mode 100644
index 00000000000..14687133194
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MovieClipOperation.cpp
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MovieClipOperation.h"
+
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "BLI_math.h"
+extern "C" {
+ #include "BKE_movieclip.h"
+ #include "IMB_imbuf.h"
+}
+#include "BKE_image.h"
+
+MovieClipOperation::MovieClipOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+ this->movieClip = NULL;
+ this->movieClipBuffer = NULL;
+ this->movieClipUser = NULL;
+ this->movieClipwidth = 0;
+ this->movieClipheight = 0;
+ this->framenumber = 0;
+}
+
+
+void MovieClipOperation::initExecution()
+{
+ if (this->movieClip) {
+ BKE_movieclip_user_set_frame(this->movieClipUser, this->framenumber);
+ ImBuf *ibuf;
+ ibuf = BKE_movieclip_get_ibuf(this->movieClip, this->movieClipUser);
+ if (ibuf) {
+ this->movieClipBuffer = ibuf;
+ if (ibuf->rect_float == NULL || ibuf->userflags&IB_RECT_INVALID) {
+ IMB_float_from_rect(ibuf);
+ ibuf->userflags&= ~IB_RECT_INVALID;
+ }
+ }
+ }
+}
+
+void MovieClipOperation::deinitExecution()
+{
+ this->movieClipBuffer = NULL;
+}
+
+void MovieClipOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ ImBuf *ibuf;
+ if (this->movieClip) {
+ ibuf = BKE_movieclip_get_ibuf(this->movieClip, this->movieClipUser);
+ if (ibuf) {
+ resolution[0] = ibuf->x;
+ resolution[1] = ibuf->y;
+ }
+ }
+}
+
+void MovieClipOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ if (this->movieClipBuffer == NULL || x < 0 || y < 0 || x >= this->getWidth() || y >= this->getHeight() ) {
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 0.0f;
+ }
+ else {
+ switch (sampler) {
+ case COM_PS_NEAREST:
+ neareast_interpolation_color(this->movieClipBuffer, NULL, color, x, y);
+ break;
+ case COM_PS_BILINEAR:
+ bilinear_interpolation_color(this->movieClipBuffer, NULL, color, x, y);
+ break;
+ case COM_PS_BICUBIC:
+ bicubic_interpolation_color(this->movieClipBuffer, NULL, color, x, y);
+ break;
+ }
+ }
+}
diff --git a/source/blender/compositor/operations/COM_MovieClipOperation.h b/source/blender/compositor/operations/COM_MovieClipOperation.h
new file mode 100644
index 00000000000..f52a9973fc5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MovieClipOperation.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+
+#ifndef _COM_ImageOperation_h
+#define _COM_ImageOperation_h
+
+#include "COM_NodeOperation.h"
+#include "DNA_scene_types.h"
+#include "DNA_movieclip_types.h"
+#include "BLI_listbase.h"
+#include "IMB_imbuf_types.h"
+
+/**
+ * Base class for all renderlayeroperations
+ *
+ * @todo: rename to operation.
+ */
+class MovieClipOperation : public NodeOperation {
+protected:
+ MovieClip *movieClip;
+ MovieClipUser *movieClipUser;
+ ImBuf *movieClipBuffer;
+ int movieClipheight;
+ int movieClipwidth;
+ int framenumber;
+
+ /**
+ * Determine the output resolution. The resolution is retrieved from the Renderer
+ */
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+public:
+ MovieClipOperation();
+
+ void initExecution();
+ void deinitExecution();
+ void setMovieClip(MovieClip *image) {this->movieClip = image;}
+ void setMovieClipUser(MovieClipUser *imageuser) {this->movieClipUser = imageuser;}
+
+ void setFramenumber(int framenumber) {this->framenumber = framenumber;}
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_MovieDistortionOperation.cpp b/source/blender/compositor/operations/COM_MovieDistortionOperation.cpp
new file mode 100644
index 00000000000..1699707ab3a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MovieDistortionOperation.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_MovieDistortionOperation.h"
+
+extern "C" {
+ #include "BKE_tracking.h"
+
+#include "BLI_linklist.h"
+}
+
+
+vector<DistortionCache*> s_cache;
+
+
+MovieDistortionOperation::MovieDistortionOperation(bool distortion) : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+ this->movieClip = NULL;
+ this->cache = NULL;
+ this->distortion = distortion;
+}
+void MovieDistortionOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ if (this->movieClip) {
+ for (int i = 0 ; i < s_cache.size() ; i ++) {
+ DistortionCache *c = (DistortionCache*)s_cache[i];
+ if (c->isCacheFor(this->movieClip, this->width, this->height, this->distortion)) {
+ this->cache = c;
+ return;
+ }
+ }
+ DistortionCache *newC = new DistortionCache(this->movieClip, this->width, this->height, this->distortion);
+ s_cache.push_back(newC);
+ this->cache = newC;
+ }
+ else {
+ this->cache = NULL;
+ }
+}
+
+void MovieDistortionOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+ this->movieClip = NULL;
+}
+
+
+void MovieDistortionOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+
+ if (this->cache != NULL) {
+ float u, v;
+ this->cache->getUV(&this->movieClip->tracking, x, y, &u, &v);
+ this->inputOperation->read(color, u, v, sampler, inputBuffers);
+ }
+ else {
+ this->inputOperation->read(color, x, y, sampler, inputBuffers);
+ }
+}
+
+bool MovieDistortionOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmax = input->xmax + 100;
+ newInput.xmin = input->xmin - 100;
+ newInput.ymax = input->ymax + 100;
+ newInput.ymin = input->ymin - 100;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_MovieDistortionOperation.h b/source/blender/compositor/operations/COM_MovieDistortionOperation.h
new file mode 100644
index 00000000000..fcdf7090566
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MovieDistortionOperation.h
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_MovieDistortionOperation_h_
+#define _COM_MovieDistortionOperation_h_
+
+#include "COM_NodeOperation.h"
+#include "DNA_movieclip_types.h"
+extern "C" {
+ #include "BKE_tracking.h"
+}
+
+class DistortionCache {
+private:
+ float k1;
+ float k2;
+ float k3;
+ int width;
+ int height;
+ bool inverted;
+ float *buffer;
+ int *bufferCalculated;
+public:
+ DistortionCache(MovieClip *movieclip, int width, int height, bool inverted) {
+ this->k1 = movieclip->tracking.camera.k1;
+ this->k2 = movieclip->tracking.camera.k2;
+ this->k3 = movieclip->tracking.camera.k3;
+ this->width = width;
+ this->height = height;
+ this->inverted = inverted;
+ this->bufferCalculated = new int[this->width*this->height];
+ this->buffer = new float[this->width*this->height*2];
+ for (int i = 0 ; i < this->width*this->height ; i ++) {
+ this->bufferCalculated[i] = 0;
+ }
+ }
+ bool isCacheFor(MovieClip *movieclip, int width, int height, bool inverted) {
+ return this->k1 == movieclip->tracking.camera.k1 &&
+ this->k2 == movieclip->tracking.camera.k2 &&
+ this->k3 == movieclip->tracking.camera.k3 &&
+ this->inverted == inverted &&
+ this->width == width &&
+ this->height == height;
+ }
+
+ void getUV(MovieTracking *trackingData, int x, int y, float *u, float*v) {
+ if (x<0 || x >= this->width || y <0 || y >= this->height) {
+ *u = x;
+ *v = y;
+ } else {
+ int offset = y * this->width + x;
+ int offset2 = offset*2;
+ if (!bufferCalculated[offset]) {
+ float in[2];
+ float out[2];
+ in[0] = x;
+ in[1] = y;
+ if (inverted) {
+ BKE_tracking_invert_intrinsics(trackingData, in, out);
+ } else {
+ BKE_tracking_apply_intrinsics(trackingData, in, out);
+ }
+ buffer[offset2] = out[0];
+ buffer[offset2+1] = out[1];
+ bufferCalculated[offset] = 1;
+ }
+ *u = buffer[offset2];
+ *v = buffer[offset2+1];
+ }
+ }
+};
+
+class MovieDistortionOperation: public NodeOperation {
+private:
+ DistortionCache *cache;
+ SocketReader *inputOperation;
+ MovieClip * movieClip;
+
+protected:
+ bool distortion;
+
+public:
+ MovieDistortionOperation(bool distortion);
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setMovieClip(MovieClip *clip) {this->movieClip = clip;}
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp b/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
new file mode 100644
index 00000000000..f95dd12a81a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MultilayerImageOperation.cpp
@@ -0,0 +1,105 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#include "COM_MultilayerImageOperation.h"
+extern "C" {
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+MultilayerBaseOperation::MultilayerBaseOperation(int pass): BaseImageOperation()
+{
+ this->passId = pass;
+}
+ImBuf *MultilayerBaseOperation::getImBuf()
+{
+ RenderPass *rpass;
+ rpass = (RenderPass *)BLI_findlink(&this->renderlayer->passes, this->passId);
+ if (rpass) {
+ this->imageUser->pass = this->passId;
+ BKE_image_multilayer_index(image->rr, this->imageUser);
+ return BaseImageOperation::getImBuf();
+ }
+ return NULL;
+}
+
+void MultilayerColorOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ int yi = y;
+ int xi = x;
+ if (this->imageBuffer == NULL || xi < 0 || yi < 0 || xi >= this->getWidth() || yi >= this->getHeight() ) {
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 0.0f;
+ }
+ else {
+ if (this->numberOfChannels == 4) {
+ switch (sampler) {
+ case COM_PS_NEAREST:
+ neareast_interpolation_color(this->buffer, NULL, color, x, y);
+ break;
+ case COM_PS_BILINEAR:
+ bilinear_interpolation_color(this->buffer, NULL, color, x, y);
+ break;
+ case COM_PS_BICUBIC:
+ bicubic_interpolation_color(this->buffer, NULL, color, x, y);
+ break;
+ }
+ }
+ else {
+ int offset = (yi*this->getWidth()+xi)*3;
+ color[0] = this->imageBuffer[offset];
+ color[1] = this->imageBuffer[offset+1];
+ color[2] = this->imageBuffer[offset+2];
+ }
+ }
+}
+
+void MultilayerValueOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ int yi = y;
+ int xi = x;
+ if (this->imageBuffer == NULL || xi < 0 || yi < 0 || xi >= this->getWidth() || yi >= this->getHeight() ) {
+ color[0] = 0.0f;
+ }
+ else {
+ float result = this->imageBuffer[yi*this->getWidth()+xi];
+ color[0] = result;
+ }
+}
+
+void MultilayerVectorOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ int yi = y;
+ int xi = x;
+ if (this->imageBuffer == NULL || xi < 0 || yi < 0 || xi >= this->getWidth() || yi >= this->getHeight() ) {
+ color[0] = 0.0f;
+ }
+ else {
+ int offset = (yi*this->getWidth()+xi)*3;
+ color[0] = this->imageBuffer[offset];
+ color[1] = this->imageBuffer[offset+1];
+ color[2] = this->imageBuffer[offset+2];
+ }
+}
diff --git a/source/blender/compositor/operations/COM_MultilayerImageOperation.h b/source/blender/compositor/operations/COM_MultilayerImageOperation.h
new file mode 100644
index 00000000000..809253e532a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_MultilayerImageOperation.h
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+
+#ifndef _COM_MultilayerImageOperation_h
+#define _COM_MultilayerImageOperation_h
+
+#include "COM_ImageOperation.h"
+
+class MultilayerBaseOperation: public BaseImageOperation {
+private:
+ int passId;
+ RenderLayer *renderlayer;
+protected:
+ ImBuf *getImBuf();
+public:
+ /**
+ * Constructor
+ */
+ MultilayerBaseOperation(int pass);
+ void setRenderLayer(RenderLayer *renderlayer) {this->renderlayer = renderlayer;}
+};
+
+class MultilayerColorOperation: public MultilayerBaseOperation {
+public:
+ MultilayerColorOperation(int pass): MultilayerBaseOperation(pass) {
+ this->addOutputSocket(COM_DT_COLOR);
+ }
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+class MultilayerValueOperation: public MultilayerBaseOperation {
+public:
+ MultilayerValueOperation(int pass): MultilayerBaseOperation(pass) {
+ this->addOutputSocket(COM_DT_VALUE);
+ }
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+class MultilayerVectorOperation: public MultilayerBaseOperation {
+public:
+ MultilayerVectorOperation(int pass): MultilayerBaseOperation(pass) {
+ this->addOutputSocket(COM_DT_VECTOR);
+ }
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_NormalizeOperation.cpp b/source/blender/compositor/operations/COM_NormalizeOperation.cpp
new file mode 100644
index 00000000000..d144739f845
--- /dev/null
+++ b/source/blender/compositor/operations/COM_NormalizeOperation.cpp
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#include "COM_NormalizeOperation.h"
+
+NormalizeOperation::NormalizeOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->imageReader = NULL;
+ this->cachedInstance = NULL;
+ this->setComplex(true);
+}
+void NormalizeOperation::initExecution()
+{
+ this->imageReader = this->getInputSocketReader(0);
+ NodeOperation::initMutex();
+}
+
+void NormalizeOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data)
+{
+ /* using generic two floats struct to store x: min y: mult */
+ NodeTwoFloats *minmult = (NodeTwoFloats *)data;
+
+ float output[4];
+ this->imageReader->read(output, x, y, inputBuffers, NULL);
+
+ color[0] = (output[0] - minmult->x) * minmult->y;
+}
+
+void NormalizeOperation::deinitExecution()
+{
+ this->imageReader = NULL;
+ if (this->cachedInstance) {
+ delete cachedInstance;
+ }
+ NodeOperation::deinitMutex();
+}
+
+bool NormalizeOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti imageInput;
+
+ NodeOperation *operation = getInputOperation(0);
+ imageInput.xmax = operation->getWidth();
+ imageInput.xmin = 0;
+ imageInput.ymax = operation->getHeight();
+ imageInput.ymin = 0;
+
+ if (operation->determineDependingAreaOfInterest(&imageInput, readOperation, output) ) {
+ return true;
+ }
+ return false;
+}
+
+/* The code below assumes all data is inside range +- this, and that input buffer is single channel */
+#define BLENDER_ZMAX 10000.0f
+
+void *NormalizeOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ BLI_mutex_lock(getMutex());
+
+ if (this->cachedInstance == NULL) {
+ MemoryBuffer *tile = (MemoryBuffer*)imageReader->initializeTileData(rect, memoryBuffers);
+ /* using generic two floats struct to store x: min y: mult */
+ NodeTwoFloats *minmult = new NodeTwoFloats();
+
+ float *buffer = tile->getBuffer();
+ int p = tile->getWidth() * tile->getHeight();
+ float *bc = buffer;
+
+ float minv = 1.0f+BLENDER_ZMAX;
+ float maxv = -1.0f-BLENDER_ZMAX;
+
+ float value;
+ while (p--) {
+ value=bc[0];
+ maxv = max(value, maxv);
+ minv = min(value, minv);
+ bc+=4;
+ }
+
+ minmult->x = minv;
+ /* The rare case of flat buffer would cause a divide by 0 */
+ minmult->y = ((maxv!=minv)? 1.0f/(maxv-minv):0.f);
+
+ this->cachedInstance = minmult;
+ }
+
+ BLI_mutex_unlock(getMutex());
+ return this->cachedInstance;
+}
+
+void NormalizeOperation::deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data)
+{
+}
diff --git a/source/blender/compositor/operations/COM_NormalizeOperation.h b/source/blender/compositor/operations/COM_NormalizeOperation.h
new file mode 100644
index 00000000000..765b8847384
--- /dev/null
+++ b/source/blender/compositor/operations/COM_NormalizeOperation.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2012, 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.
+ *
+ * Contributor:
+ * Dalai Felinto
+ */
+
+#ifndef _COM_NormalizeOperation_h
+#define _COM_NormalizeOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief base class of normalize, implementing the simple normalize
+ * @ingroup operation
+ */
+class NormalizeOperation : public NodeOperation {
+protected:
+ /**
+ * @brief Cached reference to the reader
+ */
+ SocketReader * imageReader;
+
+ /**
+ * @brief temporarily cache of the execution storage
+ * it stores x->min and y->mult
+ */
+ NodeTwoFloats * cachedInstance;
+
+public:
+ NormalizeOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ void deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_OpenCLKernels.cl b/source/blender/compositor/operations/COM_OpenCLKernels.cl
new file mode 100644
index 00000000000..d462f5d8250
--- /dev/null
+++ b/source/blender/compositor/operations/COM_OpenCLKernels.cl
@@ -0,0 +1,9 @@
+/// This file contains all opencl kernels for node-operation implementations
+
+__kernel void testKernel(__global __write_only image2d_t output){
+ int x = get_global_id(0);
+ int y = get_global_id(1);
+ int2 coords = {x, y};
+ float4 color = {0.0f, 1.0f, 0.0f, 1.0f};
+ write_imagef(output, coords, color);
+}
diff --git a/source/blender/compositor/operations/COM_OpenCLKernels.cl.cpp b/source/blender/compositor/operations/COM_OpenCLKernels.cl.cpp
new file mode 100644
index 00000000000..66db4a1c86b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_OpenCLKernels.cl.cpp
@@ -0,0 +1,14 @@
+/// @todo: this source needs to be generated from COM_OpenCLKernels.cl.
+/// not implemented yet. new data to h
+
+const char *sourcecode = "/// This file contains all opencl kernels for node-operation implementations \n" \
+"\n" \
+"__kernel void testKernel(__global __write_only image2d_t output) {\n" \
+" int x = get_global_id(0);\n" \
+" int y = get_global_id(1);\n" \
+" int2 coords = {x, y}; \n" \
+" float4 color = {0.0f, 1.0f, 0.0f, 1.0f};\n" \
+" write_imagef(output, coords, color);\n" \
+"}\n" \
+"\0\n";
+
diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.cpp b/source/blender/compositor/operations/COM_OutputFileOperation.cpp
new file mode 100644
index 00000000000..8d39e987bd4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_OutputFileOperation.cpp
@@ -0,0 +1,263 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#include "COM_OutputFileOperation.h"
+#include "COM_SocketConnection.h"
+#include <string.h>
+#include "BLI_listbase.h"
+#include "BLI_path_util.h"
+#include "BLI_string.h"
+#include "DNA_scene_types.h"
+#include "BKE_image.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+
+extern "C" {
+ #include "MEM_guardedalloc.h"
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+static int get_datatype_size(DataType datatype)
+{
+ switch (datatype) {
+ case COM_DT_VALUE: return 1;
+ case COM_DT_VECTOR: return 3;
+ case COM_DT_COLOR: return 4;
+ default: return 0;
+ }
+}
+
+static float *init_buffer(unsigned int width, unsigned int height, DataType datatype)
+{
+ // When initializing the tree during initial load the width and height can be zero.
+ if (width != 0 && height != 0) {
+ int size = get_datatype_size(datatype);
+ return (float *)MEM_callocN(width*height*size*sizeof(float), "OutputFile buffer");
+ }
+ else
+ return NULL;
+}
+
+static void write_buffer_rect(rcti *rect, MemoryBuffer** memoryBuffers, const bNodeTree *tree,
+ SocketReader *reader, float *buffer, unsigned int width, DataType datatype)
+{
+ float color[4];
+ int i, size = get_datatype_size(datatype);
+
+ if (!buffer) return;
+ int x1 = rect->xmin;
+ int y1 = rect->ymin;
+ int x2 = rect->xmax;
+ int y2 = rect->ymax;
+ int offset = (y1*width + x1 ) * size;
+ int x;
+ int y;
+ bool breaked = false;
+
+ for (y = y1 ; y < y2 && (!breaked); y++) {
+ for (x = x1 ; x < x2 && (!breaked) ; x++) {
+ reader->read(color, x, y, COM_PS_NEAREST, memoryBuffers);
+
+ for (i=0; i < size; ++i)
+ buffer[offset+i] = color[i];
+ offset += size;
+
+ if (tree->test_break && tree->test_break(tree->tbh))
+ breaked = true;
+ }
+ offset += (width-(x2-x1)) * size;
+ }
+}
+
+
+OutputSingleLayerOperation::OutputSingleLayerOperation(
+ const Scene *scene, const bNodeTree *tree, DataType datatype, ImageFormatData *format, const char *path)
+{
+ this->scene = scene;
+ this->tree = tree;
+
+ this->addInputSocket(datatype);
+
+ this->outputBuffer = NULL;
+ this->datatype = datatype;
+ this->imageInput = NULL;
+
+ this->format = format;
+ BLI_strncpy(this->path, path, sizeof(this->path));
+}
+
+void OutputSingleLayerOperation::initExecution()
+{
+ this->imageInput = getInputSocketReader(0);
+ this->outputBuffer = init_buffer(this->getWidth(), this->getHeight(), this->datatype);
+}
+
+void OutputSingleLayerOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers)
+{
+ write_buffer_rect(rect, memoryBuffers, this->tree, imageInput, this->outputBuffer, this->getWidth(), this->datatype);
+}
+
+void OutputSingleLayerOperation::deinitExecution()
+{
+ if (this->getWidth() * this->getHeight() != 0) {
+
+ int size = get_datatype_size(this->datatype);
+ ImBuf *ibuf = IMB_allocImBuf(this->getWidth(), this->getHeight(), size*8, 0);
+ Main *bmain = G.main; /* TODO, have this passed along */
+ char filename[FILE_MAX];
+
+ ibuf->channels = size;
+ ibuf->rect_float = this->outputBuffer;
+ ibuf->mall |= IB_rectfloat;
+ ibuf->dither = scene->r.dither_intensity;
+
+ if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
+ ibuf->profile = IB_PROFILE_LINEAR_RGB;
+
+ BKE_makepicstring(filename, this->path, bmain->name, this->scene->r.cfra, this->format->imtype,
+ (this->scene->r.scemode & R_EXTENSION), true);
+
+ if (0 == BKE_imbuf_write(ibuf, filename, this->format))
+ printf("Cannot save Node File Output to %s\n", filename);
+ else
+ printf("Saved: %s\n", filename);
+
+ IMB_freeImBuf(ibuf);
+ }
+ this->outputBuffer = NULL;
+ this->imageInput = NULL;
+}
+
+
+OutputOpenExrLayer::OutputOpenExrLayer(const char *name, DataType datatype)
+{
+ BLI_strncpy(this->name, name, sizeof(this->name));
+ this->datatype = datatype;
+ /* these are created in initExecution */
+ this->outputBuffer = 0;
+ this->imageInput = 0;
+}
+
+OutputOpenExrMultiLayerOperation::OutputOpenExrMultiLayerOperation(
+ const Scene *scene, const bNodeTree *tree, const char *path, char exr_codec)
+{
+ this->scene = scene;
+ this->tree = tree;
+
+ BLI_strncpy(this->path, path, sizeof(this->path));
+ this->exr_codec = exr_codec;
+}
+
+void OutputOpenExrMultiLayerOperation::add_layer(const char *name, DataType datatype)
+{
+ this->addInputSocket(datatype);
+ layers.push_back(OutputOpenExrLayer(name, datatype));
+}
+
+void OutputOpenExrMultiLayerOperation::initExecution()
+{
+ for (int i=0; i < layers.size(); ++i) {
+ layers[i].imageInput = getInputSocketReader(i);
+ layers[i].outputBuffer = init_buffer(this->getWidth(), this->getHeight(), layers[i].datatype);
+ }
+}
+
+void OutputOpenExrMultiLayerOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers)
+{
+ for (int i=0; i < layers.size(); ++i) {
+ write_buffer_rect(rect, memoryBuffers, this->tree, layers[i].imageInput, layers[i].outputBuffer, this->getWidth(), layers[i].datatype);
+ }
+}
+
+void OutputOpenExrMultiLayerOperation::deinitExecution()
+{
+ unsigned int width = this->getWidth();
+ unsigned int height = this->getHeight();
+ if (width != 0 && height != 0) {
+ Main *bmain = G.main; /* TODO, have this passed along */
+ char filename[FILE_MAX];
+ void *exrhandle = IMB_exr_get_handle();
+
+ BKE_makepicstring(filename, this->path, bmain->name, this->scene->r.cfra, R_IMF_IMTYPE_MULTILAYER,
+ (this->scene->r.scemode & R_EXTENSION), true);
+ BLI_make_existing_file(filename);
+
+ for (int i=0; i < layers.size(); ++i) {
+ char channelname[EXR_TOT_MAXNAME];
+ BLI_strncpy(channelname, layers[i].name, sizeof(channelname)-2);
+ char *channelname_ext = channelname + strlen(channelname);
+
+ float *buf = layers[i].outputBuffer;
+
+ /* create channels */
+ switch (layers[i].datatype) {
+ case COM_DT_VALUE:
+ strcpy(channelname_ext, ".V");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 1, width, buf);
+ break;
+ case COM_DT_VECTOR:
+ strcpy(channelname_ext, ".X");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 3, 3*width, buf);
+ strcpy(channelname_ext, ".Y");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 3, 3*width, buf+1);
+ strcpy(channelname_ext, ".Z");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 3, 3*width, buf+2);
+ break;
+ case COM_DT_COLOR:
+ strcpy(channelname_ext, ".R");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 4, 4*width, buf);
+ strcpy(channelname_ext, ".G");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 4, 4*width, buf+1);
+ strcpy(channelname_ext, ".B");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 4, 4*width, buf+2);
+ strcpy(channelname_ext, ".A");
+ IMB_exr_add_channel(exrhandle, 0, channelname, 4, 4*width, buf+3);
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ /* when the filename has no permissions, this can fail */
+ if (IMB_exr_begin_write(exrhandle, filename, width, height, this->exr_codec)) {
+ IMB_exr_write_channels(exrhandle);
+ }
+ else {
+ /* TODO, get the error from openexr's exception */
+ /* XXX nice way to do report? */
+ printf("Error Writing Render Result, see console\n");
+ }
+
+ IMB_exr_close(exrhandle);
+ for (int i=0; i < layers.size(); ++i) {
+ if (layers[i].outputBuffer) {
+ MEM_freeN(layers[i].outputBuffer);
+ layers[i].outputBuffer = NULL;
+ }
+
+ layers[i].imageInput = NULL;
+ }
+ }
+}
diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.h b/source/blender/compositor/operations/COM_OutputFileOperation.h
new file mode 100644
index 00000000000..0e37432ca5b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_OutputFileOperation.h
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ * Lukas Tönne
+ */
+
+#ifndef _COM_OutputFileOperation_h
+#define _COM_OutputFileOperation_h
+#include "COM_NodeOperation.h"
+#include "BLI_rect.h"
+#include "BKE_utildefines.h"
+
+#include "intern/openexr/openexr_multi.h"
+
+/* Writes the image to a single-layer file. */
+class OutputSingleLayerOperation : public NodeOperation {
+private:
+ const Scene *scene;
+ const bNodeTree *tree;
+
+ ImageFormatData *format;
+ char path[FILE_MAX];
+
+ float *outputBuffer;
+ DataType datatype;
+ SocketReader *imageInput;
+
+public:
+ OutputSingleLayerOperation(const Scene *scene, const bNodeTree *tree, DataType datatype, ImageFormatData *format, const char *path);
+
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers);
+ bool isOutputOperation(bool rendering) const {return true;}
+ void initExecution();
+ void deinitExecution();
+ const int getRenderPriority() const {return 7;}
+};
+
+/* extra info for OpenEXR layers */
+struct OutputOpenExrLayer {
+ OutputOpenExrLayer(const char *name, DataType datatype);
+
+ char name[EXR_TOT_MAXNAME-2];
+ float *outputBuffer;
+ DataType datatype;
+ SocketReader *imageInput;
+};
+
+/* Writes inputs into OpenEXR multilayer channels. */
+class OutputOpenExrMultiLayerOperation : public NodeOperation {
+private:
+ typedef std::vector<OutputOpenExrLayer> LayerList;
+
+ const Scene *scene;
+ const bNodeTree *tree;
+
+ char path[FILE_MAX];
+ char exr_codec;
+ LayerList layers;
+
+public:
+ OutputOpenExrMultiLayerOperation(const Scene *scene, const bNodeTree *tree, const char *path, char exr_codec);
+
+ void add_layer(const char *name, DataType datatype);
+
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers);
+ bool isOutputOperation(bool rendering) const {return true;}
+ void initExecution();
+ void deinitExecution();
+ const int getRenderPriority() const {return 7;}
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_PreviewOperation.cpp b/source/blender/compositor/operations/COM_PreviewOperation.cpp
new file mode 100644
index 00000000000..2b02546a8f9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_PreviewOperation.cpp
@@ -0,0 +1,136 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_PreviewOperation.h"
+#include "COM_SocketConnection.h"
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "BKE_image.h"
+#include "WM_api.h"
+#include "WM_types.h"
+#include "PIL_time.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_color.h"
+#include "COM_defines.h"
+#include "BLI_math.h"
+extern "C" {
+ #include "MEM_guardedalloc.h"
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+
+PreviewOperation::PreviewOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->outputBuffer = NULL;
+ this->input = NULL;
+ this->divider = 1.0f;
+ this->node = NULL;
+ this->priority = 0;
+}
+
+void PreviewOperation::initExecution()
+{
+ this->input = getInputSocketReader(0);
+ if (!this->node->preview) {
+ this->node->preview = (bNodePreview*)MEM_callocN(sizeof(bNodePreview), "node preview");
+ }
+ else {
+ if (this->getWidth() == (unsigned int)this->node->preview->xsize && this->getHeight() == (unsigned int)this->node->preview->ysize) {
+ this->outputBuffer = this->node->preview->rect;
+ }
+ }
+
+ if (this->outputBuffer == NULL) {
+ this->outputBuffer = (unsigned char*)MEM_callocN(sizeof(unsigned char)*4*getWidth()*getHeight(), "PreviewOperation");
+ if (this->node->preview->rect) {
+ MEM_freeN(this->node->preview->rect);
+ }
+ this->node->preview->xsize = getWidth();
+ this->node->preview->ysize = getHeight();
+ this->node->preview->rect = outputBuffer;
+ }
+}
+
+void PreviewOperation::deinitExecution()
+{
+ this->outputBuffer = NULL;
+ this->input = NULL;
+}
+
+void PreviewOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer **memoryBuffers)
+{
+ int offset;
+ float color[4];
+ for (int y = rect->ymin ; y < rect->ymax ; y++) {
+ offset = (y * getWidth() + rect->xmin)*4;
+ for (int x = rect->xmin ; x < rect->xmax ; x++) {
+ float rx = floor(x/divider);
+ float ry = floor(y/divider);
+
+ color[0] = 0.0f;
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 1.0f;
+ input->read(color, rx, ry, COM_PS_NEAREST, memoryBuffers);
+ /// @todo: linear conversion only when scene color management is selected, also check predivide.
+ linearrgb_to_srgb_v4(color, color);
+ F4TOCHAR4(color, outputBuffer+offset);
+ offset +=4;
+ }
+ }
+}
+bool PreviewOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmin = input->xmin/divider;
+ newInput.xmax = input->xmax/divider;
+ newInput.ymin = input->ymin/divider;
+ newInput.ymax = input->ymax/divider;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
+void PreviewOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ NodeOperation::determineResolution(resolution, preferredResolution);
+ int width = resolution[0];
+ int height = resolution[1];
+ this->divider = 0.0f;
+ if (width > height) {
+ divider = COM_PREVIEW_SIZE / (width-1);
+ }
+ else {
+ divider = COM_PREVIEW_SIZE / (height-1);
+ }
+ width = width * divider;
+ height = height * divider;
+
+ resolution[0] = width;
+ resolution[1] = height;
+}
+
+const int PreviewOperation::getRenderPriority() const
+{
+ return this->priority;
+}
diff --git a/source/blender/compositor/operations/COM_PreviewOperation.h b/source/blender/compositor/operations/COM_PreviewOperation.h
new file mode 100644
index 00000000000..8450b7fc556
--- /dev/null
+++ b/source/blender/compositor/operations/COM_PreviewOperation.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_PreviewOperation_h
+#define _COM_PreviewOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_image_types.h"
+#include "BLI_rect.h"
+
+class PreviewOperation : public NodeOperation {
+protected:
+ unsigned char *outputBuffer;
+
+ /**
+ * @brief holds reference to the SDNA bNode, where this nodes will render the preview image for
+ */
+ bNode *node;
+ const bNodeTree *tree;
+ SocketReader *input;
+ float divider;
+ int priority;
+
+public:
+ PreviewOperation();
+ bool isOutputOperation(bool rendering) const {return true;}
+ void initExecution();
+ void deinitExecution();
+ const int getRenderPriority() const;
+
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer **memoryBuffers);
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+ void setbNode(bNode *node) { this->node = node;}
+ void setbNodeTree(const bNodeTree *tree) { this->tree = tree;}
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void setPriority(int priority) { this->priority = priority; }
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.cpp b/source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.cpp
new file mode 100644
index 00000000000..7695e0f63c2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.cpp
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ProjectorLensDistortionOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+ProjectorLensDistortionOperation::ProjectorLensDistortionOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+ this->inputProgram = NULL;
+}
+void ProjectorLensDistortionOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+ kr = 0.25f*MAX2(MIN2(this->dispersion, 1.f), 0.f);
+ kr2 = kr * 20;
+}
+
+void *ProjectorLensDistortionOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ void *buffer = inputProgram->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void ProjectorLensDistortionOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float inputValue[4];
+ const float height = this->getHeight();
+ const float width = this->getWidth();
+ const float v = (y + 0.5f)/height;
+ const float u = (x + 0.5f)/width;
+ MemoryBuffer * inputBuffer = (MemoryBuffer*)data;
+ inputBuffer->readCubic(inputValue, (u*width + kr2) - 0.5f, v*height - 0.5f);
+ color[0] = inputValue[0];
+ inputBuffer->read(inputValue, x, y);
+ color[1] = inputValue[1];
+ inputBuffer->readCubic(inputValue, (u*width - kr2) - 0.5f, v*height - 0.5f);
+ color[2] = inputValue[2];
+ color[3] = 1.0f;
+}
+
+void ProjectorLensDistortionOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
+
+bool ProjectorLensDistortionOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ newInput.ymax = input->ymax;
+ newInput.ymin = input->ymin;
+ newInput.xmin = input->xmin-kr2-2;
+ newInput.xmax = input->xmax+kr2+2;
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.h b/source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.h
new file mode 100644
index 00000000000..c8788e100c8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ProjectorLensDistortionOperation.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ProjectorLensDistortionOperation_h
+#define _COM_ProjectorLensDistortionOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+class ProjectorLensDistortionOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+
+ NodeLensDist * data;
+
+ float dispersion;
+ float kr, kr2;
+public:
+ ProjectorLensDistortionOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeLensDist *data) {this->data = data;}
+ void setDispertion(float dispersion) {this->dispersion = dispersion;}
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_QualityStepHelper.cpp b/source/blender/compositor/operations/COM_QualityStepHelper.cpp
new file mode 100644
index 00000000000..f2d700292a4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_QualityStepHelper.cpp
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_QualityStepHelper.h"
+
+QualityStepHelper::QualityStepHelper()
+{
+ this->quality = COM_QUALITY_HIGH;
+ this->step = 1;
+ this->offsetadd = 4;
+}
+
+void QualityStepHelper::initExecution(QualityHelper helper)
+{
+ switch (helper) {
+ case COM_QH_INCREASE:
+ switch (this->quality) {
+ case COM_QUALITY_HIGH:
+ default:
+ this->step = 1;
+ this->offsetadd = 4;
+ break;
+ case COM_QUALITY_MEDIUM:
+ this->step = 2;
+ this->offsetadd = 8;
+ break;
+ case COM_QUALITY_LOW:
+ this->step = 3;
+ this->offsetadd = 12;
+ break;
+ }
+ break;
+ case COM_QH_MULTIPLY:
+ switch (this->quality) {
+ case COM_QUALITY_HIGH:
+ default:
+ this->step = 1;
+ this->offsetadd = 4;
+ break;
+ case COM_QUALITY_MEDIUM:
+ this->step = 2;
+ this->offsetadd = 8;
+ break;
+ case COM_QUALITY_LOW:
+ this->step = 4;
+ this->offsetadd = 16;
+ break;
+ }
+ break;
+ }
+}
+
diff --git a/source/blender/compositor/operations/COM_QualityStepHelper.h b/source/blender/compositor/operations/COM_QualityStepHelper.h
new file mode 100644
index 00000000000..80b25684c5e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_QualityStepHelper.h
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_QualityStepHelper_h
+#define _COM_QualityStepHelper_h
+#include "COM_defines.h"
+
+typedef enum QualityHelper {
+ COM_QH_INCREASE,
+ COM_QH_MULTIPLY
+} QualityHelper;
+
+class QualityStepHelper {
+private:
+ CompositorQuality quality;
+ int step;
+ int offsetadd;
+
+protected:
+ /**
+ * Initialize the execution
+ */
+ void initExecution(QualityHelper helper);
+
+ inline int getStep() const {return this->step;}
+ inline int getOffsetAdd() const {return this->offsetadd;}
+
+public:
+ QualityStepHelper();
+
+
+ void setQuality(CompositorQuality quality) {this->quality = quality;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ReadBufferOperation.cpp b/source/blender/compositor/operations/COM_ReadBufferOperation.cpp
new file mode 100644
index 00000000000..d7f95c10cfb
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ReadBufferOperation.cpp
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ReadBufferOperation.h"
+#include "COM_WriteBufferOperation.h"
+#include "COM_defines.h"
+
+ReadBufferOperation::ReadBufferOperation():NodeOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+ this->offset = 0;
+}
+
+void *ReadBufferOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ return getInputMemoryBuffer(memoryBuffers);
+}
+
+void ReadBufferOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ if (this->memoryProxy != NULL) {
+ WriteBufferOperation * operation = memoryProxy->getWriteBufferOperation();
+ operation->determineResolution(resolution, preferredResolution);
+ operation->setResolution(resolution);
+
+ /// @todo: may not occur!, but does with blur node
+ if (memoryProxy->getExecutor()) memoryProxy->getExecutor()->setResolution(resolution);
+ }
+}
+void ReadBufferOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ MemoryBuffer *inputBuffer = inputBuffers[this->offset];
+ if (inputBuffer) {
+ if (sampler == COM_PS_NEAREST) {
+ inputBuffer->read(color, x, y);
+ }
+ else {
+ inputBuffer->readCubic(color, x, y);
+ }
+ }
+}
+
+void ReadBufferOperation::executePixel(float *color, float x, float y, float dx, float dy, MemoryBuffer *inputBuffers[])
+{
+ MemoryBuffer *inputBuffer = inputBuffers[this->offset];
+ if (inputBuffer) {
+ inputBuffer->readEWA(color, x, y, dx, dy);
+ }
+}
+
+bool ReadBufferOperation::determineDependingAreaOfInterest(rcti * input, ReadBufferOperation *readOperation, rcti *output)
+{
+ if (this==readOperation) {
+ BLI_init_rcti(output, input->xmin, input->xmax, input->ymin, input->ymax);
+ return true;
+ }
+ return false;
+}
diff --git a/source/blender/compositor/operations/COM_ReadBufferOperation.h b/source/blender/compositor/operations/COM_ReadBufferOperation.h
new file mode 100644
index 00000000000..d58d131264b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ReadBufferOperation.h
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ReadBufferOperation_h
+#define _COM_ReadBufferOperation_h
+
+#include "COM_NodeOperation.h"
+#include "COM_MemoryProxy.h"
+
+class ReadBufferOperation: public NodeOperation {
+private:
+ MemoryProxy *memoryProxy;
+ unsigned int offset;
+public:
+ ReadBufferOperation();
+ int isBufferOperation() {return true;}
+ void setMemoryProxy(MemoryProxy *memoryProxy) {this->memoryProxy = memoryProxy;}
+ MemoryProxy *getMemoryProxy() {return this->memoryProxy;}
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+ void executePixel(float *color, float x, float y, float dx, float dy, MemoryBuffer *inputBuffers[]);
+ const bool isReadBufferOperation() const {return true;}
+ void setOffset(unsigned int offset) {this->offset = offset;}
+ unsigned int getOffset() {return this->offset;}
+ bool determineDependingAreaOfInterest(rcti * input, ReadBufferOperation *readOperation, rcti *output);
+ MemoryBuffer *getInputMemoryBuffer(MemoryBuffer** memoryBuffers) {return memoryBuffers[offset];}
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersAOOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersAOOperation.cpp
new file mode 100644
index 00000000000..dad082cf0ca
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersAOOperation.cpp
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersAOOperation.h"
+
+RenderLayersAOOperation::RenderLayersAOOperation() :RenderLayersBaseProg(SCE_PASS_AO, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
+
diff --git a/source/blender/compositor/operations/COM_RenderLayersAOOperation.h b/source/blender/compositor/operations/COM_RenderLayersAOOperation.h
new file mode 100644
index 00000000000..71b0b885e81
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersAOOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersAOOperation_h
+#define _COM_RenderLayersAOOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersAOOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersAOOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersAlphaProg.cpp b/source/blender/compositor/operations/COM_RenderLayersAlphaProg.cpp
new file mode 100644
index 00000000000..ccb7dd91c04
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersAlphaProg.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersAlphaProg.h"
+
+RenderLayersAlphaProg::RenderLayersAlphaProg() :RenderLayersBaseProg(SCE_PASS_COMBINED, 4)
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
+
+void RenderLayersAlphaProg::executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ int ix = x;
+ int iy = y;
+ float * inputBuffer = this->getInputBuffer();
+
+ if (inputBuffer == NULL || ix < 0 || iy < 0 || ix >= (int)this->getWidth() || iy >= (int)this->getHeight() ) {
+ output[0] = 0.0f;
+ output[1] = 0.0f;
+ output[2] = 0.0f;
+ output[3] = 0.0f;
+ }
+ else {
+ unsigned int offset = (iy*this->getWidth()+ix) * 4;
+ output[0] = inputBuffer[offset+3];
+ output[1] = 0.0f;
+ output[2] = 0.0f;
+ output[3] = 0.0f;
+ }
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersAlphaProg.h b/source/blender/compositor/operations/COM_RenderLayersAlphaProg.h
new file mode 100644
index 00000000000..da808f49fdf
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersAlphaProg.h
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersAlphaProg_h
+#define _COM_RenderLayersAlphaProg_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersAlphaProg : public RenderLayersBaseProg {
+public:
+ RenderLayersAlphaProg();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersBaseProg.cpp b/source/blender/compositor/operations/COM_RenderLayersBaseProg.cpp
new file mode 100644
index 00000000000..35c8753ded6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersBaseProg.cpp
@@ -0,0 +1,138 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersBaseProg.h"
+
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+ #include "RE_shader_ext.h"
+ #include "RE_render_ext.h"
+}
+
+RenderLayersBaseProg::RenderLayersBaseProg(int renderpass, int elementsize): NodeOperation()
+{
+ this->renderpass = renderpass;
+ this->setScene(NULL);
+ this->inputBuffer = NULL;
+ this->elementsize = elementsize;
+}
+
+
+void RenderLayersBaseProg::initExecution()
+{
+ Scene * scene = this->getScene();
+ Render *re = (scene)? RE_GetRender(scene->id.name): NULL;
+ RenderResult *rr = NULL;
+
+ if (re)
+ rr = RE_AcquireResultRead(re);
+
+ if (rr) {
+ SceneRenderLayer *srl = (SceneRenderLayer*)BLI_findlink(&scene->r.layers, getLayerId());
+ if (srl) {
+
+ RenderLayer *rl = RE_GetRenderLayer(rr, srl->name);
+ if (rl && rl->rectf) {
+ this->inputBuffer = RE_RenderLayerGetPass(rl, renderpass);
+
+ if (this->inputBuffer == NULL || renderpass == SCE_PASS_COMBINED) {
+ this->inputBuffer = rl->rectf;
+ }
+ }
+ }
+ }
+ if (re) {
+ RE_ReleaseResult(re);
+ re = NULL;
+ }
+}
+
+void RenderLayersBaseProg::executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ int ix = x;
+ int iy = y;
+
+ if (inputBuffer == NULL || ix < 0 || iy < 0 || ix >= (int)this->getWidth() || iy >= (int)this->getHeight() ) {
+ output[0] = 0.0f;
+ output[1] = 0.0f;
+ output[2] = 0.0f;
+ output[3] = 0.0f;
+ }
+ else {
+ unsigned int offset = (iy*this->getWidth()+ix) * elementsize;
+ if (elementsize == 1) {
+ output[0] = inputBuffer[offset];
+ output[1] = 0.0f;
+ output[2] = 0.0f;
+ output[3] = 0.0f;
+ }
+ else if (elementsize == 3) {
+ output[0] = inputBuffer[offset];
+ output[1] = inputBuffer[offset+1];
+ output[2] = inputBuffer[offset+2];
+ output[3] = 1.0f;
+ }
+ else {
+ output[0] = inputBuffer[offset];
+ output[1] = inputBuffer[offset+1];
+ output[2] = inputBuffer[offset+2];
+ output[3] = inputBuffer[offset+3];
+ }
+ }
+}
+
+void RenderLayersBaseProg::deinitExecution()
+{
+ this->inputBuffer = NULL;
+}
+
+void RenderLayersBaseProg::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ Scene *sce = this->getScene();
+ Render *re = (sce) ? RE_GetRender(sce->id.name) : NULL;
+ RenderResult *rr = NULL;
+
+ resolution[0] = 0;
+ resolution[1] = 0;
+
+ if (re)
+ rr = RE_AcquireResultRead(re);
+
+ if (rr) {
+ SceneRenderLayer *srl = (SceneRenderLayer*)BLI_findlink(&sce->r.layers, getLayerId());
+ if (srl) {
+ RenderLayer *rl = RE_GetRenderLayer(rr, srl->name);
+ if (rl && rl->rectf) {
+ resolution[0]=rl->rectx;
+ resolution[1]=rl->recty;
+ }
+ }
+ }
+
+ if (re)
+ RE_ReleaseResult(re);
+
+}
+
diff --git a/source/blender/compositor/operations/COM_RenderLayersBaseProg.h b/source/blender/compositor/operations/COM_RenderLayersBaseProg.h
new file mode 100644
index 00000000000..64e2496621f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersBaseProg.h
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+
+#ifndef _COM_RenderLayersBaseProg_h
+#define _COM_RenderLayersBaseProg_h
+
+#include "COM_NodeOperation.h"
+#include "DNA_scene_types.h"
+#include "BLI_listbase.h"
+#include "BKE_image.h"
+extern "C" {
+ #include "RE_pipeline.h"
+ #include "RE_shader_ext.h"
+ #include "RE_render_ext.h"
+ #include "MEM_guardedalloc.h"
+}
+
+/**
+ * Base class for all renderlayeroperations
+ *
+ * @todo: rename to operation.
+ */
+class RenderLayersBaseProg : public NodeOperation {
+private:
+ /**
+ * Reference to the scene object.
+ */
+ Scene *scene;
+
+ /**
+ * layerId of the layer where this operation needs to get its data from
+ */
+ short layerId;
+
+ /**
+ * cached instance to the float buffer inside the layer
+ */
+ float *inputBuffer;
+
+ /**
+ * renderpass where this operation needs to get its data from
+ */
+ int renderpass;
+
+ int elementsize;
+
+protected:
+ /**
+ * Constructor
+ */
+ RenderLayersBaseProg(int renderpass, int elementsize);
+
+ /**
+ * Determine the output resolution. The resolution is retrieved from the Renderer
+ */
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ /**
+ * retrieve the reference to the float buffer of the renderer.
+ */
+ inline float *getInputBuffer() {return this->inputBuffer;}
+
+public:
+ /**
+ * setter for the scene field. Will be called from
+ * @see RenderLayerNode to set the actual scene where
+ * the data will be retrieved from.
+ */
+ void setScene(Scene *scene) {this->scene = scene;}
+ Scene *getScene() {return this->scene;}
+ void setLayerId(short layerId) {this->layerId = layerId;}
+ short getLayerId() {return this->layerId;}
+ void initExecution();
+ void deinitExecution();
+ void executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersColorOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersColorOperation.cpp
new file mode 100644
index 00000000000..aee68afe55d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersColorOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersColorOperation.h"
+
+RenderLayersColorOperation::RenderLayersColorOperation() :RenderLayersBaseProg(SCE_PASS_RGBA, 4)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersColorOperation.h b/source/blender/compositor/operations/COM_RenderLayersColorOperation.h
new file mode 100644
index 00000000000..4f4dfbfb6f3
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersColorOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersColorOperation_h
+#define _COM_RenderLayersColorOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersColorOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersColorOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.cpp
new file mode 100644
index 00000000000..fc1df884181
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersCyclesOperation.h"
+
+RenderLayersCyclesOperation::RenderLayersCyclesOperation(int pass) :RenderLayersBaseProg(pass, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.h b/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.h
new file mode 100644
index 00000000000..baa53c7388b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersCyclesOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersCyclesOperation_h
+#define _COM_RenderLayersCyclesOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersCyclesOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersCyclesOperation(int pass);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersDepthProg.cpp b/source/blender/compositor/operations/COM_RenderLayersDepthProg.cpp
new file mode 100644
index 00000000000..985b1c1bee8
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersDepthProg.cpp
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersDepthProg.h"
+
+RenderLayersDepthProg::RenderLayersDepthProg() :RenderLayersBaseProg(SCE_PASS_Z, 1)
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
+
diff --git a/source/blender/compositor/operations/COM_RenderLayersDepthProg.h b/source/blender/compositor/operations/COM_RenderLayersDepthProg.h
new file mode 100644
index 00000000000..fdbe25c818e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersDepthProg.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersDepthProg_h
+#define _COM_RenderLayersDepthProg_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersDepthProg : public RenderLayersBaseProg {
+public:
+ RenderLayersDepthProg();
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.cpp
new file mode 100644
index 00000000000..ad73490b92d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersDiffuseOperation.h"
+
+RenderLayersDiffuseOperation::RenderLayersDiffuseOperation() :RenderLayersBaseProg(SCE_PASS_DIFFUSE, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.h b/source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.h
new file mode 100644
index 00000000000..8c20d6f497d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersDiffuseOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersDiffuseOperation_h
+#define _COM_RenderLayersDiffuseOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersDiffuseOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersDiffuseOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersEmitOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersEmitOperation.cpp
new file mode 100644
index 00000000000..7537e2d10fc
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersEmitOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersEmitOperation.h"
+
+RenderLayersEmitOperation::RenderLayersEmitOperation() :RenderLayersBaseProg(SCE_PASS_EMIT, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersEmitOperation.h b/source/blender/compositor/operations/COM_RenderLayersEmitOperation.h
new file mode 100644
index 00000000000..c003cb2f87b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersEmitOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersEmitOperation_h
+#define _COM_RenderLayersEmitOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersEmitOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersEmitOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.cpp
new file mode 100644
index 00000000000..0ace9a7c58f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersEnvironmentOperation.h"
+
+RenderLayersEnvironmentOperation::RenderLayersEnvironmentOperation() :RenderLayersBaseProg(SCE_PASS_ENVIRONMENT, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.h b/source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.h
new file mode 100644
index 00000000000..b9310a1778b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersEnvironmentOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersEnvironmentOperation_h
+#define _COM_RenderLayersEnvironmentOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersEnvironmentOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersEnvironmentOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersImageProg.cpp b/source/blender/compositor/operations/COM_RenderLayersImageProg.cpp
new file mode 100644
index 00000000000..264e2f0fd79
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersImageProg.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersImageProg.h"
+
+RenderLayersColourProg::RenderLayersColourProg() :RenderLayersBaseProg(SCE_PASS_COMBINED, 4)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersImageProg.h b/source/blender/compositor/operations/COM_RenderLayersImageProg.h
new file mode 100644
index 00000000000..b6ddac425cb
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersImageProg.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersColourProg_h
+#define _COM_RenderLayersColourProg_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+/// @TODO rename to image operation
+class RenderLayersColourProg : public RenderLayersBaseProg {
+public:
+ RenderLayersColourProg();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersIndirectOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersIndirectOperation.cpp
new file mode 100644
index 00000000000..645f9768eb2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersIndirectOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersIndirectOperation.h"
+
+RenderLayersIndirectOperation::RenderLayersIndirectOperation() :RenderLayersBaseProg(SCE_PASS_INDIRECT, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersIndirectOperation.h b/source/blender/compositor/operations/COM_RenderLayersIndirectOperation.h
new file mode 100644
index 00000000000..d64207a4355
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersIndirectOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersIndirectOperation_h
+#define _COM_RenderLayersIndirectOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersIndirectOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersIndirectOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.cpp
new file mode 100644
index 00000000000..e5cef7753f2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersMaterialIndexOperation.h"
+
+RenderLayersMaterialIndexOperation::RenderLayersMaterialIndexOperation() :RenderLayersBaseProg(SCE_PASS_INDEXMA, 1)
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.h b/source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.h
new file mode 100644
index 00000000000..d06568f5a10
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersMaterialIndexOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersMaterialIndexOperation_h
+#define _COM_RenderLayersMaterialIndexOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersMaterialIndexOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersMaterialIndexOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersMistOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersMistOperation.cpp
new file mode 100644
index 00000000000..fae6c73f747
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersMistOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersMistOperation.h"
+
+RenderLayersMistOperation::RenderLayersMistOperation() :RenderLayersBaseProg(SCE_PASS_MIST, 1)
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersMistOperation.h b/source/blender/compositor/operations/COM_RenderLayersMistOperation.h
new file mode 100644
index 00000000000..8c0ee9bfcab
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersMistOperation.h
@@ -0,0 +1,11 @@
+#ifndef _COM_RenderLayersMistOperation_h
+#define _COM_RenderLayersMistOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersMistOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersMistOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersNormalOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersNormalOperation.cpp
new file mode 100644
index 00000000000..67ea4d68204
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersNormalOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersNormalOperation.h"
+
+RenderLayersNormalOperation::RenderLayersNormalOperation() :RenderLayersBaseProg(SCE_PASS_NORMAL, 3)
+{
+ this->addOutputSocket(COM_DT_VECTOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersNormalOperation.h b/source/blender/compositor/operations/COM_RenderLayersNormalOperation.h
new file mode 100644
index 00000000000..39b2040863a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersNormalOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersNormalOperation_h
+#define _COM_RenderLayersNormalOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersNormalOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersNormalOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.cpp
new file mode 100644
index 00000000000..821ff447112
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersObjectIndexOperation.h"
+
+RenderLayersObjectIndexOperation::RenderLayersObjectIndexOperation() :RenderLayersBaseProg(SCE_PASS_INDEXOB, 1)
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.h b/source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.h
new file mode 100644
index 00000000000..e8a1602cbfc
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersObjectIndexOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersObjectIndexOperation_h
+#define _COM_RenderLayersObjectIndexOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersObjectIndexOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersObjectIndexOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersReflectionOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersReflectionOperation.cpp
new file mode 100644
index 00000000000..e53144d3501
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersReflectionOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersReflectionOperation.h"
+
+RenderLayersReflectionOperation::RenderLayersReflectionOperation() :RenderLayersBaseProg(SCE_PASS_REFLECT, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersReflectionOperation.h b/source/blender/compositor/operations/COM_RenderLayersReflectionOperation.h
new file mode 100644
index 00000000000..3dc7148930b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersReflectionOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersReflectionOperation_h
+#define _COM_RenderLayersReflectionOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersReflectionOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersReflectionOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersRefractionOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersRefractionOperation.cpp
new file mode 100644
index 00000000000..6e333175220
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersRefractionOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersRefractionOperation.h"
+
+RenderLayersRefractionOperation::RenderLayersRefractionOperation() :RenderLayersBaseProg(SCE_PASS_REFRACT, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersRefractionOperation.h b/source/blender/compositor/operations/COM_RenderLayersRefractionOperation.h
new file mode 100644
index 00000000000..02ac7aa14f4
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersRefractionOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersRefractionOperation_h
+#define _COM_RenderLayersRefractionOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersRefractionOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersRefractionOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersShadowOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersShadowOperation.cpp
new file mode 100644
index 00000000000..ce492d54a79
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersShadowOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersShadowOperation.h"
+
+RenderLayersShadowOperation::RenderLayersShadowOperation() :RenderLayersBaseProg(SCE_PASS_SHADOW, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersShadowOperation.h b/source/blender/compositor/operations/COM_RenderLayersShadowOperation.h
new file mode 100644
index 00000000000..af35915c2ee
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersShadowOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersShadowOperation_h
+#define _COM_RenderLayersShadowOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersShadowOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersShadowOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersSpecularOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersSpecularOperation.cpp
new file mode 100644
index 00000000000..7b7d223680c
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersSpecularOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersSpecularOperation.h"
+
+RenderLayersSpecularOperation::RenderLayersSpecularOperation() :RenderLayersBaseProg(SCE_PASS_SPEC, 3)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersSpecularOperation.h b/source/blender/compositor/operations/COM_RenderLayersSpecularOperation.h
new file mode 100644
index 00000000000..fc7d77976a3
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersSpecularOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersSpecularOperation_h
+#define _COM_RenderLayersSpecularOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersSpecularOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersSpecularOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersSpeedOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersSpeedOperation.cpp
new file mode 100644
index 00000000000..213d044a9bd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersSpeedOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersSpeedOperation.h"
+
+RenderLayersSpeedOperation::RenderLayersSpeedOperation() :RenderLayersBaseProg(SCE_PASS_VECTOR, 4)
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersSpeedOperation.h b/source/blender/compositor/operations/COM_RenderLayersSpeedOperation.h
new file mode 100644
index 00000000000..d341aa43950
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersSpeedOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersSpeedOperation_h
+#define _COM_RenderLayersSpeedOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersSpeedOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersSpeedOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RenderLayersUVOperation.cpp b/source/blender/compositor/operations/COM_RenderLayersUVOperation.cpp
new file mode 100644
index 00000000000..e3917d7796b
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersUVOperation.cpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RenderLayersUVOperation.h"
+
+RenderLayersUVOperation::RenderLayersUVOperation() :RenderLayersBaseProg(SCE_PASS_UV, 3)
+{
+ this->addOutputSocket(COM_DT_VECTOR);
+}
diff --git a/source/blender/compositor/operations/COM_RenderLayersUVOperation.h b/source/blender/compositor/operations/COM_RenderLayersUVOperation.h
new file mode 100644
index 00000000000..3068372a66c
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RenderLayersUVOperation.h
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RenderLayersUVOperation_h
+#define _COM_RenderLayersUVOperation_h
+
+#include "COM_RenderLayersBaseProg.h"
+
+class RenderLayersUVOperation : public RenderLayersBaseProg {
+public:
+ RenderLayersUVOperation();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_RotateOperation.cpp b/source/blender/compositor/operations/COM_RotateOperation.cpp
new file mode 100644
index 00000000000..313e49d8609
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RotateOperation.cpp
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_RotateOperation.h"
+#include "BLI_math.h"
+
+RotateOperation::RotateOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->imageSocket = NULL;
+ this->degreeSocket = NULL;
+ this->doDegree2RadConversion = false;
+}
+void RotateOperation::initExecution()
+{
+ this->imageSocket = this->getInputSocketReader(0);
+ this->degreeSocket = this->getInputSocketReader(1);
+ this->centerX = this->getWidth()/2.0;
+ this->centerY = this->getHeight()/2.0;
+ float degree[4];
+ this->degreeSocket->read(degree, 0, 0, COM_PS_NEAREST, NULL);
+ double rad;
+ if (this->doDegree2RadConversion) {
+ rad = DEG2RAD(degree[0]);
+ }
+ else {
+ rad = degree[0];
+ }
+ this->cosine = cos(rad);
+ this->sine = sin(rad);
+}
+
+void RotateOperation::deinitExecution()
+{
+ this->imageSocket = NULL;
+ this->degreeSocket = NULL;
+}
+
+
+void RotateOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ const float dy = y - this->centerY;
+ const float dx = x - this->centerX;
+ const float nx = this->centerX+(this->cosine*dx + this->sine*dy);
+ const float ny = this->centerY+(-this->sine*dx + this->cosine*dy);
+ this->imageSocket->read(color, nx, ny, sampler, inputBuffers);
+}
+
+bool RotateOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ const float dxmin = input->xmin - this->centerX;
+ const float dymin = input->ymin - this->centerY;
+ const float dxmax = input->xmax - this->centerX;
+ const float dymax = input->ymax - this->centerY;
+
+ const float x1 = this->centerX+(this->cosine*dxmin + this->sine*dymin);
+ const float x2 = this->centerX+(this->cosine*dxmax + this->sine*dymin);
+ const float x3 = this->centerX+(this->cosine*dxmin + this->sine*dymax);
+ const float x4 = this->centerX+(this->cosine*dxmax + this->sine*dymax);
+ const float y1 = this->centerY+(-this->sine*dxmin + this->cosine*dymin);
+ const float y2 = this->centerY+(-this->sine*dxmax + this->cosine*dymin);
+ const float y3 = this->centerY+(-this->sine*dxmin + this->cosine*dymax);
+ const float y4 = this->centerY+(-this->sine*dxmax + this->cosine*dymax);
+ const float minx = min(x1, min(x2, min(x3, x4)));
+ const float maxx = max(x1, max(x2, max(x3, x4)));
+ const float miny = min(y1, min(y2, min(y3, y4)));
+ const float maxy = max(y1, max(y2, max(y3, y4)));
+
+ newInput.xmax = ceil(maxx)+1;
+ newInput.xmin = floor(minx)-1;
+ newInput.ymax = ceil(maxy)+1;
+ newInput.ymin = floor(miny)-1;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_RotateOperation.h b/source/blender/compositor/operations/COM_RotateOperation.h
new file mode 100644
index 00000000000..9965d1021da
--- /dev/null
+++ b/source/blender/compositor/operations/COM_RotateOperation.h
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_RotateOperation_h_
+#define _COM_RotateOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class RotateOperation: public NodeOperation {
+private:
+ SocketReader *imageSocket;
+ SocketReader *degreeSocket;
+ float centerX;
+ float centerY;
+ float cosine;
+ float sine;
+ bool doDegree2RadConversion;
+public:
+ RotateOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+ void initExecution();
+ void deinitExecution();
+ void setDoDegree2RadConversion(bool abool) {this->doDegree2RadConversion = abool;}
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_ScaleOperation.cpp b/source/blender/compositor/operations/COM_ScaleOperation.cpp
new file mode 100644
index 00000000000..ca2095c3170
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ScaleOperation.cpp
@@ -0,0 +1,212 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ScaleOperation.h"
+
+ScaleOperation::ScaleOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+ this->inputXOperation = NULL;
+ this->inputYOperation = NULL;
+}
+void ScaleOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ this->inputXOperation = this->getInputSocketReader(1);
+ this->inputYOperation = this->getInputSocketReader(2);
+ this->centerX = this->getWidth()/2.0;
+ this->centerY = this->getHeight()/2.0;
+}
+
+void ScaleOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+ this->inputXOperation = NULL;
+ this->inputYOperation = NULL;
+}
+
+
+void ScaleOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float scaleX[4];
+ float scaleY[4];
+
+ this->inputXOperation->read(scaleX, x, y, sampler, inputBuffers);
+ this->inputYOperation->read(scaleY, x, y, sampler, inputBuffers);
+
+ const float scx = scaleX[0];
+ const float scy = scaleY[0];
+
+ float nx = this->centerX+ (x - this->centerX) / scx;
+ float ny = this->centerY+ (y - this->centerY) / scy;
+ this->inputOperation->read(color, nx, ny, sampler, inputBuffers);
+}
+
+bool ScaleOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ float scaleX[4];
+ float scaleY[4];
+
+ this->inputXOperation->read(scaleX, 0, 0, COM_PS_NEAREST, NULL);
+ this->inputYOperation->read(scaleY, 0, 0, COM_PS_NEAREST, NULL);
+
+ const float scx = scaleX[0];
+ const float scy = scaleY[0];
+
+ newInput.xmax = this->centerX+ (input->xmax - this->centerX) / scx;
+ newInput.xmin = this->centerX+ (input->xmin - this->centerX) / scx;
+ newInput.ymax = this->centerY+ (input->ymax - this->centerY) / scy;
+ newInput.ymin = this->centerY+ (input->ymin - this->centerY) / scy;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
+
+
+// SCALE ABSOLUTE
+ScaleAbsoluteOperation::ScaleAbsoluteOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+ this->inputXOperation = NULL;
+ this->inputYOperation = NULL;
+}
+void ScaleAbsoluteOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ this->inputXOperation = this->getInputSocketReader(1);
+ this->inputYOperation = this->getInputSocketReader(2);
+ this->centerX = this->getWidth()/2.0;
+ this->centerY = this->getHeight()/2.0;
+}
+
+void ScaleAbsoluteOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+ this->inputXOperation = NULL;
+ this->inputYOperation = NULL;
+}
+
+
+void ScaleAbsoluteOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float scaleX[4];
+ float scaleY[4];
+
+ this->inputXOperation->read(scaleX, x, y, sampler, inputBuffers);
+ this->inputYOperation->read(scaleY, x, y, sampler, inputBuffers);
+
+ const float scx = scaleX[0]; // target absolute scale
+ const float scy = scaleY[0]; // target absolute scale
+ const float width = this->getWidth();
+ const float height = this->getHeight();
+ //div
+ float relativeXScale = scx/width;
+ float relativeYScale = scy/height;
+
+ float nx = this->centerX+ (x - this->centerX) / relativeXScale;
+ float ny = this->centerY+ (y - this->centerY) / relativeYScale;
+ this->inputOperation->read(color, nx, ny, sampler, inputBuffers);
+}
+
+bool ScaleAbsoluteOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ float scaleX[4];
+ float scaleY[4];
+
+ this->inputXOperation->read(scaleX, 0, 0, COM_PS_NEAREST, NULL);
+ this->inputYOperation->read(scaleY, 0, 0, COM_PS_NEAREST, NULL);
+
+ const float scx = scaleX[0];
+ const float scy = scaleY[0];
+ const float width = this->getWidth();
+ const float height = this->getHeight();
+ //div
+ float relateveXScale = scx/width;
+ float relateveYScale = scy/height;
+
+ newInput.xmax = this->centerX+ (input->xmax - this->centerX) / relateveXScale;
+ newInput.xmin = this->centerX+ (input->xmin - this->centerX) / relateveXScale;
+ newInput.ymax = this->centerY+ (input->ymax - this->centerY) / relateveYScale;
+ newInput.ymin = this->centerY+ (input->ymin - this->centerY) / relateveYScale;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
+
+
+// Absolute fixed siez
+ScaleFixedSizeOperation::ScaleFixedSizeOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+}
+void ScaleFixedSizeOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ this->relX = inputOperation->getWidth() / (float)this->newWidth;
+ this->relY = inputOperation->getHeight() / (float)this->newHeight;
+}
+
+void ScaleFixedSizeOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
+
+void ScaleFixedSizeOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ this->inputOperation->read(color, x*relX, y*relY, sampler, inputBuffers);
+}
+
+bool ScaleFixedSizeOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmax = input->xmax *relX;
+ newInput.xmin = input->xmin *relX;
+ newInput.ymax = input->ymax *relY;
+ newInput.ymin = input->ymin *relY;
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
+
+void ScaleFixedSizeOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ unsigned int nr[2];
+ nr[0] = newWidth;
+ nr[1] = newHeight;
+ NodeOperation::determineResolution(resolution, nr);
+ resolution[0] = newWidth;
+ resolution[1] = newHeight;
+}
diff --git a/source/blender/compositor/operations/COM_ScaleOperation.h b/source/blender/compositor/operations/COM_ScaleOperation.h
new file mode 100644
index 00000000000..3e075249fa1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ScaleOperation.h
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ScaleOperation_h_
+#define _COM_ScaleOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class ScaleOperation: public NodeOperation {
+private:
+ SocketReader *inputOperation;
+ SocketReader *inputXOperation;
+ SocketReader *inputYOperation;
+ float centerX;
+ float centerY;
+public:
+ ScaleOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+};
+
+class ScaleAbsoluteOperation: public NodeOperation {
+ SocketReader *inputOperation;
+ SocketReader *inputXOperation;
+ SocketReader *inputYOperation;
+ float centerX;
+ float centerY;
+public:
+ ScaleAbsoluteOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+};
+
+class ScaleFixedSizeOperation: public NodeOperation {
+ SocketReader *inputOperation;
+ int newWidth;
+ int newHeight;
+ float relX;
+ float relY;
+public:
+ ScaleFixedSizeOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+ void setNewWidth(int width) {this->newWidth = width;}
+ void setNewHeight(int height) {this->newHeight = height;}
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp b/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp
new file mode 100644
index 00000000000..4442fd9075e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp
@@ -0,0 +1,172 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ScreenLensDistortionOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+extern "C" {
+ #include "BLI_rand.h"
+}
+
+ScreenLensDistortionOperation::ScreenLensDistortionOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+ this->inputProgram = NULL;
+}
+void ScreenLensDistortionOperation::initExecution()
+{
+ this->inputProgram = this->getInputSocketReader(0);
+ kg = MAX2(MIN2(this->distortion, 1.f), -0.999f);
+ // smaller dispersion range for somewhat more control
+ const float d = 0.25f*MAX2(MIN2(this->dispersion, 1.f), 0.f);
+ kr = MAX2(MIN2((kg+d), 1.f), -0.999f);
+ kb = MAX2(MIN2((kg-d), 1.f), -0.999f);
+ maxk = MAX3(kr, kg, kb);
+ sc = (this->data->fit && (maxk > 0.f)) ? (1.f/(1.f + 2.f*maxk)) : (1.f/(1.f + maxk));
+ drg = 4.f*(kg - kr);
+ dgb = 4.f*(kb - kg);
+
+ kr4 = kr*4;
+ kg4 = kg*4.f;
+ kb4 *= kb*4.f;
+ cx = 0.5f*(float)getWidth();
+ cy = 0.5f*(float)getHeight();
+
+}
+
+void *ScreenLensDistortionOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ void *buffer = inputProgram->initializeTileData(NULL, memoryBuffers);
+ return buffer;
+}
+
+void ScreenLensDistortionOperation::executePixel(float *outputColor, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ const float height = this->getHeight();
+ const float width = this->getWidth();
+ MemoryBuffer *buffer = (MemoryBuffer*)data;
+
+ int dr = 0, dg = 0, db = 0;
+ float d, t, ln[6] = {0, 0, 0, 0, 0, 0};
+ float tc[4] = {0, 0, 0, 0};
+ const float v = sc*((y + 0.5f) - cy)/cy;
+ const float u = sc*((x + 0.5f) - cx)/cx;
+ int sta = 0, mid = 0, end = 0;
+
+ if ((t = 1.f - kr4*(u*u + v*v)) >= 0.f) {
+ d = 1.f/(1.f + sqrtf(t));
+ ln[0] = (u*d + 0.5f)*width - 0.5f, ln[1] = (v*d + 0.5f)*height - 0.5f;
+ sta = 1;
+ }
+ if ((t = 1.f - kg4*(u*u + v*v)) >= 0.f) {
+ d = 1.f/(1.f + sqrtf(t));
+ ln[2] = (u*d + 0.5f)*width - 0.5f, ln[3] = (v*d + 0.5f)*height - 0.5f;
+ mid = 1;
+ }
+ if ((t = 1.f - kb4*(u*u + v*v)) >= 0.f) {
+ d = 1.f/(1.f + sqrtf(t));
+ ln[4] = (u*d + 0.5f)*width - 0.5f, ln[5] = (v*d + 0.5f)*height - 0.5f;
+ end = 1;
+ }
+
+ if (sta && mid && end) {
+ float jit = this->data->jit;
+ float z;
+ float color[4];
+ {
+ // RG
+ const int dx = ln[2] - ln[0], dy = ln[3] - ln[1];
+ const float dsf = sqrtf((float)dx*dx + dy*dy) + 1.f;
+ const int ds = (int)(jit ? ((dsf < 4.f) ? 2.f : sqrtf(dsf)) : dsf);
+ const float sd = 1.f/(float)ds;
+
+ for (z=0; z<ds; ++z) {
+ const float tz = ((float)z + (jit ? BLI_frand() : 0.5f))*sd;
+ t = 1.f - (kr4 + tz*drg)*(u*u + v*v);
+ d = 1.f / (1.f + sqrtf(t));
+ const float nx = (u*d + 0.5f)*getWidth() - 0.5f;
+ const float ny = (v*d + 0.5f)*getHeight() - 0.5f;
+ buffer->readCubic(color, nx, ny);
+ tc[0] += (1.f-tz)*color[0], tc[1] += tz*color[1];
+ dr++, dg++;
+ }
+ }
+ {
+ // GB
+ const int dx = ln[4] - ln[2], dy = ln[5] - ln[3];
+ const float dsf = sqrtf((float)dx*dx + dy*dy) + 1.f;
+ const int ds = (int)(jit ? ((dsf < 4.f) ? 2.f : sqrtf(dsf)) : dsf);
+ const float sd = 1.f/(float)ds;
+
+ for (z=0; z<ds; ++z) {
+ const float tz = ((float)z + (jit ? BLI_frand() : 0.5f))*sd;
+ t = 1.f - (kg4 + tz*dgb)*(u*u + v*v);
+ d = 1.f / (1.f + sqrtf(t));
+ const float nx = (u*d + 0.5f)*getWidth() - 0.5f;
+ const float ny = (v*d + 0.5f)*getHeight() - 0.5f;
+ buffer->readCubic(color, nx, ny);
+ tc[1] += (1.f-tz)*color[1], tc[2] += tz*color[2];
+ dg++, db++;
+ }
+
+ }
+ if (dr) outputColor[0] = 2.f*tc[0] / (float)dr;
+ if (dg) outputColor[1] = 2.f*tc[1] / (float)dg;
+ if (db) outputColor[2] = 2.f*tc[2] / (float)db;
+
+ /* set alpha */
+ outputColor[3] = 1.0f;
+ }
+ else {
+ outputColor[0] = 0.0f;
+ outputColor[1] = 0.0f;
+ outputColor[2] = 0.0f;
+ outputColor[3] = 0.0f;
+ }
+}
+
+void ScreenLensDistortionOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
+
+void ScreenLensDistortionOperation::determineUV(float result[2], float x, float y) const
+{
+ const float v = sc*((y + 0.5f) - cy)/cy;
+ const float u = sc*((x + 0.5f) - cx)/cx;
+ const float t = ABS(MIN3(kr, kg, kb)*4);
+ float d = 1.f/(1.f + sqrtf(t));
+ result[0] = (u*d + 0.5f)*getWidth() - 0.5f;
+ result[1] = (v*d + 0.5f)*getHeight() - 0.5f;
+}
+
+bool ScreenLensDistortionOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ newInput.xmin = 0;
+ newInput.ymin = 0;
+ newInput.ymax = inputProgram->getHeight();
+ newInput.xmax = inputProgram->getWidth();
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.h b/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.h
new file mode 100644
index 00000000000..d2db55ea214
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.h
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ScreenLensDistortionOperation_h
+#define _COM_ScreenLensDistortionOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+class ScreenLensDistortionOperation : public NodeOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader *inputProgram;
+
+ NodeLensDist * data;
+
+ float dispersion;
+ float distortion;
+ float kr, kg, kb;
+ float kr4, kg4, kb4;
+ float maxk;
+ float drg;
+ float dgb;
+ float sc, cx, cy;
+public:
+ ScreenLensDistortionOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeLensDist *data) {this->data = data;}
+ void setDispertion(float dispersion) {this->dispersion = dispersion;}
+ void setDistortion(float distortion) {this->distortion = distortion;}
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+private:
+ void determineUV(float *result, float x, float y) const;
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_SeparateChannelOperation.cpp b/source/blender/compositor/operations/COM_SeparateChannelOperation.cpp
new file mode 100644
index 00000000000..680e1648ebd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SeparateChannelOperation.cpp
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SeparateChannelOperation.h"
+
+SeparateChannelOperation::SeparateChannelOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->inputOperation = NULL;
+}
+void SeparateChannelOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void SeparateChannelOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
+
+void SeparateChannelOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float input[4];
+ this->inputOperation->read(input, x, y, sampler, inputBuffers);
+ color[0] = input[this->channel];
+}
diff --git a/source/blender/compositor/operations/COM_SeparateChannelOperation.h b/source/blender/compositor/operations/COM_SeparateChannelOperation.h
new file mode 100644
index 00000000000..3c1eed4bdd9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SeparateChannelOperation.h
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SeparateChannelOperation_h_
+#define _COM_SeparateChannelOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class SeparateChannelOperation: public NodeOperation {
+private:
+ SocketReader *inputOperation;
+ int channel;
+public:
+ SeparateChannelOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ void setChannel(int channel) {this->channel = channel;}
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_SetAlphaOperation.cpp b/source/blender/compositor/operations/COM_SetAlphaOperation.cpp
new file mode 100644
index 00000000000..0aefb075b64
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetAlphaOperation.cpp
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SetAlphaOperation.h"
+
+SetAlphaOperation::SetAlphaOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->inputColor = NULL;
+ this->inputAlpha = NULL;
+}
+
+void SetAlphaOperation::initExecution()
+{
+ this->inputColor = getInputSocketReader(0);
+ this->inputAlpha = getInputSocketReader(1);
+}
+
+void SetAlphaOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float alphaInput[4];
+
+ this->inputColor->read(outputValue, x, y, sampler, inputBuffers);
+ this->inputAlpha->read(alphaInput, x, y, sampler, inputBuffers);
+
+ outputValue[3] = alphaInput[0];
+}
+
+void SetAlphaOperation::deinitExecution()
+{
+ this->inputColor = NULL;
+ this->inputAlpha = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_SetAlphaOperation.h b/source/blender/compositor/operations/COM_SetAlphaOperation.h
new file mode 100644
index 00000000000..3d9caabf880
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetAlphaOperation.h
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SetAlphaOperation_h
+#define _COM_SetAlphaOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class SetAlphaOperation : public NodeOperation {
+private:
+ SocketReader *inputColor;
+ SocketReader *inputAlpha;
+
+public:
+ /**
+ * Default constructor
+ */
+ SetAlphaOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_SetColorOperation.cpp b/source/blender/compositor/operations/COM_SetColorOperation.cpp
new file mode 100644
index 00000000000..50ff2a87a72
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetColorOperation.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SetColorOperation.h"
+
+SetColorOperation::SetColorOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
+
+void SetColorOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ outputValue[0] = this->channel1;
+ outputValue[1] = this->channel2;
+ outputValue[2] = this->channel3;
+ outputValue[3] = this->channel4;
+}
+
+void SetColorOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ resolution[0] = preferredResolution[0];
+ resolution[1] = preferredResolution[1];
+}
diff --git a/source/blender/compositor/operations/COM_SetColorOperation.h b/source/blender/compositor/operations/COM_SetColorOperation.h
new file mode 100644
index 00000000000..dad3cfd7fc9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetColorOperation.h
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SetColorOperation_h
+#define _COM_SetColorOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class SetColorOperation : public NodeOperation {
+private:
+ float channel1;
+ float channel2;
+ float channel3;
+ float channel4;
+
+public:
+ /**
+ * Default constructor
+ */
+ SetColorOperation();
+
+ const float getChannel1() {return this->channel1;}
+ void setChannel1(float value) {this->channel1 = value;}
+ const float getChannel2() {return this->channel2;}
+ void setChannel2(float value) {this->channel2 = value;}
+ const float getChannel3() {return this->channel3;}
+ void setChannel3(float value) {this->channel3 = value;}
+ const float getChannel4() {return this->channel4;}
+ void setChannel4(float value) {this->channel4 = value;}
+ void setChannels(float value[4]) {this->channel1 = value[0];this->channel2 = value[1];this->channel3 = value[2];this->channel4 = value[3];}
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+ const bool isSetOperation() const {return true;}
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_SetSamplerOperation.cpp b/source/blender/compositor/operations/COM_SetSamplerOperation.cpp
new file mode 100644
index 00000000000..8974554e700
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetSamplerOperation.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SetSamplerOperation.h"
+
+SetSamplerOperation::SetSamplerOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addOutputSocket(COM_DT_COLOR);
+}
+
+void SetSamplerOperation::initExecution()
+{
+ this->reader = this->getInputSocketReader(0);
+}
+void SetSamplerOperation::deinitExecution()
+{
+ this->reader = NULL;
+}
+
+void SetSamplerOperation::executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ reader->read(output, x, y, this->sampler, inputBuffers);
+}
diff --git a/source/blender/compositor/operations/COM_SetSamplerOperation.h b/source/blender/compositor/operations/COM_SetSamplerOperation.h
new file mode 100644
index 00000000000..49bbae7e4ff
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetSamplerOperation.h
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SetSamplerOperation_h
+#define _COM_SetSamplerOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output Sampler.
+ * it assumes we are in sRGB colour space.
+ */
+class SetSamplerOperation : public NodeOperation {
+private:
+ PixelSampler sampler;
+ SocketReader *reader;
+public:
+ /**
+ * Default constructor
+ */
+ SetSamplerOperation();
+
+ void setSampler(PixelSampler sampler) {this->sampler = sampler;}
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+ void initExecution();
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_SetValueOperation.cpp b/source/blender/compositor/operations/COM_SetValueOperation.cpp
new file mode 100644
index 00000000000..abd4acafea6
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetValueOperation.cpp
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SetValueOperation.h"
+
+SetValueOperation::SetValueOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
+
+void SetValueOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ outputValue[0] = this->value;
+}
+
+void SetValueOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ resolution[0] = preferredResolution[0];
+ resolution[1] = preferredResolution[1];
+}
diff --git a/source/blender/compositor/operations/COM_SetValueOperation.h b/source/blender/compositor/operations/COM_SetValueOperation.h
new file mode 100644
index 00000000000..25810cd7ee5
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetValueOperation.h
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SetValueOperation_h
+#define _COM_SetValueOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class SetValueOperation : public NodeOperation {
+private:
+ float value;
+
+public:
+ /**
+ * Default constructor
+ */
+ SetValueOperation();
+
+ const float getValue() {return this->value;}
+ void setValue(float value) {this->value = value;}
+
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ const bool isSetOperation() const {return true;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_SetVectorOperation.cpp b/source/blender/compositor/operations/COM_SetVectorOperation.cpp
new file mode 100644
index 00000000000..70477de0514
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetVectorOperation.cpp
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SetVectorOperation.h"
+#include "COM_defines.h"
+
+SetVectorOperation::SetVectorOperation(): NodeOperation()
+{
+ this->addOutputSocket(COM_DT_VECTOR);
+}
+
+void SetVectorOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ outputValue[0] = this->x;
+ outputValue[1] = this->y;
+ outputValue[2] = this->z;
+ outputValue[3] = this->w;
+}
+
+void SetVectorOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ if (preferredResolution[0] == 0 ||preferredResolution[1]==0) {
+ resolution[0] = COM_DEFAULT_RESOLUTION_WIDTH;
+ resolution[1] = COM_DEFAULT_RESOLUTION_HEIGHT;
+ }
+ else {
+ resolution[0] = preferredResolution[0];
+ resolution[1] = preferredResolution[1];
+ }
+}
diff --git a/source/blender/compositor/operations/COM_SetVectorOperation.h b/source/blender/compositor/operations/COM_SetVectorOperation.h
new file mode 100644
index 00000000000..9b5dd3ce674
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SetVectorOperation.h
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SetVectorOperation_h
+#define _COM_SetVectorOperation_h
+#include "COM_NodeOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class SetVectorOperation : public NodeOperation {
+private:
+ float x;
+ float y;
+ float z;
+ float w;
+
+public:
+ /**
+ * Default constructor
+ */
+ SetVectorOperation();
+
+ const float getX() {return this->x;}
+ void setX(float value) {this->x = value;}
+ const float getY() {return this->y;}
+ void setY(float value) {this->y = value;}
+ const float getZ() {return this->z;}
+ void setZ(float value) {this->z = value;}
+ const float getW() {return this->w;}
+ void setW(float value) {this->w = value;}
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+ const bool isSetOperation() const {return true;}
+
+ void setVector(float vector[3]) {
+ setX(vector[0]);
+ setY(vector[1]);
+ setZ(vector[2]);
+ }
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_SocketProxyOperation.cpp b/source/blender/compositor/operations/COM_SocketProxyOperation.cpp
new file mode 100644
index 00000000000..6ed877523d1
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SocketProxyOperation.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SocketProxyOperation.h"
+
+SocketProxyOperation::SocketProxyOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR/*|COM_DT_VECTOR|COM_DT_VALUE*/);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->inputOperation = NULL;
+}
+
+void SocketProxyOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+}
+
+void SocketProxyOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+}
+
+void SocketProxyOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ this->inputOperation->read(color, x, y, sampler, inputBuffers);
+}
diff --git a/source/blender/compositor/operations/COM_SocketProxyOperation.h b/source/blender/compositor/operations/COM_SocketProxyOperation.h
new file mode 100644
index 00000000000..a86134c1ea9
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SocketProxyOperation.h
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SocketProxyOperation_h_
+#define _COM_SocketProxyOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class SocketProxyOperation: public NodeOperation {
+private:
+ SocketReader *inputOperation;
+public:
+ SocketProxyOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_SplitViewerOperation.cpp b/source/blender/compositor/operations/COM_SplitViewerOperation.cpp
new file mode 100644
index 00000000000..4601bebb49f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SplitViewerOperation.cpp
@@ -0,0 +1,109 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_SplitViewerOperation.h"
+#include "COM_SocketConnection.h"
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "BKE_image.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_color.h"
+#include "BLI_math_vector.h"
+
+extern "C" {
+ #include "MEM_guardedalloc.h"
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+
+SplitViewerOperation::SplitViewerOperation() : ViewerBaseOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR);
+ this->image1Input = NULL;
+ this->image2Input = NULL;
+}
+
+void SplitViewerOperation::initExecution()
+{
+ // When initializing the tree during initial load the width and height can be zero.
+ this->image1Input = getInputSocketReader(0);
+ this->image2Input = getInputSocketReader(1);
+ ViewerBaseOperation::initExecution();
+}
+
+void SplitViewerOperation::deinitExecution()
+{
+ this->image1Input = NULL;
+ this->image2Input = NULL;
+ ViewerBaseOperation::deinitExecution();
+}
+
+
+void SplitViewerOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers)
+{
+ float *buffer = this->outputBuffer;
+ unsigned char *bufferDisplay = this->outputBufferDisplay;
+
+ if (!buffer) return;
+ int x1 = rect->xmin;
+ int y1 = rect->ymin;
+ int x2 = rect->xmax;
+ int y2 = rect->ymax;
+ int offset = (y1*this->getWidth() + x1 ) * 4;
+ int x;
+ int y;
+ int perc = xSplit?this->splitPercentage*getWidth()/100.0f:this->splitPercentage*getHeight()/100.0f;
+ for (y = y1 ; y < y2 ; y++) {
+ for (x = x1 ; x < x2 ; x++) {
+ bool image1;
+ float srgb[4];
+ image1 = xSplit?x>perc:y>perc;
+ if (image1) {
+ image1Input->read(&(buffer[offset]), x, y, COM_PS_NEAREST, memoryBuffers);
+ }
+ else {
+ image2Input->read(&(buffer[offset]), x, y, COM_PS_NEAREST, memoryBuffers);
+ }
+ /// @todo: linear conversion only when scene color management is selected, also check predivide.
+ if (this->doColorManagement) {
+ if (this->doColorPredivide) {
+ linearrgb_to_srgb_predivide_v4(srgb, buffer+offset);
+ }
+ else {
+ linearrgb_to_srgb_v4(srgb, buffer+offset);
+ }
+ }
+ else {
+ copy_v4_v4(srgb, buffer+offset);
+ }
+
+ F4TOCHAR4(srgb, bufferDisplay+offset);
+
+ offset +=4;
+ }
+ offset += (this->getWidth()-(x2-x1))*4;
+ }
+ updateImage(rect);
+}
+
diff --git a/source/blender/compositor/operations/COM_SplitViewerOperation.h b/source/blender/compositor/operations/COM_SplitViewerOperation.h
new file mode 100644
index 00000000000..2c3163f0b0a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_SplitViewerOperation.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_SplitViewerOperation_h
+#define _COM_SplitViewerOperation_h
+#include "COM_ViewerBaseOperation.h"
+#include "DNA_image_types.h"
+#include "BLI_rect.h"
+
+class SplitViewerOperation : public ViewerBaseOperation {
+private:
+ SocketReader *image1Input;
+ SocketReader *image2Input;
+
+ float splitPercentage;
+ bool xSplit;
+public:
+ SplitViewerOperation();
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers);
+ void initExecution();
+ void deinitExecution();
+ void setSplitPercentage(float splitPercentage) {this->splitPercentage = splitPercentage;}
+ void setXSplit(bool xsplit) {this->xSplit = xsplit;}
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_TextureOperation.cpp b/source/blender/compositor/operations/COM_TextureOperation.cpp
new file mode 100644
index 00000000000..f7edd922376
--- /dev/null
+++ b/source/blender/compositor/operations/COM_TextureOperation.cpp
@@ -0,0 +1,109 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TextureOperation.h"
+
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+
+TextureBaseOperation::TextureBaseOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_VECTOR);//offset
+ this->addInputSocket(COM_DT_VECTOR);//size
+ this->texture = NULL;
+ this->inputSize = NULL;
+ this->inputOffset = NULL;
+}
+TextureOperation::TextureOperation() : TextureBaseOperation()
+{
+ this->addOutputSocket(COM_DT_COLOR);
+}
+TextureAlphaOperation::TextureAlphaOperation() : TextureBaseOperation()
+{
+ this->addOutputSocket(COM_DT_VALUE);
+}
+
+void TextureBaseOperation::initExecution()
+{
+ this->inputOffset = getInputSocketReader(0);
+ this->inputSize = getInputSocketReader(1);
+}
+void TextureBaseOperation::deinitExecution()
+{
+ this->inputSize = NULL;
+ this->inputOffset = NULL;
+}
+
+void TextureBaseOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
+{
+ if (preferredResolution[0] == 0 || preferredResolution[1] == 0) {
+ resolution[0] = COM_DEFAULT_RESOLUTION_WIDTH;
+ resolution[1] = COM_DEFAULT_RESOLUTION_HEIGHT;
+ }
+ else {
+ resolution[0] = preferredResolution[0];
+ resolution[1] = preferredResolution[1];
+ }
+}
+
+void TextureAlphaOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ TextureBaseOperation::executePixel(color, x, y, sampler, inputBuffers);
+ color[0] = color[3];
+ color[1] = 0.0f;
+ color[2] = 0.0f;
+ color[3] = 0.0f;
+}
+
+void TextureBaseOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ TexResult texres= {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0, NULL};
+ float textureSize[4];
+ float textureOffset[4];
+ float vec[3];
+ int retval;
+ const float cx = this->getWidth()/2;
+ const float cy = this->getHeight()/2;
+ const float u = (cx-x)/this->getWidth()*2;
+ const float v = (cy-y)/this->getHeight()*2;
+
+ this->inputSize->read(textureSize, x, y, sampler, inputBuffers);
+ this->inputOffset->read(textureOffset, x, y, sampler, inputBuffers);
+
+ vec[0] = textureSize[0]*(u + textureOffset[0]);
+ vec[1] = textureSize[1]*(v + textureOffset[1]);
+ vec[2] = textureSize[2]*textureOffset[2];
+
+ retval = multitex_ext(this->texture, vec, NULL, NULL, 0, &texres);
+
+ if (texres.talpha)
+ color[3] = texres.ta;
+ else
+ color[3] = texres.tin;
+
+ if ((retval & TEX_RGB)) {
+ color[0] = texres.tr;
+ color[1] = texres.tg;
+ color[2] = texres.tb;
+ }
+ else color[0] = color[1] = color[2] = color[3];
+}
diff --git a/source/blender/compositor/operations/COM_TextureOperation.h b/source/blender/compositor/operations/COM_TextureOperation.h
new file mode 100644
index 00000000000..ee067df2c64
--- /dev/null
+++ b/source/blender/compositor/operations/COM_TextureOperation.h
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+
+#ifndef _COM_TextureOperation_h
+#define _COM_TextureOperation_h
+
+#include "COM_NodeOperation.h"
+#include "DNA_scene_types.h"
+#include "DNA_texture_types.h"
+#include "BLI_listbase.h"
+extern "C" {
+ #include "RE_pipeline.h"
+ #include "RE_shader_ext.h"
+ #include "RE_render_ext.h"
+ #include "MEM_guardedalloc.h"
+}
+
+/**
+ * Base class for all renderlayeroperations
+ *
+ * @todo: rename to operation.
+ */
+class TextureBaseOperation : public NodeOperation {
+private:
+ Tex *texture;
+ SocketReader *inputSize;
+ SocketReader *inputOffset;
+
+protected:
+
+ /**
+ * Determine the output resolution. The resolution is retrieved from the Renderer
+ */
+ void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]);
+
+ /**
+ * Constructor
+ */
+ TextureBaseOperation();
+
+public:
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void setTexture(Tex *texture) {this->texture = texture;}
+ void initExecution();
+ void deinitExecution();
+};
+
+class TextureOperation:public TextureBaseOperation {
+public:
+ TextureOperation();
+
+};
+class TextureAlphaOperation:public TextureBaseOperation {
+public:
+ TextureAlphaOperation();
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_TonemapOperation.cpp b/source/blender/compositor/operations/COM_TonemapOperation.cpp
new file mode 100644
index 00000000000..56830f4970d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_TonemapOperation.cpp
@@ -0,0 +1,171 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TonemapOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+
+
+TonemapOperation::TonemapOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->imageReader = NULL;
+ this->data = NULL;
+ this->cachedInstance = NULL;
+ this->setComplex(true);
+}
+void TonemapOperation::initExecution()
+{
+ this->imageReader = this->getInputSocketReader(0);
+ NodeOperation::initMutex();
+}
+
+void TonemapOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data)
+{
+ AvgLogLum * avg = (AvgLogLum*)data;
+
+ float output[4];
+ this->imageReader->read(output, x, y, inputBuffers, NULL);
+ output[0] *= avg->al;
+ output[1] *= avg->al;
+ output[2] *= avg->al;
+ float dr = output[0] + this->data->offset;
+ float dg = output[1] + this->data->offset;
+ float db = output[2] + this->data->offset;
+ output[0] /= ((dr == 0.f) ? 1.f : dr);
+ output[1] /= ((dg == 0.f) ? 1.f : dg);
+ output[2] /= ((db == 0.f) ? 1.f : db);
+ const float igm = avg->igm;
+ if (igm != 0.f) {
+ output[0] = pow((double)MAX2(output[0], 0.), (double)igm);
+ output[1] = pow((double)MAX2(output[1], 0.), (double)igm);
+ output[2] = pow((double)MAX2(output[2], 0.), (double)igm);
+ }
+
+ color[0] = output[0];
+ color[1] = output[1];
+ color[2] = output[2];
+ color[3] = output[3];
+}
+void PhotoreceptorTonemapOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data)
+{
+ AvgLogLum * avg = (AvgLogLum*)data;
+ NodeTonemap *ntm = this->data;
+
+ const float f = exp((double)-this->data->f);
+ const float m = (ntm->m > 0.f) ? ntm->m : (0.3f + 0.7f*pow((double)avg->auto_key, 1.4));
+ const float ic = 1.f - ntm->c, ia = 1.f - ntm->a;
+
+ float output[4];
+ this->imageReader->read(output, x, y, inputBuffers, NULL);
+
+ const float L = 0.212671f*output[0] + 0.71516f*output[1] + 0.072169f*output[2];
+ float I_l = output[0] + ic*(L - output[0]);
+ float I_g = avg->cav[0] + ic*(avg->lav - avg->cav[0]);
+ float I_a = I_l + ia*(I_g - I_l);
+ output[0] /= (output[0] + pow((double)f*I_a, (double)m));
+ I_l = output[1] + ic*(L - output[1]);
+ I_g = avg->cav[1] + ic*(avg->lav - avg->cav[1]);
+ I_a = I_l + ia*(I_g - I_l);
+ output[1] /= (output[1] + pow((double)f*I_a,(double)m));
+ I_l = output[2] + ic*(L - output[2]);
+ I_g = avg->cav[2] + ic*(avg->lav - avg->cav[2]);
+ I_a = I_l + ia*(I_g - I_l);
+ output[2] /= (output[2] + pow((double)f*I_a, (double)m));
+
+ color[0] = output[0];
+ color[1] = output[1];
+ color[2] = output[2];
+ color[3] = output[3];
+}
+
+void TonemapOperation::deinitExecution()
+{
+ this->imageReader = NULL;
+ if (this->cachedInstance) {
+ delete cachedInstance;
+ }
+ NodeOperation::deinitMutex();
+}
+
+bool TonemapOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti imageInput;
+
+ NodeOperation *operation = getInputOperation(0);
+ imageInput.xmax = operation->getWidth();
+ imageInput.xmin = 0;
+ imageInput.ymax = operation->getHeight();
+ imageInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&imageInput, readOperation, output) ) {
+ return true;
+ }
+ return false;
+}
+
+void *TonemapOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ BLI_mutex_lock(getMutex());
+ if (this->cachedInstance == NULL) {
+ MemoryBuffer *tile = (MemoryBuffer*)imageReader->initializeTileData(rect, memoryBuffers);
+ AvgLogLum *data = new AvgLogLum();
+
+ float * buffer = tile->getBuffer();
+
+ float lsum = 0;
+ int p = tile->getWidth() * tile->getHeight();
+ float *bc = buffer;
+ float avl, maxl = -1e10f, minl = 1e10f;
+ const float sc = 1.f/(p);
+ float Lav = 0.f;
+ float cav[4] = {0.0f,0.0f,0.0f,0.0f};
+ while (p--) {
+ float L = 0.212671f*bc[0] + 0.71516f*bc[1] + 0.072169f*bc[2];
+ Lav += L;
+ cav[0] += bc[0];
+ cav[1] += bc[1];
+ cav[2] += bc[2];
+ lsum += (float)log((double)MAX2(L, 0.0) + 1e-5);
+ maxl = (L > maxl) ? L : maxl;
+ minl = (L < minl) ? L : minl;
+ bc+=4;
+ }
+ data->lav = Lav * sc;
+ data->cav[0] = cav[0]*sc;
+ data->cav[1] = cav[1]*sc;
+ data->cav[2] = cav[2]*sc;
+ maxl = log((double)maxl + 1e-5); minl = log((double)minl + 1e-5f); avl = lsum*sc;
+ data->auto_key = (maxl > minl) ? ((maxl - avl) / (maxl - minl)) : 1.f;
+ float al = exp((double)avl);
+ data->al = (al == 0.f) ? 0.f : (this->data->key / al);
+ data->igm = (this->data->gamma==0.f) ? 1 : (1.f / this->data->gamma);
+ this->cachedInstance = data;
+ }
+ BLI_mutex_unlock(getMutex());
+ return this->cachedInstance;
+}
+
+void TonemapOperation::deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data)
+{
+}
diff --git a/source/blender/compositor/operations/COM_TonemapOperation.h b/source/blender/compositor/operations/COM_TonemapOperation.h
new file mode 100644
index 00000000000..e7ea4f039f2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_TonemapOperation.h
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_TonemapOperation_h
+#define _COM_TonemapOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+
+/**
+ * @brief temporarily storage during execution of Tonemap
+ * @ingroup operation
+ */
+typedef struct AvgLogLum {
+ float al;
+ float auto_key;
+ float lav;
+ float cav[4];
+ float igm;
+} AvgLogLum;
+
+/**
+ * @brief base class of tonemap, implementing the simple tonemap
+ * @ingroup operation
+ */
+class TonemapOperation : public NodeOperation {
+protected:
+ /**
+ * @brief Cached reference to the reader
+ */
+ SocketReader * imageReader;
+
+ /**
+ * @brief settings of the Tonemap
+ */
+ NodeTonemap * data;
+
+ /**
+ * @brief temporarily cache of the execution storage
+ */
+ AvgLogLum * cachedInstance;
+
+public:
+ TonemapOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+ void deinitializeTileData(rcti *rect, MemoryBuffer **memoryBuffers, void *data);
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setData(NodeTonemap *data) {this->data = data;}
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+
+};
+
+/**
+ * @brief class of tonemap, implementing the photoreceptor tonemap
+ * most parts have already been done in TonemapOperation
+ * @ingroup operation
+ */
+
+class PhotoreceptorTonemapOperation : public TonemapOperation {
+public:
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void * data);
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_TranslateOperation.cpp b/source/blender/compositor/operations/COM_TranslateOperation.cpp
new file mode 100644
index 00000000000..6d2fdfc11d0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_TranslateOperation.cpp
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_TranslateOperation.h"
+
+TranslateOperation::TranslateOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setResolutionInputSocketIndex(0);
+ this->inputOperation = NULL;
+ this->inputXOperation = NULL;
+ this->inputYOperation = NULL;
+}
+void TranslateOperation::initExecution()
+{
+ this->inputOperation = this->getInputSocketReader(0);
+ this->inputXOperation = this->getInputSocketReader(1);
+ this->inputYOperation = this->getInputSocketReader(2);
+
+ float tempDelta[4];
+ this->inputXOperation->read(tempDelta, 0, 0, COM_PS_NEAREST, NULL);
+ this->deltaX = tempDelta[0];
+ this->inputYOperation->read(tempDelta, 0, 0, COM_PS_NEAREST, NULL);
+ this->deltaY = tempDelta[0];
+}
+
+void TranslateOperation::deinitExecution()
+{
+ this->inputOperation = NULL;
+ this->inputXOperation = NULL;
+ this->inputYOperation = NULL;
+}
+
+
+void TranslateOperation::executePixel(float *color,float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ this->inputOperation->read(color, x-this->getDeltaX(), y-this->getDeltaY(), sampler, inputBuffers);
+}
+
+bool TranslateOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+
+ newInput.xmax = input->xmax - this->getDeltaX();
+ newInput.xmin = input->xmin - this->getDeltaX();
+ newInput.ymax = input->ymax - this->getDeltaY();
+ newInput.ymin = input->ymin - this->getDeltaY();
+
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+}
diff --git a/source/blender/compositor/operations/COM_TranslateOperation.h b/source/blender/compositor/operations/COM_TranslateOperation.h
new file mode 100644
index 00000000000..eab3391041e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_TranslateOperation.h
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_TranslateOperation_h_
+#define _COM_TranslateOperation_h_
+
+#include "COM_NodeOperation.h"
+
+class TranslateOperation: public NodeOperation {
+private:
+ SocketReader *inputOperation;
+ SocketReader*inputXOperation;
+ SocketReader*inputYOperation;
+ float deltaX;
+ float deltaY;
+public:
+ TranslateOperation();
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ void initExecution();
+ void deinitExecution();
+
+ float getDeltaX() {return this->deltaX;}
+ float getDeltaY() {return this->deltaY;}
+};
+
+#endif
diff --git a/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
new file mode 100644
index 00000000000..f14de097dfd
--- /dev/null
+++ b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
@@ -0,0 +1,149 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_VariableSizeBokehBlurOperation.h"
+#include "BLI_math.h"
+
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+VariableSizeBokehBlurOperation::VariableSizeBokehBlurOperation() : NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE); // do not resize the bokeh image.
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->setComplex(true);
+
+ this->inputProgram = NULL;
+ this->inputBokehProgram = NULL;
+ this->inputSizeProgram = NULL;
+ this->maxBlur = 32.0f;
+ this->threshold = 0.0f;
+}
+
+
+void VariableSizeBokehBlurOperation::initExecution()
+{
+ this->inputProgram = getInputSocketReader(0);
+ this->inputBokehProgram = getInputSocketReader(1);
+ this->inputSizeProgram = getInputSocketReader(2);
+ QualityStepHelper::initExecution(COM_QH_INCREASE);
+}
+
+void VariableSizeBokehBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float tempColor[4];
+ float readColor[4];
+ float bokeh[4];
+ tempColor[0] = 0;
+ tempColor[1] = 0;
+ tempColor[2] = 0;
+ tempColor[3] = 0;
+ float tempSize[4];
+ float overallmultiplyerr = 0;
+ float overallmultiplyerg = 0;
+ float overallmultiplyerb = 0;
+
+ int miny = y - maxBlur;
+ int maxy = y + maxBlur;
+ int minx = x - maxBlur;
+ int maxx = x + maxBlur;
+ {
+ inputProgram->read(readColor, x, y, COM_PS_NEAREST, inputBuffers);
+ tempColor[0] += readColor[0];
+ tempColor[1] += readColor[1];
+ tempColor[2] += readColor[2];
+ overallmultiplyerr += 1;
+ overallmultiplyerg += 1;
+ overallmultiplyerb += 1;
+
+ for (int ny = miny ; ny < maxy ; ny += QualityStepHelper::getStep()) {
+ for (int nx = minx ; nx < maxx ; nx += QualityStepHelper::getStep()) {
+ if (nx >=0 && nx < this->getWidth() && ny >= 0 && ny < getHeight()) {
+ inputSizeProgram->read(tempSize, nx, ny, COM_PS_NEAREST, inputBuffers);
+ float size = tempSize[0];
+ size += this->threshold;
+ float dx = nx - x;
+ float dy = ny - y;
+ if (nx == x && ny == y) {
+ /* pass */
+ }
+ else if (size>= fabs(dx) && size >= fabs(dy)) {
+ float u = 256 + dx*256/size;
+ float v = 256 + dy*256/size;
+ inputBokehProgram->read(bokeh, u, v, COM_PS_NEAREST, inputBuffers);
+ inputProgram->read(readColor, nx, ny, COM_PS_NEAREST, inputBuffers);
+ tempColor[0] += bokeh[0] * readColor[0];
+ tempColor[1] += bokeh[1] * readColor[1];
+ tempColor[2] += bokeh[2]* readColor[2];
+ overallmultiplyerr += bokeh[0];
+ overallmultiplyerg += bokeh[1];
+ overallmultiplyerb += bokeh[2];
+ }
+ }
+ }
+ }
+ color[0] = tempColor[0]*(1.0/overallmultiplyerr);
+ color[1] = tempColor[1]*(1.0/overallmultiplyerg);
+ color[2] = tempColor[2]*(1.0/overallmultiplyerb);
+ color[3] = 1.0f;
+ }
+
+}
+
+void VariableSizeBokehBlurOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+ this->inputBokehProgram = NULL;
+ this->inputSizeProgram = NULL;
+}
+
+bool VariableSizeBokehBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ rcti newInput;
+ rcti bokehInput;
+
+ newInput.xmax = input->xmax + maxBlur+2;
+ newInput.xmin = input->xmin - maxBlur+2;
+ newInput.ymax = input->ymax + maxBlur-2;
+ newInput.ymin = input->ymin - maxBlur-2;
+ bokehInput.xmax = 512;
+ bokehInput.xmin = 0;
+ bokehInput.ymax = 512;
+ bokehInput.ymin = 0;
+
+ NodeOperation *operation = getInputOperation(2);
+ if (operation->determineDependingAreaOfInterest(&newInput, readOperation, output) ) {
+ return true;
+ }
+ operation = getInputOperation(1);
+ if (operation->determineDependingAreaOfInterest(&bokehInput, readOperation, output) ) {
+ return true;
+ }
+ operation = getInputOperation(0);
+ if (operation->determineDependingAreaOfInterest(&newInput, readOperation, output) ) {
+ return true;
+ }
+ return false;
+}
diff --git a/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h
new file mode 100644
index 00000000000..9c2c4b4bf68
--- /dev/null
+++ b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_BokehVariableSizeBokehBlurOperation_h
+#define _COM_VariableSizeBokehBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_QualityStepHelper.h"
+
+class VariableSizeBokehBlurOperation : public NodeOperation, public QualityStepHelper {
+private:
+ int maxBlur;
+ float threshold;
+ SocketReader *inputProgram;
+ SocketReader *inputBokehProgram;
+ SocketReader *inputSizeProgram;
+
+public:
+ VariableSizeBokehBlurOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+
+ void setMaxBlur(int maxRadius) {this->maxBlur = maxRadius;}
+
+ void setThreshold(float threshold) {this->threshold = threshold;}
+
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_VectorBlurOperation.cpp b/source/blender/compositor/operations/COM_VectorBlurOperation.cpp
new file mode 100644
index 00000000000..e6305dc26a2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_VectorBlurOperation.cpp
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_VectorBlurOperation.h"
+#include "BLI_math.h"
+
+// use the implementation of blender internal renderer to calculate the vector blur.
+extern "C" {
+ #include "RE_pipeline.h"
+}
+
+VectorBlurOperation::VectorBlurOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE); // ZBUF
+ this->addInputSocket(COM_DT_COLOR); //SPEED
+ this->addOutputSocket(COM_DT_COLOR);
+ this->settings = NULL;
+ this->cachedInstance = NULL;
+ this->inputImageProgram = NULL;
+ this->inputSpeedProgram = NULL;
+ this->inputZProgram = NULL;
+ setComplex(true);
+}
+void VectorBlurOperation::initExecution()
+{
+ initMutex();
+ this->inputImageProgram = getInputSocketReader(0);
+ this->inputZProgram = getInputSocketReader(1);
+ this->inputSpeedProgram = getInputSocketReader(2);
+ this->cachedInstance = NULL;
+ QualityStepHelper::initExecution(COM_QH_INCREASE);
+
+}
+
+void VectorBlurOperation::executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data)
+{
+ float *buffer = (float*) data;
+ int index = (y*this->getWidth() + x) * COM_NUMBER_OF_CHANNELS;
+ color[0] = buffer[index];
+ color[1] = buffer[index+1];
+ color[2] = buffer[index+2];
+ color[3] = buffer[index+3];
+}
+
+void VectorBlurOperation::deinitExecution()
+{
+ deinitMutex();
+ this->inputImageProgram = NULL;
+ this->inputSpeedProgram = NULL;
+ this->inputZProgram = NULL;
+ if (this->cachedInstance) {
+ delete cachedInstance;
+ this->cachedInstance = NULL;
+ }
+}
+void *VectorBlurOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers)
+{
+ if (this->cachedInstance) return this->cachedInstance;
+
+ BLI_mutex_lock(getMutex());
+ if (this->cachedInstance == NULL) {
+ MemoryBuffer *tile = (MemoryBuffer*)inputImageProgram->initializeTileData(rect, memoryBuffers);
+ MemoryBuffer *speed = (MemoryBuffer*)inputSpeedProgram->initializeTileData(rect, memoryBuffers);
+ MemoryBuffer *z = (MemoryBuffer*)inputZProgram->initializeTileData(rect, memoryBuffers);
+ float *data = new float[this->getWidth()*this->getHeight()*COM_NUMBER_OF_CHANNELS];
+ memcpy(data, tile->getBuffer(),this->getWidth()*this->getHeight()*COM_NUMBER_OF_CHANNELS*sizeof(float));
+ this->generateVectorBlur(data, tile, speed, z);
+ this->cachedInstance = data;
+ }
+ BLI_mutex_unlock(getMutex());
+ return this->cachedInstance;
+}
+
+bool VectorBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)
+{
+ if (this->cachedInstance == NULL) {
+ rcti newInput;
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+ else {
+ return false;
+ }
+}
+
+void VectorBlurOperation::generateVectorBlur(float *data, MemoryBuffer *inputImage, MemoryBuffer *inputSpeed, MemoryBuffer *inputZ)
+{
+ float *zbuf = inputZ->convertToValueBuffer();
+ NodeBlurData blurdata;
+ blurdata.samples = this->settings->samples/QualityStepHelper::getStep();
+ blurdata.maxspeed = this->settings->maxspeed;
+ blurdata.minspeed = this->settings->minspeed;
+ blurdata.curved = this->settings->curved;
+ blurdata.fac = this->settings->fac;
+ RE_zbuf_accumulate_vecblur(&blurdata, this->getWidth(), this->getHeight(), data, inputImage->getBuffer(), inputSpeed->getBuffer(), zbuf);
+ delete zbuf;
+ return;
+}
diff --git a/source/blender/compositor/operations/COM_VectorBlurOperation.h b/source/blender/compositor/operations/COM_VectorBlurOperation.h
new file mode 100644
index 00000000000..2c45628726d
--- /dev/null
+++ b/source/blender/compositor/operations/COM_VectorBlurOperation.h
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_VectorBlurOperation_h
+#define _COM_VectorBlurOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_node_types.h"
+#include "COM_QualityStepHelper.h"
+
+class VectorBlurOperation : public NodeOperation, public QualityStepHelper {
+private:
+ /**
+ * @brief Cached reference to the inputProgram
+ */
+ SocketReader * inputImageProgram;
+ SocketReader * inputSpeedProgram;
+ SocketReader * inputZProgram;
+
+ /**
+ * @brief settings of the glare node.
+ */
+ NodeBlurData * settings;
+
+ float *cachedInstance;
+
+public:
+ VectorBlurOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void *initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers);
+
+ void setVectorBlurSettings(NodeBlurData * settings) {this->settings = settings;}
+ bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
+protected:
+
+ void generateVectorBlur(float *data, MemoryBuffer *inputImage, MemoryBuffer *inputSpeed, MemoryBuffer *inputZ);
+
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_VectorCurveOperation.cpp b/source/blender/compositor/operations/COM_VectorCurveOperation.cpp
new file mode 100644
index 00000000000..e9045b126e2
--- /dev/null
+++ b/source/blender/compositor/operations/COM_VectorCurveOperation.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_VectorCurveOperation.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ #include "BKE_colortools.h"
+#ifdef __cplusplus
+}
+#endif
+
+VectorCurveOperation::VectorCurveOperation(): CurveBaseOperation()
+{
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addOutputSocket(COM_DT_VECTOR);
+
+ this->inputProgram = NULL;
+}
+void VectorCurveOperation::initExecution()
+{
+ CurveBaseOperation::initExecution();
+ this->inputProgram = this->getInputSocketReader(0);
+}
+
+void VectorCurveOperation::executePixel(float *output, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float input[4];
+
+
+ this->inputProgram->read(input, x, y, sampler, inputBuffers);
+
+ curvemapping_evaluate_premulRGBF(this->curveMapping, output, input);
+ output[3] = input[3];
+}
+
+void VectorCurveOperation::deinitExecution()
+{
+ this->inputProgram = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_VectorCurveOperation.h b/source/blender/compositor/operations/COM_VectorCurveOperation.h
new file mode 100644
index 00000000000..759e265220f
--- /dev/null
+++ b/source/blender/compositor/operations/COM_VectorCurveOperation.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_VectorCurveOperation_h
+#define _COM_VectorCurveOperation_h
+#include "COM_NodeOperation.h"
+#include "COM_CurveBaseOperation.h"
+
+class VectorCurveOperation : public CurveBaseOperation {
+private:
+ /**
+ * Cached reference to the inputProgram
+ */
+ SocketReader * inputProgram;
+public:
+ VectorCurveOperation();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *Vector, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp b/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp
new file mode 100644
index 00000000000..44b4c26fb64
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ViewerBaseOperation.h"
+#include "COM_SocketConnection.h"
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "BKE_image.h"
+#include "WM_api.h"
+#include "WM_types.h"
+#include "PIL_time.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_color.h"
+
+extern "C" {
+ #include "MEM_guardedalloc.h"
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+
+ViewerBaseOperation::ViewerBaseOperation() : NodeOperation()
+{
+ this->setImage(NULL);
+ this->setImageUser(NULL);
+ this->outputBuffer = NULL;
+ this->outputBufferDisplay = NULL;
+ this->active = false;
+ this->doColorManagement = true;
+}
+
+void ViewerBaseOperation::initExecution()
+{
+ // When initializing the tree during initial load the width and height can be zero.
+ initImage();
+}
+
+void ViewerBaseOperation::initImage()
+{
+ Image *anImage = this->image;
+ ImBuf *ibuf = BKE_image_acquire_ibuf(anImage, this->imageUser, &this->lock);
+
+ if (!ibuf) return;
+ if (ibuf->x != (int)getWidth() || ibuf->y != (int)getHeight()) {
+ imb_freerectImBuf(ibuf);
+ imb_freerectfloatImBuf(ibuf);
+ IMB_freezbuffloatImBuf(ibuf);
+ ibuf->x = getWidth();
+ ibuf->y = getHeight();
+ imb_addrectImBuf(ibuf);
+ imb_addrectfloatImBuf(ibuf);
+ anImage->ok = IMA_OK_LOADED;
+ }
+
+ /* now we combine the input with ibuf */
+ this->outputBuffer = ibuf->rect_float;
+ this->outputBufferDisplay = (unsigned char*)ibuf->rect;
+
+ BKE_image_release_ibuf(this->image, this->lock);
+}
+void ViewerBaseOperation:: updateImage(rcti *rect)
+{
+ /// @todo: introduce new event to update smaller area
+ WM_main_add_notifier(NC_WINDOW|ND_DRAW, NULL);
+}
+
+void ViewerBaseOperation::deinitExecution()
+{
+ this->outputBuffer = NULL;
+}
+
+const int ViewerBaseOperation::getRenderPriority() const
+{
+ if (this->isActiveViewerOutput()) {
+ return 8;
+ }
+ else {
+ return 0;
+ }
+}
diff --git a/source/blender/compositor/operations/COM_ViewerBaseOperation.h b/source/blender/compositor/operations/COM_ViewerBaseOperation.h
new file mode 100644
index 00000000000..58101911550
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ViewerBaseOperation.h
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ViewerBaseOperation_h
+#define _COM_ViewerBaseOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_image_types.h"
+#include "BLI_rect.h"
+
+class ViewerBaseOperation : public NodeOperation {
+protected:
+ float *outputBuffer;
+ unsigned char *outputBufferDisplay;
+ Image * image;
+ ImageUser * imageUser;
+ void *lock;
+ bool active;
+ const bNodeTree *tree;
+ float centerX;
+ float centerY;
+ OrderOfChunks chunkOrder;
+ bool doColorManagement;
+ bool doColorPredivide;
+
+public:
+ bool isOutputOperation(bool rendering) const {return true;}
+ void initExecution();
+ void deinitExecution();
+ void setImage(Image *image) {this->image = image;}
+ void setImageUser(ImageUser *imageUser) {this->imageUser = imageUser;}
+ const bool isActiveViewerOutput() const {return active;}
+ void setActive(bool active) {this->active = active;}
+ void setbNodeTree(const bNodeTree *tree) {this->tree = tree;}
+ void setCenterX(float centerX) {this->centerX = centerX;}
+ void setCenterY(float centerY) {this->centerY = centerY;}
+ void setChunkOrder(OrderOfChunks tileOrder) {this->chunkOrder = tileOrder;}
+ float getCenterX() { return this->centerX; }
+ float getCenterY() { return this->centerY; }
+ OrderOfChunks getChunkOrder() { return this->chunkOrder; }
+ const int getRenderPriority() const;
+ void setColorManagement(bool doColorManagement) {this->doColorManagement = doColorManagement;}
+ void setColorPredivide(bool doColorPredivide) {this->doColorPredivide = doColorPredivide;}
+ bool isViewerOperation() {return true;}
+
+protected:
+ ViewerBaseOperation();
+ void updateImage(rcti*rect);
+
+private:
+ void initImage();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ViewerOperation.cpp b/source/blender/compositor/operations/COM_ViewerOperation.cpp
new file mode 100644
index 00000000000..22e6511fbe7
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ViewerOperation.cpp
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ViewerOperation.h"
+#include "COM_SocketConnection.h"
+#include "BLI_listbase.h"
+#include "DNA_scene_types.h"
+#include "BKE_image.h"
+#include "WM_api.h"
+#include "WM_types.h"
+#include "PIL_time.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_color.h"
+#include "BLI_math_vector.h"
+
+extern "C" {
+ #include "MEM_guardedalloc.h"
+ #include "IMB_imbuf.h"
+ #include "IMB_imbuf_types.h"
+}
+
+
+ViewerOperation::ViewerOperation() : ViewerBaseOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+
+ this->imageInput = NULL;
+ this->alphaInput = NULL;
+}
+
+void ViewerOperation::initExecution()
+{
+ // When initializing the tree during initial load the width and height can be zero.
+ this->imageInput = getInputSocketReader(0);
+ this->alphaInput = getInputSocketReader(1);
+ ViewerBaseOperation::initExecution();
+}
+
+void ViewerOperation::deinitExecution()
+{
+ this->imageInput = NULL;
+ this->alphaInput = NULL;
+ ViewerBaseOperation::deinitExecution();
+}
+
+
+void ViewerOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers)
+{
+ float *buffer = this->outputBuffer;
+ unsigned char *bufferDisplay = this->outputBufferDisplay;
+ if (!buffer) return;
+ const int x1 = rect->xmin;
+ const int y1 = rect->ymin;
+ const int x2 = rect->xmax;
+ const int y2 = rect->ymax;
+ const int offsetadd = (this->getWidth()-(x2-x1))*4;
+ int offset = (y1*this->getWidth() + x1 ) * 4;
+ float alpha[4], srgb[4];
+ int x;
+ int y;
+ bool breaked = false;
+
+ for (y = y1 ; y < y2 && (!breaked) ; y++) {
+ for (x = x1 ; x < x2; x++) {
+ imageInput->read(&(buffer[offset]), x, y, COM_PS_NEAREST, memoryBuffers);
+ if (alphaInput != NULL) {
+ alphaInput->read(alpha, x, y, COM_PS_NEAREST, memoryBuffers);
+ buffer[offset+3] = alpha[0];
+ }
+ /// @todo: linear conversion only when scene color management is selected, also check predivide.
+ if (this->doColorManagement) {
+ if (this->doColorPredivide) {
+ linearrgb_to_srgb_predivide_v4(srgb, buffer+offset);
+ }
+ else {
+ linearrgb_to_srgb_v4(srgb, buffer+offset);
+ }
+ }
+ else {
+ copy_v4_v4(srgb, buffer+offset);
+ }
+
+ F4TOCHAR4(srgb, bufferDisplay+offset);
+
+ offset +=4;
+ }
+ if (tree->test_break && tree->test_break(tree->tbh)) {
+ breaked = true;
+ }
+
+ offset += offsetadd;
+ }
+ updateImage(rect);
+}
diff --git a/source/blender/compositor/operations/COM_ViewerOperation.h b/source/blender/compositor/operations/COM_ViewerOperation.h
new file mode 100644
index 00000000000..4ffae31c131
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ViewerOperation.h
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ViewerOperation_h
+#define _COM_ViewerOperation_h
+#include "COM_NodeOperation.h"
+#include "DNA_image_types.h"
+#include "BLI_rect.h"
+#include "COM_ViewerBaseOperation.h"
+
+class ViewerOperation : public ViewerBaseOperation {
+private:
+ SocketReader *imageInput;
+ SocketReader *alphaInput;
+
+public:
+ ViewerOperation();
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers);
+ void initExecution();
+ void deinitExecution();
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
new file mode 100644
index 00000000000..3af914f8d0e
--- /dev/null
+++ b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
@@ -0,0 +1,169 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_WriteBufferOperation.h"
+#include "COM_defines.h"
+#include "COM_MemoryManager.h"
+#include <stdio.h>
+
+/// @TODO: writebuffers don't have an actual data type set.
+WriteBufferOperation::WriteBufferOperation() :NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->memoryProxy = new MemoryProxy();
+ this->memoryProxy->setWriteBufferOperation(this);
+ this->memoryProxy->setExecutor(NULL);
+ this->tree = NULL;
+}
+WriteBufferOperation::~WriteBufferOperation()
+{
+ if (this->memoryProxy) {
+ delete this->memoryProxy;
+ this->memoryProxy = NULL;
+ }
+}
+
+void WriteBufferOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ input->read(color, x, y, sampler, inputBuffers);
+}
+void WriteBufferOperation::initExecution()
+{
+ this->input = this->getInputOperation(0);
+ MemoryManager::addMemoryProxy(this->memoryProxy);
+}
+void WriteBufferOperation::deinitExecution()
+{
+ this->input = NULL;
+}
+
+
+void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers)
+{
+ MemoryBuffer *memoryBuffer = MemoryManager::getMemoryBuffer(this->getMemoryProxy(), tileNumber);
+ float *buffer = memoryBuffer->getBuffer();
+ if (this->input->isComplex()) {
+ void *data = this->input->initializeTileData(rect, memoryBuffers);
+ int x1 = rect->xmin;
+ int y1 = rect->ymin;
+ int x2 = rect->xmax;
+ int y2 = rect->ymax;
+ int offset4 = 0;
+ int x;
+ int y;
+ bool breaked = false;
+ for (y = y1 ; y < y2 && (!breaked) ; y++) {
+ for (x = x1 ; x < x2; x++) {
+ input->read(&(buffer[offset4]), x, y, memoryBuffers, data);
+ offset4 +=4;
+
+ }
+ if (tree->test_break && tree->test_break(tree->tbh)) {
+ breaked = true;
+ }
+
+ }
+ if (data) {
+ this->input->deinitializeTileData(rect, memoryBuffers, data);
+ data = NULL;
+ }
+ }
+ else {
+ int x1 = rect->xmin;
+ int y1 = rect->ymin;
+ int x2 = rect->xmax;
+ int y2 = rect->ymax;
+ int offset4 = 0;
+ int x;
+ int y;
+ bool breaked = false;
+ for (y = y1 ; y < y2 && (!breaked) ; y++) {
+ for (x = x1 ; x < x2 ; x++) {
+ input->read(&(buffer[offset4]), x, y, COM_PS_NEAREST, memoryBuffers);
+ offset4 +=4;
+ }
+ if (tree->test_break && tree->test_break(tree->tbh)) {
+ breaked = true;
+ }
+ }
+ }
+ memoryBuffer->setCreatedState();
+}
+
+void WriteBufferOperation::executeOpenCLRegion(cl_context context, cl_program program, cl_command_queue queue, rcti *rect, unsigned int chunkNumber, MemoryBuffer** inputMemoryBuffers)
+{
+ MemoryBuffer *outputMemoryBuffer = MemoryManager::getMemoryBuffer(this->getMemoryProxy(), chunkNumber);
+ float *outputFloatBuffer = outputMemoryBuffer->getBuffer();
+ cl_int error;
+ /*
+ * 1. create cl_mem from outputbuffer
+ * 2. call NodeOperation (input) executeOpenCLChunk(.....)
+ * 3. schedule readback from opencl to main device (outputbuffer)
+ * 4. schedule native callback
+ *
+ * note: list of cl_mem will be filled by 2, and needs to be cleaned up by 4
+ */
+ // STEP 1
+ const unsigned int outputBufferWidth = outputMemoryBuffer->getWidth();
+ const unsigned int outputBufferHeight = outputMemoryBuffer->getHeight();
+
+ const cl_image_format imageFormat = {
+ CL_RGBA,
+ CL_FLOAT
+ };
+
+ cl_mem clOutputBuffer = clCreateImage2D(context, CL_MEM_WRITE_ONLY|CL_MEM_USE_HOST_PTR, &imageFormat, outputBufferWidth, outputBufferHeight, 0, outputFloatBuffer, &error);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+
+ // STEP 2
+ list<cl_mem> * clMemToCleanUp = new list<cl_mem>();
+ clMemToCleanUp->push_back(clOutputBuffer);
+ list<cl_kernel> *clKernelsToCleanUp = new list<cl_kernel>();
+
+ this->input->executeOpenCL(context, program, queue, outputMemoryBuffer, clOutputBuffer, inputMemoryBuffers, clMemToCleanUp, clKernelsToCleanUp);
+
+ // STEP 3
+
+ size_t origin[3] = {0,0,0};
+ size_t region[3] = {outputBufferWidth,outputBufferHeight,1};
+
+ error = clEnqueueBarrier(queue);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ error = clEnqueueReadImage(queue, clOutputBuffer, CL_TRUE, origin, region, 0, 0, outputFloatBuffer, 0, NULL, NULL);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ // STEP 4
+
+ while (clMemToCleanUp->size()>0) {
+ cl_mem mem = clMemToCleanUp->front();
+ error = clReleaseMemObject(mem);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ clMemToCleanUp->pop_front();
+ }
+
+ while (clKernelsToCleanUp->size()>0) {
+ cl_kernel kernel = clKernelsToCleanUp->front();
+ error = clReleaseKernel(kernel);
+ if (error != CL_SUCCESS) { printf("CLERROR[%d]: %s\n", error, clewErrorString(error)); }
+ clKernelsToCleanUp->pop_front();
+ }
+ delete clKernelsToCleanUp;
+}
diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.h b/source/blender/compositor/operations/COM_WriteBufferOperation.h
new file mode 100644
index 00000000000..b17122d68f0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_WriteBufferOperation.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_WriteBufferOperation_h_
+#define _COM_WriteBufferOperation_h_
+
+#include "COM_NodeOperation.h"
+#include "COM_MemoryProxy.h"
+#include "COM_SocketReader.h"
+/**
+ * @brief Operation to write to a tile
+ * @ingroup Operation
+ */
+class WriteBufferOperation: public NodeOperation {
+ MemoryProxy *memoryProxy;
+ NodeOperation *input;
+ const bNodeTree * tree;
+public:
+ WriteBufferOperation();
+ ~WriteBufferOperation();
+ int isBufferOperation() {return true;}
+ MemoryProxy *getMemoryProxy() {return this->memoryProxy;}
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+ const bool isWriteBufferOperation() const {return true;}
+
+ void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer** memoryBuffers);
+ void initExecution();
+ void deinitExecution();
+ void setbNodeTree(const bNodeTree *tree) {this->tree = tree;}
+ void executeOpenCLRegion(cl_context context, cl_program program, cl_command_queue queue, rcti *rect, unsigned int chunkNumber, MemoryBuffer** memoryBuffers);
+
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_ZCombineOperation.cpp b/source/blender/compositor/operations/COM_ZCombineOperation.cpp
new file mode 100644
index 00000000000..7f32bac2e64
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ZCombineOperation.cpp
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ZCombineOperation.h"
+#include "BLI_utildefines.h"
+
+ZCombineOperation::ZCombineOperation(): NodeOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VALUE);
+ this->addOutputSocket(COM_DT_COLOR);
+
+ this->image1Reader = NULL;
+ this->depth1Reader = NULL;
+ this->image2Reader = NULL;
+ this->depth2Reader = NULL;
+
+}
+
+void ZCombineOperation::initExecution()
+{
+ this->image1Reader = this->getInputSocketReader(0);
+ this->depth1Reader = this->getInputSocketReader(1);
+ this->image2Reader = this->getInputSocketReader(2);
+ this->depth2Reader = this->getInputSocketReader(3);
+}
+
+void ZCombineOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float depth1[4];
+ float depth2[4];
+
+ this->depth1Reader->read(depth1, x, y, sampler, inputBuffers);
+ this->depth2Reader->read(depth2, x, y, sampler, inputBuffers);
+ if (depth1[0]<depth2[0]) {
+ this->image1Reader->read(color, x, y, sampler, inputBuffers);
+ }
+ else {
+ this->image2Reader->read(color, x, y, sampler, inputBuffers);
+ }
+}
+void ZCombineAlphaOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[])
+{
+ float depth1[4];
+ float depth2[4];
+ float color1[4];
+ float color2[4];
+
+ this->depth1Reader->read(depth1, x, y, sampler, inputBuffers);
+ this->depth2Reader->read(depth2, x, y, sampler, inputBuffers);
+ if (depth1[0]<depth2[0]) {
+ this->image1Reader->read(color1, x, y, sampler, inputBuffers);
+ this->image2Reader->read(color2, x, y, sampler, inputBuffers);
+ }
+ else {
+ this->image1Reader->read(color2, x, y, sampler, inputBuffers);
+ this->image2Reader->read(color1, x, y, sampler, inputBuffers);
+ }
+ float fac = color1[3];
+ float ifac = 1.0f-fac;
+ color[0] = color1[0]+ifac*color2[0];
+ color[1] = color1[1]+ifac*color2[1];
+ color[2] = color1[2]+ifac*color2[2];
+ color[3] = MAX2(color1[3], color2[3]);
+}
+
+void ZCombineOperation::deinitExecution()
+{
+ this->image1Reader = NULL;
+ this->depth1Reader = NULL;
+ this->image2Reader = NULL;
+ this->depth2Reader = NULL;
+}
diff --git a/source/blender/compositor/operations/COM_ZCombineOperation.h b/source/blender/compositor/operations/COM_ZCombineOperation.h
new file mode 100644
index 00000000000..f9de916fce0
--- /dev/null
+++ b/source/blender/compositor/operations/COM_ZCombineOperation.h
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ZCombineOperation_h
+#define _COM_ZCombineOperation_h
+#include "COM_MixBaseOperation.h"
+
+
+/**
+ * this program converts an input colour to an output value.
+ * it assumes we are in sRGB colour space.
+ */
+class ZCombineOperation : public NodeOperation {
+protected:
+ SocketReader *image1Reader;
+ SocketReader *depth1Reader;
+ SocketReader *image2Reader;
+ SocketReader *depth2Reader;
+public:
+ /**
+ * Default constructor
+ */
+ ZCombineOperation();
+
+ void initExecution();
+ void deinitExecution();
+
+ /**
+ * the inner loop of this program
+ */
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+class ZCombineAlphaOperation: public ZCombineOperation {
+ void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]);
+};
+
+#endif
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index 3ee3d9c6198..cebc0e8810e 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -380,7 +380,7 @@ short ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
/* ... standard sub-channel filtering can go on here now ... */
#define END_ANIMFILTER_SUBCHANNELS \
filter_mode = _filter; \
- }
+ } (void)0
/* ............................... */
@@ -448,7 +448,7 @@ short ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
} \
} \
} \
- }
+ } (void)0
/* ............................... */
@@ -468,7 +468,7 @@ short ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
items ++; \
ale_statement \
} \
- }
+ } (void)0
#define ANIMCHANNEL_NEW_CHANNEL(channel_data, channel_type, owner_id) \
ANIMCHANNEL_NEW_CHANNEL_FULL(channel_data, channel_type, owner_id, {})
@@ -2290,7 +2290,7 @@ static size_t animdata_filter_remove_duplis(ListBase *anim_data)
/* build new hashtable to efficiently store and retrieve which entries have been
* encountered already while searching
*/
- gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "animdata_filter_duplis_remove gh");
+ gh = BLI_ghash_ptr_new("animdata_filter_duplis_remove gh");
/* loop through items, removing them from the list if a similar item occurs already */
for (ale = anim_data->first; ale; ale = next) {
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index f698153eb7f..7ce2988b067 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -569,8 +569,8 @@ void docenter_armature(Scene *scene, Object *ob, float cursor[3], int centermode
float min[3], max[3];
INIT_MINMAX(min, max);
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
- DO_MINMAX(ebone->head, min, max);
- DO_MINMAX(ebone->tail, min, max);
+ minmax_v3v3_v3(min, max, ebone->head);
+ minmax_v3v3_v3(min, max, ebone->tail);
}
mid_v3_v3v3(cent, min, max);
}
@@ -5945,7 +5945,7 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg)
ED_armature_to_edit(obedit);
- arcBoneMap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "SkeletonFromReebGraph gh");
+ arcBoneMap = BLI_ghash_ptr_new("SkeletonFromReebGraph gh");
BLI_markdownSymmetry((BGraph *)rg, rg->nodes.first, scene->toolsettings->skgen_symmetry_limit);
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index 566dbc901b8..80f8c61694c 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -298,8 +298,8 @@ static RigGraph *newRigGraph(void)
rg->head = NULL;
- rg->bones_map = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "newRigGraph bones gh");
- rg->controls_map = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "newRigGraph cont gh");
+ rg->bones_map = BLI_ghash_str_new("newRigGraph bones gh");
+ rg->controls_map = BLI_ghash_str_new("newRigGraph cont gh");
rg->free_arc = RIG_freeRigArc;
rg->free_node = NULL;
@@ -532,7 +532,7 @@ static RigGraph *cloneRigGraph(RigGraph *src, ListBase *editbones, Object *ob, c
RigControl *ctrl;
RigGraph *rg;
- ptr_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "cloneRigGraph gh");
+ ptr_hash = BLI_ghash_ptr_new("cloneRigGraph gh");
rg = newRigGraph();
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index 2201bcf7224..06ecf76ba3e 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -165,7 +165,7 @@ void BIF_makeListTemplates(const bContext *C)
BLI_ghash_free(TEMPLATES_HASH, NULL, NULL);
}
- TEMPLATES_HASH = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "makeListTemplates gh");
+ TEMPLATES_HASH = BLI_ghash_int_new("makeListTemplates gh");
TEMPLATES_CURRENT = 0;
for (base = FIRSTBASE; base; base = base->next) {
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index ccba3599318..b975d156868 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -451,11 +451,11 @@ static void heat_ray_tree_create(LaplacianSystem *sys)
float bb[6];
INIT_MINMAX(bb, bb + 3);
- DO_MINMAX(verts[mf->v1], bb, bb + 3);
- DO_MINMAX(verts[mf->v2], bb, bb + 3);
- DO_MINMAX(verts[mf->v3], bb, bb + 3);
+ minmax_v3v3_v3(bb, bb + 3, verts[mf->v1]);
+ minmax_v3v3_v3(bb, bb + 3, verts[mf->v2]);
+ minmax_v3v3_v3(bb, bb + 3, verts[mf->v3]);
if (mf->v4) {
- DO_MINMAX(verts[mf->v4], bb, bb + 3);
+ minmax_v3v3_v3(bb, bb + 3, verts[mf->v4]);
}
BLI_bvhtree_insert(sys->heat.bvhtree, a, bb, 2);
@@ -1753,7 +1753,7 @@ static void harmonic_coordinates_bind(Scene *UNUSED(scene), MeshDeformModifierDa
INIT_MINMAX(mdb->min, mdb->max);
for (a = 0; a < mdb->totcagevert; a++)
- DO_MINMAX(mdb->cagecos[a], mdb->min, mdb->max);
+ minmax_v3v3_v3(mdb->min, mdb->max, mdb->cagecos[a]);
/* allocate memory */
mdb->size = (2 << (mmd->gridsize - 1)) + 2;
diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c
index 2564683ddd2..316c4699c0b 100644
--- a/source/blender/editors/armature/reeb.c
+++ b/source/blender/editors/armature/reeb.c
@@ -354,7 +354,7 @@ static ReebArc *copyArc(ReebGraph *rg, ReebArc *arc)
memcpy(cp_arc->buckets, arc->buckets, sizeof(EmbedBucket) * cp_arc->bcount);
/* copy faces map */
- cp_arc->faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "copyArc gh");
+ cp_arc->faces = BLI_ghash_ptr_new("copyArc gh");
mergeArcFaces(rg, cp_arc, arc);
/* find corresponding head and tail */
@@ -2295,7 +2295,7 @@ static ReebEdge *createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2)
arc->flag = 0; // clear flag on init
arc->symmetry_level = 0;
- arc->faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "createArc gh");
+ arc->faces = BLI_ghash_ptr_new("createArc gh");
if (node1->weight <= node2->weight) {
v1 = node1;
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index be10e3c4c3f..7afba049232 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -311,7 +311,7 @@ static void init_editNurb_keyIndex(EditNurb *editnurb, ListBase *origBase)
if (editnurb->keyindex) return;
- gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "editNurb keyIndex");
+ gh = BLI_ghash_ptr_new("editNurb keyIndex");
while (orignu) {
if (orignu->bezt) {
@@ -667,7 +667,7 @@ static GHash *dupli_keyIndexHash(GHash *keyindex)
GHash *gh;
GHashIterator *hashIter;
- gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "dupli_keyIndex gh");
+ gh = BLI_ghash_ptr_new("dupli_keyIndex gh");
for (hashIter = BLI_ghashIterator_new(keyindex);
!BLI_ghashIterator_isDone(hashIter);
@@ -4729,7 +4729,7 @@ void CURVE_OT_extrude(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Extrude";
- ot->description = "Extrude selected control point(s) and move";
+ ot->description = "Extrude selected control point(s)";
ot->idname = "CURVE_OT_extrude";
/* api callbacks */
diff --git a/source/blender/editors/datafiles/startup.blend.c b/source/blender/editors/datafiles/startup.blend.c
index 133e92409d3..cad150abc5e 100644
--- a/source/blender/editors/datafiles/startup.blend.c
+++ b/source/blender/editors/datafiles/startup.blend.c
@@ -1,14 +1,14 @@
/* DataToC output of file <startup_blend> */
-int datatoc_startup_blend_size = 373072;
+int datatoc_startup_blend_size = 374884;
char datatoc_startup_blend[] = {
- 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 54, 51, 82, 69, 78, 68,
- 72, 0, 0, 0, 64,178,119, 2,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,
-101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66,
- 48, 4, 0, 0, 80,174,119, 2,255,127, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 50, 2, 0, 0, 0,250, 0, 0, 0,
- 1, 0, 0, 1,120,141, 16, 7, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 29,180, 0, 0,
+ 66, 76, 69, 78,
+ 68, 69, 82, 45,118, 50, 54, 51, 82, 69, 78, 68, 72, 0, 0, 0, 16,174, 63,189,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 48, 4, 0, 0, 96,170, 63,189,255,127, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,
+ 32, 32, 32, 53, 5, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, 8,234, 27, 7, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0,
+ 0, 16, 0, 0,128, 32, 4, 0,240,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -40,1167 +40,1148 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 87, 77, 0, 0, 88, 1, 0, 0, 24,186, 15, 7, 0, 0, 0, 0,146, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,
-110, 77, 97,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 0, 0, 88, 1, 0, 0,168, 22, 27, 7, 0, 0, 0, 0,
+148, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,110, 77, 97,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,187, 15, 7, 0, 0, 0, 0,184,187, 15, 7,
- 0, 0, 0, 0,184,187, 15, 7, 0, 0, 0, 0,184,187, 15, 7, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 88,185,237, 6,
- 0, 0, 0, 0, 88,185,237, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 74, 65, 8,
- 0, 0, 0, 0,168, 15, 55, 8, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,216,199, 54, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72, 24, 27, 7, 0, 0, 0, 0, 72, 24, 27, 7, 0, 0, 0, 0, 72, 24, 27, 7, 0, 0, 0, 0, 72, 24, 27, 7, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0,136,203, 87, 8, 0, 0, 0, 0,184,212, 84, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 88, 99,154, 8, 0, 0, 0, 0,168, 35,250, 6, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,248, 21, 7, 0, 0, 0, 0, 8,250, 21, 7,
- 0, 0, 0, 0, 40,248, 21, 7, 0, 0, 0, 0, 24,249, 21, 7, 0, 0, 0, 0, 8,250, 21, 7, 0, 0, 0, 0, 56,151, 21, 7,
- 0, 0, 0, 0,216,199, 54, 8, 0, 0, 0, 0, 56,151, 21, 7, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,184,187, 15, 7,
- 0, 0, 0, 0,147, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,250, 21, 7,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,
-101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 25, 0,
- 62, 6, 98, 4, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 0, 0, 1, 0, 0, 0, 24,181, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,248,228, 31, 7, 0, 0, 0, 0, 72,215, 65, 8,
- 0, 0, 0, 0, 72,215, 65, 8, 0, 0, 0, 0, 88,183, 31, 7, 0, 0, 0, 0,200,158, 31, 7, 0, 0, 0, 0,216,181, 31, 7,
- 0, 0, 0, 0,216,181, 31, 7, 0, 0, 0, 0,248, 76, 53, 8, 0, 0, 0, 0, 24,237, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 8,189, 15, 7, 0, 0, 0, 0,210, 0, 0, 0,
- 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 83, 82, 65,110,105,109, 97,116,105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,132, 15, 7,
- 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 88,197, 15, 7, 0, 0, 0, 0,152,209, 15, 7, 0, 0, 0, 0, 8,210, 15, 7,
- 0, 0, 0, 0, 40, 23, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 88,190, 15, 7,
- 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0,168,132, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,190, 15, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2,
- 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,192, 15, 7,
- 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0,168,191, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,192, 15, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 24, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 1,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,193, 15, 7,
- 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0,104,193, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,194, 15, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 24, 4, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 88, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,195, 15, 7,
- 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1,195, 2, 1, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 40,195, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,196, 15, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,192, 1, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 2,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 88,197, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,197, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,200,197, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,198, 15, 7, 0, 0, 0, 0, 88,197, 15, 7,
- 0, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 56,198, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,198, 15, 7, 0, 0, 0, 0,200,197, 15, 7,
- 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,168,198, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,199, 15, 7, 0, 0, 0, 0, 56,198, 15, 7,
- 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 24,199, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,199, 15, 7, 0, 0, 0, 0,168,198, 15, 7,
- 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,136,199, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,199, 15, 7, 0, 0, 0, 0, 24,199, 15, 7,
- 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,248,199, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,200, 15, 7, 0, 0, 0, 0,136,199, 15, 7,
- 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,104,200, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,200, 15, 7, 0, 0, 0, 0,248,199, 15, 7,
- 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,216,200, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,201, 15, 7, 0, 0, 0, 0,104,200, 15, 7,
- 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 72,201, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,201, 15, 7, 0, 0, 0, 0,216,200, 15, 7,
- 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,184,201, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,202, 15, 7, 0, 0, 0, 0, 72,201, 15, 7,
- 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 40,202, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,202, 15, 7, 0, 0, 0, 0,184,201, 15, 7,
- 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,152,202, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,203, 15, 7, 0, 0, 0, 0, 40,202, 15, 7,
- 0, 0, 0, 0, 24,192, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 8,203, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,203, 15, 7, 0, 0, 0, 0,152,202, 15, 7,
- 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,120,203, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,203, 15, 7, 0, 0, 0, 0, 8,203, 15, 7,
- 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,232,203, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,204, 15, 7, 0, 0, 0, 0,120,203, 15, 7,
- 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 88,204, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,204, 15, 7, 0, 0, 0, 0,232,203, 15, 7,
- 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,200,204, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,205, 15, 7, 0, 0, 0, 0, 88,204, 15, 7,
- 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 56,205, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,205, 15, 7, 0, 0, 0, 0,200,204, 15, 7,
- 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,168,205, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,206, 15, 7, 0, 0, 0, 0, 56,205, 15, 7,
- 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 24,206, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,206, 15, 7, 0, 0, 0, 0,168,205, 15, 7,
- 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,136,206, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,206, 15, 7, 0, 0, 0, 0, 24,206, 15, 7,
- 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,248,206, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,207, 15, 7, 0, 0, 0, 0,136,206, 15, 7,
- 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,104,207, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,207, 15, 7, 0, 0, 0, 0,248,206, 15, 7,
- 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,216,207, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,208, 15, 7, 0, 0, 0, 0,104,207, 15, 7,
- 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 72,208, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,208, 15, 7, 0, 0, 0, 0,216,207, 15, 7,
- 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,184,208, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,209, 15, 7, 0, 0, 0, 0, 72,208, 15, 7,
- 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0, 40,209, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,209, 15, 7, 0, 0, 0, 0,184,208, 15, 7,
- 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 0, 0, 0,152,209, 15, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,209, 15, 7,
- 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0, 8,210, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,213, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0,168,132, 15, 7, 0, 0, 0, 0, 88,190, 15, 7, 0, 0, 0, 0,168,191, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4,
- 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 32, 16, 7, 0, 0, 0, 0,104, 32, 16, 7,
- 0, 0, 0, 0,248,210, 15, 7, 0, 0, 0, 0,104,212, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,210, 15, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,212, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,212, 15, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,210, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,
-129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40,193, 18, 7, 0, 0, 0, 0,216, 86, 19, 7, 0, 0, 0, 0, 40,193, 18, 7, 0, 0, 0, 0,232, 85, 19, 7, 0, 0, 0, 0,
+216, 86, 19, 7, 0, 0, 0, 0,200, 87, 19, 7, 0, 0, 0, 0,200, 87, 19, 7, 0, 0, 0, 0,200, 87, 19, 7, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 1, 0, 0, 72, 24, 27, 7, 0, 0, 0, 0,149, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,208,125, 19, 7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 34, 0, 78, 5,164, 2, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 0, 0, 1, 0, 0, 0,
+ 8,244,105, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+104, 91,106, 7, 0, 0, 0, 0,152,172,157, 8, 0, 0, 0, 0,152,172,157, 8, 0, 0, 0, 0,200, 57,106, 7, 0, 0, 0, 0,
+ 88, 55,106, 7, 0, 0, 0, 0,248, 56,106, 7, 0, 0, 0, 0,248, 56,106, 7, 0, 0, 0, 0,200, 52,106, 7, 0, 0, 0, 0,
+232,106,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,125, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 65,110,105,109, 97,116,105,111,110, 0, 46, 48, 48, 49,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,213, 15, 7,
- 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,238, 15, 7, 0, 0, 0, 0, 8,210, 15, 7, 0, 0, 0, 0, 24,192, 15, 7,
- 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,104,193, 15, 7, 0, 0, 0, 0,200,190, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 4, 4,216, 0, 60, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,237, 15, 7, 0, 0, 0, 0, 40,237, 15, 7, 0, 0, 0, 0,200,214, 15, 7,
- 0, 0, 0, 0, 56,216, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,214, 15, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 56,216, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0,
- 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,216, 0, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,200,224, 26, 7, 0, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0,232, 33, 27, 7, 0, 0, 0, 0,
+ 40, 46, 27, 7, 0, 0, 0, 0,152, 46, 27, 7, 0, 0, 0, 0,184,115, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+200,224, 26, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,225, 26, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,225, 26, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,232, 26, 27, 7, 0, 0, 0, 0,200,224, 26, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 26, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 88, 27, 27, 7, 0, 0, 0, 0, 56,225, 26, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 88, 27, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0,
+232, 26, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+200, 27, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0, 88, 27, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 24, 29, 27, 7, 0, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0,
+168, 28, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+136, 29, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+216, 30, 27, 7, 0, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0,
+104, 30, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 72, 31, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 1,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+152, 32, 27, 7, 0, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,152, 32, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0,
+ 40, 32, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 8, 33, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0,152, 32, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 33, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 88, 34, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,225, 26, 7, 0, 0, 0, 0,232, 26, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 34, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+200, 34, 27, 7, 0, 0, 0, 0,232, 33, 27, 7, 0, 0, 0, 0, 56,225, 26, 7, 0, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 34, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 56, 35, 27, 7, 0, 0, 0, 0, 88, 34, 27, 7, 0, 0, 0, 0,232, 26, 27, 7, 0, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 35, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+168, 35, 27, 7, 0, 0, 0, 0,200, 34, 27, 7, 0, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 35, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 24, 36, 27, 7, 0, 0, 0, 0, 56, 35, 27, 7, 0, 0, 0, 0,200,224, 26, 7, 0, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 36, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+136, 36, 27, 7, 0, 0, 0, 0,168, 35, 27, 7, 0, 0, 0, 0, 88, 27, 27, 7, 0, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 36, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+248, 36, 27, 7, 0, 0, 0, 0, 24, 36, 27, 7, 0, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 36, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+104, 37, 27, 7, 0, 0, 0, 0,136, 36, 27, 7, 0, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 37, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+216, 37, 27, 7, 0, 0, 0, 0,248, 36, 27, 7, 0, 0, 0, 0, 88, 27, 27, 7, 0, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 37, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 72, 38, 27, 7, 0, 0, 0, 0,104, 37, 27, 7, 0, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 38, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+184, 38, 27, 7, 0, 0, 0, 0,216, 37, 27, 7, 0, 0, 0, 0,200,224, 26, 7, 0, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 38, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 40, 39, 27, 7, 0, 0, 0, 0, 72, 38, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 39, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+152, 39, 27, 7, 0, 0, 0, 0,184, 38, 27, 7, 0, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 39, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 8, 40, 27, 7, 0, 0, 0, 0, 40, 39, 27, 7, 0, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 40, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+120, 40, 27, 7, 0, 0, 0, 0,152, 39, 27, 7, 0, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 40, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+232, 40, 27, 7, 0, 0, 0, 0, 8, 40, 27, 7, 0, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 40, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 88, 41, 27, 7, 0, 0, 0, 0,120, 40, 27, 7, 0, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 41, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+200, 41, 27, 7, 0, 0, 0, 0,232, 40, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 41, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 56, 42, 27, 7, 0, 0, 0, 0, 88, 41, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 42, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+168, 42, 27, 7, 0, 0, 0, 0,200, 41, 27, 7, 0, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 42, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 24, 43, 27, 7, 0, 0, 0, 0, 56, 42, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0,152, 32, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 43, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+136, 43, 27, 7, 0, 0, 0, 0,168, 42, 27, 7, 0, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0,152, 32, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 43, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+248, 43, 27, 7, 0, 0, 0, 0, 24, 43, 27, 7, 0, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 43, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+104, 44, 27, 7, 0, 0, 0, 0,136, 43, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 44, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+216, 44, 27, 7, 0, 0, 0, 0,248, 43, 27, 7, 0, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 44, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 72, 45, 27, 7, 0, 0, 0, 0,104, 44, 27, 7, 0, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 45, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+184, 45, 27, 7, 0, 0, 0, 0,216, 44, 27, 7, 0, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 45, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 40, 46, 27, 7, 0, 0, 0, 0, 72, 45, 27, 7, 0, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 46, 27, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,184, 45, 27, 7, 0, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,152, 32, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152, 46, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+104, 50, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 27, 27, 7, 0, 0, 0, 0, 56,225, 26, 7, 0, 0, 0, 0,
+232, 26, 27, 7, 0, 0, 0, 0, 56, 28, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
+196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+248,124, 27, 7, 0, 0, 0, 0,248,124, 27, 7, 0, 0, 0, 0,136, 47, 27, 7, 0, 0, 0, 0,248, 48, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,136, 47, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,248, 48, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65,
+ 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4,
+ 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
+196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,216, 15, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,214, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 67, 0, 0, 61,196,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 71, 67, 1, 0,145,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0,
- 33, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0,
- 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,216, 0, 34, 1,199, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,216, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,217, 15, 7,
- 0, 0, 0, 0,136,235, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,217, 15, 7, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0, 72,219, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,248, 48, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+136, 47, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69,
+ 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7,
+ 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,160, 0, 0, 0,104, 50, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248, 74, 27, 7, 0, 0, 0, 0,
+152, 46, 27, 7, 0, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0,
+ 88, 27, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0,
+ 4, 4,216, 0, 60, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 73, 27, 7, 0, 0, 0, 0,
+184, 73, 27, 7, 0, 0, 0, 0, 88, 51, 27, 7, 0, 0, 0, 0,200, 52, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 88, 51, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200, 52, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,220,255,199, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 1, 0, 0, 59, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0, 72,219, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,220, 15, 7, 0, 0, 0, 0,168,217, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,
-110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,
-110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+200, 52, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 51, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 88, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 71, 67, 1, 0,145,195, 0, 0, 0, 0,
+199, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,216, 0, 34, 1,199, 0, 34, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,199, 0, 61, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56, 54, 27, 7, 0, 0, 0, 0, 24, 72, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+ 56, 54, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 55, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,
+120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,
+120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,199, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,220, 15, 7, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0,136,222, 15, 7, 0, 0, 0, 0, 72,219, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 55, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+120, 57, 27, 7, 0, 0, 0, 0, 56, 54, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,111,255,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,136,222, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,224, 15, 7, 0, 0, 0, 0,232,220, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,
-109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,
-109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0,
+ 0, 0,135,255,199, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,199, 0,203, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+120, 57, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 59, 27, 7, 0, 0, 0, 0,216, 55, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,224, 15, 7, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0,200,225, 15, 7, 0, 0, 0, 0,136,222, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 58,254,199, 0, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 59, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+184, 60, 27, 7, 0, 0, 0, 0,120, 57, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,200,225, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,227, 15, 7, 0, 0, 0, 0, 40,224, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,
-116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,
-116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,
-111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,199, 0, 0, 0, 20, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,227, 15, 7, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0, 8,229, 15, 7, 0, 0, 0, 0,200,225, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,140,254,199, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+184, 60, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 62, 27, 7, 0, 0, 0, 0, 24, 59, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,
+105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,
+105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 10,254,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,199, 0, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0, 8,229, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,230, 15, 7, 0, 0, 0, 0,104,227, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
-114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
-114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 62, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+248, 63, 27, 7, 0, 0, 0, 0,184, 60, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,199, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,230, 15, 7, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0, 72,232, 15, 7, 0, 0, 0, 0, 8,229, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0,
+ 0, 0, 34,254,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+248, 63, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 65, 27, 7, 0, 0, 0, 0, 88, 62, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,218,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0, 72,232, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,233, 15, 7, 0, 0, 0, 0,168,230, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116,
- 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116,
- 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 65, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+ 56, 67, 27, 7, 0, 0, 0, 0,248, 63, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,199, 0, 0, 0, 20, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,233, 15, 7, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0,136,235, 15, 7, 0, 0, 0, 0, 72,232, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,242,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+ 56, 67, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 68, 27, 7, 0, 0, 0, 0,152, 65, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,
+114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,
+114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 40,253,199, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,136,235, 15, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,233, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,
-107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,
-107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 68, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+120, 70, 27, 7, 0, 0, 0, 0, 56, 67, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,199, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 40,237, 15, 7, 0, 0, 0, 0,179, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,194,253,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+120, 70, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 72, 27, 7, 0, 0, 0, 0,216, 68, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0,104,238, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,243, 15, 7, 0, 0, 0, 0,216,213, 15, 7,
- 0, 0, 0, 0, 56,132, 15, 7, 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 24,192, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15, 24, 4,
- 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,242, 15, 7, 0, 0, 0, 0, 56,242, 15, 7,
- 0, 0, 0, 0, 88,239, 15, 7, 0, 0, 0, 0,200,240, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,239, 15, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,240, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 39,182,158, 55, 0, 0,131, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,130, 68, 0, 0,200, 65, 0,224,130, 68, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 24, 4, 26, 0, 24, 4, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253,199, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,240, 15, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,239, 15, 7, 0, 0, 0, 0, 0, 0, 64,192,
- 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
- 23, 4, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61,
- 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 24, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 72, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,120, 70, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 56,242, 15, 7,
- 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 16,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+184, 73, 27, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0, 88,243, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,250, 15, 7, 0, 0, 0, 0,104,238, 15, 7,
- 0, 0, 0, 0,248,192, 15, 7, 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,232,196, 15, 7, 0, 0, 0, 0,104,193, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 59, 2, 0, 0, 3, 3,216, 0,
-255, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,247, 15, 7, 0, 0, 0, 0, 40,247, 15, 7,
- 0, 0, 0, 0, 72,244, 15, 7, 0, 0, 0, 0,184,245, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,244, 15, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,245, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 2, 0, 0, 59, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,245, 15, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,244, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 67, 0, 0, 83,195, 0, 0, 0, 0,199, 0, 0, 0,
-216, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-198, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,216, 0,229, 0,199, 0,211, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 74, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+232, 79, 27, 7, 0, 0, 0, 0,104, 50, 27, 7, 0, 0, 0, 0,200,224, 26, 7, 0, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0,
+216, 30, 27, 7, 0, 0, 0, 0,168, 28, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0,
+ 0, 0, 0, 0, 87, 0, 0, 0, 15, 15, 24, 4, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200, 78, 27, 7, 0, 0, 0, 0,200, 78, 27, 7, 0, 0, 0, 0,232, 75, 27, 7, 0, 0, 0, 0, 88, 77, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 40,247, 15, 7,
- 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,232, 75, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 88, 77, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 39,182,158, 55, 0, 0,131, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,130, 68, 0, 0,200, 65,
+ 0,224,130, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 24, 4,
+ 26, 0, 24, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 88, 77, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+232, 75, 27, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67,
+ 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66,
+ 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 24, 4,
+ 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0,
+ 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 62, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,136,248, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,208, 0, 0, 0,200, 78, 27, 7, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,136,248, 15, 7, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0,
- 14, 0, 0, 0,232,248, 15, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,232,248, 15, 7, 0, 0, 0, 0,236, 0, 0, 0,
- 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7,
- 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,225, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,239, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,233, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,219, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 24,250, 15, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 7, 16, 7,
- 0, 0, 0, 0, 88,243, 15, 7, 0, 0, 0, 0,184,194, 15, 7, 0, 0, 0, 0, 40,195, 15, 7, 0, 0, 0, 0,136,192, 15, 7,
- 0, 0, 0, 0, 72,194, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,
-194, 2, 0, 0, 1, 1, 87, 2,106, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 5, 16, 7,
- 0, 0, 0, 0,248, 5, 16, 7, 0, 0, 0, 0, 8,251, 15, 7, 0, 0, 0, 0,200, 0, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 8,251, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,252, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 21, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 21, 68, 0, 0,200, 65, 0,128, 21, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 87, 2, 26, 0, 87, 2,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,
-114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,120,252, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,253, 15, 7, 0, 0, 0, 0, 8,251, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0,
- 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,
-194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 80, 2, 0, 0, 5, 0, 3, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,232,253, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,255, 15, 7, 0, 0, 0, 0,120,252, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,
-102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,
-115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0,
+ 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232, 79, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+168, 86, 27, 7, 0, 0, 0, 0,248, 74, 27, 7, 0, 0, 0, 0,136, 29, 27, 7, 0, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0,
+120, 33, 27, 7, 0, 0, 0, 0,248, 29, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0,
+ 61, 1, 0, 0, 59, 2, 0, 0, 3, 3,216, 0,255, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+184, 83, 27, 7, 0, 0, 0, 0,184, 83, 27, 7, 0, 0, 0, 0,216, 80, 27, 7, 0, 0, 0, 0, 72, 82, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,216, 80, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 72, 82, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65,
+ 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0,
+ 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0,
+ 34, 2, 0, 0, 59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 88,255, 15, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200, 0, 16, 7, 0, 0, 0, 0,232,253, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196,
- 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0,
-130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,
-194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 72, 82, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+216, 80, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 67,
+ 0, 0, 83,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,216, 0,
+229, 0,199, 0,211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0,
+ 61, 1, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,229, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 1, 0, 0,184, 83, 27, 7, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 85, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 24, 85, 27, 7, 0, 0, 0, 0,
+238, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,120, 85, 27, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,
+120, 85, 27, 7, 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0,
+ 19, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0,
+ 21, 0, 1, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,128, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0,152,137, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 56,192, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0,120,151, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136,173, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0,216,144, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,123, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 88,122, 30, 7, 0, 0, 0, 0,
+ 21, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168, 86, 27, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0, 56,100, 27, 7, 0, 0, 0, 0,232, 79, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0,
+184, 31, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,216, 30, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,194, 2, 0, 0, 1, 1, 87, 2,106, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136, 98, 27, 7, 0, 0, 0, 0,136, 98, 27, 7, 0, 0, 0, 0,152, 87, 27, 7, 0, 0, 0, 0,
+ 88, 93, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 87, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 8, 89, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,192, 21, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,128, 21, 68, 0, 0,200, 65, 0,128, 21, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0, 87, 2, 26, 0, 87, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 89, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+120, 90, 27, 7, 0, 0, 0, 0,152, 87, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 80, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 90, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+232, 91, 27, 7, 0, 0, 0, 0, 8, 89, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0,
+ 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 91, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 88, 93, 27, 7, 0, 0, 0, 0,120, 90, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0,
+ 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0,130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 4, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,200, 0, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,255, 15, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 93, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,232, 91, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,
-194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+193, 1, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 2, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 2, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65,
-112, 3, 0, 0, 56, 2, 16, 7, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,200,167,141, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191,
- 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63,
- 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188,
- 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62,
- 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,
-184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190,
- 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 99,240,191, 62,110,116, 85, 63, 64,185, 70,188,
- 0, 0, 82,180, 48,221,185,190, 44, 45, 51, 62, 28, 11, 79, 63, 0, 0, 56,179, 67,108,117,194,183,204,216, 65,105,156, 5,194,
-212,247,159,192,235, 62,114, 66, 59,254,213,193,158,225, 3, 66, 55, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63,
- 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,
-184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190,
- 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200, 94, 27, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,200, 94, 27, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,167,141, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0,
+ 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,
+162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,
+ 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,
+185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,
+178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,
+145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65,
+ 99,240,191, 62,110,116, 85, 63, 64,185, 70,188, 0, 0, 82,180, 48,221,185,190, 44, 45, 51, 62, 28, 11, 79, 63, 0, 0, 56,179,
+ 67,108,117,194,183,204,216, 65,105,156, 5,194,212,247,159,192,235, 62,114, 66, 59,254,213,193,158,225, 3, 66, 55, 8,160, 64,
+ 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,
+162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,
+178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, 35, 44,185, 62,
+145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190,
- 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,236, 15, 72, 59, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, 86,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,248, 5, 16, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+236, 15, 72, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, 86,152,137, 66,113, 27,126, 66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,136, 98, 27, 7, 0, 0, 0, 0,
+175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 7, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0,
- 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0,168, 7, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 16, 16, 7, 0, 0, 0, 0, 24,250, 15, 7,
- 0, 0, 0, 0,216,193, 15, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0,184,194, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0, 3, 1, 0, 0, 2, 2,192, 1,
-171, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 14, 16, 7, 0, 0, 0, 0, 88, 14, 16, 7,
- 0, 0, 0, 0,152, 8, 16, 7, 0, 0, 0, 0,232, 12, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 8, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8, 10, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 56,100, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+232,108, 27, 7, 0, 0, 0, 0,168, 86, 27, 7, 0, 0, 0, 0,104, 30, 27, 7, 0, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0,
+152, 32, 27, 7, 0, 0, 0, 0, 72, 31, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,
+ 89, 0, 0, 0, 3, 1, 0, 0, 2, 2,192, 1,171, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+232,106, 27, 7, 0, 0, 0, 0,232,106, 27, 7, 0, 0, 0, 0, 40,101, 27, 7, 0, 0, 0, 0,120,105, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 10, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 11, 16, 7, 0, 0, 0, 0,152, 8, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0,
-217, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-199, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,145, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 40,101, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,102, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65,
+ 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1,
+ 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,
+ 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 11, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232, 12, 16, 7, 0, 0, 0, 0, 8, 10, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,152,102, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,104, 27, 7, 0, 0, 0, 0,
+ 40,101, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67,
+ 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,
+145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,
+115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,145, 0, 0, 0, 2, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 8,104, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,120,105, 27, 7, 0, 0, 0, 0,
+152,102, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,191, 1, 0, 0,
+115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
+ 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 12, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 11, 16, 7, 0, 0, 0, 0, 0, 0, 16,193,
- 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0,
- 17, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,
-230, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0,
- 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,120,105, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8,104, 27, 7, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67,
+ 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0,111, 18,131, 58,111, 18,131, 58,
+ 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,231, 0,
+145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,191, 1, 0, 0,
+115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 0,145, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 88, 14, 16, 7,
- 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,240, 0, 0, 0,232,106, 27, 7, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 15, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-112, 0, 0, 0,152, 15, 16, 7, 0, 0, 0, 0, 37, 1, 0, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 16, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 23, 16, 7,
- 0, 0, 0, 0,168, 7, 16, 7, 0, 0, 0, 0,152,195, 15, 7, 0, 0, 0, 0, 56,191, 15, 7, 0, 0, 0, 0, 40,195, 15, 7,
- 0, 0, 0, 0, 8,196, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0,
-194, 2, 0, 0, 12, 12,192, 1,190, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 21, 16, 7,
- 0, 0, 0, 0,152, 21, 16, 7, 0, 0, 0, 0, 72, 17, 16, 7, 0, 0, 0, 0, 40, 20, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 72, 17, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 18, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 94, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0,
- 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40,108, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 40,108, 27, 7, 0, 0, 0, 0, 38, 1, 0, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,184, 18, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 20, 16, 7, 0, 0, 0, 0, 72, 17, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,201,195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,164, 1,200, 0,
-146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 31, 1, 0, 0,
-194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0,164, 1, 0, 0, 2, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,108, 27, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,184,115, 27, 7, 0, 0, 0, 0, 56,100, 27, 7, 0, 0, 0, 0, 40, 32, 27, 7, 0, 0, 0, 0,
+200, 27, 27, 7, 0, 0, 0, 0,184, 31, 27, 7, 0, 0, 0, 0,152, 32, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0,194, 2, 0, 0, 12, 12,192, 1,190, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40,114, 27, 7, 0, 0, 0, 0, 40,114, 27, 7, 0, 0, 0, 0,216,109, 27, 7, 0, 0, 0, 0,
+184,112, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,109, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 72,111, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 94, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 40, 20, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 18, 16, 7,
- 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 72,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0,201,195,
- 0, 0, 0, 0,231, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72,
- 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,248, 0,164, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,191, 1, 0, 0, 31, 1, 0, 0,
-194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,111, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+184,112, 27, 7, 0, 0, 0, 0,216,109, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,201,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3,
+ 0, 0, 2, 4, 6, 0,200, 0,164, 1,200, 0,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,199, 0, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200, 0,164, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 72, 1, 0, 0,152, 21, 16, 7, 0, 0, 0, 0, 38, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,112, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 72,111, 27, 7, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 72,194, 0, 0, 0, 0,
+ 0, 0, 32,193, 0, 0,104, 68, 0, 0,201,195, 0, 0, 0, 0,231, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0,
+ 0, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,163, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2,
+ 0, 0, 2, 4, 4, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200, 0, 0, 0,191, 1, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 1, 0, 0, 40,114, 27, 7, 0, 0, 0, 0, 39, 1, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0, 40, 23, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 16, 16, 7,
- 0, 0, 0, 0,120,196, 15, 7, 0, 0, 0, 0,136,192, 15, 7, 0, 0, 0, 0,168,191, 15, 7, 0, 0, 0, 0,232,196, 15, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 1, 1,216, 0,
-134, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 30, 16, 7, 0, 0, 0, 0,184, 30, 16, 7,
- 0, 0, 0, 0, 24, 24, 16, 7, 0, 0, 0, 0,136, 25, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 24, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136, 25, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,165, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,128,164, 67, 0, 0,200, 65, 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 74, 1, 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 25, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,115, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,232,108, 27, 7, 0, 0, 0, 0, 8, 33, 27, 7, 0, 0, 0, 0, 24, 29, 27, 7, 0, 0, 0, 0,
+ 56, 28, 27, 7, 0, 0, 0, 0,120, 33, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0,
+ 61, 2, 0, 0,194, 2, 0, 0, 1, 1,216, 0,134, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72,123, 27, 7, 0, 0, 0, 0, 72,123, 27, 7, 0, 0, 0, 0,168,116, 27, 7, 0, 0, 0, 0, 24,118, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,168,116, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,118, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,165, 67,
+ 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,128,164, 67, 0, 0,200, 65,
+ 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 74, 1,
+ 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0,
+ 61, 2, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0,
+ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 24,118, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+168,116, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 26, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,248, 26, 16, 7,
- 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 56,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,228,100, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,
-225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,
- 0,222,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,160, 56, 49,188, 0, 0, 0, 0, 88,126,162,190,
-229,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,
-151, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,
-209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,
-126,113,172,191,216, 49, 49, 65,152, 9, 52, 65,149, 70,158, 62, 24,234,167, 62,192,214,159,187, 0, 0, 6,181,196,188,181,189,
- 71,238,178, 61,127, 45,128, 62, 0, 0,226, 51,168,120, 21,194,107, 5, 2, 66,203,135,213,193,147,214,159,192,177, 38, 19, 66,
-124,173,255,193, 96,101,210, 65,128, 40,160, 64,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,
-225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,
- 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,
-209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,
-126,113,172,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0,
+ 61, 2, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,134, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,119, 27, 7, 0, 0, 0, 0,
+ 68, 65, 84, 65,112, 3, 0, 0,136,119, 27, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 56,255, 13, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,100, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 86,126,162,190,
+ 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63,
+ 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,
+160, 56, 49,188, 0, 0, 0, 0, 88,126,162,190,229,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191,
+ 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,
+244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188,136,239, 76, 64,
+ 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65,152, 9, 52, 65,149, 70,158, 62, 24,234,167, 62,
+192,214,159,187, 0, 0, 6,181,196,188,181,189, 71,238,178, 61,127, 45,128, 62, 0, 0,226, 51,168,120, 21,194,107, 5, 2, 66,
+203,135,213,193,147,214,159,192,177, 38, 19, 66,124,173,255,193, 96,101,210, 65,128, 40,160, 64,221,149, 47, 63, 86,126,162,190,
+ 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63,
+ 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, 47,201,194, 63, 61, 73,145,191,
+244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188,136,239, 76, 64,
+ 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 43, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,191,136, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65,
- 1, 2, 0, 0,255,255, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63,
-190,133, 65, 66, 99,212, 90, 66, 27,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 96, 1, 0, 0,184, 30, 16, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
-205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190,
+ 43, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,191,136, 59, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 1, 2, 0, 0,255,255, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63,190,133, 65, 66, 99,212, 90, 66, 27,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 72,123, 27, 7, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
+248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 3, 0, 8, 0,128, 0, 0, 0, 12, 66, 0, 0,128, 63,
- 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 3, 0,
+ 8, 0,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,248, 32, 16, 7,
- 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,105,116,105,110,103, 0,103, 46, 48, 48, 49, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0,104, 40, 16, 7, 0, 0, 0, 0,152, 49, 16, 7,
- 0, 0, 0, 0, 8, 50, 16, 7, 0, 0, 0, 0, 56,102, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 34, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152, 35, 16, 7,
- 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 36, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3,
- 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 88, 37, 16, 7,
- 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,232, 36, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 37, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 32, 6,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24, 39, 16, 7,
- 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0,168, 38, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 39, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 40, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 40, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 40, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 41, 16, 7,
- 0, 0, 0, 0,104, 40, 16, 7, 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 41, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 41, 16, 7,
- 0, 0, 0, 0,216, 40, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 41, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 42, 16, 7,
- 0, 0, 0, 0, 72, 41, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 42, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 42, 16, 7,
- 0, 0, 0, 0,184, 41, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 42, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 43, 16, 7,
- 0, 0, 0, 0, 40, 42, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 43, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 43, 16, 7,
- 0, 0, 0, 0,152, 42, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 43, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 43, 16, 7,
- 0, 0, 0, 0, 8, 43, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 43, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 44, 16, 7,
- 0, 0, 0, 0,120, 43, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 44, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 44, 16, 7,
- 0, 0, 0, 0,232, 43, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 44, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 45, 16, 7,
- 0, 0, 0, 0, 88, 44, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 45, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 45, 16, 7,
- 0, 0, 0, 0,200, 44, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 45, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 46, 16, 7,
- 0, 0, 0, 0, 56, 45, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 46, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 46, 16, 7,
- 0, 0, 0, 0,168, 45, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 46, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 46, 16, 7,
- 0, 0, 0, 0, 24, 46, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 46, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 47, 16, 7,
- 0, 0, 0, 0,136, 46, 16, 7, 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 47, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 47, 16, 7,
- 0, 0, 0, 0,248, 46, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 47, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 48, 16, 7,
- 0, 0, 0, 0,104, 47, 16, 7, 0, 0, 0, 0,152, 35, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 48, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 48, 16, 7,
- 0, 0, 0, 0,216, 47, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 48, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 49, 16, 7,
- 0, 0, 0, 0, 72, 48, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 49, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 49, 16, 7,
- 0, 0, 0, 0,184, 48, 16, 7, 0, 0, 0, 0,168, 38, 16, 7, 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 49, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40, 49, 16, 7, 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 50, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 53, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,184, 34, 16, 7, 0, 0, 0, 0, 40, 35, 16, 7,
- 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0,
- 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,140, 16, 7,
- 0, 0, 0, 0,232,140, 16, 7, 0, 0, 0, 0,248, 50, 16, 7, 0, 0, 0, 0,104, 52, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,248, 50, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 52, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0,
- 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
+ 83, 78, 0, 0, 8, 1, 0, 0,136,125, 27, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,
+105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,126, 27, 7, 0, 0, 0, 0,136,132, 27, 7, 0, 0, 0, 0,
+248,132, 27, 7, 0, 0, 0, 0, 40,142, 27, 7, 0, 0, 0, 0,152,142, 27, 7, 0, 0, 0, 0,200,194, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,216,126, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,127, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 72,127, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,127, 27, 7, 0, 0, 0, 0,216,126, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,127, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 40,128, 27, 7, 0, 0, 0, 0, 72,127, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,128, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+152,128, 27, 7, 0, 0, 0, 0,184,127, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,129, 27, 7, 0, 0, 0, 0,
+ 40,128, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 8,129, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,232,129, 27, 7, 0, 0, 0, 0, 8,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,129, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 88,130, 27, 7, 0, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 92, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 88,130, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,130, 27, 7, 0, 0, 0, 0,
+232,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+200,130, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0, 88,130, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,168,131, 27, 7, 0, 0, 0, 0,200,130, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,131, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 24,132, 27, 7, 0, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,140, 1, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 24,132, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,132, 27, 7, 0, 0, 0, 0,
+168,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+136,132, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,132, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,132, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,104,133, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,127, 27, 7, 0, 0, 0, 0,
+184,127, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,133, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,216,133, 27, 7, 0, 0, 0, 0,248,132, 27, 7, 0, 0, 0, 0, 72,127, 27, 7, 0, 0, 0, 0,
+152,128, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,133, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 72,134, 27, 7, 0, 0, 0, 0,104,133, 27, 7, 0, 0, 0, 0,184,127, 27, 7, 0, 0, 0, 0,
+ 8,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,134, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,184,134, 27, 7, 0, 0, 0, 0,216,133, 27, 7, 0, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,
+ 8,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,134, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 40,135, 27, 7, 0, 0, 0, 0, 72,134, 27, 7, 0, 0, 0, 0, 40,128, 27, 7, 0, 0, 0, 0,
+232,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,135, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,152,135, 27, 7, 0, 0, 0, 0,184,134, 27, 7, 0, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0,
+232,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,135, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 8,136, 27, 7, 0, 0, 0, 0, 40,135, 27, 7, 0, 0, 0, 0, 8,129, 27, 7, 0, 0, 0, 0,
+ 88,130, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,136, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,120,136, 27, 7, 0, 0, 0, 0,152,135, 27, 7, 0, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,
+ 88,130, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,136, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,232,136, 27, 7, 0, 0, 0, 0, 8,136, 27, 7, 0, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0,
+ 88,130, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,136, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 88,137, 27, 7, 0, 0, 0, 0,120,136, 27, 7, 0, 0, 0, 0, 8,129, 27, 7, 0, 0, 0, 0,
+232,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,137, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,200,137, 27, 7, 0, 0, 0, 0,232,136, 27, 7, 0, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,
+200,130, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,137, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 56,138, 27, 7, 0, 0, 0, 0, 88,137, 27, 7, 0, 0, 0, 0, 88,130, 27, 7, 0, 0, 0, 0,
+ 56,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,138, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,168,138, 27, 7, 0, 0, 0, 0,200,137, 27, 7, 0, 0, 0, 0,200,130, 27, 7, 0, 0, 0, 0,
+ 56,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,138, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 24,139, 27, 7, 0, 0, 0, 0, 56,138, 27, 7, 0, 0, 0, 0,200,130, 27, 7, 0, 0, 0, 0,
+168,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,139, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,136,139, 27, 7, 0, 0, 0, 0,168,138, 27, 7, 0, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0,
+168,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,139, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,248,139, 27, 7, 0, 0, 0, 0, 24,139, 27, 7, 0, 0, 0, 0,216,126, 27, 7, 0, 0, 0, 0,
+ 24,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,139, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,104,140, 27, 7, 0, 0, 0, 0,136,139, 27, 7, 0, 0, 0, 0, 24,132, 27, 7, 0, 0, 0, 0,
+136,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,140, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,216,140, 27, 7, 0, 0, 0, 0,248,139, 27, 7, 0, 0, 0, 0, 40,128, 27, 7, 0, 0, 0, 0,
+136,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,140, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 72,141, 27, 7, 0, 0, 0, 0,104,140, 27, 7, 0, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0,
+136,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,141, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,184,141, 27, 7, 0, 0, 0, 0,216,140, 27, 7, 0, 0, 0, 0,168,131, 27, 7, 0, 0, 0, 0,
+ 24,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,141, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 40,142, 27, 7, 0, 0, 0, 0, 72,141, 27, 7, 0, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0,
+136,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,142, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,141, 27, 7, 0, 0, 0, 0,216,126, 27, 7, 0, 0, 0, 0,
+200,130, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,142, 27, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,104,146, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,
+ 72,127, 27, 7, 0, 0, 0, 0,184,127, 27, 7, 0, 0, 0, 0, 8,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,120,233, 27, 7, 0, 0, 0, 0,120,233, 27, 7, 0, 0, 0, 0,136,143, 27, 7, 0, 0, 0, 0,
+248,144, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,143, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+248,144, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,144, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136,143, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3,
+ 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,104, 52, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 50, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192,
- 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0,
- 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,146, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+ 88,151, 27, 7, 0, 0, 0, 0,152,142, 27, 7, 0, 0, 0, 0,136,132, 27, 7, 0, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0,
+232,129, 27, 7, 0, 0, 0, 0, 40,128, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 94, 1, 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56,150, 27, 7, 0, 0, 0, 0, 56,150, 27, 7, 0, 0, 0, 0, 88,147, 27, 7, 0, 0, 0, 0,200,148, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0,216, 53, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 58, 16, 7, 0, 0, 0, 0, 8, 50, 16, 7,
- 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7, 0, 0, 0, 0,152, 35, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 94, 1,
- 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 57, 16, 7, 0, 0, 0, 0,168, 57, 16, 7,
- 0, 0, 0, 0,200, 54, 16, 7, 0, 0, 0, 0, 56, 56, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 54, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56, 56, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,115, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 88,147, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200,148, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,115, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65,
+ 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1,
+ 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,200,148, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 88,147, 27, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67,
+ 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66,
+ 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 94, 1,
+ 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 66, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 56, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 54, 16, 7, 0, 0, 0, 0, 0, 0, 64,192,
- 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
- 93, 1, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61,
- 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,168, 57, 16, 7,
- 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,208, 0, 0, 0, 56,150, 27, 7, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0,200, 58, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 83, 16, 7, 0, 0, 0, 0,216, 53, 16, 7,
- 0, 0, 0, 0,232, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,120, 36, 16, 7, 0, 0, 0, 0, 88, 37, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,233, 3, 0, 0, 4, 4, 94, 1,
-141, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 82, 16, 7, 0, 0, 0, 0, 24, 82, 16, 7,
- 0, 0, 0, 0,184, 59, 16, 7, 0, 0, 0, 0, 40, 61, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 59, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 61, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,208, 3, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,151, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+232,175, 27, 7, 0, 0, 0, 0,104,146, 27, 7, 0, 0, 0, 0,120,129, 27, 7, 0, 0, 0, 0, 88,130, 27, 7, 0, 0, 0, 0,
+ 8,129, 27, 7, 0, 0, 0, 0,232,129, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 93, 0, 0, 0,233, 3, 0, 0, 4, 4, 94, 1,141, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+168,174, 27, 7, 0, 0, 0, 0,168,174, 27, 7, 0, 0, 0, 0, 72,152, 27, 7, 0, 0, 0, 0,184,153, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 72,152, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184,153, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65,
+ 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1,
+ 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+208, 3, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 61, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 59, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,174, 67, 0,128, 92,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,191, 92,196, 0, 0, 0, 0, 77, 1, 0, 0,
- 94, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
- 76, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,115, 3, 77, 1,115, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,152, 62, 16, 7, 0, 0, 0, 0,120, 80, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 62, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 64, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,184,153, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72,152, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0,128, 92,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,
+255,191, 92,196, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,
+115, 3, 77, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 93, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,115, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,155, 27, 7, 0, 0, 0, 0, 8,173, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 40,155, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,156, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 64, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 65, 16, 7,
- 0, 0, 0, 0,152, 62, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
-101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,
- 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,156, 27, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,104,158, 27, 7, 0, 0, 0, 0, 40,155, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 65, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 67, 16, 7, 0, 0, 0, 0, 56, 64, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,104,158, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,160, 27, 7, 0, 0, 0, 0,
+200,156, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 67, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 69, 16, 7,
- 0, 0, 0, 0,216, 65, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,
-110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,
- 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 69, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 70, 16, 7, 0, 0, 0, 0,120, 67, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,
-110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,
-110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,160, 27, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,168,161, 27, 7, 0, 0, 0, 0,104,158, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184, 70, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 72, 16, 7,
- 0, 0, 0, 0, 24, 69, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,
-108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,
- 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 72, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 73, 16, 7, 0, 0, 0, 0,184, 70, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,168,161, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,163, 27, 7, 0, 0, 0, 0,
+ 8,160, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105,
+ 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 76, 1, 58, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,163, 27, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,232,164, 27, 7, 0, 0, 0, 0,168,161, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 73, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 75, 16, 7,
- 0, 0, 0, 0, 88, 72, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,
-111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,
- 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 75, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 77, 16, 7, 0, 0, 0, 0,248, 73, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,
-115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,
-115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,232,164, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,166, 27, 7, 0, 0, 0, 0,
+ 72,163, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 77, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 78, 16, 7,
- 0, 0, 0, 0,152, 75, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,
-112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,
- 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 78, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 80, 16, 7, 0, 0, 0, 0, 56, 77, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,166, 27, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 40,168, 27, 7, 0, 0, 0, 0,232,164, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 80, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,216, 78, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,
- 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 40,168, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,169, 27, 7, 0, 0, 0, 0,
+136,166, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111,
+ 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24, 82, 16, 7,
- 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,169, 27, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,104,171, 27, 7, 0, 0, 0, 0, 40,168, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 83, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 96, 16, 7,
- 0, 0, 0, 0,200, 58, 16, 7, 0, 0, 0, 0,136, 39, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,168, 38, 16, 7,
- 0, 0, 0, 0,248, 39, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,
-139, 1, 0, 0, 1, 1, 27, 3,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 95, 16, 7,
- 0, 0, 0, 0, 56, 95, 16, 7, 0, 0, 0, 0, 72, 84, 16, 7, 0, 0, 0, 0, 8, 90, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 72, 84, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 85, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 26, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 70, 68, 0, 0,200, 65, 0,128, 70, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 27, 3, 26, 0, 27, 3,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,184, 85, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 87, 16, 7, 0, 0, 0, 0, 72, 84, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0,
- 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 5, 3, 0, 0, 26, 0, 0, 0,
-139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,114, 1, 0, 0, 5, 0, 3, 0, 1, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,104,171, 27, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,173, 27, 7, 0, 0, 0, 0,
+200,169, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, 76, 1,130, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 40, 87, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152, 88, 16, 7, 0, 0, 0, 0,184, 85, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,
-102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,173, 27, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,171, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,152, 88, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8, 90, 16, 7, 0, 0, 0, 0, 40, 87, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195,
- 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,
-112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,
-139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 8, 90, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 88, 16, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,168,174, 27, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,
-139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 91, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65,
-112, 3, 0, 0,120, 91, 16, 7, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 93,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 30,133,119, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191,
- 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63,
- 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62,
- 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188,
- 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, 56, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62,
- 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191,
- 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190,
- 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65,152, 9, 52, 65, 25, 25,195, 62,176,249,206, 62,128,238,196,187,
- 0, 0,192,179, 55, 15,168,189,201,118,165, 61,152, 15,109, 62, 0, 0,152, 51,211,120, 21,194,144, 5, 2, 66, 6,136,213,193,
-193,214,159,192,219, 38, 19, 66,196,173,255,193,154,101,210, 65,173, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63,
- 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62,
- 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191,
- 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190,
- 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,175, 27, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,120,189, 27, 7, 0, 0, 0, 0, 88,151, 27, 7, 0, 0, 0, 0, 24,132, 27, 7, 0, 0, 0, 0,
+168,131, 27, 7, 0, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0,136,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 1, 1, 27, 3,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,200,187, 27, 7, 0, 0, 0, 0,200,187, 27, 7, 0, 0, 0, 0,216,176, 27, 7, 0, 0, 0, 0,
+152,182, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,176, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 72,178, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,128, 70, 68, 0, 0,200, 65, 0,128, 70, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0, 27, 3, 26, 0, 27, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,178, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+184,179, 27, 7, 0, 0, 0, 0,216,176, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3, 0, 0, 5, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0,114, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,179, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 40,181, 27, 7, 0, 0, 0, 0, 72,178, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0,
+ 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190,
- 3, 35,171,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 80, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,160, 65, 1, 2, 0, 0,255,255, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,
- 1, 0, 0, 0, 0, 0,128, 63,190,133, 65, 66,100,212, 90, 66, 31,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 56, 95, 16, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,181, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+152,182, 27, 7, 0, 0, 0, 0,184,179, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0,
+ 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 6, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0,
- 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,182, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40,181, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0,232, 96, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,102, 16, 7, 0, 0, 0, 0, 88, 83, 16, 7,
- 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 8, 36, 16, 7, 0, 0, 0, 0,200, 37, 16, 7, 0, 0, 0, 0,168, 38, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 16, 16, 32, 6,
- 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,100, 16, 7, 0, 0, 0, 0,184,100, 16, 7,
- 0, 0, 0, 0,216, 97, 16, 7, 0, 0, 0, 0, 72, 99, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 97, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 99, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128, 66, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 99, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 97, 16, 7, 0, 0, 0, 0, 0, 0, 32,193,
- 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,128,195,217,195,192,225,108, 68, 96,240,187, 64, 62, 16,253, 67, 15, 6, 0, 0,
- 32, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
- 14, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61,
- 10,215, 19, 64, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 32, 6, 67, 2, 15, 6, 49, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,184,100, 16, 7,
- 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8,184, 27, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 8,184, 27, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,
+ 93,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,133,119, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,
+221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,
+191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,
+223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, 56, 53,101, 63, 0, 0, 0, 0,
+ 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63,
+ 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63,
+ 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65,152, 9, 52, 65,
+ 25, 25,195, 62,176,249,206, 62,128,238,196,187, 0, 0,192,179, 55, 15,168,189,201,118,165, 61,152, 15,109, 62, 0, 0,152, 51,
+211,120, 21,194,144, 5, 2, 66, 6,136,213,193,193,214,159,192,219, 38, 19, 66,196,173,255,193,154,101,210, 65,173, 40,160, 64,
+221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,
+191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,
+ 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63,149, 84, 28, 63,
+ 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65,152, 9, 52, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10,206, 97, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0, 56,102, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 96, 16, 7,
- 0, 0, 0, 0, 72, 34, 16, 7, 0, 0, 0, 0, 56, 38, 16, 7, 0, 0, 0, 0, 24, 39, 16, 7, 0, 0, 0, 0,136, 39, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 6, 6, 4, 3,
-140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,107, 16, 7, 0, 0, 0, 0,120,107, 16, 7,
- 0, 0, 0, 0, 40,103, 16, 7, 0, 0, 0, 0, 8,106, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,103, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,104, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 65, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 64, 68, 0, 0,200, 65, 0,192, 64, 68, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 4, 3, 26, 0, 4, 3, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,104, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,106, 16, 7, 0, 0, 0, 0, 40,103, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 1, 2, 0, 0,255,255, 0, 0, 92, 62, 55, 63,
+ 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63,190,133, 65, 66,100,212, 90, 66, 31,183,118, 66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,200,187, 27, 7, 0, 0, 0, 0,
+175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 7, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,106, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,104, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,129,191, 0,128, 0, 64, 0, 0,100,190, 0,128,156, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,189, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+200,194, 27, 7, 0, 0, 0, 0,232,175, 27, 7, 0, 0, 0, 0,200,130, 27, 7, 0, 0, 0, 0,152,128, 27, 7, 0, 0, 0, 0,
+ 88,130, 27, 7, 0, 0, 0, 0, 56,131, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,
+141, 1, 0, 0,233, 3, 0, 0, 16, 16, 32, 6, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72,193, 27, 7, 0, 0, 0, 0, 72,193, 27, 7, 0, 0, 0, 0,104,190, 27, 7, 0, 0, 0, 0,216,191, 27, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 3, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,104,190, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216,191, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 66, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65,
+ 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6,
+ 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,
+141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,216,191, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+104,190, 27, 7, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,128,195,217,195,192,225,108, 68,
+ 96,240,187, 64, 62, 16,253, 67, 15, 6, 0, 0, 32, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, 10,215, 19, 64, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 32, 6,
+ 67, 2, 15, 6, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0,
+167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 67, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 33, 0, 0,120,107, 16, 7,
- 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,
-154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 1, 0, 0, 72,193, 27, 7, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,206, 97, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,194, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,120,189, 27, 7, 0, 0, 0, 0,216,126, 27, 7, 0, 0, 0, 0,200,130, 27, 7, 0, 0, 0, 0,
+168,131, 27, 7, 0, 0, 0, 0, 24,132, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0,139, 1, 0, 0, 6, 6, 4, 3,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8,200, 27, 7, 0, 0, 0, 0, 8,200, 27, 7, 0, 0, 0, 0,184,195, 27, 7, 0, 0, 0, 0,152,198, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,184,195, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,197, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 65, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 64, 68, 0, 0,200, 65,
+ 0,192, 64, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 4, 3,
+ 26, 0, 4, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 40,197, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,198, 27, 7, 0, 0, 0, 0,
+184,195, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
+ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,152,198, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40,197, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,129,191, 0,128, 0, 64,
+ 0, 0,100,190, 0,128,156, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0,
+ 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,114, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 33, 0, 0, 8,200, 27, 7, 0, 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1310,8 +1291,6 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1332,6 +1311,7 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1441,3768 +1421,3469 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,120,141, 16, 7,
- 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0,120,148, 16, 7, 0, 0, 0, 0,232,148, 16, 7, 0, 0, 0, 0, 88,156, 16, 7,
- 0, 0, 0, 0,200,156, 16, 7, 0, 0, 0, 0,216,134, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,104,118, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,142, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 4,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,144, 16, 7,
- 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0,168,143, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,144, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 64, 4,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,145, 16, 7,
- 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,104,145, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,146, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 5,160, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,160, 3,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,147, 16, 7,
- 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,148, 16, 7, 0, 0, 0, 0, 40,147, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,140, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,148, 16, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,148, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,188, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,148, 16, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,148, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,188, 3,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,148, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,149, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,149, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,149, 16, 7,
- 0, 0, 0, 0,232,148, 16, 7, 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,149, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,150, 16, 7,
- 0, 0, 0, 0, 88,149, 16, 7, 0, 0, 0, 0,168,143, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,150, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,150, 16, 7,
- 0, 0, 0, 0,200,149, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,150, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,151, 16, 7,
- 0, 0, 0, 0, 56,150, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,151, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,151, 16, 7,
- 0, 0, 0, 0,168,150, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,151, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,151, 16, 7,
- 0, 0, 0, 0, 24,151, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,151, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,152, 16, 7,
- 0, 0, 0, 0,136,151, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,152, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,152, 16, 7,
- 0, 0, 0, 0,248,151, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,152, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,153, 16, 7,
- 0, 0, 0, 0,104,152, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,153, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,153, 16, 7,
- 0, 0, 0, 0,216,152, 16, 7, 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,153, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,154, 16, 7,
- 0, 0, 0, 0, 72,153, 16, 7, 0, 0, 0, 0, 24,144, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,154, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,154, 16, 7,
- 0, 0, 0, 0,184,153, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,154, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,155, 16, 7,
- 0, 0, 0, 0, 40,154, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,155, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,155, 16, 7,
- 0, 0, 0, 0,152,154, 16, 7, 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,155, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,155, 16, 7,
- 0, 0, 0, 0, 8,155, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,155, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,156, 16, 7,
- 0, 0, 0, 0,120,155, 16, 7, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,156, 16, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,232,155, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,156, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,160, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,144, 16, 7, 0, 0, 0, 0, 56,143, 16, 7, 0, 0, 0, 0,168,143, 16, 7,
- 0, 0, 0, 0,248,144, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0,
- 98, 4, 0, 0, 7, 7, 63, 6, 34, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0,184,206,240, 6, 0, 0, 0, 0, 72,166, 17, 7,
- 0, 0, 0, 0, 72,166, 17, 7, 0, 0, 0, 0,184,157, 16, 7, 0, 0, 0, 0, 40,159, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 79, 55, 8, 0, 0, 0, 0,232,143,100, 7, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,184,157, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40,159, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,188, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0,
- 90, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,208,240, 6, 0, 0, 0, 0,168, 67, 66, 8,
- 0, 0, 0, 0,168, 67, 66, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,252, 31, 7,
- 0, 0, 0, 0, 8,191, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 40,159, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,157, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, 0,192,197, 68, 0, 0,128, 64,
- 0, 0, 64, 65, 46, 6, 0, 0, 63, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0, 63, 6, 8, 0, 46, 6,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 91, 4, 0, 0,
- 98, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 8, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,207,240, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,194, 31, 7,
- 0, 0, 0, 0,104,205, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0,152,160, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,201, 16, 7, 0, 0, 0, 0,200,156, 16, 7,
- 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 24,144, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 4, 4,250, 0,
-160, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 88,202,240, 6, 0, 0, 0, 0, 40,200, 16, 7, 0, 0, 0, 0, 40,200, 16, 7,
- 0, 0, 0, 0,136,161, 16, 7, 0, 0, 0, 0,248,162, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,104,160, 31, 7, 0, 0, 0, 0,216,106, 56, 8, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,161, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,162, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-249, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,121, 67, 0, 0,200, 65, 0, 0,121, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,250, 0, 26, 0,250, 0, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0,134, 3, 0, 0,159, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0, 26, 0, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,205,240, 6, 0, 0, 0, 0,232, 93, 53, 8, 0, 0, 0, 0,232, 93, 53, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,159, 56, 8, 0, 0, 0, 0, 24, 1, 32, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,162, 16, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,161, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,178, 67, 0,128, 97,196, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,105, 67, 3,128, 97,196, 0, 0, 0, 0,233, 0, 0, 0,
-250, 0, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-232, 0, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,250, 0,134, 3,233, 0,134, 3, 0, 0,168,160, 50, 8,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,133, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,134, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,203,240, 6, 0, 0, 0, 0, 40,136, 55, 8, 0, 0, 0, 0,200, 28, 49, 8,
- 0, 0, 0, 0,104,164, 16, 7, 0, 0, 0, 0,136,198, 16, 7, 0, 0, 0, 0,184, 2, 32, 7, 0, 0, 0, 0,152, 7, 32, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,164, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,166, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,204,240, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,233, 0, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,166, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,167, 16, 7,
- 0, 0, 0, 0,104,164, 16, 7, 0, 0, 0, 0,200,233,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
-101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,
-233, 0, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,167, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,169, 16, 7, 0, 0, 0, 0, 8,166, 16, 7, 0, 0, 0, 0, 56,236,137, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,169, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,170, 16, 7,
- 0, 0, 0, 0,168,167, 16, 7, 0, 0, 0, 0,168,238,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,
-110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,
-233, 0,203, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,170, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,172, 16, 7, 0, 0, 0, 0, 72,169, 16, 7, 0, 0, 0, 0, 24,241,137, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,
-110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,
-110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,233, 0, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,172, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,174, 16, 7,
- 0, 0, 0, 0,232,170, 16, 7, 0, 0, 0, 0,136,243,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,
-108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,
-233, 0, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,174, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,175, 16, 7, 0, 0, 0, 0,136,172, 16, 7, 0, 0, 0, 0,184,143, 97, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,175, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,177, 16, 7,
- 0, 0, 0, 0, 40,174, 16, 7, 0, 0, 0, 0, 24,253,137, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,
-111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,
-233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,177, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,179, 16, 7, 0, 0, 0, 0,200,175, 16, 7, 0, 0, 0, 0,136,255,137, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,
-115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,
-115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,179, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,180, 16, 7,
- 0, 0, 0, 0,104,177, 16, 7, 0, 0, 0, 0,248, 1,138, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,
-112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,
-233, 0, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 83, 78, 0, 0, 8, 1, 0, 0, 8,234, 27, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,
+116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,235, 27, 7, 0, 0, 0, 0, 8,241, 27, 7, 0, 0, 0, 0,
+120,241, 27, 7, 0, 0, 0, 0,232,248, 27, 7, 0, 0, 0, 0, 88,249, 27, 7, 0, 0, 0, 0,104,227, 28, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,153,101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 88,235, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,235, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+200,235, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,236, 27, 7, 0, 0, 0, 0, 88,235, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,236, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,168,236, 27, 7, 0, 0, 0, 0,200,235, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 78, 5,164, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,236, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 24,237, 27, 7, 0, 0, 0, 0, 56,236, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 5, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,237, 27, 7, 0, 0, 0, 0,
+168,236, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,137, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+136,237, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 78, 5,137, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,104,238, 27, 7, 0, 0, 0, 0,136,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,238, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+216,238, 27, 7, 0, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4,137, 2, 1, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,216,238, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,239, 27, 7, 0, 0, 0, 0,
+104,238, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 48, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 72,239, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,239, 27, 7, 0, 0, 0, 0,216,238, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 78, 5, 48, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,239, 27, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 40,240, 27, 7, 0, 0, 0, 0, 72,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,240, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+152,240, 27, 7, 0, 0, 0, 0,184,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 88, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,152,240, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,241, 27, 7, 0, 0, 0, 0,
+ 40,240, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 8,241, 27, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,240, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 72, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,241, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,232,241, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,235, 27, 7, 0, 0, 0, 0,
+ 56,236, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,241, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 88,242, 27, 7, 0, 0, 0, 0,120,241, 27, 7, 0, 0, 0, 0,200,235, 27, 7, 0, 0, 0, 0,
+ 24,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,242, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,200,242, 27, 7, 0, 0, 0, 0,232,241, 27, 7, 0, 0, 0, 0, 56,236, 27, 7, 0, 0, 0, 0,
+136,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,242, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 56,243, 27, 7, 0, 0, 0, 0, 88,242, 27, 7, 0, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,
+136,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,243, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,168,243, 27, 7, 0, 0, 0, 0,200,242, 27, 7, 0, 0, 0, 0, 88,235, 27, 7, 0, 0, 0, 0,
+248,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,243, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 24,244, 27, 7, 0, 0, 0, 0, 56,243, 27, 7, 0, 0, 0, 0,168,236, 27, 7, 0, 0, 0, 0,
+248,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,244, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,136,244, 27, 7, 0, 0, 0, 0,168,243, 27, 7, 0, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,
+104,238, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,244, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,248,244, 27, 7, 0, 0, 0, 0, 24,244, 27, 7, 0, 0, 0, 0,136,237, 27, 7, 0, 0, 0, 0,
+104,238, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,244, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,104,245, 27, 7, 0, 0, 0, 0,136,244, 27, 7, 0, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0,
+216,238, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,245, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,216,245, 27, 7, 0, 0, 0, 0,248,244, 27, 7, 0, 0, 0, 0,104,238, 27, 7, 0, 0, 0, 0,
+216,238, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,245, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 72,246, 27, 7, 0, 0, 0, 0,104,245, 27, 7, 0, 0, 0, 0,136,237, 27, 7, 0, 0, 0, 0,
+ 72,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,246, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,184,246, 27, 7, 0, 0, 0, 0,216,245, 27, 7, 0, 0, 0, 0,168,236, 27, 7, 0, 0, 0, 0,
+ 72,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,246, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 40,247, 27, 7, 0, 0, 0, 0, 72,246, 27, 7, 0, 0, 0, 0,216,238, 27, 7, 0, 0, 0, 0,
+ 72,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,247, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,152,247, 27, 7, 0, 0, 0, 0,184,246, 27, 7, 0, 0, 0, 0, 88,235, 27, 7, 0, 0, 0, 0,
+184,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,247, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 8,248, 27, 7, 0, 0, 0, 0, 40,247, 27, 7, 0, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0,
+ 40,240, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,248, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,120,248, 27, 7, 0, 0, 0, 0,152,247, 27, 7, 0, 0, 0, 0,184,239, 27, 7, 0, 0, 0, 0,
+ 40,240, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,248, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,232,248, 27, 7, 0, 0, 0, 0, 8,248, 27, 7, 0, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,
+184,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,248, 27, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,248, 27, 7, 0, 0, 0, 0,104,238, 27, 7, 0, 0, 0, 0,
+ 40,240, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,249, 27, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0, 40,253, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,
+200,235, 27, 7, 0, 0, 0, 0, 56,236, 27, 7, 0, 0, 0, 0,136,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 78, 5, 0, 0,138, 2, 0, 0,164, 2, 0, 0, 7, 7, 79, 5, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0,
+184,148,251, 6, 0, 0, 0, 0, 24, 6, 29, 7, 0, 0, 0, 0, 24, 6, 29, 7, 0, 0, 0, 0, 72,250, 27, 7, 0, 0, 0, 0,
+184,251, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 34,250, 6, 0, 0, 0, 0,
+216,101,104, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,250, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+184,251, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,171, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,224,169, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,192,169, 68, 0, 0,200, 65, 0,192,169, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0, 79, 5, 26, 0, 79, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 78, 5, 0, 0,138, 2, 0, 0,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 5, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200,150,251, 6, 0, 0, 0, 0,232,134, 88, 8, 0, 0, 0, 0,232,134, 88, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,216,189,154, 8, 0, 0, 0, 0, 72,108,104, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,251, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 72,250, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65,
+ 0, 0, 0, 0, 0,192,168, 68, 0, 0,224, 64, 0, 0, 16, 65, 70, 5, 0, 0, 87, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3,
+ 2, 0, 0, 4, 10, 0, 87, 5, 2, 0, 70, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,164, 2, 0, 0,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+216,149,251, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136,109,104, 7, 0, 0, 0, 0,248,111,104, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40,253, 27, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+248, 37, 28, 7, 0, 0, 0, 0, 88,249, 27, 7, 0, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0,216,238, 27, 7, 0, 0, 0, 0,
+ 72,239, 27, 7, 0, 0, 0, 0,168,236, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 4, 0, 0, 78, 5, 0, 0,
+ 0, 0, 0, 0, 47, 2, 0, 0, 4, 4,206, 0, 48, 2, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 88,144,251, 6, 0, 0, 0, 0,
+184, 36, 28, 7, 0, 0, 0, 0,184, 36, 28, 7, 0, 0, 0, 0, 24,254, 27, 7, 0, 0, 0, 0,136,255, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,197,105, 7, 0, 0, 0, 0, 72,174,105, 7, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 24,254, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136,255, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 78, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 77, 67, 0, 0,200, 65,
+ 0, 0, 77, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,206, 0,
+ 26, 0,206, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 4, 0, 0, 78, 5, 0, 0,
+ 22, 2, 0, 0, 47, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 0, 26, 0, 4, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,147,251, 6, 0, 0, 0, 0,
+ 88,117, 88, 8, 0, 0, 0, 0, 88,117, 88, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+104,103,104, 7, 0, 0, 0, 0,232, 60,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,136,255, 27, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24,254, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 61, 67,
+ 1,128, 5,196, 0, 0, 0, 0,189, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,206, 0,
+ 22, 2,189, 0, 22, 2, 0, 0, 88,148,156, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,129, 4, 0, 0, 78, 5, 0, 0,
+ 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 0, 22, 2, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,145,251, 6, 0, 0, 0, 0,
+216, 54, 84, 8, 0, 0, 0, 0, 72, 96,155, 8, 0, 0, 0, 0,248, 0, 28, 7, 0, 0, 0, 0, 24, 35, 28, 7, 0, 0, 0, 0,
+232,114,104, 7, 0, 0, 0, 0, 56, 66,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,248, 0, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 2, 28, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,104,146,251, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,189, 0, 36, 0,
+ 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,180, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,182, 16, 7, 0, 0, 0, 0, 8,179, 16, 7, 0, 0, 0, 0,104, 4,138, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 2, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 56, 4, 28, 7, 0, 0, 0, 0,248, 0, 28, 7, 0, 0, 0, 0,248,122,240, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253,233, 0,134, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,189, 0, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 11, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,182, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,183, 16, 7,
- 0, 0, 0, 0,168,180, 16, 7, 0, 0, 0, 0, 72, 9,138, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253,
-233, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 56, 4, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 5, 28, 7, 0, 0, 0, 0,
+152, 2, 28, 7, 0, 0, 0, 0,104,125,240, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,183, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,185, 16, 7, 0, 0, 0, 0, 72,182, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,189, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 5, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,120, 7, 28, 7, 0, 0, 0, 0, 56, 4, 28, 7, 0, 0, 0, 0,216,127,240, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 41, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,185, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,187, 16, 7,
- 0, 0, 0, 0,232,183, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78,
- 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78,
- 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,
-115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,255,
- 41, 1, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,189, 0,203, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 13, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,187, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,188, 16, 7, 0, 0, 0, 0,136,185, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115,
+ 68, 65, 84, 65, 88, 1, 0, 0,120, 7, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 9, 28, 7, 0, 0, 0, 0,
+216, 5, 28, 7, 0, 0, 0, 0, 72,130,240, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105,
+ 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,189, 0, 58, 0,
+ 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,254, 41, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 9, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,184, 10, 28, 7, 0, 0, 0, 0,120, 7, 28, 7, 0, 0, 0, 0,184,132,240, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,188, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,190, 16, 7,
- 0, 0, 0, 0, 40,187, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78,
- 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78,
- 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,
-105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131,254,
- 41, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,189, 0, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 15, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,190, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,192, 16, 7, 0, 0, 0, 0,200,188, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,184, 10, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 12, 28, 7, 0, 0, 0, 0,
+ 24, 9, 28, 7, 0, 0, 0, 0,200,118,193, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,254, 41, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,189, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,192, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,193, 16, 7,
- 0, 0, 0, 0,104,190, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78,
- 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78,
- 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,
-111,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,253,
- 41, 1, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 12, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,248, 13, 28, 7, 0, 0, 0, 0,184, 10, 28, 7, 0, 0, 0, 0, 72,142,240, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,193, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,195, 16, 7, 0, 0, 0, 0, 8,192, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,
-101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,
-101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,189, 0, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 17, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255,187, 0,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,195, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,196, 16, 7,
- 0, 0, 0, 0,168,193, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84,
- 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84,
- 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,112,112,
-105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,254,
-187, 0,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,248, 13, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 15, 28, 7, 0, 0, 0, 0,
+ 88, 12, 28, 7, 0, 0, 0, 0,184,144,240, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111,
+ 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,189, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,196, 16, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,198, 16, 7, 0, 0, 0, 0, 72,195, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 15, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 56, 17, 28, 7, 0, 0, 0, 0,248, 13, 28, 7, 0, 0, 0, 0, 40,147,240, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,252,187, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,189, 0, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 19, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,198, 16, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,232,196, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69,
- 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69,
- 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101,
- 99,116, 32, 67,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,
-187, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 56, 17, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 18, 28, 7, 0, 0, 0, 0,
+152, 15, 28, 7, 0, 0, 0, 0,152,149,240, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 40,200, 16, 7,
- 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253,189, 0,134, 0,
+ 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 18, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,120, 20, 28, 7, 0, 0, 0, 0, 56, 17, 28, 7, 0, 0, 0, 0,120,154,240, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,
- 0, 0, 0, 0,232,246, 49, 8, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,201, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,206, 16, 7,
- 0, 0, 0, 0,152,160, 16, 7, 0, 0, 0, 0,200,142, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,152,147, 16, 7,
- 0, 0, 0, 0,104,145, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0,
-139, 0, 0, 0, 15, 15, 68, 5,140, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,158,240, 6, 0, 0, 0, 0, 56,205, 16, 7,
- 0, 0, 0, 0, 56,205, 16, 7, 0, 0, 0, 0, 88,202, 16, 7, 0, 0, 0, 0,200,203, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,195, 31, 7, 0, 0, 0, 0,232,201, 31, 7, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 88,202, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,203, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,146, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,168, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,168, 68, 0, 0,200, 65, 0, 96,168, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 5, 26, 0, 68, 5,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,160,240, 6, 0, 0, 0, 0,136,188, 50, 8,
- 0, 0, 0, 0,136,188, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 9, 32, 7,
- 0, 0, 0, 0,152,250, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,200,203, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,202, 16, 7,
- 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0,
- 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 18, 0, 0, 0,113, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72,
- 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 68, 5,114, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 26, 0, 0, 0,
-139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,114, 0, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,159,240, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,236, 31, 7,
- 0, 0, 0, 0, 88,247, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-208, 0, 0, 0, 56,205, 16, 7, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
- 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,206, 16, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,134, 17, 7,
- 0, 0, 0, 0,104,201, 16, 7, 0, 0, 0, 0, 72,146, 16, 7, 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,248,144, 16, 7,
- 0, 0, 0, 0,184,146, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0,161, 3, 0, 0,
- 63, 4, 0, 0, 3, 3,250, 0,159, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 40,155,240, 6, 0, 0, 0, 0, 40,210, 16, 7,
- 0, 0, 0, 0, 40,210, 16, 7, 0, 0, 0, 0, 72,207, 16, 7, 0, 0, 0, 0,184,208, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,206, 31, 7, 0, 0, 0, 0, 56,216, 31, 7, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 72,207, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,208, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,121, 67, 0, 0,200, 65, 0, 0,121, 67,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,250, 0, 26, 0,250, 0,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0, 38, 4, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0, 26, 0, 8, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,157,240, 6, 0, 0, 0, 0, 88, 17, 32, 7,
- 0, 0, 0, 0, 88, 17, 32, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,248, 31, 7,
- 0, 0, 0, 0,168,213, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,184,208, 16, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,207, 16, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,106, 67, 0, 0,230,194,
- 0, 0, 0, 0,233, 0, 0, 0,250, 0, 0, 0, 18, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,232, 0, 0, 0, 18, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,250, 0,133, 0,233, 0,
-115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 5, 0, 0, 62, 6, 0, 0,161, 3, 0, 0,
- 37, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,133, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,156,240, 6, 0, 0, 0, 0,232,227, 50, 8,
- 0, 0, 0, 0,232,227, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,209, 50, 8,
- 0, 0, 0, 0,184, 15, 32, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 24, 1, 0, 0, 40,210, 16, 7, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253,189, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, 21, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,205, 55, 8,
- 0, 0, 0, 0,104,205, 55, 8, 0, 0, 0, 0,136,211, 16, 7, 0, 0, 0, 0, 0,115,101, 32, 83, 99,117,108,112,116, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,136,211, 16, 7, 0, 0, 0, 0,237, 0, 0, 0,
- 1, 0, 0, 0, 42, 11, 0, 0, 42, 11, 0, 0,232,211, 16, 7, 0, 0, 0, 0, 68, 65, 84, 65,160,178, 0, 0,232,211, 16, 7,
- 0, 0, 0, 0,236, 0, 0, 0, 42, 11, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0,
- 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,200,239, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 40,233, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0,
- 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0,
- 1, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 30, 0,255,255, 3, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 30, 0,255,255,
- 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216, 48, 20, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,184,211, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 19, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 21, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 23, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 25, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 27, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 29, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 31, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 33, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 35, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 37, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 39, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 41, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 43, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 45, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 47, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 49, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 51, 0,
- 1, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 85, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 87, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 89, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 91, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 93, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 95, 0,
- 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 84, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 86, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 88, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 90, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 92, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 94, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 96, 0,
- 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 21, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 23, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 25, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 27, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 29, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 31, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 33, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 35, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 37, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 39, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 41, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 43, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 45, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 47, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 49, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 51, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 53, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 55, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 57, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 59, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 61, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 63, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 65, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 67, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 69, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 71, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 73, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 75, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 77, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 79, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 81, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 83, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 85, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 87, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 89, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 91, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 93, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 95, 0,
- 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0, 40,233, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 8,189, 15, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248, 32, 16, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,166, 17, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 1, 0,
- 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 3, 0,
- 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 5, 0,
- 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 7, 0,
- 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 9, 0,
- 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 24,186, 15, 7, 0, 0, 0, 0, 31, 0, 0, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 2, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 4, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 6, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 8, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 10, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 12, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 14, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 16, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 18, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 31, 0, 20, 0,
- 1, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,134, 17, 7, 0, 0, 0, 0,214, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,206, 16, 7, 0, 0, 0, 0, 40,147, 16, 7, 0, 0, 0, 0,136,144, 16, 7,
- 0, 0, 0, 0,216,145, 16, 7, 0, 0, 0, 0,152,147, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 67, 5, 0, 0,141, 0, 0, 0, 63, 4, 0, 0, 1, 1, 68, 5,179, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 40,161,240, 6,
- 0, 0, 0, 0,152,164, 17, 7, 0, 0, 0, 0,152,164, 17, 7, 0, 0, 0, 0,200,135, 17, 7, 0, 0, 0, 0,104,159, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,142, 55, 8, 0, 0, 0, 0, 56,228, 31, 7,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,135, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,137, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,108, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0,128,168, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,168, 68,
- 0, 0,200, 65, 0, 96,168, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
- 10, 0, 68, 5, 26, 0, 68, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 67, 5, 0, 0,141, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 26, 0,
- 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,171,240, 6,
- 0, 0, 0, 0,232,208, 48, 8, 0, 0, 0, 0,232,208, 48, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,187, 31, 7, 0, 0, 0, 0,184, 19,238, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,137, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,154, 17, 7,
- 0, 0, 0, 0,200,135, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 48,196, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 15, 67, 0, 64, 48,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 0, 0, 0, 0,
-142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
- 6, 0,160, 0,193, 2,143, 0,193, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-159, 0, 0, 0,127, 1, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,193, 2,
- 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0,160, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,168,240, 6,
- 0, 0, 0, 0, 40,225, 54, 8, 0, 0, 0, 0, 40,225, 54, 8, 0, 0, 0, 0,168,138, 17, 7, 0, 0, 0, 0, 72,153, 17, 7,
- 0, 0, 0, 0,152, 58, 51, 8, 0, 0, 0, 0, 40,244, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,138, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,140, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 35,141, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101,
- 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,
-143, 0,255, 1, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,120, 20, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 22, 28, 7, 0, 0, 0, 0,
+216, 18, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84,
+ 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84,
+ 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 41, 1, 61, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,140, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,141, 17, 7, 0, 0, 0, 0,168,138, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,254,143, 0,115, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 22, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,184, 23, 28, 7, 0, 0, 0, 0,120, 20, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,141, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,143, 17, 7,
- 0, 0, 0, 0, 72,140, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,255, 41, 1, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254,
-143, 0, 61, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,143, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,145, 17, 7, 0, 0, 0, 0,232,141, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,184, 23, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 25, 28, 7, 0, 0, 0, 0,
+ 24, 22, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84,
+ 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84,
+ 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105,110,103, 32, 83,
+101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,254, 41, 1, 69, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 25, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,248, 26, 28, 7, 0, 0, 0, 0,184, 23, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,145, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,146, 17, 7,
- 0, 0, 0, 0,136,143, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,114,118,
-101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,254,
-143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131,254, 41, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,146, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,148, 17, 7, 0, 0, 0, 0, 40,145, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,248, 26, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 28, 28, 7, 0, 0, 0, 0,
+ 88, 25, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84,
+ 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84,
+ 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,105,109,112,108,105,102,121,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,148, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,150, 17, 7,
- 0, 0, 0, 0,200,146, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,
-111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,253,
-143, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,150, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,151, 17, 7, 0, 0, 0, 0,104,148, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
-104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,254, 41, 1, 80, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,151, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,153, 17, 7,
- 0, 0, 0, 0, 8,150, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,
-111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,254,
-143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,153, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,151, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,
-109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,
-109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 28, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 56, 30, 28, 7, 0, 0, 0, 0,248, 26, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,154, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,157, 17, 7,
- 0, 0, 0, 0, 56,137, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 90,195, 0, 0, 0, 0, 0, 0, 0, 0,
-227,102, 16, 67, 24, 30, 90,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,
-142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
- 6, 0,160, 0,216, 0,143, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-159, 0, 0, 0,167, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,216, 0,
- 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,169,240, 6,
- 0, 0, 0, 0,248, 23, 55, 8, 0, 0, 0, 0,248, 23, 55, 8, 0, 0, 0, 0, 88,156, 17, 7, 0, 0, 0, 0, 88,156, 17, 7,
- 0, 0, 0, 0,168,178, 50, 8, 0, 0, 0, 0,120,106, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,156, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,170,240, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
- 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32,
- 83, 99,114,101,101,110, 0, 0, 32, 77,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,
-144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,111,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,253, 41, 1, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,157, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,159, 17, 7, 0, 0, 0, 0,232,154, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 52, 67, 0, 96,158,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 96,158,196, 0,128,142,195,163, 0, 0, 0,
-180, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-162, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,214, 3,163, 0,214, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 67, 5, 0, 0,167, 0, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,163,240, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,159, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,157, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 56, 30, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 31, 28, 7, 0, 0, 0, 0,
+152, 28, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255,187, 0,204, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 67, 5, 0, 0,167, 0, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 4,153, 3, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,162,240, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,239, 52, 8, 0, 0, 0, 0, 56,238, 52, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,160, 17, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,216,160, 17, 7,
- 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 26,150,180, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 6,128,191, 0, 0,128,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 11,210, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,
-143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63, 68,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,
-142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, 62, 95, 68, 65,
- 51,120,173,192,115,208,213, 64, 0, 0,128, 63,178,157,229, 62, 51, 25, 17,191,116,169, 81,191,184,158, 81,191,117, 90,127, 63,
-176,224,139, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, 2,162,161, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0,
- 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 39,240,191, 62,124,116, 85, 63, 48,189, 70,188, 0, 0,184,180, 61,203,145,190,
- 88,140, 12, 62,193,104, 34, 63, 0, 0, 78, 52,197,112,117,194,178,208,216, 65,220,158, 5,194,231,251,159,192,221, 54,114, 66,
- 29,247,213,193, 58,221, 3, 66, 25, 4,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,
-143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63,178,157,229, 62, 51, 25, 17,191,116,169, 81,191,184,158, 81,191,117, 90,127, 63,
-176,224,139, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, 2,162,161, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0,
- 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 31, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,120, 33, 28, 7, 0, 0, 0, 0, 56, 30, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,254,187, 0,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,120, 33, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 35, 28, 7, 0, 0, 0, 0,
+216, 31, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,110,102,108,117,101,110, 99,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,252,187, 0, 86, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,122,221, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-196,122,221, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,122,221, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 33,210,111, 65,
- 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 9,191,201, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 32, 33, 12, 66, 85,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 96, 1, 0, 0,152,164, 17, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
-205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 35, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 33, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 67,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,187, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,184, 36, 28, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 40,235,156, 8, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 37, 28, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,232, 42, 28, 7, 0, 0, 0, 0, 40,253, 27, 7, 0, 0, 0, 0, 88,235, 27, 7, 0, 0, 0, 0,
+184,239, 27, 7, 0, 0, 0, 0, 40,240, 27, 7, 0, 0, 0, 0,248,237, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,127, 4, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15,128, 4, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40,100,251, 6, 0, 0, 0, 0,200, 41, 28, 7, 0, 0, 0, 0,200, 41, 28, 7, 0, 0, 0, 0,232, 38, 28, 7, 0, 0, 0, 0,
+ 88, 40, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 62,106, 7, 0, 0, 0, 0,
+200,112,104, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 38, 28, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 88, 40, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,143, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0,144, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,224,143, 68, 0, 0,200, 65, 0,224,143, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,128, 4, 26, 0,128, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,127, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 4, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56,102,251, 6, 0, 0, 0, 0,136,229,156, 8, 0, 0, 0, 0,136,229,156, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40, 69,106, 7, 0, 0, 0, 0,152, 71,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 40, 28, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,232, 38, 28, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,
+ 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,127, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,127, 4, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2,
+ 4, 0, 0, 4, 8, 0,128, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,127, 4, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 4, 62, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72,101,251, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,216, 72,106, 7, 0, 0, 0, 0, 40, 80,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,200, 41, 28, 7, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232, 42, 28, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,104,227, 28, 7, 0, 0, 0, 0,248, 37, 28, 7, 0, 0, 0, 0,216,238, 27, 7, 0, 0, 0, 0,
+104,238, 27, 7, 0, 0, 0, 0,136,237, 27, 7, 0, 0, 0, 0, 72,239, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+129, 4, 0, 0, 78, 5, 0, 0, 49, 2, 0, 0,136, 2, 0, 0, 3, 3,206, 0, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0,
+ 40, 97,251, 6, 0, 0, 0, 0,184, 46, 28, 7, 0, 0, 0, 0,184, 46, 28, 7, 0, 0, 0, 0,216, 43, 28, 7, 0, 0, 0, 0,
+ 72, 45, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,113,104, 7, 0, 0, 0, 0,
+ 8, 67,106, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 43, 28, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 72, 45, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 78, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0, 0, 77, 67, 0, 0,200, 65, 0, 0, 77, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,206, 0, 26, 0,206, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+129, 4, 0, 0, 78, 5, 0, 0,111, 2, 0, 0,136, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+206, 0, 26, 0, 8, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 99,251, 6, 0, 0, 0, 0, 72,208, 87, 8, 0, 0, 0, 0, 72,208, 87, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 83,106, 7, 0, 0, 0, 0,136, 85,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 45, 28, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,216, 43, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0,
+ 0, 0,184, 65, 0, 0, 84, 67, 0, 0, 48,194, 0, 0, 0, 0,189, 0, 0, 0,206, 0, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0,
+ 0, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,188, 0, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, 2, 0, 3, 3,
+ 0, 0, 12, 4, 6, 0,206, 0, 62, 0,189, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+129, 4, 0, 0, 78, 5, 0, 0, 49, 2, 0, 0,110, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+206, 0, 62, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72, 98,251, 6, 0, 0, 0, 0,152, 9, 68, 8, 0, 0, 0, 0,152, 9, 68, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,200, 86,106, 7, 0, 0, 0, 0, 56, 89,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,184, 46, 28, 7, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 24,128, 0, 0, 0, 12, 66, 0, 0,128, 63,
-205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,216,166, 17, 7,
- 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,136, 22, 49, 8, 0, 0, 0, 0,120,141, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 72,174, 17, 7, 0, 0, 0, 0, 8,183, 17, 7,
- 0, 0, 0, 0,120,183, 17, 7, 0, 0, 0, 0,152,239, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,168, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,169, 17, 7,
- 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 8,169, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,169, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3,
- 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,171, 17, 7,
- 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0,200,170, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,171, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,140, 1,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,172, 17, 7,
- 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,140, 1, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0,136,172, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,173, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 1,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,234, 3,
- 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,174, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,174, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,174, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,175, 17, 7,
- 0, 0, 0, 0, 72,174, 17, 7, 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,175, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,175, 17, 7,
- 0, 0, 0, 0,184,174, 17, 7, 0, 0, 0, 0, 8,169, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,175, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,176, 17, 7,
- 0, 0, 0, 0, 40,175, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,176, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,176, 17, 7,
- 0, 0, 0, 0,152,175, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,176, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,176, 17, 7,
- 0, 0, 0, 0, 8,176, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,176, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,177, 17, 7,
- 0, 0, 0, 0,120,176, 17, 7, 0, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,177, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,177, 17, 7,
- 0, 0, 0, 0,232,176, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,177, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,178, 17, 7,
- 0, 0, 0, 0, 88,177, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,178, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,178, 17, 7,
- 0, 0, 0, 0,200,177, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,178, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,179, 17, 7,
- 0, 0, 0, 0, 56,178, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,179, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,179, 17, 7,
- 0, 0, 0, 0,168,178, 17, 7, 0, 0, 0, 0,120,169, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,179, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,179, 17, 7,
- 0, 0, 0, 0, 24,179, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,179, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,180, 17, 7,
- 0, 0, 0, 0,136,179, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,180, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,180, 17, 7,
- 0, 0, 0, 0,248,179, 17, 7, 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,180, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,181, 17, 7,
- 0, 0, 0, 0,104,180, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,181, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,181, 17, 7,
- 0, 0, 0, 0,216,180, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,181, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,182, 17, 7,
- 0, 0, 0, 0, 72,181, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,182, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,182, 17, 7,
- 0, 0, 0, 0,184,181, 17, 7, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,182, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,183, 17, 7,
- 0, 0, 0, 0, 40,182, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,183, 17, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,152,182, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,183, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,187, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,152,168, 17, 7, 0, 0, 0, 0, 8,169, 17, 7,
- 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0,
- 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,246, 17, 7,
- 0, 0, 0, 0, 88,246, 17, 7, 0, 0, 0, 0,104,184, 17, 7, 0, 0, 0, 0,216,185, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,104,184, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,185, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0,
- 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,216,185, 89, 8, 0, 0, 0, 0,216,185, 89, 8, 0, 0, 0, 0, 24, 48, 28, 7, 0, 0, 0, 0,
+ 0,115,101, 32, 83, 99,117,108,112,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,
+ 24, 48, 28, 7, 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0, 42, 11, 0, 0, 42, 11, 0, 0,120, 48, 28, 7, 0, 0, 0, 0,
+ 68, 65, 84, 65,160,178, 0, 0,120, 48, 28, 7, 0, 0, 0, 0,237, 0, 0, 0, 42, 11, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,
+120,101, 30, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,
+120,101, 30, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,152,137, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,151, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+136,173, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,144, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+104,123, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,
+184,212, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 3, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152, 25, 27, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+168, 6, 29, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,152,158, 29, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168, 22, 27, 7, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248,222, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56,249, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56, 28, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248, 36, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56, 63, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248, 71, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56, 98, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248,106, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56,133, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248,141, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56,168, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248,176, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+ 56,203, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+248,211, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,220, 31, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+ 88,122, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,123, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,
+ 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0,
+248,130, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0,
+216,144, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+152, 25, 27, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136,125, 27, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136,125, 27, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136,125, 27, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136,125, 27, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136,125, 27, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+136,125, 27, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 8,234, 27, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+168, 6, 29, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152,158, 29, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+152,158, 29, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152,158, 29, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+152,158, 29, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152,158, 29, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+152,158, 29, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152,158, 29, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+152,158, 29, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152,158, 29, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+152,158, 29, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 40, 53, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,
+168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,
+168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,
+168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,
+168, 22, 27, 7, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,
+ 40,128, 30, 7, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+104,227, 28, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 42, 28, 7, 0, 0, 0, 0,
+184,239, 27, 7, 0, 0, 0, 0, 24,237, 27, 7, 0, 0, 0, 0,104,238, 27, 7, 0, 0, 0, 0, 40,240, 27, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 4, 0, 0, 89, 0, 0, 0,136, 2, 0, 0, 1, 1,128, 4, 48, 2, 1, 0,
+ 0, 0, 0, 0, 0, 0, 8, 0, 40,103,251, 6, 0, 0, 0, 0,104, 4, 29, 7, 0, 0, 0, 0,104, 4, 29, 7, 0, 0, 0, 0,
+ 88,228, 28, 7, 0, 0, 0, 0, 56,255, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+152, 67,106, 7, 0, 0, 0, 0,216, 90,106, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,228, 28, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,200,229, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,108, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,144, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 4, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,224,143, 68, 0, 0,200, 65, 0,224,143, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,128, 4, 26, 0,128, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 4, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136,113,251, 6, 0, 0, 0, 0,136, 39, 68, 8, 0, 0, 0, 0,136, 39, 68, 8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 94,106, 7, 0, 0, 0, 0,184, 98,106, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,229, 28, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,184,250, 28, 7, 0, 0, 0, 0, 88,228, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67,
+ 0,192, 5,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 1, 0,159,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 62, 1,143, 0, 62, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 75, 1, 0, 0,136, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 62, 1, 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0,160, 0, 50, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 72,110,251, 6, 0, 0, 0, 0,216,107,154, 8, 0, 0, 0, 0,216,107,154, 8, 0, 0, 0, 0,
+ 56,231, 28, 7, 0, 0, 0, 0, 24,249, 28, 7, 0, 0, 0, 0,248, 99,106, 7, 0, 0, 0, 0,104,102,106, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,231, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,216,232, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,190,243, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,
+100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,
+100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,216,185, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,184, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 68, 0, 0, 0, 0,
- 0, 0, 0, 64,112, 7, 0, 0,129, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0,
- 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0, 72,187, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,211, 17, 7, 0, 0, 0, 0,120,183, 17, 7,
- 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 56,171, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0,120,169, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 4, 4, 94, 1,
-140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,210, 17, 7, 0, 0, 0, 0,152,210, 17, 7,
- 0, 0, 0, 0, 56,188, 17, 7, 0, 0, 0, 0,168,189, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,188, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,189, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,114, 1, 0, 0,139, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,216,232, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,234, 28, 7, 0, 0, 0, 0,
+ 56,231, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,114,117,115,104, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,254,143, 0,115, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,189, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,188, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128,174, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,255,184,195, 0, 0, 0, 0, 77, 1, 0, 0,
- 94, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
- 76, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,114, 1, 77, 1,114, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 24,191, 17, 7, 0, 0, 0, 0,248,208, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,191, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,192, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,234, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 24,236, 28, 7, 0, 0, 0, 0,216,232, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,
+111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,
+111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254,143, 0, 61, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 24,236, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,237, 28, 7, 0, 0, 0, 0,
+120,234, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116,114,111,107,101, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,254,143, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,192, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,194, 17, 7,
- 0, 0, 0, 0, 24,191, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
-101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,
- 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,237, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 88,239, 28, 7, 0, 0, 0, 0, 24,236, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 99,117,
+114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 99,117,
+114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,194, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,195, 17, 7, 0, 0, 0, 0,184,192, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 88,239, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,240, 28, 7, 0, 0, 0, 0,
+184,237, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,112,112,101, 97,114, 97,110,
+ 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,253,143, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,195, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,197, 17, 7,
- 0, 0, 0, 0, 88,194, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,
-110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,
- 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,240, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,152,242, 28, 7, 0, 0, 0, 0, 88,239, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116,101,120,112, 97,
+105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116,101,120,112, 97,
+105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,253,143, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,197, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,199, 17, 7, 0, 0, 0, 0,248,195, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,
-110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,
-110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,152,242, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,244, 28, 7, 0, 0, 0, 0,
+248,240, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,199, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,200, 17, 7,
- 0, 0, 0, 0,152,197, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,
-108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,
- 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,254,143, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,200, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,202, 17, 7, 0, 0, 0, 0, 56,199, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,244, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,216,245, 28, 7, 0, 0, 0, 0,152,242, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,202, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,204, 17, 7,
- 0, 0, 0, 0,216,200, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,
-111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,
- 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,216,245, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,247, 28, 7, 0, 0, 0, 0,
+ 56,244, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,121,109,109,101,116,114,121,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,204, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,205, 17, 7, 0, 0, 0, 0,120,202, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,
-115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,
-115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,253,143, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,247, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 24,249, 28, 7, 0, 0, 0, 0,216,245, 28, 7, 0, 0, 0, 0, 8,193,243, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,205, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,207, 17, 7,
- 0, 0, 0, 0, 24,204, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,
-112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,
- 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77,101,115,104, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,207, 17, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,208, 17, 7, 0, 0, 0, 0,184,205, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,252,143, 0, 68, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 24,249, 28, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+120,247, 28, 7, 0, 0, 0, 0,120,195,243, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,101,115,104, 32, 79,112,116,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,251,143, 0,161, 0,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,208, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 88,207, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,250, 28, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,200,253, 28, 7, 0, 0, 0, 0,200,229, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67,
+ 0, 0, 90,195, 0, 0, 0, 0, 0, 0, 0, 0,227,102, 16, 67, 24, 30, 90,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,216, 0,143, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,115, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,160, 0,216, 0, 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56,111,251, 6, 0, 0, 0, 0, 8, 95, 68, 8, 0, 0, 0, 0, 8, 95, 68, 8, 0, 0, 0, 0,
+ 40,252, 28, 7, 0, 0, 0, 0, 40,252, 28, 7, 0, 0, 0, 0,168,103,106, 7, 0, 0, 0, 0, 24,106,106, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,252, 28, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,112,251, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,
- 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84,111,103,103,108,101, 32, 69,100,105,116,109,111,100,101, 0,101, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152,210, 17, 7,
- 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,200,253, 28, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 56,255, 28, 7, 0, 0, 0, 0,
+184,250, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 96,158,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
+ 0, 96,158,196, 0,128,142,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,
+214, 3,163, 0,214, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 4, 0, 0,127, 4, 0, 0,
+115, 0, 0, 0,136, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
+ 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,105,251, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,211, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,219, 17, 7,
- 0, 0, 0, 0, 72,187, 17, 7, 0, 0, 0, 0, 40,168, 17, 7, 0, 0, 0, 0,200,170, 17, 7, 0, 0, 0, 0, 56,171, 17, 7,
- 0, 0, 0, 0,168,171, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,
-139, 1, 0, 0, 17, 17, 32, 6,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,218, 17, 7,
- 0, 0, 0, 0,184,218, 17, 7, 0, 0, 0, 0,200,212, 17, 7, 0, 0, 0, 0, 72,217, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,200,212, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,214, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 56,255, 28, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200,253, 28, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 56,214, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,217, 17, 7, 0, 0, 0, 0,200,212, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,185,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,185,195,
- 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,114, 1,203, 0,
-114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,
-139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,114, 1, 0, 0, 4, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,215, 17, 7, 0, 0, 0, 0,168,215, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,168,215, 17, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,
-112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,
-112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,111,112,101,114,116,105,101,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,127, 4, 0, 0,
+115, 0, 0, 0,136, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 3, 22, 2, 13, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,104,251, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+216,139,106, 7, 0, 0, 0, 0, 8,139,106, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 0, 29, 7, 0, 0, 0, 0,
+ 68, 65, 84, 65,112, 3, 0, 0,168, 0, 29, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 9, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+142, 6,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 11,210, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,
+184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63,
+ 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63, 68,239,209, 62, 70,119,105, 63,
+176, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190,
+ 43, 61,228, 62, 0, 0, 0, 0, 62, 95, 68, 65, 51,120,173,192,115,208,213, 64, 0, 0,128, 63,178,157,229, 62, 95,247, 80,191,
+116,169, 81,191,184,158, 81,191,117, 90,127, 63,147,114,201, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, 85,199,232, 63,
+218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 39,240,191, 62,124,116, 85, 63,
+ 96,189, 70,188, 0, 0,185,180,248,119, 74,190, 7, 47,195, 61,166,138,225, 62, 0, 0,132, 51,197,112,117,194,178,208,216, 65,
+221,158, 5,194,231,251,159,192,221, 54,114, 66, 29,247,213,193, 59,221, 3, 66, 25, 4,160, 64, 68,239,209, 62, 51,177,205,190,
+184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63,
+ 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63,178,157,229, 62, 95,247, 80,191,
+116,169, 81,191,184,158, 81,191,117, 90,127, 63,147,114,201, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, 85,199,232, 63,
+218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,217, 17, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,214, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0,
- 0, 0,112, 67, 0, 80, 31,195, 0,234,179, 68,224,198,182,194,184,177,165, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,
-113, 1, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0,
-113, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 68, 5,114, 1, 51, 5, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,220, 0, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 5,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0,184,218, 17, 7, 0, 0, 0, 0,192, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,219, 17, 7, 0, 0, 0, 0,214, 0, 0, 0,
- 1, 0, 0, 0, 8,226, 17, 7, 0, 0, 0, 0,216,211, 17, 7, 0, 0, 0, 0,136,172, 17, 7, 0, 0, 0, 0,248,172, 17, 7,
- 0, 0, 0, 0, 88,170, 17, 7, 0, 0, 0, 0, 24,172, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,
-126, 7, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 9, 9, 62, 2, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 24,223, 17, 7, 0, 0, 0, 0, 24,223, 17, 7, 0, 0, 0, 0, 56,220, 17, 7, 0, 0, 0, 0,168,221, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,220, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,221, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0,128, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 15, 68,
- 0, 0,200, 65, 0, 64, 15, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
- 10, 0, 62, 2, 26, 0, 62, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,
-126, 7, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0,
- 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,221, 17, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 56,220, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,
-131,248, 1, 68, 0, 0, 0, 0, 86, 26, 3, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4,
- 10, 0, 62, 2, 67, 2, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,
-126, 7, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 67, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171,158, 4, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171,158, 4, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+171,158, 4, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,
+237,203,148,190, 3,236,234,190, 33,210,111, 65, 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,125,155,241, 58, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, 84,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,104, 4, 29, 7, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0, 24,223, 17, 7, 0, 0, 0, 0,186, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
+248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0,
+ 8, 24,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 78, 0, 0, 8, 1, 0, 0,168, 6, 29, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 86, 29, 7, 0, 0, 0, 0,
+ 8,234, 27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,
+111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 7, 29, 7, 0, 0, 0, 0,168, 13, 29, 7, 0, 0, 0, 0,
+ 24, 14, 29, 7, 0, 0, 0, 0,216, 22, 29, 7, 0, 0, 0, 0, 72, 23, 29, 7, 0, 0, 0, 0,104, 79, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,248, 7, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 8, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+104, 8, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 8, 29, 7, 0, 0, 0, 0,248, 7, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 8, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 72, 9, 29, 7, 0, 0, 0, 0,104, 8, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 9, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+184, 9, 29, 7, 0, 0, 0, 0,216, 8, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 10, 29, 7, 0, 0, 0, 0,
+ 72, 9, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 40, 10, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 10, 29, 7, 0, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152, 10, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 8, 11, 29, 7, 0, 0, 0, 0, 40, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 11, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+120, 11, 29, 7, 0, 0, 0, 0,152, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,120, 11, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 11, 29, 7, 0, 0, 0, 0,
+ 8, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+232, 11, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 12, 29, 7, 0, 0, 0, 0,120, 11, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,126, 7,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 12, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,200, 12, 29, 7, 0, 0, 0, 0,232, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 5,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 12, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 56, 13, 29, 7, 0, 0, 0, 0, 88, 12, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,234, 3, 1, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 56, 13, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 13, 29, 7, 0, 0, 0, 0,
+200, 12, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+168, 13, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 13, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 14, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,136, 14, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 8, 29, 7, 0, 0, 0, 0,
+216, 8, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 14, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,248, 14, 29, 7, 0, 0, 0, 0, 24, 14, 29, 7, 0, 0, 0, 0,104, 8, 29, 7, 0, 0, 0, 0,
+184, 9, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 14, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,104, 15, 29, 7, 0, 0, 0, 0,136, 14, 29, 7, 0, 0, 0, 0,216, 8, 29, 7, 0, 0, 0, 0,
+ 40, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 15, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,216, 15, 29, 7, 0, 0, 0, 0,248, 14, 29, 7, 0, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,
+ 40, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 15, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 72, 16, 29, 7, 0, 0, 0, 0,104, 15, 29, 7, 0, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,
+152, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 16, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,184, 16, 29, 7, 0, 0, 0, 0,216, 15, 29, 7, 0, 0, 0, 0,152, 10, 29, 7, 0, 0, 0, 0,
+ 8, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 16, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 40, 17, 29, 7, 0, 0, 0, 0, 72, 16, 29, 7, 0, 0, 0, 0, 72, 9, 29, 7, 0, 0, 0, 0,
+120, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 17, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,152, 17, 29, 7, 0, 0, 0, 0,184, 16, 29, 7, 0, 0, 0, 0, 8, 11, 29, 7, 0, 0, 0, 0,
+120, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 17, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 8, 18, 29, 7, 0, 0, 0, 0, 40, 17, 29, 7, 0, 0, 0, 0,248, 7, 29, 7, 0, 0, 0, 0,
+152, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 18, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,120, 18, 29, 7, 0, 0, 0, 0,152, 17, 29, 7, 0, 0, 0, 0,248, 7, 29, 7, 0, 0, 0, 0,
+120, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 18, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,232, 18, 29, 7, 0, 0, 0, 0, 8, 18, 29, 7, 0, 0, 0, 0, 40, 10, 29, 7, 0, 0, 0, 0,
+232, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 18, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 88, 19, 29, 7, 0, 0, 0, 0,120, 18, 29, 7, 0, 0, 0, 0, 72, 9, 29, 7, 0, 0, 0, 0,
+232, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 19, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,200, 19, 29, 7, 0, 0, 0, 0,232, 18, 29, 7, 0, 0, 0, 0, 8, 11, 29, 7, 0, 0, 0, 0,
+232, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 19, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 56, 20, 29, 7, 0, 0, 0, 0, 88, 19, 29, 7, 0, 0, 0, 0, 88, 12, 29, 7, 0, 0, 0, 0,
+200, 12, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 20, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,168, 20, 29, 7, 0, 0, 0, 0,200, 19, 29, 7, 0, 0, 0, 0, 40, 10, 29, 7, 0, 0, 0, 0,
+200, 12, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 20, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 24, 21, 29, 7, 0, 0, 0, 0, 56, 20, 29, 7, 0, 0, 0, 0,232, 11, 29, 7, 0, 0, 0, 0,
+ 88, 12, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 21, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,136, 21, 29, 7, 0, 0, 0, 0,168, 20, 29, 7, 0, 0, 0, 0,152, 10, 29, 7, 0, 0, 0, 0,
+ 56, 13, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 21, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,248, 21, 29, 7, 0, 0, 0, 0, 24, 21, 29, 7, 0, 0, 0, 0, 88, 12, 29, 7, 0, 0, 0, 0,
+ 56, 13, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 21, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,104, 22, 29, 7, 0, 0, 0, 0,136, 21, 29, 7, 0, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,
+168, 13, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 22, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0,216, 22, 29, 7, 0, 0, 0, 0,248, 21, 29, 7, 0, 0, 0, 0,200, 12, 29, 7, 0, 0, 0, 0,
+168, 13, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 22, 29, 7, 0, 0, 0, 0,
+213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 22, 29, 7, 0, 0, 0, 0, 56, 13, 29, 7, 0, 0, 0, 0,
+168, 13, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72, 23, 29, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0, 24, 27, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,
+104, 8, 29, 7, 0, 0, 0, 0,216, 8, 29, 7, 0, 0, 0, 0, 40, 10, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40, 86, 29, 7, 0, 0, 0, 0, 40, 86, 29, 7, 0, 0, 0, 0, 56, 24, 29, 7, 0, 0, 0, 0,
+168, 25, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 24, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+168, 25, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 25, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56, 24, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,238, 68, 0, 0, 0, 0, 0, 0, 0, 64,112, 7, 0, 0,129, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3,
+ 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 24, 27, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+168, 51, 29, 7, 0, 0, 0, 0, 72, 23, 29, 7, 0, 0, 0, 0,120, 11, 29, 7, 0, 0, 0, 0, 8, 11, 29, 7, 0, 0, 0, 0,
+232, 11, 29, 7, 0, 0, 0, 0, 72, 9, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 0, 0, 0, 0,139, 1, 0, 0, 4, 4, 94, 1,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+104, 50, 29, 7, 0, 0, 0, 0,104, 50, 29, 7, 0, 0, 0, 0, 8, 28, 29, 7, 0, 0, 0, 0,120, 29, 29, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 8, 28, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,120, 29, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, 0, 0,200, 65,
+ 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 94, 1,
+ 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+114, 1, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,120, 29, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 28, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,
+255,255,184,195, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,
+114, 1, 77, 1,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,126, 7, 0, 0,
+ 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,114, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 30, 29, 7, 0, 0, 0, 0,200, 48, 29, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,232, 30, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 32, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95,
+ 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136, 32, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 40, 34, 29, 7, 0, 0, 0, 0,232, 30, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-160, 0, 0, 0, 8,226, 17, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,239, 17, 7, 0, 0, 0, 0, 72,219, 17, 7,
- 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,248,172, 17, 7, 0, 0, 0, 0,136,172, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 1, 1,251, 3,
- 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,237, 17, 7, 0, 0, 0, 0,232,237, 17, 7,
- 0, 0, 0, 0,248,226, 17, 7, 0, 0, 0, 0,184,232, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,226, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,228, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192,126, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-250, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,126, 68, 0, 0,200, 65, 0,128,126, 68, 0, 0,200, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,251, 3, 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,228, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,229, 17, 7, 0, 0, 0, 0,248,226, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,
-160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 69, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 67, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,229, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,231, 17, 7, 0, 0, 0, 0,104,228, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,
-160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,231, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,232, 17, 7, 0, 0, 0, 0,216,229, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 52, 67, 0, 0,109,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,109,196, 0,128,145,195,163, 0, 0, 0,
-180, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
-162, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,145, 2,163, 0,145, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,232, 17, 7,
- 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,231, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 40, 34, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 35, 29, 7, 0, 0, 0, 0,
+136, 32, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200, 35, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,104, 37, 29, 7, 0, 0, 0, 0, 40, 34, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,234, 17, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 40,234, 17, 7,
- 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0,128,
- 0, 0, 0,128, 0, 0, 0,128, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-112,121,107, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,249,195, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,104, 37, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 39, 29, 7, 0, 0, 0, 0,
+200, 35, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105,
+ 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 76, 1, 58, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,
-214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,221, 57, 80, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65,
- 0, 0, 5, 0,251,251, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63,
- 0, 0,180, 66, 0, 0,180, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 96, 1, 0, 0,232,237, 17, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
-205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8, 39, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,168, 40, 29, 7, 0, 0, 0, 0,104, 37, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,
-205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,239, 17, 7,
- 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,226, 17, 7, 0, 0, 0, 0,200,170, 17, 7,
- 0, 0, 0, 0,232,169, 17, 7, 0, 0, 0, 0,216,173, 17, 7, 0, 0, 0, 0,104,173, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 3, 3, 68, 1, 93, 2, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,243, 17, 7, 0, 0, 0, 0,104,243, 17, 7, 0, 0, 0, 0,136,240, 17, 7,
- 0, 0, 0, 0,248,241, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,240, 17, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0,248,241, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0,128,161, 67, 0, 0,200, 65, 0,128,161, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 1, 26, 0, 68, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,241, 17, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,240, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,153, 67, 0, 64, 12,196, 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0,
- 66, 2, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0,
- 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0,
- 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 68, 1, 67, 2, 51, 1, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 1, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,104,243, 17, 7, 0, 0, 0, 0,183, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,168, 40, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 42, 29, 7, 0, 0, 0, 0,
+ 8, 39, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,244, 17, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,
- 16, 0, 0, 0,200,244, 17, 7, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 40,245, 17, 7,
- 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, 40,245, 17, 7, 0, 0, 0, 0,236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 20, 0, 0, 0,
- 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,239, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,233, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 83, 78, 0, 0,
- 8, 1, 0, 0,136, 22, 49, 8, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0,216,166, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 77,111,116,105,111,110, 32, 84,114, 97,
- 99,107,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0,232, 86, 65, 8, 0, 0, 0, 0, 24, 96, 55, 8,
- 0, 0, 0, 0, 40,211, 55, 8, 0, 0, 0, 0, 40, 89, 55, 8, 0, 0, 0, 0, 88,136, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,220,104,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216, 6, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 6, 56, 8,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 88,104, 55, 8, 0, 0, 0, 0,216, 6, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,104, 55, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,105, 55, 8,
- 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0, 88,104, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 18, 56, 8,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,182, 49, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 62, 6, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,182, 49, 8, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0, 88,207, 49, 8, 0, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,207, 49, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,202, 31, 7,
- 0, 0, 0, 0,168,182, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 88,207, 49, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,201, 31, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 62, 6,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 3,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136, 76, 53, 8,
- 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,120, 3, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232, 86, 65, 8, 0, 0, 0, 0,248,162, 50, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,120, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 86, 65, 8,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,208, 2, 64, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 96, 55, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 8,106, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,216, 6, 56, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,106, 50, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 72, 65, 49, 8, 0, 0, 0, 0, 24, 96, 55, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,216, 6, 56, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 65, 49, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 24,183, 49, 8, 0, 0, 0, 0, 8,106, 50, 8, 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,232, 18, 56, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,183, 49, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,248,127, 51, 8, 0, 0, 0, 0, 72, 65, 49, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,232, 18, 56, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,127, 51, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,248, 85, 53, 8, 0, 0, 0, 0, 24,183, 49, 8, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0, 88,104, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 85, 53, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 56, 81, 55, 8, 0, 0, 0, 0,248,127, 51, 8, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0,152,235, 49, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 81, 55, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,184,217, 31, 7, 0, 0, 0, 0,248, 85, 53, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 88,104, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,217, 31, 7, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,152, 16, 49, 8, 0, 0, 0, 0, 56, 81, 55, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0,136,202, 31, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 16, 49, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,248,101, 55, 8, 0, 0, 0, 0,184,217, 31, 7, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,136,202, 31, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,101, 55, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,136,101, 55, 8, 0, 0, 0, 0,152, 16, 49, 8, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0, 72,105, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,101, 55, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,104, 49, 49, 8, 0, 0, 0, 0,248,101, 55, 8, 0, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,232, 18, 56, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 49, 49, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 88, 92,239, 6, 0, 0, 0, 0,136,101, 55, 8, 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0,248,162, 50, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 92,239, 6, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 24,218, 48, 8, 0, 0, 0, 0,104, 49, 49, 8, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,248,162, 50, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,218, 48, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,104, 94, 56, 8, 0, 0, 0, 0, 88, 92,239, 6, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,136, 76, 53, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 94, 56, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 40,243, 31, 7, 0, 0, 0, 0, 24,218, 48, 8, 0, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0,136, 76, 53, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,243, 31, 7, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0,200,233, 31, 7, 0, 0, 0, 0,104, 94, 56, 8, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,232, 86, 65, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,233, 31, 7, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 40,211, 55, 8, 0, 0, 0, 0, 40,243, 31, 7, 0, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0,232, 86, 65, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,211, 55, 8, 0, 0, 0, 0,212, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,233, 31, 7, 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0,232, 86, 65, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40, 89, 55, 8, 0, 0, 0, 0,214, 0, 0, 0,
- 1, 0, 0, 0,232,139, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,216, 6, 56, 8,
- 0, 0, 0, 0, 72, 80, 55, 8, 0, 0, 0, 0,232, 18, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 6, 0, 0, 65, 4, 0, 0, 98, 4, 0, 0, 7, 7, 63, 6, 34, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0,184,206,240, 6,
- 0, 0, 0, 0,184,142, 55, 8, 0, 0, 0, 0,184,142, 55, 8, 0, 0, 0, 0,168,183, 55, 8, 0, 0, 0, 0, 24,185, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,234, 31, 7, 0, 0, 0, 0,200,145, 49, 8,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,183, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,185, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,163, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68,
- 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
- 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 6, 0, 0, 65, 4, 0, 0, 90, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0,
- 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,208,240, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,185, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,168,183, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0,
- 0,192,197, 68, 0, 0,128, 64, 0, 0, 64, 65, 46, 6, 0, 0, 63, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
-111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4,
- 10, 0, 63, 6, 8, 0, 46, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 6, 0, 0, 91, 4, 0, 0, 98, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,207,240, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,139, 55, 8, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 17, 56, 8,
- 0, 0, 0, 0, 40, 89, 55, 8, 0, 0, 0, 0,152,235, 49, 8, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0,120,201, 31, 7,
- 0, 0, 0, 0, 88,104, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,
-107, 0, 0, 0, 15, 15, 63, 6,108, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,158,240, 6, 0, 0, 0, 0, 88,219, 48, 8,
- 0, 0, 0, 0, 88,219, 48, 8, 0, 0, 0, 0, 8,223, 55, 8, 0, 0, 0, 0,120,224, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 20,238, 6, 0, 0, 0, 0, 8,105, 56, 8, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 8,223, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,224, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,160,240, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72, 42, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0,232, 43, 29, 7, 0, 0, 0, 0,168, 40, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,120,224, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,223, 55, 8,
- 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0,
- 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 18, 0, 0, 0, 81, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72,
- 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 63, 6, 82, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 26, 0, 0, 0,
-107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,159,240, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-208, 0, 0, 0, 88,219, 48, 8, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
- 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232, 17, 56, 8, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,215, 31, 7,
- 0, 0, 0, 0,232,139, 55, 8, 0, 0, 0, 0,136,202, 31, 7, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0,248,162, 50, 8,
- 0, 0, 0, 0,120,201, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,
-119, 3, 0, 0, 20, 20, 63, 6, 11, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3,241, 6, 0, 0, 0, 0,120,224, 31, 7,
- 0, 0, 0, 0,120,224, 31, 7, 0, 0, 0, 0,200,252, 52, 8, 0, 0, 0, 0,216, 62, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 82, 53, 8, 0, 0, 0, 0,120, 57, 51, 8, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,200,252, 52, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,155, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 19, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0, 63, 6, 26, 0, 63, 6,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,
-134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 12,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,232, 43, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 45, 29, 7, 0, 0, 0, 0,
+ 72, 42, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111,
+ 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,152,155, 31, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168, 14, 49, 8, 0, 0, 0, 0,200,252, 52, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 30,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 30,196,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,121, 2,143, 0,
-121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,255, 0, 0, 0,
-119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,121, 2, 0, 0, 5, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 9,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,168, 14, 49, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,226, 31, 7, 0, 0, 0, 0,152,155, 31, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,
-120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,135, 0, 0, 0,
-254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,107, 50, 8, 0, 0, 0, 0,136,107, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,136,107, 50, 8, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40, 11,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116,
- 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116,
- 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,226, 31, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0,200,190, 55, 8, 0, 0, 0, 0,168, 14, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 60,196,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 60,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,
-240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
-240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,241, 2,143, 0,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,159, 5, 0, 0, 62, 6, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,160, 0,241, 2, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 99, 51, 8,
- 0, 0, 0, 0,248, 99, 51, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 99, 51, 8, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 7,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136, 45, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 40, 47, 29, 7, 0, 0, 0, 0,232, 43, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,200,190, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,126, 51, 8, 0, 0, 0, 0,200,226, 31, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0,
-167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,
-119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 13,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 24,126, 51, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 62, 53, 8, 0, 0, 0, 0,200,190, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193,
- 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72,
-255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,
-119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,216, 62, 53, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,126, 51, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255,
- 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 0, 0, 0, 0, 0, 0,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,255, 4,241, 2,255, 4,
-241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,158, 5, 0, 0,135, 0, 0, 0,
-119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0, 40, 47, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 48, 29, 7, 0, 0, 0, 0,
+136, 45, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 1, 0, 0,120,224, 31, 7, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, 76, 1,130, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200, 48, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 47, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,215, 31, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,136, 49, 8,
- 0, 0, 0, 0,232, 17, 56, 8, 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0,232, 86, 65, 8, 0, 0, 0, 0,232, 18, 56, 8,
- 0, 0, 0, 0,248,162, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0,
- 63, 4, 0, 0, 20, 20,110, 3,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3,241, 6, 0, 0, 0, 0,168,104, 53, 8,
- 0, 0, 0, 0,168,104, 53, 8, 0, 0, 0, 0,232,206, 50, 8, 0, 0, 0, 0, 88,110, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 94, 55, 8, 0, 0, 0, 0,248,239, 55, 8, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,232,206, 50, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,208, 50, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 91, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 91, 68, 0, 0,200, 65, 0, 64, 91, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,110, 3, 26, 0,110, 3,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0,
-146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 12,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 88,208, 50, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 91, 56, 8, 0, 0, 0, 0,232,206, 50, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 9,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 88, 91, 56, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 16, 51, 8, 0, 0, 0, 0, 88,208, 50, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0,
-120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 92, 56, 8, 0, 0, 0, 0,200, 92, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,200, 92, 56, 8, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40, 11,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116,
- 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116,
- 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 16, 51, 8, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 8,121, 55, 8, 0, 0, 0, 0, 88, 91, 56, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,
-172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
-172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 17, 51, 8,
- 0, 0, 0, 0,152, 17, 51, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 17, 51, 8, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 7,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,104, 50, 29, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 8,121, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,122, 55, 8, 0, 0, 0, 0, 40, 16, 51, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 27,195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,160, 0,173, 0,160, 0,
-155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,112, 3, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,173, 0, 0, 0, 2, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 13,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,120,122, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,110, 56, 8, 0, 0, 0, 0, 8,121, 55, 8,
- 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68,171,170,132,194, 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68, 0, 0, 27,195,
- 0, 0, 0, 0,189, 2, 0, 0,206, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72,
-255,255,127,127, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 16, 0, 2, 4, 4, 0,206, 2,173, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 62, 6, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 88,110, 56, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,122, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255,
- 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 46, 2, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0, 46, 2,173, 0, 46, 2,
-173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168, 51, 29, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0, 24, 59, 29, 7, 0, 0, 0, 0, 24, 27, 29, 7, 0, 0, 0, 0,248, 7, 29, 7, 0, 0, 0, 0,
+152, 10, 29, 7, 0, 0, 0, 0, 8, 11, 29, 7, 0, 0, 0, 0,120, 11, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 17, 17, 32, 6,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136, 58, 29, 7, 0, 0, 0, 0,136, 58, 29, 7, 0, 0, 0, 0,152, 52, 29, 7, 0, 0, 0, 0,
+ 24, 57, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 52, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 8, 54, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 1, 0, 0,168,104, 53, 8, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 54, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 24, 57, 29, 7, 0, 0, 0, 0,152, 52, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,185,195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,185,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0,
+ 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,113, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,220, 0,114, 1,203, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+220, 0,114, 1, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 55, 29, 7, 0, 0, 0, 0,
+120, 55, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 55, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,136, 49, 8, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 72,215, 31, 7, 0, 0, 0, 0, 56,186, 31, 7, 0, 0, 0, 0, 72,105, 55, 8, 0, 0, 0, 0,232, 86, 65, 8,
- 0, 0, 0, 0,136, 76, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0,
- 63, 4, 0, 0, 20, 20,208, 2,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3,241, 6, 0, 0, 0, 0, 24,206, 55, 8,
- 0, 0, 0, 0, 24,206, 55, 8, 0, 0, 0, 0, 24,237, 55, 8, 0, 0, 0, 0,120, 92, 53, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 2, 49, 8, 0, 0, 0, 0, 56, 19, 51, 8, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 24,237, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136,238, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 52, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 51, 68, 0, 0,200, 65, 0,192, 51, 68,
- 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,208, 2, 26, 0,208, 2,
- 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0,
-146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 12,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,136,238, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,173, 55, 8, 0, 0, 0, 0, 24,237, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 9,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,104,173, 55, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,164, 55, 8, 0, 0, 0, 0,136,238, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194,
- 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0,
-120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,174, 55, 8, 0, 0, 0, 0,216,174, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 88, 1, 0, 0,216,174, 55, 8, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40, 11,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116,
- 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116,
- 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,164, 55, 8, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0,216, 16,238, 6, 0, 0, 0, 0,104,173, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,
-172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
-172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,165, 55, 8,
- 0, 0, 0, 0,184,165, 55, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,165, 55, 8, 0, 0, 0, 0,213, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 7,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 24, 57, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 54, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67, 0, 80, 31,195, 0,234,179, 68,224,198,182,194,184,177,165, 67,
+ 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,
+ 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 68, 5,114, 1, 51, 5, 96, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0,
+136, 58, 29, 7, 0, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+ 24, 59, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 65, 29, 7, 0, 0, 0, 0,168, 51, 29, 7, 0, 0, 0, 0,
+ 88, 12, 29, 7, 0, 0, 0, 0,200, 12, 29, 7, 0, 0, 0, 0, 40, 10, 29, 7, 0, 0, 0, 0,232, 11, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 9, 9, 62, 2, 93, 2, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 62, 29, 7, 0, 0, 0, 0,232, 62, 29, 7, 0, 0, 0, 0,
+ 8, 60, 29, 7, 0, 0, 0, 0,120, 61, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 60, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,120, 61, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 15, 68, 0, 0,200, 65, 0, 64, 15, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 62, 2, 26, 0, 62, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,216, 16,238, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 18,238, 6, 0, 0, 0, 0, 72,164, 55, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0,
-167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 13,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 61, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 60, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67,
+ 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0, 86, 26, 3, 68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0,
+ 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68,
+ 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0, 62, 2, 67, 2, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0, 72, 18,238, 6, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 92, 53, 8, 0, 0, 0, 0,216, 16,238, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193,
- 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72,
-255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,208, 2,173, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,147, 3, 0, 0,
- 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 40, 1, 0, 0,120, 92, 53, 8, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 18,238, 6,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255,
- 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0,144, 1,173, 0,144, 1,
-173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5,241, 6, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0,232, 62, 29, 7, 0, 0, 0, 0,
+187, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 1, 0, 0, 24,206, 55, 8, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 1, 0, 20, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,232,246, 17, 7, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, 88, 70, 18, 7,
- 0, 0, 0, 0,136, 22, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,
-114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,248, 17, 7, 0, 0, 0, 0,232,253, 17, 7,
- 0, 0, 0, 0, 88,254, 17, 7, 0, 0, 0, 0,136, 7, 18, 7, 0, 0, 0, 0,248, 7, 18, 7, 0, 0, 0, 0, 8, 63, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,248, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,168,248, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,168,248, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0, 56,248, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,249, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0,168,248, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,250, 17, 7,
- 0, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 3, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0,248,249, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,250, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,240, 5,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40,252, 17, 7,
- 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 1, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0,184,251, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,252, 17, 7,
- 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248, 2,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0,211, 0, 0, 0,
- 1, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,236, 2,
- 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,232,253, 17, 7,
- 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,236, 2, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,253, 17, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,254, 17, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,254, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,248, 17, 7,
- 0, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,254, 17, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,255, 17, 7, 0, 0, 0, 0, 88,254, 17, 7, 0, 0, 0, 0,168,248, 17, 7,
- 0, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,255, 17, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,255, 17, 7, 0, 0, 0, 0,200,254, 17, 7, 0, 0, 0, 0, 24,249, 17, 7,
- 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,255, 17, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 0, 18, 7, 0, 0, 0, 0, 56,255, 17, 7, 0, 0, 0, 0,248,249, 17, 7,
- 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 0, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 0, 18, 7, 0, 0, 0, 0,168,255, 17, 7, 0, 0, 0, 0,104,250, 17, 7,
- 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 0, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 0, 18, 7, 0, 0, 0, 0, 24, 0, 18, 7, 0, 0, 0, 0,136,249, 17, 7,
- 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 0, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 1, 18, 7, 0, 0, 0, 0,136, 0, 18, 7, 0, 0, 0, 0, 56,248, 17, 7,
- 0, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 1, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 1, 18, 7, 0, 0, 0, 0,248, 0, 18, 7, 0, 0, 0, 0,248,249, 17, 7,
- 0, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 1, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 2, 18, 7, 0, 0, 0, 0,104, 1, 18, 7, 0, 0, 0, 0,216,250, 17, 7,
- 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 2, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 2, 18, 7, 0, 0, 0, 0,216, 1, 18, 7, 0, 0, 0, 0, 72,251, 17, 7,
- 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 2, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 3, 18, 7, 0, 0, 0, 0, 72, 2, 18, 7, 0, 0, 0, 0,184,251, 17, 7,
- 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 3, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 3, 18, 7, 0, 0, 0, 0,184, 2, 18, 7, 0, 0, 0, 0, 40,252, 17, 7,
- 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 3, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 4, 18, 7, 0, 0, 0, 0, 40, 3, 18, 7, 0, 0, 0, 0, 72,251, 17, 7,
- 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 4, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 4, 18, 7, 0, 0, 0, 0,152, 3, 18, 7, 0, 0, 0, 0,216,250, 17, 7,
- 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 4, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 4, 18, 7, 0, 0, 0, 0, 8, 4, 18, 7, 0, 0, 0, 0,104,250, 17, 7,
- 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 4, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 5, 18, 7, 0, 0, 0, 0,120, 4, 18, 7, 0, 0, 0, 0,136,249, 17, 7,
- 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 5, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 5, 18, 7, 0, 0, 0, 0,232, 4, 18, 7, 0, 0, 0, 0, 8,253, 17, 7,
- 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 5, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 6, 18, 7, 0, 0, 0, 0, 88, 5, 18, 7, 0, 0, 0, 0,248,249, 17, 7,
- 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 6, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 6, 18, 7, 0, 0, 0, 0,200, 5, 18, 7, 0, 0, 0, 0,216,250, 17, 7,
- 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 6, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 7, 18, 7, 0, 0, 0, 0, 56, 6, 18, 7, 0, 0, 0, 0,152,252, 17, 7,
- 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 7, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 7, 18, 7, 0, 0, 0, 0,168, 6, 18, 7, 0, 0, 0, 0,184,251, 17, 7,
- 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 7, 18, 7,
- 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 7, 18, 7, 0, 0, 0, 0, 56,248, 17, 7,
- 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 7, 18, 7,
- 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 11, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,249, 17, 7,
- 0, 0, 0, 0,168,248, 17, 7, 0, 0, 0, 0, 24,249, 17, 7, 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 93, 0, 1, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 69, 18, 7, 0, 0, 0, 0,200, 69, 18, 7, 0, 0, 0, 0,232, 8, 18, 7,
- 0, 0, 0, 0, 88, 10, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 8, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 88, 10, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,236, 3, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 10, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 8, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0,
- 0, 0, 28, 66, 0, 0, 0, 0, 0,192,237, 68, 0, 0, 0, 0, 0, 0,134, 66,110, 7, 0, 0,127, 7, 0, 0, 0, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,109, 7, 0, 0, 0, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0,
- 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 67, 0,110, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0,235, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,127, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200, 11, 18, 7, 0, 0, 0, 0,214, 0, 0, 0,
- 1, 0, 0, 0, 88, 36, 18, 7, 0, 0, 0, 0,248, 7, 18, 7, 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 8,253, 17, 7,
- 0, 0, 0, 0,120,253, 17, 7, 0, 0, 0, 0,136,249, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,
-126, 7, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 4, 4,142, 1,236, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 24, 35, 18, 7, 0, 0, 0, 0, 24, 35, 18, 7, 0, 0, 0, 0,184, 12, 18, 7, 0, 0, 0, 0, 40, 14, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 12, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 14, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67,
- 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
- 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,
-126, 7, 0, 0,210, 2, 0, 0,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0,
- 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 14, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,184, 12, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,198, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0,
-254,127,190, 67,254,127, 52,196, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0,
-126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
- 6, 0,142, 1,210, 2,125, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,
-126, 7, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,210, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 15, 18, 7, 0, 0, 0, 0,120, 33, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 15, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 17, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84,
- 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84,
- 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,
-101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,
-124, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 17, 18, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 18, 18, 7, 0, 0, 0, 0,152, 15, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,124, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 18, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 20, 18, 7,
- 0, 0, 0, 0, 56, 17, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,
-114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,
-124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 20, 18, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 22, 18, 7, 0, 0, 0, 0,216, 18, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,124, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 22, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 23, 18, 7,
- 0, 0, 0, 0,120, 20, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105,
- 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,
-124, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216, 65, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
+104, 79, 29, 7, 0, 0, 0, 0, 24, 59, 29, 7, 0, 0, 0, 0, 56, 13, 29, 7, 0, 0, 0, 0,168, 13, 29, 7, 0, 0, 0, 0,
+200, 12, 29, 7, 0, 0, 0, 0, 88, 12, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,
+141, 1, 0, 0,233, 3, 0, 0, 1, 1,251, 3, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+184, 77, 29, 7, 0, 0, 0, 0,184, 77, 29, 7, 0, 0, 0, 0,200, 66, 29, 7, 0, 0, 0, 0,136, 72, 29, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,200, 66, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 56, 68, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192,126, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,126, 68, 0, 0,200, 65,
+ 0,128,126, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,251, 3,
+ 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,
+141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184, 23, 18, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 25, 18, 7, 0, 0, 0, 0, 24, 22, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,
-114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,
-114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 56, 68, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168, 69, 29, 7, 0, 0, 0, 0,
+200, 66, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,
+255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,
+ 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 69, 1, 0, 0,
+167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 67, 2, 0, 0, 5, 0,
+ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,168, 69, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24, 71, 29, 7, 0, 0, 0, 0,
+ 56, 68, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67,
+ 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,
+120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,
+167, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0,
+ 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0, 24, 71, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136, 72, 29, 7, 0, 0, 0, 0,
+168, 69, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 0,109,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
+ 0, 0,109,196, 0,128,145,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,180, 0,
+145, 2,163, 0,145, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 0, 0, 63, 5, 0, 0,
+167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
+ 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 25, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 26, 18, 7,
- 0, 0, 0, 0,184, 23, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,
-105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,
-124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,136, 72, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 71, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 26, 18, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 28, 18, 7, 0, 0, 0, 0, 88, 25, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,
-101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,
-101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 63, 5, 0, 0,
+167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 67, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 28, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 30, 18, 7,
- 0, 0, 0, 0,248, 26, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116,
- 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,
-124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 73, 29, 7, 0, 0, 0, 0,
+ 68, 65, 84, 65,112, 3, 0, 0,248, 73, 29, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,149, 53,207, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,107, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255,255,249,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 30, 18, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 31, 18, 7, 0, 0, 0, 0,152, 28, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 31, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 33, 18, 7,
- 0, 0, 0, 0, 56, 30, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
- 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,
-117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253,
-124, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,221, 57, 80, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 0, 0, 5, 0,251,251, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190,
+ 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,180, 66, 0, 0,180, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,184, 77, 29, 7, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
+248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 33, 18, 7,
- 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 31, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0,
+ 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,160, 0, 0, 0,104, 79, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+216, 65, 29, 7, 0, 0, 0, 0,152, 10, 29, 7, 0, 0, 0, 0,184, 9, 29, 7, 0, 0, 0, 0,168, 13, 29, 7, 0, 0, 0, 0,
+ 56, 13, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0,233, 3, 0, 0,
+ 3, 3, 68, 1, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 83, 29, 7, 0, 0, 0, 0,
+ 56, 83, 29, 7, 0, 0, 0, 0, 88, 80, 29, 7, 0, 0, 0, 0,200, 81, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 88, 80, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200, 81, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, 0, 0,208, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,161, 67, 0, 0,200, 65, 0,128,161, 67, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 1, 26, 0, 68, 1, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0,166, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24, 35, 18, 7, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+200, 81, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 80, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,153, 67, 0, 64, 12,196, 0, 0, 0, 0,
+ 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 68, 1, 67, 2, 51, 1, 49, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,
+ 56, 83, 29, 7, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,
-160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 36, 18, 7,
- 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 49, 18, 7, 0, 0, 0, 0,200, 11, 18, 7, 0, 0, 0, 0,152,252, 17, 7,
- 0, 0, 0, 0,232,253, 17, 7, 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 1, 1,247, 2, 63, 2, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 48, 18, 7, 0, 0, 0, 0, 56, 48, 18, 7, 0, 0, 0, 0, 72, 37, 18, 7,
- 0, 0, 0, 0, 8, 43, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 37, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0,184, 38, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0,
- 0, 0,208, 65, 0, 0, 0, 0, 0,192, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 2, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0,128, 61, 68, 0, 0,200, 65, 0,128, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,247, 2, 26, 0,247, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,247, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 38, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 40, 40, 18, 7, 0, 0, 0, 0, 72, 37, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,
- 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,
- 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,249, 2, 0, 0,249, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 37, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,152, 84, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,152, 84, 29, 7, 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0,
+ 14, 0, 0, 0, 14, 0, 0, 0,248, 84, 29, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,248, 84, 29, 7, 0, 0, 0, 0,
+237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,
+120,101, 30, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,
+120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,128, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+152,137, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 56,192, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+120,151, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136,173, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+216,144, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,123, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 88,122, 30, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,
+120,101, 30, 7, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,184, 86, 29, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
+152,158, 29, 7, 0, 0, 0, 0,168, 6, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 82, 77,111,116,105,111,110, 32, 84,114, 97, 99,107,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 88, 29, 7, 0, 0, 0, 0,
+184, 93, 29, 7, 0, 0, 0, 0, 40, 94, 29, 7, 0, 0, 0, 0,152,101, 29, 7, 0, 0, 0, 0, 8,102, 29, 7, 0, 0, 0, 0,
+ 72,142, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 88, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+120, 88, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,120, 88, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 88, 29, 7, 0, 0, 0, 0,
+ 8, 88, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+232, 88, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 89, 29, 7, 0, 0, 0, 0,120, 88, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 89, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,200, 89, 29, 7, 0, 0, 0, 0,232, 88, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 89, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 56, 90, 29, 7, 0, 0, 0, 0, 88, 89, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 56, 90, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 90, 29, 7, 0, 0, 0, 0,
+200, 89, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+168, 90, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 91, 29, 7, 0, 0, 0, 0, 56, 90, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 91, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,136, 91, 29, 7, 0, 0, 0, 0,168, 90, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 88, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 91, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+248, 91, 29, 7, 0, 0, 0, 0, 24, 91, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,248, 91, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 92, 29, 7, 0, 0, 0, 0,
+136, 91, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+104, 92, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0,248, 91, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 72, 93, 29, 7, 0, 0, 0, 0,104, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 6,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 93, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+184, 93, 29, 7, 0, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,120, 3, 1, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,184, 93, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 64, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 40, 94, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 94, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+120, 88, 29, 7, 0, 0, 0, 0,232, 88, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+152, 94, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 95, 29, 7, 0, 0, 0, 0, 40, 94, 29, 7, 0, 0, 0, 0,
+120, 88, 29, 7, 0, 0, 0, 0,200, 89, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 8, 95, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 95, 29, 7, 0, 0, 0, 0,152, 94, 29, 7, 0, 0, 0, 0,
+232, 88, 29, 7, 0, 0, 0, 0, 56, 90, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+120, 95, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 95, 29, 7, 0, 0, 0, 0, 8, 95, 29, 7, 0, 0, 0, 0,
+200, 89, 29, 7, 0, 0, 0, 0, 56, 90, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+232, 95, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 96, 29, 7, 0, 0, 0, 0,120, 95, 29, 7, 0, 0, 0, 0,
+ 8, 88, 29, 7, 0, 0, 0, 0, 88, 89, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 88, 96, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 96, 29, 7, 0, 0, 0, 0,232, 95, 29, 7, 0, 0, 0, 0,
+ 8, 88, 29, 7, 0, 0, 0, 0,136, 91, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+200, 96, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 97, 29, 7, 0, 0, 0, 0, 88, 96, 29, 7, 0, 0, 0, 0,
+ 88, 89, 29, 7, 0, 0, 0, 0,248, 91, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 56, 97, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168, 97, 29, 7, 0, 0, 0, 0,200, 96, 29, 7, 0, 0, 0, 0,
+136, 91, 29, 7, 0, 0, 0, 0,248, 91, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+168, 97, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 98, 29, 7, 0, 0, 0, 0, 56, 97, 29, 7, 0, 0, 0, 0,
+136, 91, 29, 7, 0, 0, 0, 0,104, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 24, 98, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 98, 29, 7, 0, 0, 0, 0,168, 97, 29, 7, 0, 0, 0, 0,
+200, 89, 29, 7, 0, 0, 0, 0,104, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+136, 98, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 98, 29, 7, 0, 0, 0, 0, 24, 98, 29, 7, 0, 0, 0, 0,
+ 56, 90, 29, 7, 0, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+248, 98, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104, 99, 29, 7, 0, 0, 0, 0,136, 98, 29, 7, 0, 0, 0, 0,
+248, 91, 29, 7, 0, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+104, 99, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 99, 29, 7, 0, 0, 0, 0,248, 98, 29, 7, 0, 0, 0, 0,
+104, 92, 29, 7, 0, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+216, 99, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,100, 29, 7, 0, 0, 0, 0,104, 99, 29, 7, 0, 0, 0, 0,
+104, 92, 29, 7, 0, 0, 0, 0, 72, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 72,100, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,100, 29, 7, 0, 0, 0, 0,216, 99, 29, 7, 0, 0, 0, 0,
+216, 92, 29, 7, 0, 0, 0, 0, 72, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+184,100, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,101, 29, 7, 0, 0, 0, 0, 72,100, 29, 7, 0, 0, 0, 0,
+200, 89, 29, 7, 0, 0, 0, 0,184, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 40,101, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,101, 29, 7, 0, 0, 0, 0,184,100, 29, 7, 0, 0, 0, 0,
+ 56, 90, 29, 7, 0, 0, 0, 0,184, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+152,101, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,101, 29, 7, 0, 0, 0, 0,
+ 72, 93, 29, 7, 0, 0, 0, 0,184, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+ 8,102, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,105, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200, 89, 29, 7, 0, 0, 0, 0,120, 88, 29, 7, 0, 0, 0, 0,232, 88, 29, 7, 0, 0, 0, 0, 56, 90, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, 98, 4, 0, 0, 7, 7, 63, 6, 34, 0, 1, 0,
+ 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,158, 29, 7, 0, 0, 0, 0, 8,158, 29, 7, 0, 0, 0, 0,
+248,102, 29, 7, 0, 0, 0, 0,104,104, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,102, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,104,104, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,163, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, 90, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,104, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,102, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68,
+ 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, 0,192,197, 68, 0, 0,128, 64, 0, 0, 64, 65, 46, 6, 0, 0, 63, 6, 0, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0, 63, 6, 8, 0, 46, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 91, 4, 0, 0, 98, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,105, 29, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,200,110, 29, 7, 0, 0, 0, 0, 8,102, 29, 7, 0, 0, 0, 0, 8, 88, 29, 7, 0, 0, 0, 0,
+136, 91, 29, 7, 0, 0, 0, 0,248, 91, 29, 7, 0, 0, 0, 0, 88, 89, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,107, 0, 0, 0, 15, 15, 63, 6,108, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,168,109, 29, 7, 0, 0, 0, 0,168,109, 29, 7, 0, 0, 0, 0,200,106, 29, 7, 0, 0, 0, 0,
+ 56,108, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,106, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 56,108, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,108, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,200,106, 29, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,
+ 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 18, 0, 0, 0, 81, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2,
+ 4, 0, 0, 4, 8, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6, 0, 0, 26, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,168,109, 29, 7, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,110, 29, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,136,126, 29, 7, 0, 0, 0, 0,216,105, 29, 7, 0, 0, 0, 0,136, 91, 29, 7, 0, 0, 0, 0,
+104, 92, 29, 7, 0, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0,248, 91, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,119, 3, 0, 0, 20, 20, 63, 6, 11, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8,125, 29, 7, 0, 0, 0, 0, 8,125, 29, 7, 0, 0, 0, 0,184,111, 29, 7, 0, 0, 0, 0,
+152,123, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,111, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 40,113, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 19, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 0, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,113, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+152,114, 29, 7, 0, 0, 0, 0,184,111, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 30,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 30,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,160, 0,121, 2,143, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,159, 0, 0, 0,255, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160, 0,121, 2, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 40, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0,152, 41, 18, 7, 0, 0, 0, 0,184, 38, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194,
- 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,
-119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,
-119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,114, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+168,117, 29, 7, 0, 0, 0, 0, 40,113, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,159, 0, 0, 0,135, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,116, 29, 7, 0, 0, 0, 0,
+ 8,116, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,116, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 41, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 8, 43, 18, 7, 0, 0, 0, 0, 40, 40, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,
-121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,
-121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0,
- 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 43, 18, 7, 0, 0, 0, 0,215, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 41, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+168,117, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184,120, 29, 7, 0, 0, 0, 0,152,114, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,178, 67, 0, 64, 60,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 60,196, 0, 0, 0, 0,
+143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,241, 2,143, 0,241, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 5, 0, 0, 62, 6, 0, 0,135, 0, 0, 0,119, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,241, 2, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,247, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24,119, 29, 7, 0, 0, 0, 0, 24,119, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+ 24,119, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,120, 44, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,120, 44, 18, 7, 0, 0, 0, 0,173, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,141,193, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188,
- 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190,
- 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193,
- 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63,
- 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64,
- 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,166,235,149, 62, 9, 46,185, 62,
- 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,
-214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,160, 32,182,252, 5,136,190, 43, 33, 3, 62,235,135, 23, 63,
- 0, 0, 96, 53,215,104, 25,196,133,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,158, 87,135,195,205,209,166, 67,
-151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190,
- 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193,
- 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,166,235,149, 62, 9, 46,185, 62,
- 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,
-214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,120, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 40,122, 29, 7, 0, 0, 0, 0,168,117, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3,
+ 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,122, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+152,123, 29, 7, 0, 0, 0, 0,184,120, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65,
+ 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0,
- 0, 0, 0, 0,107,227, 29, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66, 86,152,137, 66,
-116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 56, 48, 18, 7,
- 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72,255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232, 49, 18, 7, 0, 0, 0, 0,214, 0, 0, 0,
- 1, 0, 0, 0, 72, 56, 18, 7, 0, 0, 0, 0, 88, 36, 18, 7, 0, 0, 0, 0, 56,248, 17, 7, 0, 0, 0, 0,184,251, 17, 7,
- 0, 0, 0, 0, 40,252, 17, 7, 0, 0, 0, 0, 72,251, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-239, 5, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 18, 18,240, 5,104, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,120, 54, 18, 7, 0, 0, 0, 0,120, 54, 18, 7, 0, 0, 0, 0,216, 50, 18, 7, 0, 0, 0, 0, 72, 52, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 50, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 52, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
- 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68,
- 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
- 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0,
- 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,123, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40,122, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0,
+ 0, 0, 0, 4, 10, 0,255, 4,241, 2,255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160, 0, 0, 0,158, 5, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 52, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,216, 50, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0,
- 0,224,187, 68, 0, 0, 0, 0, 0, 0,167, 67,223, 5, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4,
- 10, 0,240, 5, 78, 1,223, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-239, 5, 0, 0, 26, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 78, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 8,125, 29, 7, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17,200, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 53, 18, 7, 0, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 54, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 40, 54, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,136, 1, 0, 0,120, 54, 18, 7, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,184, 53, 18, 7, 0, 0, 0, 0,184, 53, 18, 7, 0, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+136,126, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,142, 29, 7, 0, 0, 0, 0,200,110, 29, 7, 0, 0, 0, 0,
+ 72, 93, 29, 7, 0, 0, 0, 0,184, 93, 29, 7, 0, 0, 0, 0, 56, 90, 29, 7, 0, 0, 0, 0,216, 92, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0, 63, 4, 0, 0, 20, 20,110, 3,199, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,140, 29, 7, 0, 0, 0, 0,200,140, 29, 7, 0, 0, 0, 0,
+120,127, 29, 7, 0, 0, 0, 0, 88,139, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,127, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,232,128, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 91, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,109, 3, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 91, 68, 0, 0,200, 65, 0, 64, 91, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,110, 3, 26, 0,110, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0,146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,110, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,128, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 88,130, 29, 7, 0, 0, 0, 0,120,127, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67,
+ 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,116,104,111,110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 8, 4, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0, 72, 56, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 63, 18, 7, 0, 0, 0, 0,
-232, 49, 18, 7, 0, 0, 0, 0, 8,253, 17, 7, 0, 0, 0, 0,216,250, 17, 7, 0, 0, 0, 0,104,250, 17, 7, 0, 0, 0, 0,
-120,253, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0,167, 3, 0, 0,
- 3, 3,142, 1,187, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 60, 18, 7, 0, 0, 0, 0,
- 24, 60, 18, 7, 0, 0, 0, 0, 56, 57, 18, 7, 0, 0, 0, 0,168, 58, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 56, 57, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168, 58, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,130, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,104,133, 29, 7, 0, 0, 0, 0,232,128, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67,
+ 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0, 6, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+200,131, 29, 7, 0, 0, 0, 0,200,131, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,131, 29, 7, 0, 0, 0, 0,
+214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-168, 58, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,190, 67, 0, 0, 15,195, 0, 0, 0, 0,
-125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,142, 1,161, 0,125, 1,143, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 7, 3, 0, 0,167, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,
- 24, 60, 18, 7, 0, 0, 0, 0,183, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 40, 1, 0, 0,104,133, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,120,136, 29, 7, 0, 0, 0, 0,
+ 88,130, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,
+ 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,
+173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,
+147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,134, 29, 7, 0, 0, 0, 0,216,134, 29, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 88, 1, 0, 0,216,134, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,
+103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,
+103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,
+101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120, 61, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,136, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,232,137, 29, 7, 0, 0, 0, 0,104,133, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,
+ 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 27,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,
+ 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,160, 0,173, 0,160, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,112, 3, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,160, 0,173, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,120, 61, 18, 7, 0, 0, 0, 0,237, 0, 0, 0, 1, 0, 0, 0,
- 14, 0, 0, 0, 14, 0, 0, 0,216, 61, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,216, 61, 18, 7, 0, 0, 0, 0,
-236, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,
-200,189, 18, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,200,189, 18, 7, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,
-200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
-232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
-200,239, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 40,233, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,211, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,210, 18, 7, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,
-200,189, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 63, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72, 56, 18, 7, 0, 0, 0, 0,184,251, 17, 7, 0, 0, 0, 0,248,249, 17, 7, 0, 0, 0, 0,
-232,253, 17, 7, 0, 0, 0, 0,152,252, 17, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,
-105, 1, 0, 0,167, 3, 0, 0, 9, 9,248, 2, 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-216, 66, 18, 7, 0, 0, 0, 0,216, 66, 18, 7, 0, 0, 0, 0,248, 63, 18, 7, 0, 0, 0, 0,104, 65, 18, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,248, 63, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 65, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 62, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 61, 68, 0, 0,200, 65,
- 0,192, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,248, 2,
- 26, 0,248, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,
-105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 26, 0, 0, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,137, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 88,139, 29, 7, 0, 0, 0, 0,120,136, 29, 7, 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68,
+171,170,132,194, 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68, 0, 0, 27,195, 0, 0, 0, 0,189, 2, 0, 0,206, 2, 0, 0,
+ 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0,
+ 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72,255,255,127,127, 10,215, 35, 60, 0, 0, 72, 66,
+ 74, 0, 0, 0, 0, 0, 0, 2, 16, 0, 2, 4, 4, 0,206, 2,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 62, 6, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,206, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,104, 65, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248, 63, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,248,150, 23, 68, 8, 41,100, 68,
- 46,224, 62, 67,233, 15,206, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,248, 2,
- 37, 2,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,
-131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 37, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,139, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,137, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 2, 0, 0,
+ 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68,
+ 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0, 46, 2,173, 0, 46, 2,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 2, 0, 0,216, 66, 18, 7, 0, 0, 0, 0,186, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,
-231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0,243, 1, 0, 0, 4, 0, 0, 0,124, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,200,140, 29, 7, 0, 0, 0, 0,
+197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,160, 0, 0, 0, 72,142, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+136,126, 29, 7, 0, 0, 0, 0,104, 92, 29, 7, 0, 0, 0, 0,200, 89, 29, 7, 0, 0, 0, 0,184, 93, 29, 7, 0, 0, 0, 0,
+ 72, 93, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0, 63, 4, 0, 0,
+ 20, 20,208, 2,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,156, 29, 7, 0, 0, 0, 0,
+136,156, 29, 7, 0, 0, 0, 0, 56,143, 29, 7, 0, 0, 0, 0, 24,155, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 56,143, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168,144, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 52, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 51, 68, 0, 0,200, 65, 0,192, 51, 68, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,208, 2, 26, 0,208, 2, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0,146, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+168,144, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,146, 29, 7, 0, 0, 0, 0, 56,143, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, 0, 0, 0, 0,
+143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, 53, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 24,146, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,149, 29, 7, 0, 0, 0, 0,168,144, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0,
+143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136,147, 29, 7, 0, 0, 0, 0,136,147, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+136,147, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,
+114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,
+114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,149, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 56,152, 29, 7, 0, 0, 0, 0, 24,146, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,150, 29, 7, 0, 0, 0, 0,
+152,150, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,150, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 56,152, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168,153, 29, 7, 0, 0, 0, 0, 40,149, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0,167, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+168,153, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,155, 29, 7, 0, 0, 0, 0, 56,152, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65,
+ 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 18, 0, 0, 0,207, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72,255,255,127,127,
+ 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,208, 2,173, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
+ 24,155, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,153, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0,144, 1,173, 0,144, 1,173, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,
- 88, 70, 18, 7, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,120,141, 18, 7, 0, 0, 0, 0,232,246, 17, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,
+136,156, 29, 7, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,168, 71, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 40, 75, 18, 7, 0, 0, 0, 0,
-136, 79, 18, 7, 0, 0, 0, 0,248, 79, 18, 7, 0, 0, 0, 0, 24,124, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 1, 0, 20, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-168, 71, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0,
-211, 0, 0, 0, 1, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0,168, 71, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
-248, 72, 18, 7, 0, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,248, 72, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0,
-136, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-104, 73, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0,248, 72, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0,
-211, 0, 0, 0, 1, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
-184, 74, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3,234, 3, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 40, 75, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 75, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 24, 72, 18, 7, 0, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-152, 75, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 76, 18, 7, 0, 0, 0, 0, 40, 75, 18, 7, 0, 0, 0, 0,
- 24, 72, 18, 7, 0, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 8, 76, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 76, 18, 7, 0, 0, 0, 0,152, 75, 18, 7, 0, 0, 0, 0,
-136, 72, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-120, 76, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 76, 18, 7, 0, 0, 0, 0, 8, 76, 18, 7, 0, 0, 0, 0,
-104, 73, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-232, 76, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 77, 18, 7, 0, 0, 0, 0,120, 76, 18, 7, 0, 0, 0, 0,
-104, 73, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 88, 77, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 77, 18, 7, 0, 0, 0, 0,232, 76, 18, 7, 0, 0, 0, 0,
-168, 71, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-200, 77, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 78, 18, 7, 0, 0, 0, 0, 88, 77, 18, 7, 0, 0, 0, 0,
-168, 71, 18, 7, 0, 0, 0, 0,104, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 56, 78, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 78, 18, 7, 0, 0, 0, 0,200, 77, 18, 7, 0, 0, 0, 0,
- 72, 74, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-168, 78, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 79, 18, 7, 0, 0, 0, 0, 56, 78, 18, 7, 0, 0, 0, 0,
-216, 73, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 24, 79, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 79, 18, 7, 0, 0, 0, 0,168, 78, 18, 7, 0, 0, 0, 0,
-248, 72, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-136, 79, 18, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 79, 18, 7, 0, 0, 0, 0,
-248, 72, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
-248, 79, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 83, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104, 73, 18, 7, 0, 0, 0, 0, 24, 72, 18, 7, 0, 0, 0, 0,136, 72, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0,
- 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,140, 18, 7, 0, 0, 0, 0,232,140, 18, 7, 0, 0, 0, 0,
-232, 80, 18, 7, 0, 0, 0, 0, 88, 82, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 80, 18, 7, 0, 0, 0, 0,
-215, 0, 0, 0, 1, 0, 0, 0, 88, 82, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,152,158, 29, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
+ 8,238, 29, 7, 0, 0, 0, 0,184, 86, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 82, 83, 99,114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,159, 29, 7, 0, 0, 0, 0,
+152,165, 29, 7, 0, 0, 0, 0, 8,166, 29, 7, 0, 0, 0, 0, 56,175, 29, 7, 0, 0, 0, 0,168,175, 29, 7, 0, 0, 0, 0,
+184,230, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,159, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 88,160, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 88,160, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,160, 29, 7, 0, 0, 0, 0,
+232,159, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+200,160, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,161, 29, 7, 0, 0, 0, 0, 88,160, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,161, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,168,161, 29, 7, 0, 0, 0, 0,200,160, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,161, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+ 24,162, 29, 7, 0, 0, 0, 0, 56,161, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 3, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0, 24,162, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,162, 29, 7, 0, 0, 0, 0,
+168,161, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+136,162, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0, 24,162, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,240, 5,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0,104,163, 29, 7, 0, 0, 0, 0,136,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,163, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+216,163, 29, 7, 0, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1, 1, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,164, 29, 7, 0, 0, 0, 0,
+104,163, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
+ 72,164, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,164, 29, 7, 0, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,248, 2,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,164, 29, 7, 0, 0, 0, 0,
+212, 0, 0, 0, 1, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0, 72,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 5,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,
+152,165, 29, 7, 0, 0, 0, 0,184,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,236, 2, 0, 0, 0, 0,
+ 68, 65, 84, 65, 32, 0, 0, 0,152,165, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 8,166, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,166, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 88,160, 29, 7, 0, 0, 0, 0,200,160, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+120,166, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,166, 29, 7, 0, 0, 0, 0, 8,166, 29, 7, 0, 0, 0, 0,
+ 88,160, 29, 7, 0, 0, 0, 0,168,161, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+232,166, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,167, 29, 7, 0, 0, 0, 0,120,166, 29, 7, 0, 0, 0, 0,
+200,160, 29, 7, 0, 0, 0, 0, 24,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 88,167, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,167, 29, 7, 0, 0, 0, 0,232,166, 29, 7, 0, 0, 0, 0,
+168,161, 29, 7, 0, 0, 0, 0, 24,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+200,167, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,168, 29, 7, 0, 0, 0, 0, 88,167, 29, 7, 0, 0, 0, 0,
+ 24,162, 29, 7, 0, 0, 0, 0,136,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 56,168, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,168, 29, 7, 0, 0, 0, 0,200,167, 29, 7, 0, 0, 0, 0,
+ 56,161, 29, 7, 0, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+168,168, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,169, 29, 7, 0, 0, 0, 0, 56,168, 29, 7, 0, 0, 0, 0,
+232,159, 29, 7, 0, 0, 0, 0,104,163, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 24,169, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,169, 29, 7, 0, 0, 0, 0,168,168, 29, 7, 0, 0, 0, 0,
+168,161, 29, 7, 0, 0, 0, 0,104,163, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+136,169, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,169, 29, 7, 0, 0, 0, 0, 24,169, 29, 7, 0, 0, 0, 0,
+136,162, 29, 7, 0, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+248,169, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,170, 29, 7, 0, 0, 0, 0,136,169, 29, 7, 0, 0, 0, 0,
+248,162, 29, 7, 0, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+104,170, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,170, 29, 7, 0, 0, 0, 0,248,169, 29, 7, 0, 0, 0, 0,
+104,163, 29, 7, 0, 0, 0, 0, 72,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+216,170, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,171, 29, 7, 0, 0, 0, 0,104,170, 29, 7, 0, 0, 0, 0,
+216,163, 29, 7, 0, 0, 0, 0, 72,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 72,171, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,171, 29, 7, 0, 0, 0, 0,216,170, 29, 7, 0, 0, 0, 0,
+248,162, 29, 7, 0, 0, 0, 0,184,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+184,171, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,172, 29, 7, 0, 0, 0, 0, 72,171, 29, 7, 0, 0, 0, 0,
+136,162, 29, 7, 0, 0, 0, 0,184,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 40,172, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,172, 29, 7, 0, 0, 0, 0,184,171, 29, 7, 0, 0, 0, 0,
+ 24,162, 29, 7, 0, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+152,172, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,173, 29, 7, 0, 0, 0, 0, 40,172, 29, 7, 0, 0, 0, 0,
+ 56,161, 29, 7, 0, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 8,173, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,173, 29, 7, 0, 0, 0, 0,152,172, 29, 7, 0, 0, 0, 0,
+184,164, 29, 7, 0, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+120,173, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,173, 29, 7, 0, 0, 0, 0, 8,173, 29, 7, 0, 0, 0, 0,
+168,161, 29, 7, 0, 0, 0, 0,152,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+232,173, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,174, 29, 7, 0, 0, 0, 0,120,173, 29, 7, 0, 0, 0, 0,
+136,162, 29, 7, 0, 0, 0, 0,152,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 88,174, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,174, 29, 7, 0, 0, 0, 0,232,173, 29, 7, 0, 0, 0, 0,
+ 72,164, 29, 7, 0, 0, 0, 0,152,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+200,174, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,175, 29, 7, 0, 0, 0, 0, 88,174, 29, 7, 0, 0, 0, 0,
+104,163, 29, 7, 0, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+ 56,175, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,174, 29, 7, 0, 0, 0, 0,
+232,159, 29, 7, 0, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+168,175, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,179, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+168,161, 29, 7, 0, 0, 0, 0, 88,160, 29, 7, 0, 0, 0, 0,200,160, 29, 7, 0, 0, 0, 0, 24,162, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 93, 0, 1, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,237, 29, 7, 0, 0, 0, 0,120,237, 29, 7, 0, 0, 0, 0,
+152,176, 29, 7, 0, 0, 0, 0, 8,178, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,176, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 8,178, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68,
0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,
0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 82, 18, 7, 0, 0, 0, 0,
-215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 80, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69,
- 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0,
- 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
- 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200, 83, 18, 7, 0, 0, 0, 0,
-214, 0, 0, 0, 1, 0, 0, 0, 24,124, 18, 7, 0, 0, 0, 0,248, 79, 18, 7, 0, 0, 0, 0,168, 71, 18, 7, 0, 0, 0, 0,
-104, 73, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,184, 74, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 6, 6,200, 3,234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,168, 90, 18, 7, 0, 0, 0, 0,168, 90, 18, 7, 0, 0, 0, 0,184, 84, 18, 7, 0, 0, 0, 0,
- 56, 89, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 84, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
- 40, 86, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0,114, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0,192,113, 68, 0, 0,200, 65, 0,192,113, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 0, 10, 0,200, 3, 26, 0,200, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-200, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 86, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
- 56, 89, 18, 7, 0, 0, 0, 0,184, 84, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 67, 0,192,115,196, 0, 0, 0, 0,
- 0, 0, 0, 0,254,255, 74, 67,254,255,115,196, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0,
- 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 4, 6, 0,220, 0,208, 3,203, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-220, 0,208, 3, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 87, 18, 7, 0, 0, 0, 0,
-152, 87, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 87, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,236, 3, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,178, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,176, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68,
+ 0, 0, 0, 0, 0, 0, 28, 66, 0, 0, 0, 0, 0,192,237, 68, 0, 0, 0, 0, 0, 0,134, 66,110, 7, 0, 0,127, 7, 0, 0,
+ 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,109, 7, 0, 0,
+ 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 67, 0,110, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0,235, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,152,255,202, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,179, 29, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0, 8,204, 29, 7, 0, 0, 0, 0,168,175, 29, 7, 0, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0,
+184,164, 29, 7, 0, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0, 56,161, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 4, 4,142, 1,236, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,200,202, 29, 7, 0, 0, 0, 0,200,202, 29, 7, 0, 0, 0, 0,104,180, 29, 7, 0, 0, 0, 0,
+216,181, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,180, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+216,181, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+241, 5, 0, 0,126, 7, 0, 0,210, 2, 0, 0,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+142, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 56, 89, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 86, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 51, 51, 43,191,154,153,213, 63, 51, 51,131,191,154,153, 1, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,181, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,104,180, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,198, 67, 0, 0, 61,196, 0, 0, 0, 0,
+ 0, 0, 0, 0,254,127,190, 67,254,127, 52,196, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,
+ 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,142, 1,210, 2,125, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+142, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,183, 29, 7, 0, 0, 0, 0,
+ 40,201, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,183, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+232,184, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,236, 2, 0, 0, 0, 0, 0, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0,199, 3, 0, 0, 26, 0, 0, 0,233, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,220,255,124, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 33, 0, 0,
-168, 90, 18, 7, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65,
- 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+232,184, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,186, 29, 7, 0, 0, 0, 0, 72,183, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,124, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,186, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+ 40,188, 29, 7, 0, 0, 0, 0,232,184, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,111,255,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+ 40,188, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,189, 29, 7, 0, 0, 0, 0,136,186, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,124, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200,189, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+104,191, 29, 7, 0, 0, 0, 0, 40,188, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 58,254,124, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+104,191, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,193, 29, 7, 0, 0, 0, 0,200,189, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110,
+ 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110,
+ 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,
+108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8,193, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+168,194, 29, 7, 0, 0, 0, 0,104,191, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10,254,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+168,194, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,196, 29, 7, 0, 0, 0, 0, 8,193, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,
+109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,
+109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,196, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+232,197, 29, 7, 0, 0, 0, 0,168,194, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,218,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+232,197, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,199, 29, 7, 0, 0, 0, 0, 72,196, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,199, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
+ 40,201, 29, 7, 0, 0, 0, 0,232,197, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40,253,124, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,
+ 40,201, 29, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,199, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,200,202, 29, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+ 8,204, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,217, 29, 7, 0, 0, 0, 0,120,179, 29, 7, 0, 0, 0, 0,
+ 72,164, 29, 7, 0, 0, 0, 0,152,165, 29, 7, 0, 0, 0, 0,136,162, 29, 7, 0, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 1, 1,247, 2, 63, 2, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,215, 29, 7, 0, 0, 0, 0,232,215, 29, 7, 0, 0, 0, 0,
+248,204, 29, 7, 0, 0, 0, 0,184,210, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,204, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,104,206, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 2, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 61, 68, 0, 0,200, 65, 0,128, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,247, 2, 26, 0,247, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,206, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,216,207, 29, 7, 0, 0, 0, 0,248,204, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,
+ 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,249, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 37, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,207, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 72,209, 29, 7, 0, 0, 0, 0,104,206, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67,
+ 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,209, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0,184,210, 29, 7, 0, 0, 0, 0,216,207, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
+ 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0,
+ 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
+ 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,210, 29, 7, 0, 0, 0, 0,
+216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,209, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40,212, 29, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 40,212, 29, 7, 0, 0, 0, 0,
+174, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,141,193, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,
+225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
+ 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,
+166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,
+248,209,213, 64, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,166,235,149, 62,
+ 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
+ 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,160, 32,182,252, 5,136,190, 43, 33, 3, 62,
+235,135, 23, 63, 0, 0, 96, 53,215,104, 25,196,133,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,158, 87,135,195,
+205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
+ 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+214,211,111,193, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63,166,235,149, 62,
+ 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
+ 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5210,14 +4891,56 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0,107,227, 29, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
+255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66,
+ 86,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,
+232,215, 29, 7, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62,
+ 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60,
+ 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
+ 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,217, 29, 7, 0, 0, 0, 0,
+215, 0, 0, 0, 1, 0, 0, 0,248,223, 29, 7, 0, 0, 0, 0, 8,204, 29, 7, 0, 0, 0, 0,232,159, 29, 7, 0, 0, 0, 0,
+104,163, 29, 7, 0, 0, 0, 0,216,163, 29, 7, 0, 0, 0, 0,248,162, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 18, 18,240, 5,104, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 40,222, 29, 7, 0, 0, 0, 0, 40,222, 29, 7, 0, 0, 0, 0,136,218, 29, 7, 0, 0, 0, 0,
+248,219, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,218, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+248,219, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,160, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,219, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,136,218, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0, 0, 51, 67,
+ 0, 0, 0, 0, 0,224,187, 68, 0, 0, 0, 0, 0, 0,167, 67,223, 5, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3,
+ 2, 0, 0, 4, 10, 0,240, 5, 78, 1,223, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,221, 29, 7, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,216,221, 29, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,216,221, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0, 40,222, 29, 7, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,221, 29, 7, 0, 0, 0, 0,104,221, 29, 7, 0, 0, 0, 0, 62, 62, 62, 32,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5225,23 +4948,84 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,116,104,
+111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0,
+ 8, 4, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248,223, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,230, 29, 7,
+ 0, 0, 0, 0,152,217, 29, 7, 0, 0, 0, 0,184,164, 29, 7, 0, 0, 0, 0,136,162, 29, 7, 0, 0, 0, 0, 24,162, 29, 7,
+ 0, 0, 0, 0, 40,165, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0,
+167, 3, 0, 0, 3, 3,142, 1,187, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,227, 29, 7,
+ 0, 0, 0, 0,200,227, 29, 7, 0, 0, 0, 0,232,224, 29, 7, 0, 0, 0, 0, 88,226, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 1, 0, 0,232,224, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 88,226, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,237, 2, 0, 0,
+ 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 1, 0, 0, 88,226, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,224, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,190, 67, 0, 0, 15,195,
+ 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,142, 1,161, 0,125, 1,
+143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 7, 3, 0, 0,
+167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,161, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 1, 0, 0,200,227, 29, 7, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,229, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 40,229, 29, 7, 0, 0, 0, 0,238, 0, 0, 0,
+ 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,136,229, 29, 7, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,136,229, 29, 7,
+ 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 19, 0, 0, 0,
+ 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 21, 0, 1, 0,
+ 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,128, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0,152,137, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 56,192, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0,120,151, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136,173, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0,216,144, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,123, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 88,122, 30, 7, 0, 0, 0, 0, 21, 0, 0, 0,
+ 1, 0, 1, 0,120,101, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,230, 29, 7, 0, 0, 0, 0,215, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,223, 29, 7, 0, 0, 0, 0,104,163, 29, 7, 0, 0, 0, 0,168,161, 29, 7,
+ 0, 0, 0, 0,152,165, 29, 7, 0, 0, 0, 0, 72,164, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+247, 2, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 9, 9,248, 2, 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,136,234, 29, 7, 0, 0, 0, 0,136,234, 29, 7, 0, 0, 0, 0,168,231, 29, 7, 0, 0, 0, 0, 24,233, 29, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,231, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,233, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 62, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 61, 68,
+ 0, 0,200, 65, 0,192, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
+ 10, 0,248, 2, 26, 0,248, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+247, 2, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 26, 0,
+ 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,233, 29, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,168,231, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,248,150, 23, 68,
+ 8, 41,100, 68, 46,224, 62, 67,233, 15,206, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4,
+ 10, 0,248, 2, 37, 2,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+247, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2, 37, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0,136,234, 29, 7, 0, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+205,204,204, 61,231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0,243, 1, 0, 0, 4, 0, 0, 0,
+124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5257,20 +5041,130 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,
+ 8, 1, 0, 0, 8,238, 29, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40, 53, 30, 7, 0, 0, 0, 0,152,158, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105,116,105,110,103,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,239, 29, 7, 0, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0,216,242, 29, 7,
+ 0, 0, 0, 0, 56,247, 29, 7, 0, 0, 0, 0,168,247, 29, 7, 0, 0, 0, 0,200, 35, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 32, 0, 0, 0, 88,239, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,239, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,239, 29, 7,
+ 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,240, 29, 7, 0, 0, 0, 0, 88,239, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,240, 29, 7, 0, 0, 0, 0,212, 0, 0, 0,
+ 1, 0, 0, 0,168,240, 29, 7, 0, 0, 0, 0,200,239, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4,
+ 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,240, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,241, 29, 7,
+ 0, 0, 0, 0, 56,240, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 32, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0,168,240, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,241, 29, 7,
+ 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0,212, 0, 0, 0,
+ 1, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3,234, 3,
+ 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,216,242, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,243, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,200,239, 29, 7, 0, 0, 0, 0, 56,240, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0, 72,243, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,243, 29, 7, 0, 0, 0, 0,216,242, 29, 7,
+ 0, 0, 0, 0,200,239, 29, 7, 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,184,243, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,244, 29, 7, 0, 0, 0, 0, 72,243, 29, 7,
+ 0, 0, 0, 0, 56,240, 29, 7, 0, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0, 40,244, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,244, 29, 7, 0, 0, 0, 0,184,243, 29, 7,
+ 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,152,244, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,245, 29, 7, 0, 0, 0, 0, 40,244, 29, 7,
+ 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0, 8,245, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,245, 29, 7, 0, 0, 0, 0,152,244, 29, 7,
+ 0, 0, 0, 0, 88,239, 29, 7, 0, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,120,245, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,245, 29, 7, 0, 0, 0, 0, 8,245, 29, 7,
+ 0, 0, 0, 0, 88,239, 29, 7, 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,232,245, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,246, 29, 7, 0, 0, 0, 0,120,245, 29, 7,
+ 0, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0, 88,246, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,246, 29, 7, 0, 0, 0, 0,232,245, 29, 7,
+ 0, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,200,246, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,247, 29, 7, 0, 0, 0, 0, 88,246, 29, 7,
+ 0, 0, 0, 0,168,240, 29, 7, 0, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0, 56,247, 29, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,246, 29, 7,
+ 0, 0, 0, 0,168,240, 29, 7, 0, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+160, 0, 0, 0,168,247, 29, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,251, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0,200,239, 29, 7, 0, 0, 0, 0, 56,240, 29, 7, 0, 0, 0, 0,136,241, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7,
+ 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 52, 30, 7, 0, 0, 0, 0,152, 52, 30, 7,
+ 0, 0, 0, 0,152,248, 29, 7, 0, 0, 0, 0, 8,250, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,248, 29, 7,
+ 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,250, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,250, 29, 7,
+ 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,248, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,
+129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
+111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,251, 29, 7,
+ 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200, 35, 30, 7, 0, 0, 0, 0,168,247, 29, 7, 0, 0, 0, 0, 88,239, 29, 7,
+ 0, 0, 0, 0, 24,241, 29, 7, 0, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 6, 6,200, 3,234, 3, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 2, 30, 7, 0, 0, 0, 0, 88, 2, 30, 7, 0, 0, 0, 0,104,252, 29, 7,
+ 0, 0, 0, 0,232, 0, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,252, 29, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0,216,253, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0,114, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0,192,113, 68, 0, 0,200, 65, 0,192,113, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,200, 3, 26, 0,200, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,200, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,253, 29, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0,232, 0, 30, 7, 0, 0, 0, 0,104,252, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 67, 0,192,115,196,
+ 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,254,255,115,196, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,
+207, 3, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,
+207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,208, 3,203, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,220, 0,208, 3, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,255, 29, 7,
+ 0, 0, 0, 0, 72,255, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,255, 29, 7, 0, 0, 0, 0,214, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,152,255,202, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 1, 0, 0,232, 0, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,253, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 51, 51, 43,191,154,153,213, 63, 51, 51,131,191,
+154,153, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,236, 2, 0, 0, 0, 0, 0, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0,199, 3, 0, 0, 26, 0, 0, 0,
+233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2,208, 3, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 33, 0, 0, 88, 2, 30, 7, 0, 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5400,102 +5294,27 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 24,124, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 83, 18, 7, 0, 0, 0, 0,
-184, 74, 18, 7, 0, 0, 0, 0, 72, 74, 18, 7, 0, 0, 0, 0,216, 73, 18, 7, 0, 0, 0, 0,248, 72, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 1, 1,182, 3,234, 3, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,139, 18, 7, 0, 0, 0, 0, 56,139, 18, 7, 0, 0, 0, 0,
- 8,125, 18, 7, 0, 0, 0, 0, 8,134, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,125, 18, 7, 0, 0, 0, 0,
-215, 0, 0, 0, 1, 0, 0, 0,120,126, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,109, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181, 3, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0, 64,109, 68, 0, 0,200, 65, 0, 64,109, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,182, 3, 26, 0,182, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,182, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,126, 18, 7, 0, 0, 0, 0,
-215, 0, 0, 0, 1, 0, 0, 0,136,129, 18, 7, 0, 0, 0, 0, 8,125, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67,
- 0, 0, 86,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 86,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
- 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 88, 3,143, 0, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0,146, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 88, 3, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-232,127, 18, 7, 0, 0, 0, 0,232,127, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,127, 18, 7, 0, 0, 0, 0,
-213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,
-100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,
-100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,136,129, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,132, 18, 7, 0, 0, 0, 0,
-120,126, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0,242,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67,
- 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,
-120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0,
- 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0,
- 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,130, 18, 7, 0, 0, 0, 0,248,130, 18, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 88, 1, 0, 0,248,130, 18, 7, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
- 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
- 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,101,114, 97,116,111,114,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,132, 18, 7, 0, 0, 0, 0,
-215, 0, 0, 0, 1, 0, 0, 0, 8,134, 18, 7, 0, 0, 0, 0,136,129, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
- 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,255,191,126,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0,
- 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
- 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 13, 4,163, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,134, 18, 7, 0, 0, 0, 0,
-215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,132, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,105, 4, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 22, 3,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120,135, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,120,135, 18, 7, 0, 0, 0, 0,
-173, 0, 0, 0, 1, 0, 0, 0, 72,246,172, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
- 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,160, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,
-166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,188,173, 54, 64,136, 95,161,191,
-147,231,198, 63, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,189,188,157, 63,140,225, 88, 62,
- 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
-100, 98, 82, 64, 0, 25, 95, 64,121, 92,155, 62,151,198, 44, 63,192,214, 32,188, 0, 0, 40,180,195, 15,188,190,132, 75, 53, 62,
-216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64,181,148,248,192,203,247,159,192,233, 74, 87, 65,247, 46,190,192,
- 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
- 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 25, 95,192, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,189,188,157, 63,140,225, 88, 62,
- 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
-100, 98, 82, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5503,338 +5322,82 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 0, 25, 95, 64, 0, 25, 95, 64,
- 0, 0, 0, 0, 0, 0, 0, 0,114,145,245, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
-255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66,
- 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,
- 56,139, 18, 7, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62,
- 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61,
- 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,120,141, 18, 7, 0, 0, 0, 0,
-210, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 70, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-200,142, 18, 7, 0, 0, 0, 0,152,147, 18, 7, 0, 0, 0, 0, 8,148, 18, 7, 0, 0, 0, 0,120,155, 18, 7, 0, 0, 0, 0,
-232,155, 18, 7, 0, 0, 0, 0, 72,181, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0,
-211, 0, 0, 0, 1, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
-168,143, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0,
- 56,143, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 24,144, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,
-211, 0, 0, 0, 1, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
-104,145, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0,
-248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-216,145, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0,
-211, 0, 0, 0, 1, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 48, 2,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,
- 40,147, 18, 7, 0, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,152,147, 18, 7, 0, 0, 0, 0,
-184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-152,147, 18, 7, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,148, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,120,148, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0,
-168,143, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,148, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,232,148, 18, 7, 0, 0, 0, 0, 8,148, 18, 7, 0, 0, 0, 0, 56,143, 18, 7, 0, 0, 0, 0,
-136,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,148, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 88,149, 18, 7, 0, 0, 0, 0,120,148, 18, 7, 0, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0,
-248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,149, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,200,149, 18, 7, 0, 0, 0, 0,232,148, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,
-248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,149, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 56,150, 18, 7, 0, 0, 0, 0, 88,149, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0,
-104,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,150, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,168,150, 18, 7, 0, 0, 0, 0,200,149, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0,
-216,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,150, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 24,151, 18, 7, 0, 0, 0, 0, 56,150, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,
- 72,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,151, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,136,151, 18, 7, 0, 0, 0, 0,168,150, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0,
-184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,151, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,248,151, 18, 7, 0, 0, 0, 0, 24,151, 18, 7, 0, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,
- 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,151, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,104,152, 18, 7, 0, 0, 0, 0,136,151, 18, 7, 0, 0, 0, 0, 72,146, 18, 7, 0, 0, 0, 0,
- 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,152, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,216,152, 18, 7, 0, 0, 0, 0,248,151, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0,
-152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,152, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 72,153, 18, 7, 0, 0, 0, 0,104,152, 18, 7, 0, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0,
-152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,153, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,184,153, 18, 7, 0, 0, 0, 0,216,152, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0,
-152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,153, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 40,154, 18, 7, 0, 0, 0, 0, 72,153, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0,
- 24,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,154, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,152,154, 18, 7, 0, 0, 0, 0,184,153, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0,
- 72,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,154, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 8,155, 18, 7, 0, 0, 0, 0, 40,154, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0,
- 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,155, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0,120,155, 18, 7, 0, 0, 0, 0,152,154, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,
-184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,155, 18, 7, 0, 0, 0, 0,
-212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,155, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0,
-184,146, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,155, 18, 7, 0, 0, 0, 0,
-214, 0, 0, 0, 1, 0, 0, 0,184,159, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,
- 56,143, 18, 7, 0, 0, 0, 0,168,143, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56,189, 18, 7, 0, 0, 0, 0, 56,189, 18, 7, 0, 0, 0, 0,216,156, 18, 7, 0, 0, 0, 0,
- 72,158, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,156, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
- 72,158, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,158, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,216,156, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3,
- 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,159, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
-168,164, 18, 7, 0, 0, 0, 0,232,155, 18, 7, 0, 0, 0, 0,200,142, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0,
-152,147, 18, 7, 0, 0, 0, 0, 24,144, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
- 0, 0, 0, 0, 67, 0, 0, 0, 15, 15,241, 4, 68, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-136,163, 18, 7, 0, 0, 0, 0,136,163, 18, 7, 0, 0, 0, 0,168,160, 18, 7, 0, 0, 0, 0, 24,162, 18, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,168,160, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,162, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65,
- 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4,
- 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 24,162, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-168,160, 18, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67,
- 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66,
- 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,241, 4,
- 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
- 26, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 42, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,208, 0, 0, 0,136,163, 18, 7, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168,164, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
-152,172, 18, 7, 0, 0, 0, 0,184,159, 18, 7, 0, 0, 0, 0,216,145, 18, 7, 0, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,
-104,145, 18, 7, 0, 0, 0, 0,152,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
- 69, 0, 0, 0, 91, 1, 0, 0, 8, 8,241, 4, 23, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88,171, 18, 7, 0, 0, 0, 0, 88,171, 18, 7, 0, 0, 0, 0,152,165, 18, 7, 0, 0, 0, 0,232,169, 18, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,152,165, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,167, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 26, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65,
- 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4,
- 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,
- 69, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 8,167, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,168, 18, 7, 0, 0, 0, 0,
-152,165, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,125,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67,
- 1, 0,125,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,
-253, 0,203, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,240, 4, 0, 0,
- 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,253, 0, 0, 0, 4, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,120,168, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,169, 18, 7, 0, 0, 0, 0,
- 8,167, 18, 7, 0, 0, 0, 0, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0,112,196, 0, 0,112, 68,
- 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 0, 0,
- 91, 1, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,232,169, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120,168, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67,
- 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63,
- 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 21, 4,
-253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 0, 0,
- 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4,253, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,240, 0, 0, 0, 88,171, 18, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,172, 18, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,
- 72,181, 18, 7, 0, 0, 0, 0,168,164, 18, 7, 0, 0, 0, 0,184,146, 18, 7, 0, 0, 0, 0,136,144, 18, 7, 0, 0, 0, 0,
- 72,146, 18, 7, 0, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0,
- 93, 1, 0, 0,194, 2, 0, 0, 2, 2, 48, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72,179, 18, 7, 0, 0, 0, 0, 72,179, 18, 7, 0, 0, 0, 0,136,173, 18, 7, 0, 0, 0, 0,216,177, 18, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,136,173, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,174, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65,154,216, 65, 55, 0, 0, 12, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 11, 68, 0, 0,200, 65,
- 0,192, 11, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 48, 2,
- 26, 0, 48, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0,
- 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 26, 0, 0, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,248,174, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,176, 18, 7, 0, 0, 0, 0,
-136,173, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67,
- 0, 0,157,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,
- 76, 1,200, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,
-119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 76, 1, 0, 0, 2, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,104,176, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,177, 18, 7, 0, 0, 0, 0,
-248,174, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 47, 2, 0, 0,
-119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
- 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,216,177, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104,176, 18, 7, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67,
- 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0,111, 18,131, 58,111, 18,131, 58,
- 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 87, 1,
- 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 47, 2, 0, 0,
-119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 1, 76, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,240, 0, 0, 0, 72,179, 18, 7, 0, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-136,180, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0,136,180, 18, 7, 0, 0, 0, 0, 37, 1, 0, 0, 1, 0, 0, 0,
-200,189, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,181, 18, 7, 0, 0, 0, 0,
-214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,172, 18, 7, 0, 0, 0, 0, 40,147, 18, 7, 0, 0, 0, 0,
- 72,146, 18, 7, 0, 0, 0, 0,248,144, 18, 7, 0, 0, 0, 0,104,145, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 8, 8,192, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248,187, 18, 7, 0, 0, 0, 0,248,187, 18, 7, 0, 0, 0, 0, 56,182, 18, 7, 0, 0, 0, 0,
-136,186, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,182, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
-168,183, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0, 48, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0,192, 47, 68, 0, 0,200, 65, 0,192, 47, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 0, 10, 0,192, 2, 26, 0,192, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-192, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,183, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
- 24,185, 18, 7, 0, 0, 0, 0, 56,182, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-240, 4, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,185, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
-136,186, 18, 7, 0, 0, 0, 0,168,183, 18, 7, 0, 0, 0, 0, 0, 0,240,195, 0, 0,240, 67, 0, 0,135,195, 0, 0,135, 67,
-238, 33,143,196,238, 33,143, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, 0, 0, 0, 0, 75, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 4, 0, 0,192, 2, 76, 1,192, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 2, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-192, 2, 76, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,186, 18, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24,185, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65,
- 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0,
- 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0,
- 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,248,187, 18, 7, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0,216, 11, 0, 0,200,189, 18, 7, 0, 0, 0, 0,
-171, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0,116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,201, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0,120,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-184,202, 18, 7, 0, 0, 0, 0,152,203, 18, 7, 0, 0, 0, 0,184,202, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,204, 18, 7, 0, 0, 0, 0, 8,245, 55, 8, 0, 0, 0, 0,
- 17, 2, 24, 0, 90, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 68,172, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 6, 0, 50, 0,
-141, 0,128, 7, 56, 4, 8, 0, 8, 0, 24, 0, 17, 0, 0, 0, 90, 0, 1, 0, 81, 0, 0, 0, 23, 0, 33, 0, 2, 0, 0, 0,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248,207, 18, 7, 0, 0, 0, 0,248,207, 18, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5861,26 +5424,102 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+160, 0, 0, 0,200, 35, 30, 7, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,251, 29, 7,
+ 0, 0, 0, 0,104,242, 29, 7, 0, 0, 0, 0,248,241, 29, 7, 0, 0, 0, 0,136,241, 29, 7, 0, 0, 0, 0,168,240, 29, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 1, 1,182, 3,
+234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 50, 30, 7, 0, 0, 0, 0,232, 50, 30, 7,
+ 0, 0, 0, 0,184, 36, 30, 7, 0, 0, 0, 0,184, 45, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 36, 30, 7,
+ 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40, 38, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,109, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+181, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64,109, 68, 0, 0,200, 65, 0, 64,109, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,182, 3, 26, 0,182, 3, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 38, 30, 7,
+ 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 56, 41, 30, 7, 0, 0, 0, 0,184, 36, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32, 67, 0, 0, 86,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 86,196, 0, 0, 0, 0,143, 0, 0, 0,
+160, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
+142, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 88, 3,143, 0, 88, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0,146, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 88, 3, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,152, 39, 30, 7, 0, 0, 0, 0,152, 39, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 39, 30, 7,
+ 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101,
+ 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101,
+ 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 5, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 41, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 72, 44, 30, 7,
+ 0, 0, 0, 0, 40, 38, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0,242,194, 0, 0, 0, 0, 0, 0, 0, 0,
+231,102, 16, 67, 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,
+142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,
+104, 4, 0, 0, 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0,
+ 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 42, 30, 7, 0, 0, 0, 0,168, 42, 30, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168, 42, 30, 7, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
+ 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
+ 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,101,114,
+ 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,
+144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 44, 30, 7,
+ 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184, 45, 30, 7, 0, 0, 0, 0, 56, 41, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 35, 67, 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,255,191,126,196, 0, 0, 0, 0,163, 0, 0, 0,
+180, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
+162, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 13, 4,163, 0,251, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 45, 30, 7,
+ 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 44, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 4, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 3,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 47, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 40, 47, 30, 7,
+ 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 72,246,172, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0,
+ 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,
+143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,160, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,
+142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,188,173, 54, 64,
+136, 95,161,191,147,231,198, 63, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,189,188,157, 63,
+140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0,
+ 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64,121, 92,155, 62,151,198, 44, 63,192,214, 32,188, 0, 0, 40,180,195, 15,188,190,
+132, 75, 53, 62,216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64,181,148,248,192,203,247,159,192,233, 74, 87, 65,
+247, 46,190,192, 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,
+143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,189,188,157, 63,
+140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0,
+ 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5888,462 +5527,375 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 0, 25, 95, 64,
+ 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0,114,145,245, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 96, 1, 0, 0,232, 50, 30, 7, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
+205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,
-205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95,
- 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63,
-102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,133, 15, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 44, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104, 57,237, 6, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,205,204,204, 61,
-154,153,153, 62,205,204, 76, 62,219, 15, 73, 63,102,102,102, 63, 0, 0, 0, 64,154,153, 25, 63, 0, 0, 64, 65,102,102,166, 63,
- 0, 0, 0, 65, 0, 0,160, 65, 6, 0, 0, 0, 0, 0,192, 64, 0, 0,128, 63, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0,
- 32, 0, 0, 0, 32, 0, 1, 0,128, 0, 5, 0,218, 0, 0, 0, 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 64,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,128, 0, 0, 0,232,201, 18, 7, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,
+205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 40, 53, 30, 7,
+ 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,238, 29, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-184,202, 18, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, 40,203, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 82, 2,204, 1,232,225, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 40,203, 18, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0,152,203, 18, 7, 0, 0, 0, 0,184,202, 18, 7, 0, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,255, 2,213, 2, 40,233, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-152,203, 18, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,203, 18, 7, 0, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,131, 0, 29, 2, 72,219, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65,240, 1, 0, 0,
- 8,204, 18, 7, 0, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 72,206, 18, 7, 0, 0, 0, 0,200,206, 18, 7, 0, 0, 0, 0,
- 72,207, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0,205,204, 76, 63, 0, 0,180, 66,
- 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 1, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66,
- 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66,
- 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66,
- 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61,102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0,
-204,197,121, 63, 0, 0, 0, 63, 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 56, 0, 0, 0, 72,206, 18, 7, 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 0, 0, 0,200,206, 18, 7, 0, 0, 0, 0,
-164, 0, 0, 0, 1, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,255,128, 1, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 96, 0, 0, 0, 72,207, 18, 7, 0, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128, 1, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
-155, 9, 25, 67,190, 23,237, 64, 75, 1,147, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,
-248,207, 18, 7, 0, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 82,101,110,100,101,114, 76, 97,121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,127, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,200, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0,
- 22, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,120, 54, 30, 7, 0, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0,184, 59, 30, 7, 0, 0, 0, 0, 40, 67, 30, 7,
+ 0, 0, 0, 0,152, 67, 30, 7, 0, 0, 0, 0,248, 92, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 54, 30, 7,
+ 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 54, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 54, 30, 7, 0, 0, 0, 0,212, 0, 0, 0,
+ 1, 0, 0, 0, 88, 55, 30, 7, 0, 0, 0, 0,120, 54, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2,
+ 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 55, 30, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 55, 30, 7,
+ 0, 0, 0, 0,232, 54, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65,
+ 32, 0, 0, 0,200, 55, 30, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 56, 30, 7, 0, 0, 0, 0, 88, 55, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 56, 30, 7,
+ 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0,200, 55, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0,212, 0, 0, 0,
+ 1, 0, 0, 0, 24, 57, 30, 7, 0, 0, 0, 0, 56, 56, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2,
+ 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 57, 30, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 57, 30, 7,
+ 0, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 32, 0, 0, 0,136, 57, 30, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 57, 30, 7, 0, 0, 0, 0, 24, 57, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 57, 30, 7,
+ 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0,136, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 48, 2,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0,212, 0, 0, 0,
+ 1, 0, 0, 0,216, 58, 30, 7, 0, 0, 0, 0,248, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 58, 30, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72, 59, 30, 7,
+ 0, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 32, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 58, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 59, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 60, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 54, 30, 7,
+ 0, 0, 0, 0, 88, 55, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 60, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 60, 30, 7, 0, 0, 0, 0,184, 59, 30, 7, 0, 0, 0, 0,232, 54, 30, 7,
+ 0, 0, 0, 0, 56, 56, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 60, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 61, 30, 7, 0, 0, 0, 0, 40, 60, 30, 7, 0, 0, 0, 0, 88, 55, 30, 7,
+ 0, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 61, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 61, 30, 7, 0, 0, 0, 0,152, 60, 30, 7, 0, 0, 0, 0, 56, 56, 30, 7,
+ 0, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 61, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 61, 30, 7, 0, 0, 0, 0, 8, 61, 30, 7, 0, 0, 0, 0,168, 56, 30, 7,
+ 0, 0, 0, 0, 24, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 61, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 62, 30, 7, 0, 0, 0, 0,120, 61, 30, 7, 0, 0, 0, 0,120, 54, 30, 7,
+ 0, 0, 0, 0,136, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 62, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 62, 30, 7, 0, 0, 0, 0,232, 61, 30, 7, 0, 0, 0, 0, 56, 56, 30, 7,
+ 0, 0, 0, 0,248, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 62, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 63, 30, 7, 0, 0, 0, 0, 88, 62, 30, 7, 0, 0, 0, 0,136, 57, 30, 7,
+ 0, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 63, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168, 63, 30, 7, 0, 0, 0, 0,200, 62, 30, 7, 0, 0, 0, 0,104, 58, 30, 7,
+ 0, 0, 0, 0,216, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 63, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 64, 30, 7, 0, 0, 0, 0, 56, 63, 30, 7, 0, 0, 0, 0,248, 57, 30, 7,
+ 0, 0, 0, 0,216, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 64, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 64, 30, 7, 0, 0, 0, 0,168, 63, 30, 7, 0, 0, 0, 0, 24, 57, 30, 7,
+ 0, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 64, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 64, 30, 7, 0, 0, 0, 0, 24, 64, 30, 7, 0, 0, 0, 0,200, 55, 30, 7,
+ 0, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 64, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104, 65, 30, 7, 0, 0, 0, 0,136, 64, 30, 7, 0, 0, 0, 0,136, 57, 30, 7,
+ 0, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 65, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 65, 30, 7, 0, 0, 0, 0,248, 64, 30, 7, 0, 0, 0, 0,120, 54, 30, 7,
+ 0, 0, 0, 0,200, 55, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 65, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72, 66, 30, 7, 0, 0, 0, 0,104, 65, 30, 7, 0, 0, 0, 0,168, 56, 30, 7,
+ 0, 0, 0, 0,248, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 66, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 66, 30, 7, 0, 0, 0, 0,216, 65, 30, 7, 0, 0, 0, 0, 24, 57, 30, 7,
+ 0, 0, 0, 0,216, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 66, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 67, 30, 7, 0, 0, 0, 0, 72, 66, 30, 7, 0, 0, 0, 0, 56, 56, 30, 7,
+ 0, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 67, 30, 7,
+ 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 66, 30, 7, 0, 0, 0, 0, 24, 57, 30, 7,
+ 0, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152, 67, 30, 7,
+ 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 71, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 30, 7,
+ 0, 0, 0, 0,232, 54, 30, 7, 0, 0, 0, 0, 88, 55, 30, 7, 0, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,100, 30, 7, 0, 0, 0, 0,232,100, 30, 7, 0, 0, 0, 0,136, 68, 30, 7,
+ 0, 0, 0, 0,248, 69, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 68, 30, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0,248, 69, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 69, 30, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 68, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0,
+ 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104, 71, 30, 7, 0, 0, 0, 0,215, 0, 0, 0,
+ 1, 0, 0, 0, 88, 76, 30, 7, 0, 0, 0, 0,152, 67, 30, 7, 0, 0, 0, 0,120, 54, 30, 7, 0, 0, 0, 0,136, 57, 30, 7,
+ 0, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0,200, 55, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 15, 15,241, 4, 68, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 56, 75, 30, 7, 0, 0, 0, 0, 56, 75, 30, 7, 0, 0, 0, 0, 88, 72, 30, 7, 0, 0, 0, 0,200, 73, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 72, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200, 73, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68,
+ 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
+ 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0,
+ 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64,
- 0, 0, 0, 63, 0, 0, 0, 66, 0, 0,144, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 16, 2, 0, 0,184,211, 18, 7, 0, 0, 0, 0,
- 36, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,
-154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 24,214, 18, 7, 0, 0, 0, 0, 2, 0, 0, 0, 46, 26,128, 63,
- 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 11, 3, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 73, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 88, 72, 30, 7, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,
+246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4,
+ 8, 0,241, 4, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 0, 0, 26, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 42, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 56, 75, 30, 7, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8,216, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
- 24,214, 18, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,
-168,215, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 76, 30, 7, 0, 0, 0, 0,215, 0, 0, 0,
+ 1, 0, 0, 0, 72, 84, 30, 7, 0, 0, 0, 0,104, 71, 30, 7, 0, 0, 0, 0,136, 57, 30, 7, 0, 0, 0, 0,104, 58, 30, 7,
+ 0, 0, 0, 0, 24, 57, 30, 7, 0, 0, 0, 0, 72, 59, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 0, 0, 69, 0, 0, 0, 91, 1, 0, 0, 8, 8,241, 4, 23, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8, 83, 30, 7, 0, 0, 0, 0, 8, 83, 30, 7, 0, 0, 0, 0, 72, 77, 30, 7, 0, 0, 0, 0,152, 81, 30, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 77, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184, 78, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 26, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68,
+ 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
+ 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 4, 0, 0, 69, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0,
+ 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,215, 18, 7, 0, 0, 0, 0,
-117, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 8,216, 18, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 87, 79, 0, 0, 24, 2, 0, 0,120,216, 18, 7, 0, 0, 0, 0,142, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,114,108,100, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 78, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40, 80, 30, 7,
+ 0, 0, 0, 0, 72, 77, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,125,195, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 75, 67, 1, 0,125,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0,
+202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,220, 0,253, 0,203, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,
+240, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,253, 0,
+ 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-114, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61,199, 54, 36, 60,199, 54, 36, 60,199, 54, 36, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
-205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64,
- 0, 0,200, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61,
- 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 80, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152, 81, 30, 7,
+ 0, 0, 0, 0,184, 78, 30, 7, 0, 0, 0, 0, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0,112,196,
+ 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 4, 0, 0, 91, 1, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 81, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 40, 80, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0,
+ 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, 18, 0, 0, 0,
+ 20, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, 0, 0, 32, 65,
+ 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 8, 0, 21, 4,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4,253, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-216,218, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,218, 18, 7, 0, 0, 0, 0,
- 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0, 72,219, 18, 7, 0, 0, 0, 0,
-129, 0, 0, 0, 1, 0, 0, 0,232,225, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 8, 83, 30, 7, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,210, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0,
- 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72, 84, 30, 7, 0, 0, 0, 0,215, 0, 0, 0,
+ 1, 0, 0, 0,248, 92, 30, 7, 0, 0, 0, 0, 88, 76, 30, 7, 0, 0, 0, 0,104, 58, 30, 7, 0, 0, 0, 0, 56, 56, 30, 7,
+ 0, 0, 0, 0,248, 57, 30, 7, 0, 0, 0, 0,216, 58, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 47, 2, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 2, 2, 48, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,248, 90, 30, 7, 0, 0, 0, 0,248, 90, 30, 7, 0, 0, 0, 0, 56, 85, 30, 7, 0, 0, 0, 0,136, 89, 30, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 85, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168, 86, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65,154,216, 65, 55,
+ 0, 0, 12, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 11, 68,
+ 0, 0,200, 65, 0,192, 11, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0,
+ 10, 0, 48, 2, 26, 0, 48, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 47, 2, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 26, 0,
+ 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 86, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24, 88, 30, 7,
+ 0, 0, 0, 0, 56, 85, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 72, 67, 0, 0,157,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,
+199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4,
+ 6, 0,217, 0, 76, 1,200, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+216, 0, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 76, 1,
+ 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 88, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136, 89, 30, 7,
+ 0, 0, 0, 0,168, 86, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0,
+ 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 89, 30, 7, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 24, 88, 30, 7, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0,
+ 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0,
+ 86, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0,111, 18,131, 58,
+111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+ 0, 0, 87, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,
+ 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 1, 76, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,248, 90, 30, 7, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62,
- 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192,
- 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63,
- 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41,
- 1, 0,128,168, 0, 0,128, 63,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,
-149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,
-152, 9, 52,193, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,
-187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 56, 92, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 56, 92, 30, 7, 0, 0, 0, 0, 38, 1, 0, 0,
+ 1, 0, 0, 0,120,101, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 92, 30, 7,
+ 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 84, 30, 7, 0, 0, 0, 0,216, 58, 30, 7,
+ 0, 0, 0, 0,248, 57, 30, 7, 0, 0, 0, 0,168, 56, 30, 7, 0, 0, 0, 0, 24, 57, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 8, 8,192, 2,102, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 99, 30, 7, 0, 0, 0, 0,168, 99, 30, 7, 0, 0, 0, 0,232, 93, 30, 7,
+ 0, 0, 0, 0, 56, 98, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 93, 30, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0, 88, 95, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 48, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0,192, 47, 68, 0, 0,200, 65, 0,192, 47, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 2, 26, 0,192, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,192, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 95, 30, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0,200, 96, 30, 7, 0, 0, 0, 0,232, 93, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,240, 4, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 96, 30, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0, 56, 98, 30, 7, 0, 0, 0, 0, 88, 95, 30, 7, 0, 0, 0, 0, 0, 0,240,195, 0, 0,240, 67, 0, 0,135,195,
+ 0, 0,135, 67,238, 33,143,196,238, 33,143, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, 0, 0, 0, 0,
+ 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0,
+ 0, 0, 6, 0, 0, 0, 0, 4, 0, 0,192, 2, 76, 1,192, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,192, 2, 76, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,225, 18, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 98, 30, 7, 0, 0, 0, 0,216, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 96, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0,
+ 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,
+ 75, 1, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 18, 0, 0, 0,
+ 75, 1, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,168, 99, 30, 7, 0, 0, 0, 0,181, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,
- 8,225, 18, 7, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0,232,225, 18, 7, 0, 0, 0, 0,129, 0, 0, 0, 1, 0, 0, 0,
- 40,233, 18, 7, 0, 0, 0, 0, 72,219, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 79, 66, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0,216, 11, 0, 0,120,101, 30, 7,
+ 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0,116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,113, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 40,128, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,104,114, 30, 7, 0, 0, 0, 0, 72,115, 30, 7, 0, 0, 0, 0,104,114, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136, 36, 49, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
- 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
- 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,115, 30, 7, 0, 0, 0, 0,136, 5, 84, 8,
+ 0, 0, 0, 0, 17, 2, 24, 0, 90, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,168,231, 18, 7, 0, 0, 0, 0,248,231, 18, 7, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0,
+ 68,172, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 6, 0, 50, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 24, 0, 17, 0, 0, 0, 90, 0, 1, 0, 81, 0, 0, 0, 23, 0, 33, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,168,119, 30, 7, 0, 0, 0, 0,168,119, 30, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 5, 0, 2, 0,
+ 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 0, 0, 7, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,
-205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 5, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,232, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 75, 49, 8, 0, 0, 0, 0,
-184, 98, 49, 8, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,168,231, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,248,231, 18, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0, 72,232, 18, 7, 0, 0, 0, 0,132, 0, 0, 0,
- 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,
-205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 79, 66, 0, 0,
-112, 5, 0, 0, 40,233, 18, 7, 0, 0, 0, 0,129, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,225, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,211, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,229,123, 38, 63,
- 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,236, 13, 98,189,
- 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63,
- 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0,128, 50, 0, 0, 0,179,
- 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 54,236,148,190,221,102, 69,191, 38,255, 16, 63,
- 0, 0, 0, 0, 24,134,116, 63, 57,174, 76,190,239,161, 95, 62, 0, 0, 0, 0,237, 13, 98,189, 35,194, 26, 63,166,111, 75, 63,
- 0, 0, 0, 0,209, 19, 13, 63,241, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,
-143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 1, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,232,238, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,232,238, 18, 7, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 77, 65, 0, 0,128, 3, 0, 0,200,239, 18, 7,
- 0, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 90, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0,
- 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63,
- 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 4, 0, 67, 0, 64, 3, 67, 0, 64, 3,
- 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61,
- 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,152,243, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,245, 18, 7,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63,205,204, 76, 61,205,204,204, 61,102,102,166, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,152,243, 18, 7, 0, 0, 0, 0, 25, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 5, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65,
- 40, 0, 0, 0, 24,245, 18, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 53, 0, 53, 0,136,245, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 0, 16, 0, 0,136,245, 18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, 6, 6, 6,153, 4, 4, 4,102, 3, 3, 3,102,
- 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, 8, 8, 8,153,
- 11, 11, 11,204, 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, 10, 10, 10,255, 10, 10, 10,255, 9, 9, 9,255,
- 9, 9, 9,255, 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, 10, 10, 10,153, 18, 18, 18,255, 20, 20, 20,255,
- 22, 22, 22,255, 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, 16, 16, 16,255, 14, 14, 14,255, 11, 11, 11,255,
- 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, 27, 27, 27,255, 31, 31, 31,255, 32, 32, 32,255,
- 33, 33, 33,255, 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, 25, 25, 25,255, 22, 22, 22,255, 19, 19, 19,255,
- 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 4, 4, 4,102, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, 40, 40, 40,255, 42, 42, 42,255, 42, 42, 42,255,
- 43, 43, 43,255, 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, 33, 33, 33,255, 30, 30, 30,255, 27, 27, 27,255,
- 24, 24, 24,255, 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 7, 7, 7,153,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, 50, 50, 50,255, 51, 51, 51,255, 51, 51, 51,255,
- 50, 50, 50,255, 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, 41, 41, 41,255, 37, 37, 37,255, 34, 34, 34,255,
- 31, 31, 31,255, 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, 11, 11, 11,255, 10, 10, 10,255, 11, 11, 11,255,
- 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13,102, 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, 58, 58, 58,255, 59, 59, 59,255, 59, 59, 59,255,
- 58, 58, 58,255, 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, 48, 48, 48,255, 45, 45, 45,255, 41, 41, 41,255,
- 38, 38, 38,255, 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, 17, 17, 17,255, 12, 12, 12,255, 11, 11, 11,255,
- 11, 11, 11,255, 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 36, 36,204, 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, 66, 66, 66,255, 66, 66, 66,255, 66, 66, 66,255,
- 65, 65, 65,255, 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, 54, 54, 54,255, 51, 51, 51,255, 48, 48, 48,255,
- 44, 44, 44,255, 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, 24, 24, 24,255, 19, 19, 19,255, 13, 13, 13,255,
- 11, 11, 11,255, 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19,102,
- 56, 56, 56,255, 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, 74, 74, 74,255, 74, 74, 74,255, 73, 73, 73,255,
- 72, 72, 72,255, 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, 61, 61, 61,255, 58, 58, 58,255, 54, 54, 54,255,
- 50, 50, 50,255, 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, 30, 30, 30,255, 25, 25, 25,255, 19, 19, 19,255,
- 13, 13, 13,255, 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54,255,
- 66, 66, 66,255, 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, 81, 81, 81,255, 81, 81, 81,255, 80, 80, 80,255,
- 79, 79, 79,255, 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, 67, 67, 67,255, 63, 63, 63,255, 60, 60, 60,255,
- 56, 56, 56,255, 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, 35, 35, 35,255, 30, 30, 30,255, 24, 24, 24,255,
- 18, 18, 18,255, 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22,102, 67, 67, 67,255,
- 76, 76, 76,255, 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, 88, 88, 88,255, 88, 88, 88,255, 87, 87, 87,255,
- 86, 86, 86,255, 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, 73, 73, 73,255, 69, 69, 69,255, 65, 65, 65,255,
- 62, 62, 62,255, 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, 40, 40, 40,255, 35, 35, 35,255, 29, 29, 29,255,
- 23, 23, 23,255, 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,204, 76, 76, 76,255,
- 84, 84, 84,255, 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, 95, 95, 95,255, 95, 95, 95,255, 94, 94, 94,255,
- 93, 93, 93,255, 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, 79, 79, 79,255, 75, 75, 75,255, 71, 71, 71,255,
- 67, 67, 67,255, 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 45, 45, 45,255, 40, 40, 40,255, 34, 34, 34,255,
- 28, 28, 28,255, 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, 14, 14, 14,102, 70, 70, 70,255, 85, 85, 85,255,
- 92, 92, 92,255, 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255,103,103,103,255,102,102,102,255,101,101,101,255,
- 99, 99, 99,255, 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, 84, 84, 84,255, 81, 81, 81,255, 77, 77, 77,255,
- 72, 72, 72,255, 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 44, 44, 44,255, 39, 39, 39,255,
- 32, 32, 32,255, 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, 24, 24, 24,102, 80, 80, 80,255, 93, 93, 93,255,
-100,100,100,255,104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255,109,109,109,255,109,109,109,255,107,107,107,255,
-106,106,106,255,103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, 90, 90, 90,255, 86, 86, 86,255, 82, 82, 82,255,
- 77, 77, 77,255, 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, 54, 54, 54,255, 49, 49, 49,255, 43, 43, 43,255,
- 36, 36, 36,255, 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, 29, 29, 29,102, 89, 89, 89,255,100,100,100,255,
-107,107,107,255,112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255,116,116,116,255,115,115,115,255,114,114,114,255,
-112,112,112,255,110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, 96, 96, 96,255, 92, 92, 92,255, 87, 87, 87,255,
- 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, 58, 58, 58,255, 52, 52, 52,255, 46, 46, 46,255,
- 40, 40, 40,255, 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, 46, 46, 46,153, 95, 95, 95,255,107,107,107,255,
-114,114,114,255,118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255,123,123,123,255,122,122,122,255,122,122,122,255,
-120,120,120,255,118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255,101,101,101,255, 97, 97, 97,255, 92, 92, 92,255,
- 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 62, 62, 62,255, 56, 56, 56,255, 50, 50, 50,255,
- 44, 44, 44,255, 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, 47, 47, 47,153,101,101,101,255,113,113,113,255,
-120,120,120,255,125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255,130,130,130,255,131,131,131,255,131,131,131,255,
-131,131,131,255,129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255,108,108,108,255,103,103,103,255, 97, 97, 97,255,
- 92, 92, 92,255, 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, 66, 66, 66,255, 60, 60, 60,255, 54, 54, 54,255,
- 47, 47, 47,255, 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, 48, 48, 48,153,106,106,106,255,118,118,118,255,
-126,126,126,255,131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255,138,138,138,255,142,142,142,255,147,147,147,255,
-149,149,149,255,148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255,115,115,115,255,108,108,108,255,102,102,102,255,
- 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, 69, 69, 69,255, 63, 63, 63,255, 57, 57, 57,255,
- 49, 49, 49,255, 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, 32, 32, 32,102,109,109,109,255,123,123,123,255,
-131,131,131,255,136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255,148,148,148,255,156,156,156,255,168,168,168,255,
-176,176,176,255,177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255,124,124,124,255,114,114,114,255,107,107,107,255,
-101,101,101,255, 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, 72, 72, 72,255, 66, 66, 66,255, 59, 59, 59,255,
- 52, 52, 52,255, 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, 17, 17, 17, 51,110,110,110,255,127,127,127,255,
-136,136,136,255,142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255,159,159,159,255,174,174,174,255,195,195,195,255,
-212,212,212,255,216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255,135,135,135,255,121,121,121,255,112,112,112,255,
-106,106,106,255, 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, 76, 76, 76,255, 69, 69, 69,255, 62, 62, 62,255,
- 54, 54, 54,255, 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, 0, 0, 0, 0,107,107,107,255,130,130,130,255,
-140,140,140,255,146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255,169,169,169,255,191,191,191,255,219,219,219,255,
-246,246,246,255,254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255,145,145,145,255,127,127,127,255,117,117,117,255,
-110,110,110,255,103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, 78, 78, 78,255, 71, 71, 71,255, 64, 64, 64,255,
- 55, 55, 55,255, 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, 0, 0, 0, 0, 65, 65, 65,153,129,129,129,255,
-142,142,142,255,149,149,149,255,154,154,154,255,158,158,158,255,163,163,163,255,176,176,176,255,199,199,199,255,232,232,232,255,
-255,255,255,255,255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255,151,151,151,255,132,132,132,255,121,121,121,255,
-113,113,113,255,106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, 80, 80, 80,255, 73, 73, 73,255, 65, 65, 65,255,
- 57, 57, 57,255, 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 51,127,127,127,255,
-143,143,143,255,152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255,177,177,177,255,198,198,198,255,227,227,227,255,
-253,253,253,255,255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255,153,153,153,255,135,135,135,255,124,124,124,255,
-117,117,117,255,110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, 82, 82, 82,255, 74, 74, 74,255, 66, 66, 66,255,
- 57, 57, 57,255, 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93,204,
-141,141,141,255,153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255,174,174,174,255,188,188,188,255,209,209,209,255,
-228,228,228,255,234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255,151,151,151,255,136,136,136,255,127,127,127,255,
-119,119,119,255,112,112,112,255,105,105,105,255, 98, 98, 98,255, 90, 90, 90,255, 83, 83, 83,255, 75, 75, 75,255, 66, 66, 66,255,
- 57, 57, 57,255, 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 51,
-134,134,134,255,151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255,171,171,171,255,178,178,178,255,189,189,189,255,
-200,200,200,255,202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255,148,148,148,255,137,137,137,255,129,129,129,255,
-121,121,121,255,114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 83, 83, 83,255, 74, 74, 74,255, 65, 65, 65,255,
- 55, 55, 55,255, 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 49, 49,102,145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255,170,170,170,255,172,172,172,255,176,176,176,255,
-180,180,180,255,179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255,145,145,145,255,137,137,137,255,130,130,130,255,
-122,122,122,255,115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 82, 82, 82,255, 73, 73, 73,255, 63, 63, 63,255,
- 50, 50, 50,255, 22, 22, 22,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 78, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255,168,168,168,255,169,169,169,255,170,170,170,255,
-169,169,169,255,167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255,144,144,144,255,137,137,137,255,130,130,130,255,
-123,123,123,255,115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, 80, 80, 80,255, 70, 70, 70,255, 58, 58, 58,255,
- 27, 27, 27,153, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80,153,150,150,150,255,160,160,160,255,165,165,165,255,167,167,167,255,167,167,167,255,
-166,166,166,255,163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255,143,143,143,255,137,137,137,255,129,129,129,255,
-121,121,121,255,113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, 76, 76, 76,255, 63, 63, 63,255, 38, 38, 38,204,
- 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255,157,157,157,255,161,161,161,255,163,163,163,255,
-162,162,162,255,160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255,141,141,141,255,135,135,135,255,127,127,127,255,
-119,119,119,255,110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, 66, 66, 66,255, 32, 32, 32,153, 7, 7, 7, 51,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134,134,134,255,148,148,148,255,154,154,154,255,
-155,155,155,255,154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255,136,136,136,255,130,130,130,255,122,122,122,255,
-114,114,114,255,104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, 22, 22, 22,102, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 5, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 73,153,103,103,103,204,
-137,137,137,255,140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255,127,127,127,255,120,120,120,255,113,113,113,255,
-102,102,102,255, 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 46, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, 88, 88, 88,204, 81, 81, 81,204, 54, 54, 54,153,
- 35, 35, 35,102, 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0,168, 1, 0, 0,216, 5, 19, 7,
- 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 64, 0, 0, 0, 64,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 7, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 7, 19, 7,
- 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 16, 0, 15, 0, 56, 8, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 56, 8, 19, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6362,76 +5914,460 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,
+205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78,
+ 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0,
+ 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,225, 26, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 22,157, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,232,248,247, 6, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,
+205,204,204, 61,154,153,153, 62,205,204, 76, 62,219, 15, 73, 63,102,102,102, 63, 0, 0, 0, 64,154,153, 25, 63, 0, 0, 64, 65,
+102,102,166, 63, 0, 0, 0, 65, 0, 0,160, 65, 6, 0, 0, 0, 0, 0,192, 64, 0, 0,128, 63, 0, 0, 0, 0,205,204, 28, 65,
+ 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, 1, 0,128, 0, 5, 0,218, 0, 0, 0, 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 64, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,152,113, 30, 7, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,104,114, 30, 7, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0,216,114, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,240, 1, 11, 1,152,137, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0,216,114, 30, 7, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 72,115, 30, 7, 0, 0, 0, 0,104,114, 30, 7,
+ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,129, 2,233, 1,216,144, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,
+ 40, 0, 0, 0, 72,115, 30, 7, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,114, 30, 7,
+ 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,109, 0, 78, 1,248,130, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65,
+240, 1, 0, 0,184,115, 30, 7, 0, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0,248,117, 30, 7, 0, 0, 0, 0,120,118, 30, 7,
+ 0, 0, 0, 0,248,118, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0,205,204, 76, 63,
+ 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56,203, 31, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 10,215, 35, 60,205,204,204, 61,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61,102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65,
+ 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 0, 0,128, 63, 49, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 56, 0, 0, 0,248,117, 30, 7, 0, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0,248, 36, 31, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 0, 0, 0,120,118, 30, 7,
+ 0, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,255,128,
+ 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,248,118, 30, 7, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,184,150, 31, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128, 1, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0,155, 9, 25, 67,190, 23,237, 64, 75, 1,147, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+128, 0, 0, 0,168,119, 30, 7, 0, 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82,101,110,100,101,114, 76, 97,121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255,127, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,200, 0, 0, 0, 88,122, 30, 7,
+ 0, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,
+161, 14,234, 64, 0, 0, 0, 63, 0, 0, 0, 66, 0, 0,144, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 16, 2, 0, 0,104,123, 30, 7,
+ 0, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65,
+ 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,200,125, 30, 7, 0, 0, 0, 0, 2, 0, 0, 0,
+ 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 11, 3, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,127, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,200,125, 30, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,
+243, 4, 53, 63, 88,127, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 88,127, 30, 7,
+ 0, 0, 0, 0,119, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,127, 30, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 87, 79, 0, 0, 24, 2, 0, 0, 40,128, 30, 7, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,
+114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,114, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61,199, 54, 36, 60,199, 54, 36, 60,199, 54, 36, 60, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,160, 64, 0, 0,200, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,
+205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,136,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,130, 30, 7,
+ 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0,248,130, 30, 7,
+ 0, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0,152,137, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,122, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,
+227,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,
+150, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51,
+ 0, 0,128, 63, 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53,
+ 1, 0, 0, 41, 1, 0,128,168, 0, 0,128, 63,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,
+225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,
+ 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201,
+ 0, 0,128, 63,187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,136, 30, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+152, 0, 0, 0,184,136, 30, 7, 0, 0, 0, 0,133, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0,152,137, 30, 7, 0, 0, 0, 0,130, 0, 0, 0,
+ 1, 0, 0, 0,216,144, 30, 7, 0, 0, 0, 0,248,130, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,133, 88, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,192, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,
+250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,143, 30, 7, 0, 0, 0, 0,168,143, 30, 7, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 0, 0, 7, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60,
+ 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,143, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 77, 68, 8,
+ 0, 0, 0, 0, 56,150, 68, 8, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0, 88,143, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,168,143, 30, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,248,143, 30, 7, 0, 0, 0, 0,
+133, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0,
+ 79, 66, 0, 0,112, 5, 0, 0,216,144, 30, 7, 0, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+152,137, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+104,123, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,
+112,236,188, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+229,123, 38, 63, 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,
+236, 13, 98,189, 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,
+164,111, 75, 63, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0,128, 50,
+ 0, 0, 0,179, 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 54,236,148,190,221,102, 69,191,
+ 38,255, 16, 63, 0, 0, 0, 0, 24,134,116, 63, 57,174, 76,190,239,161, 95, 62, 0, 0, 0, 0,237, 13, 98,189, 35,194, 26, 63,
+166,111, 75, 63, 0, 0, 0, 0,209, 19, 13, 63,241, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62,
+ 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 1,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,152,150, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,152,150, 30, 7, 0, 0, 0, 0,133, 0, 0, 0, 1, 0, 0, 0,
+ 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62,
+ 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 77, 65, 0, 0,128, 3, 0, 0,
+120,151, 30, 7, 0, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 8, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63,
+ 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63,
+ 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 4, 0, 67, 0, 64, 3,
+ 67, 0, 64, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,
+205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 72,155, 30, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200,156, 30, 7, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63,205,204, 76, 61,205,204,204, 61,
+102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 72,155, 30, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,173, 30, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 40, 0, 0, 0,200,156, 30, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
+ 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 53, 0, 53, 0, 56,157, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 16, 0, 0, 56,157, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, 6, 6, 6,153, 4, 4, 4,102,
+ 3, 3, 3,102, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51,
+ 8, 8, 8,153, 11, 11, 11,204, 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, 10, 10, 10,255, 10, 10, 10,255,
+ 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, 10, 10, 10,153, 18, 18, 18,255,
+ 20, 20, 20,255, 22, 22, 22,255, 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, 16, 16, 16,255, 14, 14, 14,255,
+ 11, 11, 11,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, 27, 27, 27,255, 31, 31, 31,255,
+ 32, 32, 32,255, 33, 33, 33,255, 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, 25, 25, 25,255, 22, 22, 22,255,
+ 19, 19, 19,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 4, 4, 4,102,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, 40, 40, 40,255, 42, 42, 42,255,
+ 42, 42, 42,255, 43, 43, 43,255, 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, 33, 33, 33,255, 30, 30, 30,255,
+ 27, 27, 27,255, 24, 24, 24,255, 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255,
+ 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, 50, 50, 50,255, 51, 51, 51,255,
+ 51, 51, 51,255, 50, 50, 50,255, 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, 41, 41, 41,255, 37, 37, 37,255,
+ 34, 34, 34,255, 31, 31, 31,255, 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, 11, 11, 11,255, 10, 10, 10,255,
+ 11, 11, 11,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 13, 13,102, 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, 58, 58, 58,255, 59, 59, 59,255,
+ 59, 59, 59,255, 58, 58, 58,255, 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, 48, 48, 48,255, 45, 45, 45,255,
+ 41, 41, 41,255, 38, 38, 38,255, 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, 17, 17, 17,255, 12, 12, 12,255,
+ 11, 11, 11,255, 11, 11, 11,255, 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 36, 36,204, 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, 66, 66, 66,255, 66, 66, 66,255,
+ 66, 66, 66,255, 65, 65, 65,255, 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, 54, 54, 54,255, 51, 51, 51,255,
+ 48, 48, 48,255, 44, 44, 44,255, 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, 24, 24, 24,255, 19, 19, 19,255,
+ 13, 13, 13,255, 11, 11, 11,255, 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 19, 19,102, 56, 56, 56,255, 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, 74, 74, 74,255, 74, 74, 74,255,
+ 73, 73, 73,255, 72, 72, 72,255, 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, 61, 61, 61,255, 58, 58, 58,255,
+ 54, 54, 54,255, 50, 50, 50,255, 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, 30, 30, 30,255, 25, 25, 25,255,
+ 19, 19, 19,255, 13, 13, 13,255, 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 54, 54,255, 66, 66, 66,255, 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, 81, 81, 81,255, 81, 81, 81,255,
+ 80, 80, 80,255, 79, 79, 79,255, 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, 67, 67, 67,255, 63, 63, 63,255,
+ 60, 60, 60,255, 56, 56, 56,255, 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, 35, 35, 35,255, 30, 30, 30,255,
+ 24, 24, 24,255, 18, 18, 18,255, 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22,102,
+ 67, 67, 67,255, 76, 76, 76,255, 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, 88, 88, 88,255, 88, 88, 88,255,
+ 87, 87, 87,255, 86, 86, 86,255, 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, 73, 73, 73,255, 69, 69, 69,255,
+ 65, 65, 65,255, 62, 62, 62,255, 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, 40, 40, 40,255, 35, 35, 35,255,
+ 29, 29, 29,255, 23, 23, 23,255, 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,204,
+ 76, 76, 76,255, 84, 84, 84,255, 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, 95, 95, 95,255, 95, 95, 95,255,
+ 94, 94, 94,255, 93, 93, 93,255, 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, 79, 79, 79,255, 75, 75, 75,255,
+ 71, 71, 71,255, 67, 67, 67,255, 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 45, 45, 45,255, 40, 40, 40,255,
+ 34, 34, 34,255, 28, 28, 28,255, 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, 14, 14, 14,102, 70, 70, 70,255,
+ 85, 85, 85,255, 92, 92, 92,255, 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255,103,103,103,255,102,102,102,255,
+101,101,101,255, 99, 99, 99,255, 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, 84, 84, 84,255, 81, 81, 81,255,
+ 77, 77, 77,255, 72, 72, 72,255, 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 44, 44, 44,255,
+ 39, 39, 39,255, 32, 32, 32,255, 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, 24, 24, 24,102, 80, 80, 80,255,
+ 93, 93, 93,255,100,100,100,255,104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255,109,109,109,255,109,109,109,255,
+107,107,107,255,106,106,106,255,103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, 90, 90, 90,255, 86, 86, 86,255,
+ 82, 82, 82,255, 77, 77, 77,255, 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, 54, 54, 54,255, 49, 49, 49,255,
+ 43, 43, 43,255, 36, 36, 36,255, 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, 29, 29, 29,102, 89, 89, 89,255,
+100,100,100,255,107,107,107,255,112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255,116,116,116,255,115,115,115,255,
+114,114,114,255,112,112,112,255,110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, 96, 96, 96,255, 92, 92, 92,255,
+ 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, 58, 58, 58,255, 52, 52, 52,255,
+ 46, 46, 46,255, 40, 40, 40,255, 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, 46, 46, 46,153, 95, 95, 95,255,
+107,107,107,255,114,114,114,255,118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255,123,123,123,255,122,122,122,255,
+122,122,122,255,120,120,120,255,118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255,101,101,101,255, 97, 97, 97,255,
+ 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 62, 62, 62,255, 56, 56, 56,255,
+ 50, 50, 50,255, 44, 44, 44,255, 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, 47, 47, 47,153,101,101,101,255,
+113,113,113,255,120,120,120,255,125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255,130,130,130,255,131,131,131,255,
+131,131,131,255,131,131,131,255,129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255,108,108,108,255,103,103,103,255,
+ 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, 66, 66, 66,255, 60, 60, 60,255,
+ 54, 54, 54,255, 47, 47, 47,255, 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, 48, 48, 48,153,106,106,106,255,
+118,118,118,255,126,126,126,255,131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255,138,138,138,255,142,142,142,255,
+147,147,147,255,149,149,149,255,148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255,115,115,115,255,108,108,108,255,
+102,102,102,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, 69, 69, 69,255, 63, 63, 63,255,
+ 57, 57, 57,255, 49, 49, 49,255, 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, 32, 32, 32,102,109,109,109,255,
+123,123,123,255,131,131,131,255,136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255,148,148,148,255,156,156,156,255,
+168,168,168,255,176,176,176,255,177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255,124,124,124,255,114,114,114,255,
+107,107,107,255,101,101,101,255, 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, 72, 72, 72,255, 66, 66, 66,255,
+ 59, 59, 59,255, 52, 52, 52,255, 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, 17, 17, 17, 51,110,110,110,255,
+127,127,127,255,136,136,136,255,142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255,159,159,159,255,174,174,174,255,
+195,195,195,255,212,212,212,255,216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255,135,135,135,255,121,121,121,255,
+112,112,112,255,106,106,106,255, 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, 76, 76, 76,255, 69, 69, 69,255,
+ 62, 62, 62,255, 54, 54, 54,255, 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, 0, 0, 0, 0,107,107,107,255,
+130,130,130,255,140,140,140,255,146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255,169,169,169,255,191,191,191,255,
+219,219,219,255,246,246,246,255,254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255,145,145,145,255,127,127,127,255,
+117,117,117,255,110,110,110,255,103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, 78, 78, 78,255, 71, 71, 71,255,
+ 64, 64, 64,255, 55, 55, 55,255, 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, 0, 0, 0, 0, 65, 65, 65,153,
+129,129,129,255,142,142,142,255,149,149,149,255,154,154,154,255,158,158,158,255,163,163,163,255,176,176,176,255,199,199,199,255,
+232,232,232,255,255,255,255,255,255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255,151,151,151,255,132,132,132,255,
+121,121,121,255,113,113,113,255,106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, 80, 80, 80,255, 73, 73, 73,255,
+ 65, 65, 65,255, 57, 57, 57,255, 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 51,
+127,127,127,255,143,143,143,255,152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255,177,177,177,255,198,198,198,255,
+227,227,227,255,253,253,253,255,255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255,153,153,153,255,135,135,135,255,
+124,124,124,255,117,117,117,255,110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, 82, 82, 82,255, 74, 74, 74,255,
+ 66, 66, 66,255, 57, 57, 57,255, 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 93, 93, 93,204,141,141,141,255,153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255,174,174,174,255,188,188,188,255,
+209,209,209,255,228,228,228,255,234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255,151,151,151,255,136,136,136,255,
+127,127,127,255,119,119,119,255,112,112,112,255,105,105,105,255, 98, 98, 98,255, 90, 90, 90,255, 83, 83, 83,255, 75, 75, 75,255,
+ 66, 66, 66,255, 57, 57, 57,255, 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 20, 20, 20, 51,134,134,134,255,151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255,171,171,171,255,178,178,178,255,
+189,189,189,255,200,200,200,255,202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255,148,148,148,255,137,137,137,255,
+129,129,129,255,121,121,121,255,114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 83, 83, 83,255, 74, 74, 74,255,
+ 65, 65, 65,255, 55, 55, 55,255, 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 49, 49, 49,102,145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255,170,170,170,255,172,172,172,255,
+176,176,176,255,180,180,180,255,179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255,145,145,145,255,137,137,137,255,
+130,130,130,255,122,122,122,255,115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 82, 82, 82,255, 73, 73, 73,255,
+ 63, 63, 63,255, 50, 50, 50,255, 22, 22, 22,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255,168,168,168,255,169,169,169,255,
+170,170,170,255,169,169,169,255,167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255,144,144,144,255,137,137,137,255,
+130,130,130,255,123,123,123,255,115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, 80, 80, 80,255, 70, 70, 70,255,
+ 58, 58, 58,255, 27, 27, 27,153, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80,153,150,150,150,255,160,160,160,255,165,165,165,255,167,167,167,255,
+167,167,167,255,166,166,166,255,163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255,143,143,143,255,137,137,137,255,
+129,129,129,255,121,121,121,255,113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, 76, 76, 76,255, 63, 63, 63,255,
+ 38, 38, 38,204, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255,157,157,157,255,161,161,161,255,
+163,163,163,255,162,162,162,255,160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255,141,141,141,255,135,135,135,255,
+127,127,127,255,119,119,119,255,110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, 66, 66, 66,255, 32, 32, 32,153,
+ 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134,134,134,255,148,148,148,255,
+154,154,154,255,155,155,155,255,154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255,136,136,136,255,130,130,130,255,
+122,122,122,255,114,114,114,255,104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, 22, 22, 22,102, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 73,153,
+103,103,103,204,137,137,137,255,140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255,127,127,127,255,120,120,120,255,
+113,113,113,255,102,102,102,255, 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 51, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, 88, 88, 88,204, 81, 81, 81,204,
+ 54, 54, 54,153, 35, 35, 35,102, 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0,168, 1, 0, 0,
+136,173, 30, 7, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 64,
+ 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,175, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
+120,175, 30, 7, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 16, 0, 15, 0,232,175, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0,
+232,175, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6471,52 +6407,16 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0,232, 4, 0, 0,136, 24, 19, 7, 0, 0, 0, 0, 50, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 29, 19, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 42, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 38, 19, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 32, 19, 7, 0, 0, 0, 0,152, 35, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 30, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 33, 19, 7, 0, 0, 0, 0,255,255,255,255,
-255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 39, 19, 7, 0, 0, 0, 0,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,120, 36, 19, 7, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63,
- 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 67, 0, 30, 0, 6, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,184, 29, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,200,239, 18, 7, 0, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0, 8, 30, 19, 7, 0, 0, 0, 0,124, 1, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 88, 32, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6529,16 +6429,8 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 32, 19, 7, 0, 0, 0, 0, 56, 0, 0, 0,
- 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191,230, 73,230, 73, 26,182, 1, 0, 0, 0,128, 63, 0, 0,128,191,
- 0, 0,128,191,230, 73, 26,182, 26,182, 1, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182, 1, 0,
-250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182, 1, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,
-230, 73,230, 73,230, 73, 1, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73, 1, 0, 3, 0,128,191,
-250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73, 1, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,
-230, 73, 1, 0, 68, 65, 84, 65, 8, 2, 0, 0, 72, 33, 19, 7, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 35, 19, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6552,19 +6444,8 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,152, 35, 19, 7, 0, 0, 0, 0, 53, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0,
- 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 8, 2, 0, 0,120, 36, 19, 7, 0, 0, 0, 0,124, 1, 0, 0,
- 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200, 38, 19, 7, 0, 0, 0, 0, 26, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,217, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6574,17 +6455,6 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0,200, 38, 19, 7, 0, 0, 0, 0, 59, 0, 0, 0,
- 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 4, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 5, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0,
- 3, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0,
- 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0,
- 9, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0,216, 39, 19, 7, 0, 0, 0, 0,124, 1, 0, 0, 5, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110,
- 32, 70, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 42, 19, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6598,25 +6468,9 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0, 40, 42, 19, 7, 0, 0, 0, 0, 58, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0,
- 12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 16, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 2, 0, 66, 82, 0, 0, 88, 6, 0, 0,184, 42, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,232, 52, 19, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 65,100,
-100, 0,104, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,216, 50, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6641,63 +6495,76 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0, 16, 5, 0, 0, 56,192, 30, 7, 0, 0, 0, 0,
+ 50, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+152,197, 30, 7, 0, 0, 0, 0,232, 12, 88, 8, 0, 0, 0, 0,184,127,248, 6, 0, 0, 0, 0,200, 47, 68, 8, 0, 0, 0, 0,
+120, 28,155, 8, 0, 0, 0, 0,184,129,154, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,177, 84, 8, 0, 0, 0, 0,104, 66,154, 8, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 56, 65, 68, 8, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+152, 10,155, 8, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80, 43, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,197, 30, 7, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255, 2, 0, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,216,111,154, 8, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 2, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 51,
+ 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 67, 0, 30, 0, 6, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,
+152,197, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,120,151, 30, 7, 0, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0,
+ 56, 65, 68, 8, 0, 0, 0, 0,126, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216, 50, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104, 52, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,177, 84, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,104, 52, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,232, 52, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,152, 61, 19, 7,
- 0, 0, 0, 0,184, 42, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,
-111, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,136, 59, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
+216,177, 84, 8, 0, 0, 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191,230, 73,230, 73,
+ 26,182, 1, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182, 1, 0, 1, 0,128,191,253,255,127,191,
+ 0, 0,128,191, 26,182, 26,182, 26,182, 1, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182, 1, 0,
+ 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73, 1, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,
+230, 73, 26,182,230, 73, 1, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73, 1, 0,255,255,127,191,
+ 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73, 1, 0, 68, 65, 84, 65, 8, 2, 0, 0,152, 10,155, 8, 0, 0, 0, 0,
+126, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,104, 66,154, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6710,7 +6577,19 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,104, 66,154, 8, 0, 0, 0, 0,
+ 53, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,
+ 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0,
+ 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 8, 2, 0, 0,
+216,111,154, 8, 0, 0, 0, 0,126, 1, 0, 0, 5, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 77, 97,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,129,154, 8, 0, 0, 0, 0, 26, 0, 0, 0, 12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,
+101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 28,155, 8, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6720,53 +6599,63 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,
+184,129,154, 8, 0, 0, 0, 0, 61, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0,120, 28,155, 8, 0, 0, 0, 0,
+ 59, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0,
+ 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0,
+ 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0,
+ 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0,
+ 3, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0,
+ 7, 0, 0, 0, 9, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0,232,197, 30, 7, 0, 0, 0, 0,126, 1, 0, 0, 5, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 86, 77, 97,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+200, 47, 68, 8, 0, 0, 0, 0, 25, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,184,127,248, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,128, 53, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,136, 59, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 24, 61, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 24, 61, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,152, 61, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 72, 70, 19, 7,
- 0, 0, 0, 0,232, 52, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,
-117,114, 0, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,200, 47, 68, 8, 0, 0, 0, 0, 60, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 56, 68, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 72, 0, 0, 0,184,127,248, 6, 0, 0, 0, 0, 58, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 12, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 2, 0, 16, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0,184,212, 30, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 65,100,100, 0,104, 46,
+ 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232,220, 30, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6799,49 +6688,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 48, 62, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,
+ 80,213, 30, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 56, 68, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,200, 69, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,220, 30, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+ 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,120,222, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,200, 69, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,248, 78, 19, 7,
- 0, 0, 0, 0,152, 61, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114,
-117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120,222, 30, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248,222, 30, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184,231, 30, 7, 0, 0, 0, 0,184,212, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 66,108,111, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,232, 76, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,229, 30, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6874,50 +6763,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,224, 70, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63,
+ 68, 65, 84, 65, 56, 1, 0, 0,144,223, 30, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232, 76, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,120, 78, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,229, 30, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56,231, 30, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,120, 78, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,248, 78, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,168, 87, 19, 7,
- 0, 0, 0, 0, 72, 70, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,
- 97,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152, 85, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,231, 30, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184,231, 30, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120,240, 30, 7, 0, 0, 0, 0,248,222, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,117,114, 0, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,238, 30, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6949,49 +6837,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,144, 79, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,232, 30, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 85, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 40, 87, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104,238, 30, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
+248,239, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 40, 87, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,168, 87, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 88, 96, 19, 7,
- 0, 0, 0, 0,248, 78, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,
- 97,121, 32, 83,116,114,105,112,115, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248,239, 30, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0,184,231, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 72, 94, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40,247, 30, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7024,49 +6913,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64, 88, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 20,174,199, 62,
+ 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 16,241, 30, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 72, 94, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,216, 95, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40,247, 30, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,
+224,255,127,191,114, 97,255,186,184,248, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,216, 95, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 8,105, 19, 7,
- 0, 0, 0, 0,168, 87, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,
-111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184,248, 30, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56,249, 30, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248, 1, 31, 7, 0, 0, 0, 0,
+120,240, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 97,121, 0, 48,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,248,102, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232,255, 30, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7099,49 +6989,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,240, 96, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,
+208,249, 30, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,248,102, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,136,104, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,255, 30, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,120, 1, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,136,104, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 8,105, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,184,113, 19, 7,
- 0, 0, 0, 0, 88, 96, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114,
-101, 97,115,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120, 1, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248, 1, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184, 10, 31, 7, 0, 0, 0, 0, 56,249, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 67,108, 97,121, 32, 83,116,114,105,112,115, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,111, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168, 8, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7174,50 +7064,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,160,105, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63,
+ 68, 65, 84, 65, 56, 1, 0, 0,144, 2, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,111, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,228, 97,175,190,
- 50,131,112, 63,218,243,127,191, 10,183,157,188, 56,113, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168, 8, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56, 10, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 56,113, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215, 35, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,184,113, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,104,122, 19, 7,
- 0, 0, 0, 0, 8,105, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97,
-114,107,101,110, 0, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,120, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56, 10, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184, 10, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120, 19, 31, 7, 0, 0, 0, 0,248, 1, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104, 17, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7249,49 +7138,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,114, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80, 11, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,120, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,121, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104, 17, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
+248, 18, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,232,121, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,104,122, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 24,131, 19, 7,
- 0, 0, 0, 0,184,113, 19, 7, 0, 0, 0, 0, 0, 20, 1,160,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68,114,
- 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248, 18, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0,184, 10, 31, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114,101, 97,115,101, 0, 48, 48, 49, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 8,129, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40, 26, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7324,49 +7214,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,123, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62,
+ 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 16, 20, 31, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 8,129, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,152,130, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40, 26, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,228, 97,175,190, 50,131,112, 63,
+218,243,127,191, 10,183,157,188,184, 27, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,152,130, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 24,131, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,200,139, 19, 7,
- 0, 0, 0, 0,104,122, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105,
-108,108, 47, 68,101,101,112,101,110, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184, 27, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215, 35, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0,
+120, 19, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97,114,107,101,110,
+ 0, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,184,137, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232, 34, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7399,49 +7290,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,176,131, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,
+208, 28, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,184,137, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 72,139, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232, 34, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+ 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,120, 36, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 72,139, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,200,139, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,120,148, 19, 7,
- 0, 0, 0, 0, 24,131, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108,
- 97,116,116,101,110, 47, 67,111,110,116,114, 97,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120, 36, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248, 36, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184, 45, 31, 7, 0, 0, 0, 0, 56, 28, 31, 7, 0, 0, 0, 0, 0, 20, 1,160,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 68,114, 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,146, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168, 43, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7474,50 +7365,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 96,140, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 63, 35, 0, 0, 0, 0, 4, 0, 8, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63,
+ 68, 65, 84, 65, 56, 1, 0, 0,144, 37, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,104,146, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,248,147, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168, 43, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56, 45, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,248,147, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,120,148, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 40,157, 19, 7,
- 0, 0, 0, 0,200,139, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114,
- 97, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,155, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56, 45, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184, 45, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120, 54, 31, 7, 0, 0, 0, 0,248, 36, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105,108,108, 47, 68,101,101,112,101,110, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104, 52, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7549,49 +7439,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62,
- 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16,149, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 80, 46, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24,155, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,168,156, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104, 52, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,
+248, 53, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,168,156, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 40,157, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,216,165, 19, 7,
- 0, 0, 0, 0,120,148, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 73,110,
-102,108, 97,116,101, 47, 68,101,102,108, 97,116,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,200,163, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248, 53, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0,184, 45, 31, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108, 97,116,116,101,110, 47, 67,111,110,116,114, 97,
+115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40, 61, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7624,49 +7515,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63,
- 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0,192,157, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 16, 55, 31, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,200,163, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 88,165, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40, 61, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,
+224,255,127,191,114, 97,255,186,184, 62, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 88,165, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,216,165, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,136,174, 19, 7,
- 0, 0, 0, 0, 40,157, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76, 97,
-121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184, 62, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0,
+120, 54, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114, 97, 98, 0, 48,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,120,172, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232, 69, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7699,49 +7591,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112,166, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,
+208, 63, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,120,172, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 8,174, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232, 69, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,120, 71, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 8,174, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,136,174, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 56,183, 19, 7,
- 0, 0, 0, 0,216,165, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105,
-103,104,116,101,110, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120, 71, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248, 71, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184, 80, 31, 7, 0, 0, 0, 0, 56, 63, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 73,110,102,108, 97,116,101, 47, 68,101,102,108, 97,116,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 40,181, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168, 78, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7774,50 +7666,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 32,175, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62,
+ 68, 65, 84, 65, 56, 1, 0, 0,144, 72, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 40,181, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,184,182, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168, 78, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56, 80, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,184,182, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 56,183, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,232,191, 19, 7,
- 0, 0, 0, 0,136,174, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105,
-120, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,216,189, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56, 80, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184, 80, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120, 89, 31, 7, 0, 0, 0, 0,248, 71, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76, 97,121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104, 87, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7849,49 +7740,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,208,183, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80, 81, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,189, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104,191, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104, 87, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,
+248, 88, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,104,191, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,232,191, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,152,200, 19, 7,
- 0, 0, 0, 0, 56,183, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,117,
-108,116,105,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248, 88, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0,184, 80, 31, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105,103,104,116,101,110, 0, 53, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,136,198, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40, 96, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7924,49 +7816,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,128,192, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 90, 31, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,136,198, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 24,200, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40, 96, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
+ 14,215,126,191, 46,189,194, 61,184, 97, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 24,200, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,152,200, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 72,209, 19, 7,
- 0, 0, 0, 0,232,191, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117,
-100,103,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184, 97, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+ 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0,
+120, 89, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105,120, 0,104, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 56,207, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232,104, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7999,49 +7892,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62,
- 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 48,201, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,
+208, 98, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 56,207, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,200,208, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,104, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+ 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,120,106, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,200,208, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 72,209, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,248,217, 19, 7,
- 0, 0, 0, 0,152,200, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,105,
-110, 99,104, 47, 77, 97,103,110,105,102,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120,106, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248,106, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184,115, 31, 7, 0, 0, 0, 0, 56, 98, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 77,117,108,116,105,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,232,215, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,113, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8074,53 +7967,124 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63,
- 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0,224,209, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 56, 1, 0, 0,144,107, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,215, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,120,217, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,113, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,115, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,120,217, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,248,217, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,168,226, 19, 7,
- 0, 0, 0, 0, 72,209, 19, 7, 0, 0, 0, 0,253, 21,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,111,
-108,105,115,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,224, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,115, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184,115, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120,124, 31, 7, 0, 0, 0, 0,248,106, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117,100,103,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,122, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,116, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104,122, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,
+248,123, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248,123, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0,184,115, 31, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,105,110, 99,104, 47, 77, 97,103,110,105,102,121, 0,
+ 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40,131, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8149,49 +8113,54 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,144,218, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63,
+ 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0, 16,125, 31, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,224, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,226, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40,131, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,
+224,255,127,191,114, 97,255,186,184,132, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 40,226, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,168,226, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 88,235, 19, 7,
- 0, 0, 0, 0,248,217, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,
-114, 97,112,101, 47, 80,101, 97,107,115, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184,132, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56,133, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0,
+120,124, 31, 7, 0, 0, 0, 0,253, 21,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,111,108,105,115,104,
+ 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 72,233, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232,139, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8224,49 +8193,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64,227, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,
+208,133, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 72,233, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,216,234, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,139, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,120,141, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,216,234, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 88,235, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 8,244, 19, 7,
- 0, 0, 0, 0,168,226, 19, 7, 0, 0, 0, 0,168,205,210, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,
-117,108,112,116, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120,141, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248,141, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184,150, 31, 7, 0, 0, 0, 0, 56,133, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 83, 99,114, 97,112,101, 47, 80,101, 97,107,115, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,248,241, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,148, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8299,50 +8268,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63,
- 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,240,235, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 56, 1, 0, 0,144,142, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,248,241, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,136,243, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,148, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56,150, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,136,243, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 8,244, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,184,252, 19, 7,
- 0, 0, 0, 0, 88,235, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,
-101, 97,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,250, 19, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,150, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184,150, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120,159, 31, 7, 0, 0, 0, 0,248,141, 31, 7, 0, 0, 0, 0,168,205,210, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,117,108,112,116, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,157, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8374,49 +8342,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,160,244, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62,
+ 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 80,151, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,250, 19, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,252, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104,157, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,
+248,158, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 56,252, 19, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,184,252, 19, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,104, 5, 20, 7,
- 0, 0, 0, 0, 8,244, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,
-111,111,116,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248,158, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0,184,150, 31, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,101, 97,114, 0, 48, 48, 49, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 3, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40,166, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8449,49 +8418,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63,
- 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,253, 19, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16,160, 31, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 3, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,232, 4, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40,166, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
+ 14,215,126,191, 46,189,194, 61,184,167, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,232, 4, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,104, 5, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 24, 14, 20, 7,
- 0, 0, 0, 0,184,252, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,110,
- 97,107,101, 32, 72,111,111,107, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184,167, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+ 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56,168, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0,
+120,159, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,111,111,116,104,
+ 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 8, 12, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232,174, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8524,49 +8494,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62,
- 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0, 6, 20, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,
+208,168, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 8, 12, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,152, 13, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,174, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,120,176, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,152, 13, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,200, 22, 20, 7,
- 0, 0, 0, 0,104, 5, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111,
-102,116,101,110, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120,176, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248,176, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184,185, 31, 7, 0, 0, 0, 0, 56,168, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 83,110, 97,107,101, 32, 72,111,111,107, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,184, 20, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,183, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8599,50 +8569,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,176, 14, 20, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 56, 1, 0, 0,144,177, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,184, 20, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 72, 22, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,183, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56,185, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 72, 22, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,200, 22, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,120, 31, 20, 7,
- 0, 0, 0, 0, 24, 14, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,117,
- 98,116,114, 97, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104, 29, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,185, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184,185, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0,120,194, 31, 7, 0, 0, 0, 0,248,176, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111,102,116,101,110, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,192, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8674,49 +8643,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 96, 23, 20, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0,
+ 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,186, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,104, 29, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
- 54,189,194, 61, 14,215,126,191, 46,189,194, 61,248, 30, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104,192, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
+248,193, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,248, 30, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,120, 31, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 40, 40, 20, 7,
- 0, 0, 0, 0,200, 22, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101,
-120, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248,193, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0,184,185, 31, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,117, 98,116,114, 97, 99,116, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 38, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 40,201, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8749,49 +8719,50 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 0, 0, 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 16, 32, 20, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
+ 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16,195, 31, 7, 0, 0, 0, 0,
+ 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24, 38, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186,168, 39, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 68, 65, 84, 65, 64, 1, 0, 0, 40,201, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
+ 14,215,126,191, 46,189,194, 61,184,202, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0,168, 39, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0,216, 48, 20, 7,
- 0, 0, 0, 0,120, 31, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,104,
-117,109, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+184,202, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+ 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0, 96, 6, 0, 0, 56,203, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0,
+120,194, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101,120, 68,114, 97,
+119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,200, 46, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,232,209, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8824,49 +8795,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62,
- 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192, 40, 20, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,
+208,203, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,200, 46, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 88, 48, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,232,209, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,120,211, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 88, 48, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 82, 0, 0, 88, 6, 0, 0,216, 48, 20, 7, 0, 0, 0, 0,123, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40, 40, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,119,
-105,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120,211, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,248,211, 31, 7, 0, 0, 0, 0,125, 1, 0, 0, 1, 0, 0, 0,
+184,220, 31, 7, 0, 0, 0, 0, 56,203, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 84,104,117,109, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,120, 55, 20, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,218, 31, 7, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8899,38 +8870,49 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62,
- 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,112, 49, 20, 7,
- 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 56, 1, 0, 0,144,212, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,120, 55, 20, 7, 0, 0, 0, 0,119, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
- 46, 95,255,186,224,255,127,191,114, 97,255,186, 8, 57, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,218, 31, 7, 0, 0, 0, 0,
+121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56,220, 31, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 48, 0, 0, 0, 8, 57, 20, 7, 0, 0, 0, 0,117, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 85, 83, 69, 82,112, 38, 0, 0,224,140, 41, 5, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, 1, 8, 17, 1,
- 63, 6, 0, 0, 5, 0, 0, 0, 47,116,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,220, 31, 7, 0, 0, 0, 0,119, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,184,220, 31, 7, 0, 0, 0, 0,
+125, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,211, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,119,105,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,104,227, 31, 7, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8951,9 +8933,6 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0, 45,112,
-111,119,101,114,112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67,111,110,116,101,110,116,115, 47,
- 82,101,115,111,117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8966,16 +8945,39 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 80,221, 31, 7, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
+104,227, 31, 7, 0, 0, 0, 0,121, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,
+248,228, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,248,228, 31, 7, 0, 0, 0, 0,
+119, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 85, 83, 69, 82,112, 38, 0, 0,
+160,219,222, 4, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, 1, 8, 17, 1, 63, 6, 0, 0, 5, 0, 0, 0, 47,116,109,112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -8995,6 +8997,9 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 85,
+115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0, 45,112,111,119,101,114,112, 99, 47, 98,105,110, 47, 98,
+108,101,110,100,101,114, 46, 97,112,112, 47, 67,111,110,116,101,110,116,115, 47, 82,101,115,111,117,114, 99,101, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9007,7 +9012,6 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9017,6 +9021,7 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9048,6 +9053,7 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9103,7 +9109,6 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9144,6 +9149,7 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9191,70 +9197,9 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 2, 0, 94, 1, 8, 0, 0, 0, 3, 0, 0, 0, 56, 52, 39, 0,
- 0, 0, 0, 0, 1, 0, 2, 0, 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0,
- 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, 72, 96, 20, 7, 0, 0, 0, 0, 72, 96, 20, 7, 0, 0, 0, 0,200, 71, 20, 7,
- 0, 0, 0, 0,200, 71, 20, 7, 0, 0, 0, 0, 56,138, 20, 7, 0, 0, 0, 0, 56,138, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 49, 19, 7,
- 0, 0, 0, 0,152,137, 20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, 1, 0, 0, 0,
- 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 30, 90,100,191,154,153,153, 62,102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62,
- 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0,205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63,
- 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190,
- 0, 0, 0, 0, 14, 0, 1, 0, 25, 0, 15, 0,120, 0, 60, 0, 3, 0, 5, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0,
- 6, 0, 25, 0, 8, 0, 10, 0,200, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 10, 0, 50, 0, 20, 0, 2, 0, 1, 0, 0, 0,
- 0, 0,128, 63, 60, 0, 0, 0, 0, 0, 2, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 68, 65, 84, 65,168, 36, 0, 0, 72, 96, 20, 7, 0, 0, 0, 0,206, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255,
- 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255,
- 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255,
- 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,
-255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,
-255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255,
- 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,
- 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,
-128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,
-255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,
-255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,
-100,100,100,255,160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,
-172,172,172,128,255,255,255,255, 0, 0, 0,255, 1, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,
-100,100,100,255,255,255,255,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 25, 25, 25,255,128,128,128,255,100,100,100,255,
- 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,
-128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255,190,190,190,255,100,100,100,180,
- 68, 68, 68,255, 0, 0, 0,255,255,255,255,255, 0, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,
- 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,240,235,100,255,
-215,211, 75,255,180, 0,255,255,153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -9262,2404 +9207,2516 @@ char datatoc_startup_blend[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255, 32,255,255,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
-255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,200,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0,250,250,250,255, 15, 15, 15,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,145,145,145,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,
-250,250,250,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,130,130,130,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-250,250,250,255, 0, 0, 0, 0,250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255,
- 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255,153, 64, 48,255, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255,240,175,144,255, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255,
- 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255,
- 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,116,116,116,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 81,105,135,255, 32, 32,143,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,
-109,145,131,255,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0,255,255,255, 10,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-114,114,114,255, 18, 66,176, 38,255,133, 0,178,255,133, 0,127, 0,255, 0,255,255, 0, 0,255,225,210,195, 35, 0, 0, 0, 0,
- 0, 0, 0, 0,153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,127, 51, 76,
-130,135,140, 76,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0,
- 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,255,255,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5,155,155,155,160,100,104,111,255,111,106,100,255,104,106,117,255,105,117,110,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,128,255,255,255,255,255,255, 0,170, 0,255,
-220, 96, 96,255,220, 96, 96,255, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,
-255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,
- 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,160, 0,255,219, 37, 18,255, 32,255,255,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
- 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
- 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
-255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255,
- 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,255, 0,255, 4, 0, 0, 0,255,127,127, 0,255,255,255,255,255,255,255, 0,
-255,127, 0, 0,255,127,127,127,255,200,200,200,255,255, 0, 0,255, 0, 0,255,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255,
- 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255,
- 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255,
- 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255,
- 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255,
- 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255,
- 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255,
- 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 88, 49, 19, 7, 0, 0, 0, 0,207, 0, 0, 0,
- 1, 0, 0, 0,248, 49, 19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95, 51,100,115,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,248, 49, 19, 7,
- 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 56,133, 20, 7, 0, 0, 0, 0, 88, 49, 19, 7, 0, 0, 0, 0,105,111, 95,115,
- 99,101,110,101, 95,102, 98,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 80, 0, 0, 0, 56,133, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,216,133, 20, 7, 0, 0, 0, 0,248, 49, 19, 7,
- 0, 0, 0, 0,105,111, 95, 97,110,105,109, 95, 98,118,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,216,133, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,120,134, 20, 7,
- 0, 0, 0, 0, 56,133, 20, 7, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,120,134, 20, 7, 0, 0, 0, 0,207, 0, 0, 0,
- 1, 0, 0, 0, 24,135, 20, 7, 0, 0, 0, 0,216,133, 20, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,111, 98,106,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 24,135, 20, 7,
- 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,184,135, 20, 7, 0, 0, 0, 0,120,134, 20, 7, 0, 0, 0, 0,105,111, 95,115,
- 99,101,110,101, 95,120, 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 80, 0, 0, 0,184,135, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 88,136, 20, 7, 0, 0, 0, 0, 24,135, 20, 7,
- 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,115,116,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 88,136, 20, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0,248,136, 20, 7,
- 0, 0, 0, 0,184,135, 20, 7, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,117,118, 95,108, 97,121,111,117,116, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,248,136, 20, 7, 0, 0, 0, 0,207, 0, 0, 0,
- 1, 0, 0, 0,152,137, 20, 7, 0, 0, 0, 0, 88,136, 20, 7, 0, 0, 0, 0,105,111, 95, 99,117,114,118,101, 95,115,118,103,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,152,137, 20, 7,
- 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,136, 20, 7, 0, 0, 0, 0, 99,121, 99,108,
-101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-232, 0, 0, 0, 56,138, 20, 7, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68,101,102, 97,117,108,116, 32, 83,116,121,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,255,255, 0, 0,154,153, 25, 62,
- 0, 0,128, 63, 0, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0, 0, 0,128, 62,
- 0, 0, 0, 0, 0, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0,154,153, 25, 62,
- 0, 0,128, 63, 0, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 5, 0, 5, 0, 8, 0, 2, 0, 8, 0, 4, 0, 0, 0, 68, 78, 65, 49,
- 84, 5, 1, 0,232, 8, 63, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 62, 13, 0, 0,
- 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120,
- 0,121, 0,122, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,
-114, 0,103,114,111,117,112, 0,118, 97,108, 0,118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108,
- 97,103, 0,110, 97,109,101, 91, 54, 52, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,
-108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 54, 54, 93, 0,112, 97,100, 0,117,115, 0,
-105, 99,111,110, 95,105,100, 0,112, 97,100, 50, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,
-108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,102,105,108,101,112, 97,
-116,104, 91, 49, 48, 50, 52, 93, 0,116,111,116, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,
-104, 97,110,103,101,100, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 95,116,105,109,101,115,116, 97,109,112, 91, 50, 93, 0, 42,
-114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,
-109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,
-118, 97,114,116,121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,
-116,109, 97,115,107, 0,115,108,105,100,101, 95,109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108,
- 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,
-112,111, 0,112,111,115, 0,112, 97,100, 49, 0,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,117,105,100,
- 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 54, 52, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,
-108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50,
- 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,
-101,121, 0,115,108,117,114,112,104, 0, 99,116,105,109,101, 0,117,105,100,103,101,110, 0, 42,108,105,110,101, 0, 42,102,111,
-114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101,110,100, 0,102,108, 97,103,115,
- 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108,105,110,101,115, 0,108,105,
-110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, 0,109, 97,114,107,101,114,
-115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,
-111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0,100,116,120, 0,112, 97,115,115,
-101,112, 97,114,116, 97,108,112,104, 97, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,
-111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,101,110,115,111,114, 95,120, 0,115,101,
-110,115,111,114, 95,121, 0,115,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0,
- 42,100,111,102, 95,111, 98, 0,115,101,110,115,111,114, 95,102,105,116, 0,112, 97,100, 91, 55, 93, 0, 42,115, 99,101,110,101,
- 0,102,114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,
-105,109, 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,
-115,115, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,114, 0, 42,
-114,101,110,100,101,114,115, 91, 56, 93, 0,114,101,110,100,101,114, 95,115,108,111,116, 0,108, 97,115,116, 95,114,101,110,100,
-101,114, 95,115,108,111,116, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108,
- 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100,
- 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,
-112,114,101,118,105,101,119, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,
-115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101, 0,103,101,110, 95,102,
-108, 97,103, 0, 97,115,112,120, 0, 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,
-101,103, 0, 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101,
- 91, 54, 52, 93, 0,112,114,111,106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,
-102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,
-111,100,101,108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,
-101, 0,119,104,105, 99,104, 95,111,117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,114, 0,
-103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102,
- 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,
-114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102,102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,
-109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121,109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,
-102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116,102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99,
- 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,
-114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101,110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102,
- 97, 99, 0,100, 97,109,112,102, 97, 99, 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,
-110,115,102, 97, 99, 0,103,114, 97,118,105,116,121,102, 97, 99, 0,108,105,102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99,
- 0,105,118,101,108,102, 97, 99, 0,102,105,101,108,100,102, 97, 99, 0,115,104, 97,100,111,119,102, 97, 99, 0,122,101,110,117,
-112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,100,102, 97, 99, 0, 42,104, 97,110,100,108,101,
- 0, 42,112,110, 97,109,101, 0, 42,115,116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,
-114,115,116,114, 0, 42,114,101,115,117,108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,
-105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98,
- 97, 99,107, 41, 40, 41, 0,118,101,114,115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,
-117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,
-116,121,112,101, 0,118,105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,
-112,116,104, 0,114,101, 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101,
- 0,102, 97,108,108,111,102,102, 95,115,111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,
-111,117,114, 99,101, 0,116,111,116,112,111,105,110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95,
- 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,
-116, 95,116,114,101,101, 0, 42,112,111,105,110,116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,
-105,115,101, 95,100,101,112,116,104, 0,110,111,105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95,
- 98, 97,115,105,115, 0,112,100,112, 97,100, 51, 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,
-115, 99, 97,108,101, 0,102, 97,108,108,111,102,102, 95,115,112,101,101,100, 95,115, 99, 97,108,101, 0,112,100,112, 97,100, 50,
- 0, 42, 99,111, 98, 97, 0, 42,102, 97,108,108,111,102,102, 95, 99,117,114,118,101, 0,114,101,115,111,108, 91, 51, 93, 0,105,
-110,116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116,101,110,100, 0,115,109,
-111,107,101,100, 95,116,121,112,101, 0,105,110,116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,
-114, 97,109,101, 0,115,111,117,114, 99,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42,100, 97,116, 97,115,101,116, 0,
- 99, 97, 99,104,101,100,102,114, 97,109,101, 0,111, 99,101, 97,110,109,111,100, 91, 54, 52, 93, 0,111,117,116,112,117,116, 0,
-110,111,105,115,101,115,105,122,101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116,
- 0,115, 97,116,117,114, 97,116,105,111,110, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,
-114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,
-118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,
-116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,
-118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,
-101, 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,
-115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,
-114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,
-116,101,114, 0, 97,102,109, 97,120, 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,
-114,100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,
-103,105,110, 0, 42,101,110,118, 0, 42,112,100, 0, 42,118,100, 0, 42,111,116, 0,117,115,101, 95,110,111,100,101,115, 0,108,
-111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,
-120, 91, 51, 93, 0, 99,111, 98, 97, 0, 98,108,101,110,100, 95, 99,111,108,111,114, 91, 51, 93, 0, 98,108,101,110,100, 95,102,
- 97, 99,116,111,114, 0, 98,108,101,110,100, 95,116,121,112,101, 0,112, 97,100, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,
-101,120, 0,115,104,100,119,114, 0,115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,
-114,103,121, 0,100,105,115,116, 0,115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,
-116, 0, 97,116,116, 49, 0, 97,116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,
-115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0,112, 97,
-100, 53, 91, 51, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,
-114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114,
- 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101,
- 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121,
- 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,
-112, 95,109,101,116,104,111,100, 0,116,101,120, 97, 99,116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110,
- 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,
-110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,
-115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,
-115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,
-105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,
-111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,
-121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101,120,112,111,115,117,114,101, 0,115,107,121, 95, 99,111,108,111,114,
-115,112, 97, 99,101, 0,112, 97,100, 52, 91, 54, 93, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,117,
-114,101, 0,112, 97,100, 54, 91, 52, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,116,
-116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51,
- 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,110,
- 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,111,
-102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,104, 97,100,101,
-102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,116,
-105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,110,115,105,116,
-121, 0,109,115, 95,115,112,114,101, 97,100, 0, 97,108,112,104, 97, 95, 98,108,101,110,100, 0,102, 97, 99,101, 95,111,114,105,
-101,110,116, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,115,112,101,
- 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109, 98,
- 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121, 95,
-109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100, 0,
-116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,103, 97,109,101, 0,102,114,101,115,110,101,108, 95,109,105,
-114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,115,
-110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,108,
-108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,114,
- 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114, 97,
- 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0, 97,
-100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114, 97,
- 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,111,
- 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,116,
- 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,101,
- 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,115,
-116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,114,
-102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,101,
- 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 54, 52, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,
-104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101, 0,
-112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,
-100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99,
- 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108,
- 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,
-101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,
-114, 97,109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,102,
- 97, 99, 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101,
- 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114,
- 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,
-115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,
-101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,
-103, 0,115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,115,104, 97,100,
-111,119,111,110,108,121, 95,102,108, 97,103, 0,105,110,100,101,120, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0, 42, 98,
- 98, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,101,
-120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,101,
-108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102,108, 97,103, 50,
- 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114,101,
-115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,
-104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, 97,
-116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115,111,108,118, 0,111,
-114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115,117,
- 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, 95,105,110,116,101,
-114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,119, 0,104, 0,110,117,114, 98,115, 0, 42,107,101,121,105,110,
-100,101,120, 0,115,104, 97,112,101,110,114, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, 98,101,118,111,
- 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97,116,104, 0,
- 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, 0,116,119,105,
-115,116, 95,115,109,111,111,116,104, 0,115,109, 97,108,108, 99, 97,112,115, 95,115, 99, 97,108,101, 0,112, 97,116,104,108,101,
-110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,108,
-117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115,116,115,101,108, 0,
-115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,114,
- 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116, 0,
-120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, 98,111,120,101,115,
- 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,102,
-111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0,116,111,
-116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100, 0,
- 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0, 42,109,115,101,108,101, 99,116, 0, 42,109,112,111,108,121,
- 0, 42,109,116,112,111,108,121, 0, 42,109,108,111,111,112, 0, 42,109,108,111,111,112,117,118, 0, 42,109,108,111,111,112, 99,
-111,108, 0, 42,109,102, 97, 99,101, 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0,
- 42,109,101,100,103,101, 0, 42,100,118,101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,
-120, 99,111,109,101,115,104, 0, 42,101,100,105,116, 95, 98,116,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97,
- 0,102,100, 97,116, 97, 0,112,100, 97,116, 97, 0,108,100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97,
- 99,101, 0,116,111,116,115,101,108,101, 99,116, 0,116,111,116,112,111,108,121, 0,116,111,116,108,111,111,112, 0, 97, 99,116,
- 95,102, 97, 99,101, 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,
-115,117, 98,115,117,114,102,116,121,112,101, 0,101,100,105,116,102,108, 97,103, 0, 42,109,114, 0, 42,116,112, 97,103,101, 0,
-117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114,
- 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,
-105,103,104,116, 0,100,101,102, 95,110,114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,
-110,111, 91, 51, 93, 0,108,111,111,112,115,116, 97,114,116, 0,118, 0,101, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,
-102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0,108,101,118,101,108, 0, 40, 42,100,105,115,112,115,
- 41, 40, 41, 0, 42,104,105,100,100,101,110, 0,118, 91, 52, 93, 0,109,105,100, 0,112, 97,100, 91, 50, 93, 0,118, 91, 50, 93,
- 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108,102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,
-108,101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,
-108, 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,
-111,108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0,115,116, 97,
- 99,107,105,110,100,101,120, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 0, 42,116,101,120,116,117,114,101,
- 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 54, 52, 93, 0,117,118,
-108, 97,121,101,114, 95,116,109,112, 0,116,101,120,109, 97,112,112,105,110,103, 0,115,117, 98,100,105,118, 84,121,112,101, 0,
-114,101,110,100,101,114, 76,101,118,101,108,115, 0, 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,115,116,
-114,101,110,103,116,104, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,
-100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,
-101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111,102,102,
-115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116, 95,116,
-121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108,101,114,
- 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,
-101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,
-115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101, 91, 54, 52, 93, 0, 42,100,
-111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0,116,105,109,101, 0,100,105,114,101, 99,116,105,111,110,
- 0,109,105,100,108,101,118,101,108, 0, 42,112,114,111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101,
- 0,110,117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,
-115, 99, 97,108,101,120, 0,115, 99, 97,108,101,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,
-102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120, 0,
-115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,
-102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0,100,101,102,111,114,109,
-102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, 98,116, 97,114,103,101,116, 91, 54, 52,
- 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120,
- 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,
-115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,
-104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,111,108,100, 0, 42, 99,117,114,114,
-101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,117,114,114,101,110,116, 95,118, 0, 42,
-109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,101,115, 0,116,105,109,101, 95,120, 0,
-116,105,109,101, 95,120,110,101,119, 0, 42, 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,
-112,101,114, 97,116,105,111,110, 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,
-100,115,105,122,101, 0, 42, 98,105,110,100,105,110,102,108,117,101,110, 99,101,115, 0, 42, 98,105,110,100,111,102,102,115,101,
-116,115, 0, 42, 98,105,110,100, 99, 97,103,101, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,
-103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112,
- 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,
-110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42, 98,105,110,100,119,101,
-105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0, 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,
-121,115, 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101,
- 0,112,111,115,105,116,105,111,110, 0,114, 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112,
- 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0,108,118,108, 0,115, 99,117,108,112,116,108,118,108, 0,116,
-111,116,108,118,108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,
-114,103,101,116, 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 54, 52, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,
-114,105,110,107, 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,
-115,117,114,102, 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91,
- 50, 93, 0,111,114,105,103,105,110, 79,112,116,115, 0,111,102,102,115,101,116, 95,102, 97, 99, 0,111,102,102,115,101,116, 95,
-102, 97, 99, 95,118,103, 0, 99,114,101, 97,115,101, 95,105,110,110,101,114, 0, 99,114,101, 97,115,101, 95,111,117,116,101,114,
- 0, 99,114,101, 97,115,101, 95,114,105,109, 0,109, 97,116, 95,111,102,115, 0,109, 97,116, 95,111,102,115, 95,114,105,109, 0,
- 42,111, 98, 95, 97,120,105,115, 0,115,116,101,112,115, 0,114,101,110,100,101,114, 95,115,116,101,112,115, 0,105,116,101,114,
- 0,115, 99,114,101,119, 95,111,102,115, 0, 97,110,103,108,101, 0, 42,111, 99,101, 97,110, 0, 42,111, 99,101, 97,110, 99, 97,
- 99,104,101, 0,114,101,115,111,108,117,116,105,111,110, 0,115,112, 97,116,105, 97,108, 95,115,105,122,101, 0,119,105,110,100,
- 95,118,101,108,111, 99,105,116,121, 0,115,109, 97,108,108,101,115,116, 95,119, 97,118,101, 0,119, 97,118,101, 95, 97,108,105,
-103,110,109,101,110,116, 0,119, 97,118,101, 95,100,105,114,101, 99,116,105,111,110, 0,119, 97,118,101, 95,115, 99, 97,108,101,
- 0, 99,104,111,112, 95, 97,109,111,117,110,116, 0,102,111, 97,109, 95, 99,111,118,101,114, 97,103,101, 0, 98, 97,107,101,115,
-116, 97,114,116, 0, 98, 97,107,101,101,110,100, 0, 99, 97, 99,104,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111, 97,
-109,108, 97,121,101,114,110, 97,109,101, 91, 54, 52, 93, 0, 99, 97, 99,104,101,100, 0,103,101,111,109,101,116,114,121, 95,109,
-111,100,101, 0,114,101,102,114,101,115,104, 0,114,101,112,101, 97,116, 95,120, 0,114,101,112,101, 97,116, 95,121, 0,102,111,
- 97,109, 95,102, 97,100,101, 0, 42,111, 98,106,101, 99,116, 95,102,114,111,109, 0, 42,111, 98,106,101, 99,116, 95,116,111, 0,
-102, 97,108,108,111,102,102, 95,114, 97,100,105,117,115, 0,101,100,105,116, 95,102,108, 97,103,115, 0,100,101,102, 97,117,108,
-116, 95,119,101,105,103,104,116, 0, 42, 99,109, 97,112, 95, 99,117,114,118,101, 0, 97,100,100, 95,116,104,114,101,115,104,111,
-108,100, 0,114,101,109, 95,116,104,114,101,115,104,111,108,100, 0,109, 97,115,107, 95, 99,111,110,115,116, 97,110,116, 0,109,
- 97,115,107, 95,100,101,102,103,114,112, 95,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,115,107, 95,116,101,120, 95,117,115,101,
- 95, 99,104, 97,110,110,101,108, 0, 42,109, 97,115,107, 95,116,101,120,116,117,114,101, 0, 42,109, 97,115,107, 95,116,101,120,
- 95,109, 97,112, 95,111, 98,106, 0,109, 97,115,107, 95,116,101,120, 95,109, 97,112,112,105,110,103, 0,109, 97,115,107, 95,116,
-101,120, 95,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 54, 52, 93, 0,112, 97,100, 95,105, 49, 0,100,101,102,103,114,
-112, 95,110, 97,109,101, 95, 97, 91, 54, 52, 93, 0,100,101,102,103,114,112, 95,110, 97,109,101, 95, 98, 91, 54, 52, 93, 0,100,
-101,102, 97,117,108,116, 95,119,101,105,103,104,116, 95, 97, 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 95, 98,
- 0,109,105,120, 95,109,111,100,101, 0,109,105,120, 95,115,101,116, 0,112, 97,100, 95, 99, 49, 91, 54, 93, 0,112,114,111,120,
-105,109,105,116,121, 95,109,111,100,101, 0,112,114,111,120,105,109,105,116,121, 95,102,108, 97,103,115, 0, 42,112,114,111,120,
-105,109,105,116,121, 95,111, 98, 95,116, 97,114,103,101,116, 0,109,105,110, 95,100,105,115,116, 0,109, 97,120, 95,100,105,115,
-116, 0,112, 97,100, 95,115, 49, 0, 42, 99, 97,110,118, 97,115, 0, 42, 98,114,117,115,104, 0,116,104,114,101,115,104,111,108,
-100, 0,115, 99, 97,108,101, 0,104,101,114,109,105,116,101, 95,110,117,109, 0, 42,108, 97,116,116, 0,112,110,116,115,119, 0,
-111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118,
- 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108,
- 97,116,116,105, 99,101,100, 97,116, 97, 0,108, 97,116,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,
-116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49,
- 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,114, 91, 54, 52, 93, 0, 42,116,114, 97, 99,107, 0,
- 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0,
- 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 97,118,115, 0,
- 42,109,112, 97,116,104, 0, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,101,102,102,101, 99,116,
- 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115,116,111,114,101, 95,109,111,100,101, 0,
- 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,
-100,115,105,122,101, 91, 51, 93, 0,100,115, 99, 97,108,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116,
- 91, 52, 93, 0,114,111,116, 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,
-103,108,101, 0,100,114,111,116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,
-110,118, 91, 52, 93, 91, 52, 93, 0,105,109, 97,116, 95,114,101,110, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0,112, 97,100, 54,
- 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112,114,111,116,101, 99,116,102,108, 97,103, 0,116,
-114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0,
-115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0,112, 97,100, 53, 0,100,117,112,111,110, 0,100,117,
-112,111,102,102, 0,100,117,112,115,116, 97, 0,100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,
-110,103, 0,105,110,101,114,116,105, 97, 0,102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109,
- 97,114,103,105,110, 0,109, 97,120, 95,118,101,108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,
-114,111, 99,101,115,115,105,110,103, 84,104,114,101,115,104,111,108,100, 0,111, 98,115,116, 97, 99,108,101, 82, 97,100, 0,114,
-111,116,109,111,100,101, 0, 98,111,117,110,100,116,121,112,101, 0, 99,111,108,108,105,115,105,111,110, 95, 98,111,117,110,100,
-116,121,112,101, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,100,116, 0,101,109,112,116,121, 95,100,114, 97,119,116,
-121,112,101, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99,101,115, 99, 97, 0,112,114,
-111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,116,111,114,115,
- 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,
-108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115,111,116,114,111,112,105, 99,
- 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110,108, 97,115,116,114,105,112,
-115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0, 42,115,111,102,116, 0, 42,100,117,
-112, 95,103,114,111,117,112, 0, 98,111,100,121, 95,116,121,112,101, 0,115,104, 97,112,101,102,108, 97,103, 0, 42,102,108,117,
-105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,
-114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97,115,107, 0, 99,117,115,116,111,109,100, 97,
-116, 97, 95,109, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108, 97,109,112,
- 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0,105,109, 97, 95,111,102,115, 91, 50, 93, 0, 99,117,
-114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,111,114,105,103,108, 97,121, 0,111,109, 97,116, 91, 52, 93, 91, 52, 93,
- 0,111,114, 99,111, 91, 51, 93, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116,101,100, 0,100,101,102,108,101, 99,
-116, 0,102,111,114, 99,101,102,105,101,108,100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107,
- 0,107,105,110,107, 95, 97,120,105,115, 0,122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,
-112, 0,102, 95,102,108,111,119, 0,102, 95,115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,
-109,105,110,100,105,115,116, 0,102, 95,112,111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,
-112,100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,
-100,101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0,112,100,101,102, 95,115,116,105, 99,107,
-110,101,115,115, 0, 97, 98,115,111,114,112,116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102,
- 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,
-112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95,
- 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,
-105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114,116,
- 91, 51, 93, 0,116,111,116,100, 97,116, 97, 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,
-116,121,112,101,115, 0, 42,100, 97,116, 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,101,120,116,114, 97,100, 97,116, 97,
- 0,115,116,101,112, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, 97,
-109,101, 0,101,100,105,116,102,114, 97,109,101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0,108, 97,115,116, 95,118, 97,108,
-105,100, 0, 99,111,109,112,114,101,115,115,105,111,110, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,
-111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42, 99, 97, 99,104,101,100, 95,102,114, 97,109,101,115, 0,
-109,101,109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,
-105,110, 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,
-111,110,115, 0,112,105,116,101,114, 97,116,105,111,110,115, 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,
-114, 97,116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95,
- 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83,
- 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,
-107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,
-105,115,105,111,110,102,108, 97,103,115, 0,110,117,109, 99,108,117,115,116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,
-119,101,108,100,105,110,103, 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,
-110,103, 0,109,115,103, 95,108,111, 99,107, 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110,
- 97,109,101,100, 86, 71, 95, 77, 97,115,115, 91, 54, 52, 93, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,
-114,107,108,105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103,
- 0,103,111, 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111,
- 97,108, 0,118,101,114,116,103,114,111,117,112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 54, 52,
- 93, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,
-101,100, 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 54, 52, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,
-108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,
-116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,
-109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,
-105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68,
- 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,
-115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,
-102,102,101, 99,116,111,114, 95,119,101,105,103,104,116,115, 0,108, 99,111,109, 91, 51, 93, 0,108,114,111,116, 91, 51, 93, 91,
- 51, 93, 0,108,115, 99, 97,108,101, 91, 51, 93, 91, 51, 93, 0,108, 97,115,116, 95,102,114, 97,109,101, 0,118,101,108, 91, 51,
- 93, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,
-108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101,
- 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,
-101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,
-105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,118, 91, 51, 93, 0, 97,110,105,109, 83,116, 97,
-114,116, 0, 97,110,105,109, 69,110,100, 0, 98, 97,107,101, 83,116, 97,114,116, 0, 98, 97,107,101, 69,110,100, 0,102,114, 97,
-109,101, 79,102,102,115,101,116, 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120,
- 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 66,
- 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0,
- 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,
-101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,
-103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,
-115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,
-115, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,
-104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,122,101, 0, 42,109,101,115,104, 86,101,108,111, 99,105,116,105,101,115, 0,
- 99,112,115, 84,105,109,101, 83,116, 97,114,116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,
-116,121, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,
-111,114, 99,101, 82, 97,100,105,117,115, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104,
- 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,
-109,101, 0, 97,110,105,109, 82, 97,116,101, 0,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,
-114, 98, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,
-114,101, 0,101,120,112, 0,114, 97,110,103,101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,
-116,121, 0, 97, 99,116,105,118,105,116,121, 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,
-108,117,115,105,111,110, 82,101,115, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,
-109, 97,120,108,111,103,105, 99,115,116,101,112, 0,112,104,121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,
-101,112, 0,109,105,115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,
-115,116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101,
- 0,115,116, 97,114,109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,
-115,101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,
-111,100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0,
- 97,111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,
-100, 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,
-111, 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,
-105,111,110, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95,101,110,101,114,103,121, 0, 97,111, 95,101,110,118, 95,101,110,
-101,114,103,121, 0, 97,111, 95,112, 97,100, 50, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95, 98,111,117,110, 99,101,115,
- 0, 97,111, 95,112, 97,100, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114,
- 95,109,101,116,104,111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,
-114,101, 0, 42, 97,111,116, 97, 98,108,101,115, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,
-109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99,
- 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121,
- 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108,
- 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,
-109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,
-111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, 0, 99,111,100,101, 99, 83,112, 97,
-116,105, 97,108, 81,117, 97,108,105,116,121, 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, 70,108, 97,103,115, 0, 99,111,108,
-111,114, 68,101,112,116,104, 0, 99,111,100,101, 99, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110,
- 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,
-121, 0,107,101,121, 70,114, 97,109,101, 82, 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 99,111,100,101,
- 99, 84,121,112,101, 0, 97,117,100,105,111, 83, 97,109,112,108,101, 82, 97,116,101, 0, 97,117,100,105,111, 66,105,116, 68,101,
-112,116,104, 0, 97,117,100,105,111, 67,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, 67,111,100,101, 99, 70,108, 97,103,
-115, 0, 97,117,100,105,111, 66,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111,
- 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,
-114, 97,116,101, 0, 97,117,100,105,111, 95, 99,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, 95,112, 97,100, 0, 97,117,
-100,105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,
-114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112,
- 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110,
- 0,115,112,101,101,100, 95,111,102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111,114, 0,100,
-105,115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,
-104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121, 95,101,120, 99,108,117,100,
-101, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0,115, 97,109,112,
-108,101,115, 0,105,109,116,121,112,101, 0,112,108, 97,110,101,115, 0,113,117, 97,108,105,116,121, 0, 99,111,109,112,114,101,
-115,115, 0,101,120,114, 95, 99,111,100,101, 99, 0, 99,105,110,101,111,110, 95,102,108, 97,103, 0, 99,105,110,101,111,110, 95,
-119,104,105,116,101, 0, 99,105,110,101,111,110, 95, 98,108, 97, 99,107, 0, 99,105,110,101,111,110, 95,103, 97,109,109, 97, 0,
-106,112, 50, 95,102,108, 97,103, 0,105,109, 95,102,111,114,109, 97,116, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97,
- 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,113,116, 99,111,100,101, 99,115,101,116,116,105,110,103,115, 0,102,102,
- 99,111,100,101, 99,100, 97,116, 97, 0,115,117, 98,102,114, 97,109,101, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,
-109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0,
- 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,
-114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98,
- 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,
-115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114,
-116,115, 0,121,112, 97,114,116,115, 0,115,117, 98,105,109,116,121,112,101, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,
-115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112,116,105,111,110,115, 0,114, 97,121,116,114, 97, 99,
-101, 95,115,116,114,117, 99,116,117,114,101, 0,111, 99,114,101,115, 0,112, 97,100, 52, 0, 97,108,112,104, 97,109,111,100,101,
- 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,
-101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0,109, 98,108,117,114, 95,
-115, 97,109,112,108,101,115, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103,
- 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,
-115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98,
- 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,
-107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,
-117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,
-100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0,112,105, 99, 91, 49, 48, 50, 52, 93, 0,115,116, 97,109,112, 0,115,116,
- 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 55, 54, 56, 93, 0,102,103, 95,
-115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,101,113, 95,112,114,101,118, 95,116,121,
-112,101, 0,115,101,113, 95,114,101,110,100, 95,116,121,112,101, 0,115,101,113, 95,102,108, 97,103, 0,112, 97,100, 53, 91, 53,
- 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102,
- 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121,
- 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,
-119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112,
- 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115,
- 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, 97,110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109,
-101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,110, 97,109,
-101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,
-115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109, 97,120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0,
-114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,116, 0, 99,111,108, 91, 51, 93, 0, 99,101,108,108,115,105,122,101,
- 0, 99,101,108,108,104,101,105,103,104,116, 0, 97,103,101,110,116,109, 97,120,115,108,111,112,101, 0, 97,103,101,110,116,109,
- 97,120, 99,108,105,109, 98, 0, 97,103,101,110,116,104,101,105,103,104,116, 0, 97,103,101,110,116,114, 97,100,105,117,115, 0,
-101,100,103,101,109, 97,120,108,101,110, 0,101,100,103,101,109, 97,120,101,114,114,111,114, 0,114,101,103,105,111,110,109,105,
-110,115,105,122,101, 0,114,101,103,105,111,110,109,101,114,103,101,115,105,122,101, 0,118,101,114,116,115,112,101,114,112,111,
-108,121, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,100,105,115,116, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,
-109, 97,120,101,114,114,111,114, 0,102,114, 97,109,105,110,103, 0,112,108, 97,121,101,114,102,108, 97,103, 0,114,116, 49, 0,
-114,116, 50, 0, 97, 97,115, 97,109,112,108,101,115, 0,112, 97,100, 52, 91, 51, 93, 0,100,111,109,101, 0,115,116,101,114,101,
-111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,116,105,111,110, 0,114,101, 99, 97,115,116, 68, 97,116, 97, 0,109,
- 97,116,109,111,100,101, 0,101,120,105,116,107,101,121, 0,111, 98,115,116, 97, 99,108,101, 83,105,109,117,108, 97,116,105,111,
-110, 0,108,101,118,101,108, 72,101,105,103,104,116, 0, 42, 99, 97,109,101,114, 97, 0, 42,112, 97,105,110,116, 95, 99,117,114,
-115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,115,101,
- 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108, 95, 97,110,103,108,101, 0,115, 99,114,101,101,110, 95,103,114, 97,
- 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,105,110,116, 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111,
-116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104,
- 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116,
-121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97,100,101, 95,102,114, 97,109,101,115, 0,114, 97,100,105, 97,108,
- 95,115,121,109,109, 91, 51, 93, 0,108, 97,115,116, 95,120, 0,108, 97,115,116, 95,121, 0,108, 97,115,116, 95, 97,110,103,108,
-101, 0,100,114, 97,119, 95, 97,110, 99,104,111,114,101,100, 0, 97,110, 99,104,111,114,101,100, 95,115,105,122,101, 0, 97,110,
- 99,104,111,114,101,100, 95,108,111, 99, 97,116,105,111,110, 91, 51, 93, 0, 97,110, 99,104,111,114,101,100, 95,105,110,105,116,
-105, 97,108, 95,109,111,117,115,101, 91, 50, 93, 0,100,114, 97,119, 95,112,114,101,115,115,117,114,101, 0,112,114,101,115,115,
-117,114,101, 95,118, 97,108,117,101, 0,115,112,101, 99,105, 97,108, 95,114,111,116, 97,116,105,111,110, 0, 42,118,112, 97,105,
-110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, 95,112,114,101,118, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,117,
-110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,
-116, 0, 42,117,118,115, 99,117,108,112,116, 0,118,103,114,111,117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114,
-116,121,112,101, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114,
- 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, 97,108,115,105,122,101, 0, 97,117,116,111,109,
-101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118,101,114,116,105, 99,101,115, 0,117,110,119,
-114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,
-115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114,
- 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0,117,118, 95,
-102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117,118, 95,115,117, 98,115,117,114,102, 95,108,101,
-118,101,108, 0,103,112,101,110, 99,105,108, 95,102,108, 97,103,115, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108,101,
-110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108,
- 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104,
- 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0,109,117,108,116,105,
-114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,112, 97,100, 50, 91, 53, 93, 0,115,107,103,101,110, 95,114,101,
-115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,
-108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110,
- 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116,
- 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,
-116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,
-115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97,110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101,
-110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116,104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,
-101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112,
-116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,
-111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115,
-107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108, 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101,
- 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99,
-111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0,
-115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116,
- 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110, 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0,
-115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103, 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,101,100,
-103,101, 95,109,111,100,101, 95,108,105,118,101, 95,117,110,119,114, 97,112, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110,
- 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111,114,116,105,111,110, 97,108,
- 0,112,114,111,112, 95,109,111,100,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,111, 98,106,101, 99,116,115, 0,
-112, 97,100, 91, 53, 93, 0, 97,117,116,111, 95,110,111,114,109, 97,108,105,122,101, 0,109,117,108,116,105,112, 97,105,110,116,
- 0,117,115,101, 95,117,118, 95,115, 99,117,108,112,116, 0,117,118, 95,115, 99,117,108,112,116, 95,115,101,116,116,105,110,103,
-115, 0,117,118, 95,115, 99,117,108,112,116, 95,116,111,111,108, 0,117,118, 95,114,101,108, 97,120, 95,109,101,116,104,111,100,
- 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,115, 99,117,108,112,116, 95,112, 97,
-105,110,116, 95,117,110,105,102,105,101,100, 95,115,105,122,101, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,
-105,102,105,101,100, 95,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0,115, 99,117,108,112,116, 95,
-112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95, 97,108,112,104, 97, 0,117,110,105,102,105,101,100, 95,112, 97,105,110,
-116, 95,115,101,116,116,105,110,103,115, 0,116,111,116,111, 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106,
-115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101,
- 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,121,115,116,101,109, 0,115,121,115,116,101,109, 95,114,111,116, 97,
-116,105,111,110, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0,113,117,105, 99,107, 95, 99, 97, 99,104,101, 95,115,116,101,112,
- 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,105,
-116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,
-119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0,108, 97,121, 95,117,112,100, 97,116,101,100, 0, 42,101,100, 0, 42,
-116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102,
-111,114,109, 95,115,112, 97, 99,101,115, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 0, 42,115,111,117,110,100, 95,115,
- 99,101,110,101, 95,104, 97,110,100,108,101, 0, 42,115,111,117,110,100, 95,115, 99,114,117, 98, 95,104, 97,110,100,108,101, 0,
- 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101,115, 0, 42,102,112,115, 95,105,110,102,111, 0, 42,116,104,101, 68,
- 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97,103,115, 0, 97, 99,116,105,118,101, 95,107,101,
-121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105,
- 99,115, 95,115,101,116,116,105,110,103,115, 0, 42, 99,108,105,112, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,
-107, 95,109,111,100, 97,108, 0, 99,117,115,101,114, 0, 98,108,101,110,100, 0,118,105,101,119, 0,119,105,110,109, 97,116, 91,
- 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52,
- 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,
-101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0, 99,108,
-105,112, 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,111, 99, 97,108, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98,
- 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,110,100,101,114, 95,101,110,103,105,110,101, 0, 42,100,
-101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116,105,109,101,114, 0,116,119,109, 97,116, 91, 52,
- 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100,
-121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,111,109, 0,105,115, 95,112,101,114,115,112, 0,112,101,114,115,112,
- 0,118,105,101,119,108,111, 99,107, 0,116,119,100,114, 97,119,102,108, 97,103, 0,114,102,108, 97,103, 0,108,118,105,101,119,
-113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, 0,103,114,105,100,118,105,101,119, 0,116,119,
- 97,110,103,108,101, 91, 51, 93, 0,114,111,116, 95, 97,110,103,108,101, 0,114,111,116, 95, 97,120,105,115, 91, 51, 93, 0,114,
-101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,
-108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0, 98,117,110,100,108,101, 95,115,105,122,101, 0, 98,117,110,100,108,
-101, 95,100,114, 97,119,116,121,112,101, 0,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 98,
-103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 54,
- 52, 93, 0,100,114, 97,119,116,121,112,101, 0,111, 98, 95, 99,101,110,116,114,101, 95, 99,117,114,115,111,114, 0,115, 99,101,
-110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,103,114,105,100, 0,110,101, 97,114, 0,102, 97,114, 0,109,111,100,101,
-115,101,108,101, 99,116, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,115,117, 98,100,105,118, 0,103,114,105,100,
-102,108, 97,103, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,112, 97,100, 50, 91, 50,
- 93, 0, 97,102,116,101,114,100,114, 97,119, 95,116,114, 97,110,115,112, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,
-121, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,121,116,114, 97,110,115,112, 0,122, 98,117,102, 0,120,114, 97,121,
- 0,112, 97,100, 51, 91, 50, 93, 0, 42,112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,
-116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109,
- 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112,116,111,
-116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105,
-110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0,116,
- 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0,114,112,116, 95,109, 97,115,107, 0,118, 50,100, 0, 42, 97,100,115,
- 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0,
-109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115,101,114, 0,114,101, 95, 97,108,105,103,110, 0,
-112,114,101,118,105,101,119, 0,116,101,120,116,117,114,101, 95, 99,111,110,116,101,120,116, 0,112, 97,116,104,102,108, 97,103,
- 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, 0, 42,116,101,120,117,115,101,114, 0,114,101,110,100,101,114,
- 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,105,116,108,101,
- 91, 51, 50, 93, 0,100,105,114, 91, 49, 48, 53, 54, 93, 0,102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,102,
-105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,101,100,105,116, 91, 50, 53, 54, 93, 0,102,105,108,116,101,114, 95,
-103,108,111, 98, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108, 95,102,105,114,115,116, 0,115,
-101,108, 95,108, 97,115,116, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0,102, 95,102,112, 0,102,112, 95,115,116,114,
- 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,101,116, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115,
- 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110,101,120,116, 0, 42,111,112,
- 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 0,114,101, 99,
-101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114, 0,116,114,101,101, 0, 42,
-116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114,
- 99,104, 95,116,115,101, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0,115,101, 97,114,
- 99,104, 95,102,108, 97,103,115, 0, 42, 99,117,109, 97,112, 0,115, 99,111,112,101,115, 0,115, 97,109,112,108,101, 95,108,105,
-110,101, 95,104,105,115,116, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 99,117,
-114,116,105,108,101, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117,
-118,115,116,114,101,116, 99,104, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,109,101,110,
-117,110,114, 0,108,104,101,105,103,104,116, 0, 99,119,105,100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108,
-101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121,
-110,116, 97,120, 0,108,105,110,101, 95,104,108,105,103,104,116, 0,111,118,101,114,119,114,105,116,101, 0,108,105,118,101, 95,
-101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98,
- 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108,117,103,105,110,115, 0,102,105,110,100,115,116,114, 91, 50, 53,
- 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, 54, 93, 0,109, 97,114,103,105,110, 95, 99,111,108,117,109,110,
- 0, 42,100,114, 97,119, 99, 97, 99,104,101, 0, 42,112,121, 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,
-112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,
-121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,
-101, 91, 49, 48, 50, 52, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42,
- 98,117,116, 95,114,101,102,115, 0, 42, 97,114,114, 97,121, 0, 99, 97, 99,104,101,115, 0, 99, 97, 99,104,101, 95,100,105,115,
-112,108, 97,121, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0,112, 97,100,102, 0,109,120, 0,109,121, 0, 42,101,100,105,116,
-116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,115,104, 97,100,101,114,102,114,111,109,
- 0,108,105,110,107,100,114, 97,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,115, 99,114,111,108,
-108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112,116, 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97,
-103,101, 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,116, 0,115,101,108, 95,101,110,100, 0,102,105,108,116,101,114, 91,
- 54, 52, 93, 0,120,108,111, 99,107,111,102, 0,121,108,111, 99,107,111,102, 0,117,115,101,114, 0,112, 97,116,104, 95,108,101,
-110,103,116,104, 0,108,111, 99, 91, 50, 93, 0,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,117,110,105,115,116, 97,
- 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,116,112,114,111, 99, 95,102,108, 97,103, 0, 42,100,114, 97,119, 95, 99,
-111,110,116,101,120,116, 0,102,105,108,101,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0, 98,108,102, 95,105,100, 0,117,105,102,
-111,110,116, 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97,
-108,105, 99, 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100,
-111,119, 97,108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103,
-114,111,117,112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110,
-101,108,122,111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104,
- 97,114,115, 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111,
-120,115,112, 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121,
- 0,112, 97,110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,111,117,116,108,105,110,101, 91, 52,
- 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109, 91, 52, 93, 0,
-116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115,104, 97,100,101,
-116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, 99,107, 0,105,110,110,101,114, 95,
- 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,
-107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,
-105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93, 0,104,101, 97,100,
-101,114, 91, 52, 93, 0,115,104,111,119, 95,104,101, 97,100,101,114, 0,119, 99,111,108, 95,114,101,103,117,108, 97,114, 0,119,
- 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, 95,114, 97,100,105,111, 0,119, 99,
-111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, 99,111,108, 95,110,117,109, 0,119,
- 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, 0,119, 99,111,108, 95,112,117,108,
-108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99,111,108, 95,109,101,110,117, 95,105,
-116,101,109, 0,119, 99,111,108, 95,116,111,111,108,116,105,112, 0,119, 99,111,108, 95, 98,111,120, 0,119, 99,111,108, 95,115,
- 99,114,111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111,108, 95,108,105,115,116, 95,105,116,
-101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,112, 97,110,101,108, 0,105, 99,111,110,102,105,108,101, 91, 50, 53, 54,
- 93, 0,105, 99,111,110, 95, 97,108,112,104, 97, 0, 98, 97, 99,107, 91, 52, 93, 0,116,105,116,108,101, 91, 52, 93, 0,116,101,
-120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95,
-116,101,120,116, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110,
- 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91,
- 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115,
-116, 95,116,105,116,108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,
-116, 95,104,105, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0,
-112, 97,110,101,108, 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115,
-104, 97,100,101, 49, 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,
-100, 91, 52, 93, 0,119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0,115,
-112,101, 97,107,101,114, 91, 52, 93, 0,101,109,112,116,121, 91, 52, 93, 0, 99, 97,109,101,114, 97, 91, 52, 93, 0,112, 97,100,
- 91, 56, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,
-105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,
-114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101,
- 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93,
- 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0,101,100,103,101, 95, 99,114,101, 97,115,101, 91, 52, 93, 0,
-102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116, 91,
- 52, 93, 0,101,120,116,114, 97, 95,101,100,103,101, 95,108,101,110, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95,
- 97,110,103,108,101, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,114,101, 97, 91, 52, 93, 0,112, 97,100, 51,
- 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,110,111,114,109, 97,108, 91, 52, 93, 0, 98,
-111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91,
- 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,110,117,114,
- 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,118,108,105,110,101, 91, 52, 93, 0, 97, 99,116, 95,115,112,108,
-105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,
-108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,115,116,115,101,108, 95,112,111,105,110,116, 91, 52, 93, 0,104, 97,110,100,
-108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101,
- 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95,
- 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,102,114,101,101, 91,
- 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108,
- 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,
-100,108,101, 95,115,101,108, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,110,
-101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,111,
-117,116,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,
-101, 95,105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, 91, 52, 93, 0, 99,111,110,115,111,
-108,101, 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,111,117,116,108,105,110,101,
- 95,119,105,100,116,104, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0,110,111,111,100,108,101, 95, 99,117,114,118,105,
-110,103, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52, 93, 0,115,121,110,116, 97,120, 98,
- 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91, 52, 93, 0,109,111,118,105,101, 91,
- 52, 93, 0,109,111,118,105,101, 99,108,105,112, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,101, 91, 52,
- 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52, 93, 0,116,
-114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104, 95, 97, 99,
-116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,108,101, 95,
-118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,
-105,122,101, 0,109, 97,114,107,101,114, 95,111,117,116,108,105,110,101, 91, 52, 93, 0,109, 97,114,107,101,114, 91, 52, 93, 0,
- 97, 99,116, 95,109, 97,114,107,101,114, 91, 52, 93, 0,115,101,108, 95,109, 97,114,107,101,114, 91, 52, 93, 0,100,105,115, 95,
-109, 97,114,107,101,114, 91, 52, 93, 0,108,111, 99,107, 95,109, 97,114,107,101,114, 91, 52, 93, 0, 98,117,110,100,108,101, 95,
-115,111,108,105,100, 91, 52, 93, 0,112, 97,116,104, 95, 98,101,102,111,114,101, 91, 52, 93, 0,112, 97,116,104, 95, 97,102,116,
-101,114, 91, 52, 93, 0, 99, 97,109,101,114, 97, 95,112, 97,116,104, 91, 52, 93, 0,104,112, 97,100, 91, 55, 93, 0,112,114,101,
-118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,102, 97, 99,101,
- 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,101,100,103,101, 91, 52, 93, 0,112,114,101,118,105,
-101,119, 95,115,116,105,116, 99,104, 95,118,101,114,116, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104,
- 95,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,117,110,
-115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95, 97, 99,116,
-105,118,101, 91, 52, 93, 0,109, 97,116, 99,104, 91, 52, 93, 0,115,101,108,101, 99,116,101,100, 95,104,105,103,104,108,105,103,
-104,116, 91, 52, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116,102,
-105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,
-109, 97, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99,
- 0,116,117,115,101,114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, 99,108,105,112, 0,116, 97,114,109, 91, 50,
- 48, 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0,
-115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114,
- 91, 55, 54, 56, 93, 0,102,111,110,116,100,105,114, 91, 55, 54, 56, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 48, 50,
- 52, 93, 0,116,101,120,116,117,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 55, 54, 56, 93,
- 0,112,108,117,103,115,101,113,100,105,114, 91, 55, 54, 56, 93, 0,112,121,116,104,111,110,100,105,114, 91, 55, 54, 56, 93, 0,
-115,111,117,110,100,100,105,114, 91, 55, 54, 56, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91, 49, 48, 50, 52, 93,
- 0, 97,110,105,109, 95,112,108, 97,121,101,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 95,112,
-114,101,115,101,116, 0,118, 50,100, 95,109,105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101, 99,111,100,101, 95,
-115,116,121,108,101, 0,118,101,114,115,105,111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,109,101, 0,103, 97,
-109,101,102,108, 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108,
- 97,110,103,117, 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102,
-115,105,122,101, 0, 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111,
-102,111,114,109, 97,116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110,
-103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116,
-104,114,101,115,104,111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101,
-115, 0,107,101,121,109, 97,112,115, 0,117,115,101,114, 95,107,101,121,109, 97,112,115, 0, 97,100,100,111,110,115, 0,107,101,
-121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116,101,112,115, 0,117,110,100,111,109,101,109,
-111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,108,105,100,101, 97,
-110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101,116,116,105,110,103,115, 0,116, 98, 95,108,
-101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0,
-116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101,
- 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97,
-116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,103,116,104,114,101,115,104,111,108,100, 0,109,101,
-109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,101,
-115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,101,
-114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,102,
-105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0, 99,117,
-114,115,115,105,122,101, 0, 99,111,108,111,114, 95,112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,111, 95,110,101,119,
- 0,107,101,121,104, 97,110,100,108,101,115, 95,110,101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,115, 99,114, 99, 97,
-115,116,119, 97,105,116, 0,119,105,100,103,101,116, 95,117,110,105,116, 0, 97,110,105,115,111,116,114,111,112,105, 99, 95,102,
-105,108,116,101,114, 0,117,115,101, 95, 49, 54, 98,105,116, 95,116,101,120,116,117,114,101,115, 0,112, 97,100, 56, 0,110,100,
-111,102, 95,115,101,110,115,105,116,105,118,105,116,121, 0,110,100,111,102, 95,102,108, 97,103, 0,103,108, 97,108,112,104, 97,
- 99,108,105,112, 0,116,101,120,116, 95,114,101,110,100,101,114, 0,112, 97,100, 57, 0, 99,111, 98, 97, 95,119,101,105,103,104,
-116, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,111,118,101,114,108, 97,121, 95, 99,111,108, 91, 51, 93, 0,116,119,
-101, 97,107, 95,116,104,114,101,115,104,111,108,100, 0, 97,117,116,104,111,114, 91, 56, 48, 93, 0, 99,111,109,112,117,116,101,
- 95,100,101,118,105, 99,101, 95,116,121,112,101, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101, 95,105,100, 0,102,
- 99,117, 95,105,110, 97, 99,116,105,118,101, 95, 97,108,112,104, 97, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,101, 98,
- 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101,110,101, 0,114,101,100,114, 97,119,115, 95,102,
-108, 97,103, 0,102,117,108,108, 0,116,101,109,112, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114,
-101,102,114,101,115,104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112,
- 97,105,110,116, 99,117,114,115,111,114, 0,100,111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,112, 0,109, 97,105,
-110,119,105,110, 0,115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,
-110,116,101,120,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,
-118, 50, 0, 42,116,121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54,
- 52, 93, 0,100,114, 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0,
-115,105,122,101,121, 0,108, 97, 98,101,108,111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,
-114,111,108, 0,115,110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,
-116,105,118,101,100, 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,
-105,115,116, 95,108, 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116,
- 95,115,101, 97,114, 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97,
- 99,101,116,121,112,101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,
-108,101,114,115, 0, 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,
-115,119,105,110,105,100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100,
-114, 97,119, 95,111,118,101,114,108, 97,121, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,
-100,101,114,115,116,114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117,
- 98,118,101,114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,
-101,114,115,105,111,110, 0,119,105,110,112,111,115, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,
-110,101, 0,102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,114,101,118,105,115,105,111,110, 0,110, 97,
-109,101, 91, 50, 53, 54, 93, 0,111,114,105,103, 95,119,105,100,116,104, 0,111,114,105,103, 95,104,101,105,103,104,116, 0, 98,
-111,116,116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,
-109,109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 55, 54, 56, 93, 0,116, 99, 0, 98,117,105,108,100,
- 95,115,105,122,101, 95,102,108, 97,103,115, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103,115, 0,100,111,110,101, 0,
-115,116, 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0, 42,
- 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101, 0, 42,
-105,110,115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95,
-112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102,
-115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,115, 97,116, 0,
-109,117,108, 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0,115,116,114,101, 97,109,
-105,110,100,101,120, 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0, 99,108,105,112, 95,102,108, 97,103, 0,
- 42,115,116,114,105,112, 0, 42,115, 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116, 95,102, 97,100,101,
-114, 0,115,112,101,101,100, 95,102, 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,
-115,101,113, 98, 97,115,101, 0, 42,115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117,110,100, 0,112,105,116, 99,
-104, 0,112, 97,110, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116,
- 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108,
-101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115,
-101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0, 97, 99,116, 95,105,
-109, 97,103,101,100,105,114, 91, 49, 48, 50, 52, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 49, 48, 50, 52, 93,
- 0,111,118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95,102,108, 97,103, 0,111,118,
-101,114, 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,101,
-116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,100,
- 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121,
- 73,110,105, 0,120, 73,110,105, 0,121, 73,110,105, 0,114,111,116, 73,110,105, 0,105,110,116,101,114,112,111,108, 97,116,105,
-111,110, 0,117,110,105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,
-108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,
-101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,
-114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93,
- 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91,
- 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,
-112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,
-120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,
-118,103,114,111,117,112,110, 97,109,101, 91, 54, 52, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 54, 52, 93, 0,
- 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,110,114, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0, 42,112,
-111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117,
- 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 54, 52, 93, 0,116,111,103,103,108,101, 78, 97,
-109,101, 91, 54, 52, 93, 0,118, 97,108,117,101, 91, 54, 52, 93, 0,109, 97,120,118, 97,108,117,101, 91, 54, 52, 93, 0,100,101,
-108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 54, 52, 93, 0,100, 97,
-109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,116,110, 97,109,101, 91, 54, 52, 93,
- 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 54, 52, 93, 0, 99,111,110,115,116,114,
- 97,105,110,116, 91, 54, 52, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 54, 52, 93,
- 0, 98,111,100,121, 91, 54, 52, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,116,111,116,108,105,
-110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,105,115, 95,115,105,
-110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,105,
-115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115,
-108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42,
- 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 54, 52, 93, 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105,
-116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,
-110,103,116,104, 0,108, 97,121,101,114, 95,119,101,105,103,104,116, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103,
- 97,105,110, 0,114,101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,
-110, 99,101, 0,114,111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,
-103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,
-103, 97,105,110, 0,115,110,100,110,114, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0, 42,109,101, 0,108,
-105,110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99,
- 97,108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93,
- 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,112, 97,100, 49, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,
-105,116,121, 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114,
-101,110, 99,101, 0,109,105,110, 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109,
- 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116,
-112,114,111,112, 91, 54, 52, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,114,105, 98,117,116,
-105,111,110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,
-103, 95, 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 54, 52, 93, 0, 42,
-116,111, 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,
-111, 97,100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103,
- 0,105,110,102,108,117,101,110, 99,101, 0, 42,115,117, 98,116, 97,114,103,101,116, 0,102, 97, 99,105,110,103, 97,120,105,115,
- 0,118,101,108,111, 99,105,116,121, 0, 97, 99, 99,101,108,101,114, 97,116,105,111,110, 0,116,117,114,110,115,112,101,101,100,
- 0,117,112,100, 97,116,101, 84,105,109,101, 0, 42,110, 97,118,109,101,115,104, 0,103,111, 0, 42,110,101,119,112, 97, 99,107,
-101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99,
-104,101, 0, 42,119, 97,118,101,102,111,114,109, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,108,101, 0, 42,108,
- 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111,
-112, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93,
- 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,
-116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 97,114,109, 95,114,111,108,108, 0,120,
-119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,
-100, 0,114, 97,100, 95,116, 97,105,108, 0,112, 97,100, 91, 49, 93, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110,
- 98, 97,115,101, 0, 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98,111,110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101,
- 0, 42,115,107,101,116, 99,104, 0,103,101,118,101,114,116,100,101,102,111,114,109,101,114, 0,108, 97,121,101,114, 95,117,115,
-101,100, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,
-115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,
-103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,
-104, 97, 99, 0, 42,112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,
-101, 0,103,104,111,115,116, 95,115,102, 0,103,104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111,
-115,116, 95, 97, 99, 0,103,104,111,115,116, 95,116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115,
-116, 95,102,108, 97,103, 0,112, 97,116,104, 95,116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95,
-118,105,101,119,102,108, 97,103, 0,112, 97,116,104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112,
- 97,116,104, 95,101,102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97,116,104, 95, 97, 99, 0,105,107,102,108, 97,103, 0, 97,103,
-114,112, 95,105,110,100,101,120, 0, 99,111,110,115,116,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0,112, 97,
-100, 48, 91, 54, 93, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0,115,105,107,116,114,101,
-101, 0, 42, 99,117,115,116,111,109, 0, 42, 99,117,115,116,111,109, 95,116,120, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110,
- 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,
-101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,
-108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116,
- 99,104, 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42,116,101,109,112,
- 0, 99,104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97,115,104, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,
-115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51,
- 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0,
- 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,112,114,111,120,121, 95, 97, 99,116, 95, 98,111,110,101, 91,
- 54, 52, 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115,
-116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109,
- 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115,
- 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0,105,100,114,
-111,111,116, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112, 0,115,101, 97,114, 99,104,115,116,
-114, 91, 54, 52, 93, 0,102,105,108,116,101,114,102,108, 97,103, 0,114,101,110, 97,109,101, 73,110,100,101,120, 0, 97,100,115,
- 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,
-101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,
-101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52,
- 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,
-105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101,
- 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0,112,111,108,101,
- 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93,
- 0,110,117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110, 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,
-114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,
-116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,
-103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,
-112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,
-109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,
-116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109,
- 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111,
- 95,109, 97,120, 91, 51, 93, 0,114,111,116, 65,120,105,115, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93,
- 0,116,114, 97, 99,107, 91, 54, 52, 93, 0,111, 98,106,101, 99,116, 91, 54, 52, 93, 0, 42,100,101,112,116,104, 95,111, 98, 0,
- 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,
-120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,
-102,115, 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110,
-110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104,
- 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0,105,115, 95,
- 99,111,112,121, 0,101,120,116,101,114,110, 97,108, 0, 42,110,101,119, 95,115,111, 99,107, 0, 42,115,116,111,114, 97,103,101,
- 0,108,105,109,105,116, 0,115,116,114,117, 99,116, 95,116,121,112,101, 0,108,111, 99,120, 0,108,111, 99,121, 0, 42,100,101,
-102, 97,117,108,116, 95,118, 97,108,117,101, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,115,116, 97, 99,107, 95,116,121,
-112,101, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,103,114,111,117,112,115,111, 99,107,
- 0, 42,108,105,110,107, 0,110,115, 0, 42,114,101, 99,116, 0,120,115,105,122,101, 0,121,115,105,122,101, 0, 42,110,101,119,
- 95,110,111,100,101, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0,109,105,110,105,119,105,100,116,104, 0,117,112,
-100, 97,116,101, 0,108, 97, 98,101,108, 91, 54, 52, 93, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,
-117,115,116,111,109, 51, 0, 99,117,115,116,111,109, 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,
-104,114,101, 97,100,100, 97,116, 97, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0,
- 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,
-109,115,111, 99,107, 0, 42,116,111,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0,105,110,105,116, 0, 99,
-117,114, 95,105,110,100,101,120, 0,110,111,100,101,116,121,112,101, 0, 42,101,120,101, 99,100, 97,116, 97, 0, 40, 42,112,114,
-111,103,114,101,115,115, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116,
- 95, 98,114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, 0, 42,115,100,104, 0,118, 97,108,117,101, 91, 51,
- 93, 0,118, 97,108,117,101, 91, 52, 93, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,109, 97,120,115,112,101,101,100,
- 0,109,105,110,115,112,101,101,100, 0, 99,117,114,118,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,
-116,121, 0, 98,111,107,101,104, 0,103, 97,109,109, 97, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109,
- 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0,
-115,112,105,110, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99,
-101, 0,104,117,101, 0, 98, 97,115,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111,114,109, 97,116, 0, 97, 99,116,
-105,118,101, 95,105,110,112,117,116, 0,117,115,101, 95,114,101,110,100,101,114, 95,102,111,114,109, 97,116, 0,117,115,101, 95,
-110,111,100,101, 95,102,111,114,109, 97,116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104, 0,102,
- 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97,110,110,101,108, 0,120,
- 49, 0,120, 50, 0,121, 49, 0,121, 50, 0,102, 97, 99, 95,120, 49, 0,102, 97, 99, 95,120, 50, 0,102, 97, 99, 95,121, 49, 0,
-102, 97, 99, 95,121, 50, 0, 99,111,108,110, 97,109,101, 91, 54, 52, 93, 0, 98,107,116,121,112,101, 0,112, 97,100, 95, 99, 49,
- 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,
-114,101,115,104, 0,114,111,116, 97,116,105,111,110, 0,112, 97,100, 95,102, 49, 0, 42,100,105, 99,116, 0, 42,110,111,100,101,
- 0, 99,111,108,109,111,100, 0,109,105,120, 0,102, 97,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0,109, 0, 99, 0,106,
-105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, 91, 51, 93, 0,108,105,
-102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95,105,110,118, 91, 51, 93, 0,108,105,109, 99,104, 97,110, 0,117,
-110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114, 0,117,115,112,105,108,108,103, 0,
-117,115,112,105,108,108, 98, 0,116,101,120, 95,109, 97,112,112,105,110,103, 0, 99,111,108,111,114, 95,109, 97,112,112,105,110,
-103, 0,115,117,110, 95,100,105,114,101, 99,116,105,111,110, 91, 51, 93, 0,116,117,114, 98,105,100,105,116,121, 0, 99,111,108,
-111,114, 95,115,112, 97, 99,101, 0,112,114,111,106,101, 99,116,105,111,110, 0,103,114, 97,100,105,101,110,116, 95,116,121,112,
-101, 0, 99,111,108,111,114,105,110,103, 0,109,117,115,103,114, 97,118,101, 95,116,121,112,101, 0,119, 97,118,101, 95,116,121,
-112,101, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95,
-105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42,
-112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116, 0, 99,104, 97,110,103,101,100, 95,116,105,109,101,115,
-116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119,
-104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,120, 95,114,101,115,
-111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,103, 91, 50, 53, 54, 93, 0,
-100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54, 93, 0,115, 97,109,112,108,
-101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114, 97, 99,121, 0,119, 97,118,
-101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119, 97,118,101,102,114,109, 95,
-121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,111,112,101, 95, 97,108,112,
-104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120, 91, 51, 93, 91, 50, 93, 0,
-104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,109, 95, 50, 0, 42,119, 97,
-118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,114,109, 95,116,111,116, 0,
-111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0, 42,105, 99,111,110, 95,105,109, 98,117,102,
- 0,105, 99,111,110, 95,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,110,111,114,109, 97,108, 95,119,101,105,103,
-104,116, 0,111, 98, 95,109,111,100,101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,
-114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116,101,
- 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,112,108, 97,110,101, 0,112,108, 97,110,101, 95,111,102,102,115,101,
-116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0,118,101,114,116,101,120,112, 97,105,110,116, 95,116,111,111,108, 0,105,
-109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108, 0, 97,117,116,111,115,109,111,111,116,104, 95,102, 97, 99,116,111,114,
- 0, 99,114,101, 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116,111,114, 0,112,108, 97,110,101, 95,116,114,105,109, 0,
-116,101,120,116,117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97,115, 0,116,101,120,116,117,114,101, 95,111,118,101,114,
-108, 97,121, 95, 97,108,112,104, 97, 0, 97,100,100, 95, 99,111,108, 91, 51, 93, 0,115,117, 98, 95, 99,111,108, 91, 51, 93, 0,
- 97, 99,116,105,118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109,
- 97,115,107, 0, 42,108, 97,121,101,114,115, 0,116,121,112,101,109, 97,112, 91, 51, 52, 93, 0,116,111,116,108, 97,121,101,114,
- 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, 0, 42,101,120,116,101,114,110, 97,
-108, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51,
- 93, 0,114,101,115,116, 95,108,101,110,103,116,104, 0,112, 97,114,116,105, 99,108,101, 95,105,110,100,101,120, 91, 50, 93, 0,
-100,101,108,101,116,101, 95,102,108, 97,103, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52,
- 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,
-114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114,
- 95,105,110,100,101,120, 0, 97,108,105,118,101, 0,115,112,114,105,110,103, 95,107, 0,112,108, 97,115,116,105, 99,105,116,121,
- 95, 99,111,110,115,116, 97,110,116, 0,121,105,101,108,100, 95,114, 97,116,105,111, 0,112,108, 97,115,116,105, 99,105,116,121,
- 95, 98, 97,108, 97,110, 99,101, 0,121,105,101,108,100, 95, 98, 97,108, 97,110, 99,101, 0,118,105,115, 99,111,115,105,116,121,
- 95,111,109,101,103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95,
-107, 0,115,116,105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98,
-117,111,121, 97,110, 99,121, 0,115,112,114,105,110,103, 95,102,114, 97,109,101,115, 0, 42, 98,111,105,100,115, 0, 42,102,108,
-117,105,100, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,
-101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,
-108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102,114, 97,109,101,115, 0,100,114, 97,119, 95, 99,111,108,
- 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100,
- 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,105,110,116,101,
-103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97,
-110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114,
- 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0, 98, 98, 95,115,105,122,101, 91, 50, 93,
- 0, 98, 98, 95,118,101,108, 95,104,101, 97,100, 0, 98, 98, 95,118,101,108, 95,116, 97,105,108, 0, 99,111,108,111,114, 95,118,
-101, 99, 95,109, 97,120, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121,
- 95,114, 97,116,101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,
-102,121, 95,118,105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0, 99,111,117,114, 97,110,116, 95,116, 97,
-114,103,101,116, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114, 97,110,100, 0,112,
-115, 95,111,102,102,115,101,116, 91, 49, 93, 0,103,114,105,100, 95,114,101,115, 0,101,102,102,101, 99,116,111,114, 95, 97,109,
-111,117,110,116, 0,116,105,109,101, 95,102,108, 97,103, 0,116,105,109,101, 95,112, 97,100, 91, 51, 93, 0,112, 97,114,116,102,
- 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102, 97, 99, 0,111, 98, 95,118,
-101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99,
- 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114,
- 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,
-110, 98,114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,
-105,122,101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,
-102,108, 97,116, 0, 99,108,117,109,112,112,111,119, 0,107,105,110,107, 95,102,108, 97,116, 0,107,105,110,107, 95, 97,109,112,
- 95, 99,108,117,109,112, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50,
- 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95,
-101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,110,
-103,116,104, 95,116,104,114,101,115, 0,112, 97,114,116,105,110,103, 95,102, 97, 99, 0,112, 97,114,116,105,110,103, 95,109,105,
-110, 0,112, 97,114,116,105,110,103, 95,109, 97,120, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,
-108,105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105,
-108, 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116,115,
- 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0,
- 42,112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,
-104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99,
-104,101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111,
-117,116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102,
-114, 97,109,101, 0, 98,118,104,116,114,101,101, 95,102,114, 97,109,101, 0, 99,104,105,108,100, 95,115,101,101,100, 0,116,111,
-116,117,110,101,120,105,115,116, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,
-104,105,108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98,
- 97,107,101,115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 54, 52, 93, 0,118,103,114,111,117,112,
- 91, 49, 50, 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,
-101, 99,116,111,114,115, 0, 42,102,108,117,105,100, 95,115,112,114,105,110,103,115, 0,116,111,116, 95,102,108,117,105,100,115,
-112,114,105,110,103,115, 0, 97,108,108,111, 99, 95,102,108,117,105,100,115,112,114,105,110,103,115, 0, 42,116,114,101,101, 0,
- 42,112,100,100, 0, 42,102,114, 97,110,100, 0,100,116, 95,102,114, 97, 99, 0, 95,112, 97,100, 0, 67,100,105,115, 0, 67,118,
-105, 0,115,116,114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,
-120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,
-110, 0,116,105,109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,
-119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121,
- 95,115,109,111,111,116,104, 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111,110, 0,118,101,108, 95,100, 97,
-109,112,105,110,103, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,114,111,108,108, 0,109, 97,120,115,
-112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,114,111,117,112, 95, 98,101,110,100,
- 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,117, 99,116, 0,115,104, 97,112,101,
-107,101,121, 95,114,101,115,116, 0,112,114,101,115,101,116,115, 0,114,101,115,101,116, 0, 42, 99,111,108,108,105,115,105,111,
-110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,
-102,101,112,115,105,108,111,110, 0,114,101,112,101,108, 95,102,111,114, 99,101, 0,100,105,115,116, 97,110, 99,101, 95,114,101,
-112,101,108, 0,115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,
-114,101,115,115,117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,
-117,109, 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,
-102,102,101,114, 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114,
- 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101,108, 0, 42,114,101,112,
-111,114,116,116,105,109,101,114, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101,
- 0,119,105,110,100,111,119,115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,
-111,112, 95,117,110,100,111, 95,100,101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,
-112,111,114,116,115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101,
-121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0, 42, 97,100,100,111,110, 99,111,110,102,
- 0, 42,117,115,101,114, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,105,109,101,114,
- 0, 42,103,104,111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,115, 99,114,101,101,110, 0, 42,110,
-101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 54, 52, 93, 0,112,111,115,120, 0,112,111,115,
-121, 0,119,105,110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114,
- 0,109,111,100, 97,108, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,
-115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100,
- 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,
-115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,
-112,114,111,112,118, 97,108,117,101, 95,115,116,114, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,
-116, 0, 99,116,114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,
-116,121,112,101, 0, 42,112,116,114, 0, 42,114,101,109,111,118,101, 95,105,116,101,109, 0, 42, 97,100,100, 95,105,116,101,109,
- 0,105,116,101,109,115, 0,100,105,102,102, 95,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,
-105,100, 0,107,109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115,
- 0, 98, 97,115,101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100,
- 97,116, 97, 0, 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0,
- 42,111,112,109, 0, 42,101,100, 97,116, 97, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116,115, 0, 97,114,114, 97,121,115,
-105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, 0,112,104, 97,115,101, 95,109,
-117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, 97,108,117,101, 95,111,102,102,
-115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97,102,116,101,114, 95,109,111,100,
-101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, 99,108,101,115, 0,114,101, 99,
-116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101,112, 95,115,105,122,101, 0, 42,
-114,110, 97, 95,112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0,116,114, 97,110,115, 67,104, 97,
-110, 0,105,100,116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95,116, 97,114,103,101,116,115, 0,
-118, 97,114,105, 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0, 42,101,120,112,114, 95,
- 99,111,109,112, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0, 99,111,108,
-111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50,
- 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,
-115, 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100,109,111,100,
-101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,
-112,109,111,100,101, 0,107,101,121,105,110,103,102,108, 97,103, 0,112, 97,116,104,115, 0,100,101,115, 99,114,105,112,116,105,
-111,110, 91, 50, 52, 48, 93, 0,116,121,112,101,105,110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,112, 97,116,104,
- 0, 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,
-105,118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,
-116, 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,
-111,112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,
-111,107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,
-101,114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100,
- 0,114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,
-116, 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101,
- 95,105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,
-103,103,114,101,115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95,
-115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105,
-114, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100,
- 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110,
-100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,
-110,100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105,
-100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0,
- 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0,
-100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112,
-108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111,105,115,101, 0,100,
-105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93,
- 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97, 99,104,101, 95,104,
-105,103,104, 95, 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101,
-115, 91, 50, 93, 0, 98,111,114,100,101,114, 95, 99,111,108,108,105,115,105,111,110,115, 0,116,105,109,101, 95,115, 99, 97,108,
-101, 0,118,111,114,116,105, 99,105,116,121, 0,118,101,108,111, 99,105,116,121, 91, 50, 93, 0,118,101,108, 95,109,117,108,116,
-105, 0,118,103,114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119,
- 0,118,103,114,111,117,112, 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,
-110,116,115, 95,111,108,100, 0, 42,118,101,108, 0, 42,116,114,105,100,105,118,115, 0,109, 97,116, 95,111,108,100, 91, 52, 93,
- 91, 52, 93, 0,110,117,109,116,114,105,115, 0,118,111,108,117,109,101, 95,109, 97,120, 0,118,111,108,117,109,101, 95,109,105,
-110, 0,100,105,115,116, 97,110, 99,101, 95,109, 97,120, 0,100,105,115,116, 97,110, 99,101, 95,114,101,102,101,114,101,110, 99,
-101, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,111,117,116,101,114, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,105,110,
-110,101,114, 0, 99,111,110,101, 95,118,111,108,117,109,101, 95,111,117,116,101,114, 0,114,101,110,100,101,114, 95,102,108, 97,
-103, 0, 98,117,105,108,100, 95,115,105,122,101, 95,102,108, 97,103, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103, 0,
-108, 97,115,116,115,105,122,101, 91, 50, 93, 0,116,114, 97, 99,107,105,110,103, 0, 42,116,114, 97, 99,107,105,110,103, 95, 99,
-111,110,116,101,120,116, 0,112,114,111,120,121, 0,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 95,104,101,105,103,104,
-116, 0, 42,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 0,116,114, 97, 99,107, 95,112,111,115, 91, 50, 93, 0,116,114,
- 97, 99,107, 95,100,105,115, 97, 98,108,101,100, 0, 42,109, 97,114,107,101,114, 0,115,108,105,100,101, 95,115, 99, 97,108,101,
- 91, 50, 93, 0,101,114,114,111,114, 0, 42,105,110,116,114,105,110,115,105, 99,115, 0,115,101,110,115,111,114, 95,119,105,100,
-116,104, 0,112,105,120,101,108, 95, 97,115,112,101, 99,116, 0,102,111, 99, 97,108, 0,117,110,105,116,115, 0,112,114,105,110,
- 99,105,112, 97,108, 91, 50, 93, 0,107, 49, 0,107, 50, 0,107, 51, 0,112,111,115, 91, 50, 93, 0,112, 97,116, 95,109,105,110,
- 91, 50, 93, 0,112, 97,116, 95,109, 97,120, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,109,105,110, 91, 50, 93, 0,115,101, 97,
-114, 99,104, 95,109, 97,120, 91, 50, 93, 0,109, 97,114,107,101,114,115,110,114, 0,108, 97,115,116, 95,109, 97,114,107,101,114,
- 0, 42,109, 97,114,107,101,114,115, 0, 98,117,110,100,108,101, 95,112,111,115, 91, 51, 93, 0,112, 97,116, 95,102,108, 97,103,
- 0,115,101, 97,114, 99,104, 95,102,108, 97,103, 0,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,112, 97,116,116,101,114,
-110, 95,109, 97,116, 99,104, 0,116,114, 97, 99,107,101,114, 0,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,109,
-105,110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,116,114, 97, 99,107,
-101,114, 0,100,101,102, 97,117,108,116, 95,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,100,101,102, 97,117,108,
-116, 95,109,105,110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,112, 97,
-116,116,101,114,110, 95,115,105,122,101, 0,100,101,102, 97,117,108,116, 95,115,101, 97,114, 99,104, 95,115,105,122,101, 0,100,
-101,102, 97,117,108,116, 95,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,100,101,102, 97,117,108,116, 95,109, 97,114,103,
-105,110, 0,100,101,102, 97,117,108,116, 95,112, 97,116,116,101,114,110, 95,109, 97,116, 99,104, 0,100,101,102, 97,117,108,116,
- 95,102,108, 97,103, 0,109,111,116,105,111,110, 95,102,108, 97,103, 0,107,101,121,102,114, 97,109,101, 49, 0,107,101,121,102,
-114, 97,109,101, 50, 0,114,101,102,105,110,101, 95, 99, 97,109,101,114, 97, 95,105,110,116,114,105,110,115,105, 99,115, 0, 99,
-108,101, 97,110, 95,102,114, 97,109,101,115, 0, 99,108,101, 97,110, 95, 97, 99,116,105,111,110, 0, 99,108,101, 97,110, 95,101,
-114,114,111,114, 0,111, 98,106,101, 99,116, 95,100,105,115,116, 97,110, 99,101, 0,116,111,116, 95,116,114, 97, 99,107, 0, 97,
- 99,116, 95,116,114, 97, 99,107, 0,109, 97,120,115, 99, 97,108,101, 0, 42,114,111,116, 95,116,114, 97, 99,107, 0,108,111, 99,
-105,110,102, 0,115, 99, 97,108,101,105,110,102, 0,114,111,116,105,110,102, 0, 42,115, 99, 97,108,101,105, 98,117,102, 0,108,
- 97,115,116, 95, 99, 97,109,101,114, 97, 0, 99, 97,109,110,114, 0, 42, 99, 97,109,101,114, 97,115, 0,116,114, 97, 99,107,115,
- 0,114,101, 99,111,110,115,116,114,117, 99,116,105,111,110, 0,109,101,115,115, 97,103,101, 91, 50, 53, 54, 93, 0,116,111,116,
- 95, 99,104, 97,110,110,101,108, 0,115,101,116,116,105,110,103,115, 0, 99, 97,109,101,114, 97, 0,115,116, 97, 98,105,108,105,
-122, 97,116,105,111,110, 0, 42, 97, 99,116, 95,116,114, 97, 99,107, 0,111, 98,106,101, 99,116,115, 0,111, 98,106,101, 99,116,
-110,114, 0,116,111,116, 95,111, 98,106,101, 99,116, 0,100,111,112,101,115,104,101,101,116, 0, 42, 98,114,117,115,104, 95,103,
-114,111,117,112, 0, 99,117,114,114,101,110,116, 95,102,114, 97,109,101, 0,100,105,115,112, 95,116,121,112,101, 0,105,109, 97,
-103,101, 95,102,105,108,101,102,111,114,109, 97,116, 0,101,102,102,101, 99,116, 95,117,105, 0,112,114,101,118,105,101,119, 95,
-105,100, 0,105,110,105,116, 95, 99,111,108,111,114, 95,116,121,112,101, 0,112, 97,100, 95,115, 0,105,109, 97,103,101, 95,114,
-101,115,111,108,117,116,105,111,110, 0,115,117, 98,115,116,101,112,115, 0,105,110,105,116, 95, 99,111,108,111,114, 91, 52, 93,
- 0, 42,105,110,105,116, 95,116,101,120,116,117,114,101, 0,105,110,105,116, 95,108, 97,121,101,114,110, 97,109,101, 91, 54, 52,
- 93, 0,100,114,121, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,100,114,121, 95,116,104,114,101,115,104,111,108,100, 0,
-100,101,112,116,104, 95, 99,108, 97,109,112, 0,100,105,115,112, 95,102, 97, 99,116,111,114, 0,115,112,114,101, 97,100, 95,115,
-112,101,101,100, 0, 99,111,108,111,114, 95,115,112,114,101, 97,100, 95,115,112,101,101,100, 0,115,104,114,105,110,107, 95,115,
-112,101,101,100, 0,100,114,105,112, 95,118,101,108, 0,100,114,105,112, 95, 97, 99, 99, 0,105,110,102,108,117,101,110, 99,101,
- 95,115, 99, 97,108,101, 0,114, 97,100,105,117,115, 95,115, 99, 97,108,101, 0,119, 97,118,101, 95,100, 97,109,112,105,110,103,
- 0,119, 97,118,101, 95,115,112,101,101,100, 0,119, 97,118,101, 95,116,105,109,101,115, 99, 97,108,101, 0,119, 97,118,101, 95,
-115,112,114,105,110,103, 0,105,109, 97,103,101, 95,111,117,116,112,117,116, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,111,
-117,116,112,117,116, 95,110, 97,109,101, 91, 54, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 50, 91, 54, 52, 93, 0,
- 42,112,109,100, 0,115,117,114,102, 97, 99,101,115, 0, 97, 99,116,105,118,101, 95,115,117,114, 0,101,114,114,111,114, 91, 54,
- 52, 93, 0, 99,111,108,108,105,115,105,111,110, 0,119,101,116,110,101,115,115, 0,112, 97,114,116,105, 99,108,101, 95,114, 97,
-100,105,117,115, 0,112, 97,114,116,105, 99,108,101, 95,115,109,111,111,116,104, 0,112, 97,105,110,116, 95,100,105,115,116, 97,
-110, 99,101, 0, 42,112, 97,105,110,116, 95,114, 97,109,112, 0, 42,118,101,108, 95,114, 97,109,112, 0,112,114,111,120,105,109,
-105,116,121, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,105,114, 0,119, 97,118,101, 95,102, 97, 99,116,111,114, 0,
-119, 97,118,101, 95, 99,108, 97,109,112, 0,109, 97,120, 95,118,101,108,111, 99,105,116,121, 0,115,109,117,100,103,101, 95,115,
-116,114,101,110,103,116,104, 0, 84, 89, 80, 69, 18, 2, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,104,111,114,116,
- 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,108,111, 97,116, 0,100,111,117,
- 98,108,101, 0,105,110,116, 54, 52, 95,116, 0,117,105,110,116, 54, 52, 95,116, 0,118,111,105,100, 0, 76,105,110,107, 0, 76,
-105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,102, 0,118,101, 99,
- 51,102, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0, 73, 68, 80,114,
-111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,114,101,118,105,
-101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111, 67,117,114,118,
-101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107, 0,
- 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,114,107,101,114,
- 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101, 85,115,101,
-114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,101,
-110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120, 0, 67, 66,
- 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,110,
-116, 68,101,110,115,105,116,121, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 86,111,120,101,108, 68, 97,116, 97, 0,
- 79, 99,101, 97,110, 84,101,120, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 67,111,
-108,111,114, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 86,111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 71,
- 97,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86, 70,111,110,116,
- 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116,
- 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 69,100,105,116,
- 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120, 0, 69,100,105,
-116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 83,101,108,101, 99,116, 0, 77, 80,111,108,121, 0, 77, 84,101,120, 80,111,108,
-121, 0, 77, 76,111,111,112, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70, 97, 99,101, 0, 77,
- 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,111,114,109, 86,
-101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 66, 77, 69,100,105,116, 77,101,115,104, 0, 67,117,115,116,
-111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 70,
-108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110,
-103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 79,114,105,103, 83,112, 97, 99,
-101, 76,111,111,112, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,111,108, 0, 77,117,108,116,105,114,101,
-115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 69,100,
-103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77, 82,101, 99, 97,115,116, 0, 77,111,100,105,102,105,101,
-114, 68, 97,116, 97, 0, 77, 97,112,112,105,110,103, 73,110,102,111, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117,
- 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101,
-114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100,
-105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121,
- 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
- 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,101,118,101,108, 77,111,100,105,102,
-105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 77,
-111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105,110, 83,101,116,116,105,110,103,115, 0,
- 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 67,111,108,108, 83,101,116,116,105,
-110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,101,
- 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114, 68,
- 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,102,
-105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,114,
-101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,
-111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,101,
-114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101,116,116,105,110,103,115, 0, 67,108,111,
-116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97, 99,104,101, 0, 67,111,108,108,105,115,
-105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,101, 0, 83,117,114,102, 97, 99,101, 77,
-111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115,104, 0, 66, 86, 72, 84,114,101,101, 70,
-114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 68,101,102,
- 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,114,109, 77,111,100,
-105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 77,111,100,105,102,105,101,114,
- 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116,
- 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114,
- 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,
-105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0,
- 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,105,109,112,108,101, 68,101,102,
-111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,101,121, 77,111,100,105,102,105,101,114,
- 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, 99,114,101,119, 77,
-111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,
-101, 97,110, 0, 79, 99,101, 97,110, 67, 97, 99,104,101, 0, 87, 97,114,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
- 87,101,105,103,104,116, 86, 71, 69,100,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86,
- 71, 77,105,120, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 80,114,111,120,105,109,105,
-116,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 77,111,100,105,102,
-105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 67, 97,110,118, 97,115, 83,101,116,116,105,110,
-103,115, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 66,114,117,115,104, 83,101,116,116,105,110,103,115, 0, 82,101,109,
-101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,105,116, 76, 97,116,116, 0, 76, 97,116,116,105, 99,101,
- 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,
-105,111,110, 0, 98, 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,
-103,115, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,
-114,116, 68,101,102,108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79,
- 98,106,101, 99,116, 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,
-101, 69,120,116,114, 97, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66,
- 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,
-114, 97,116, 99,104, 0, 70,108,117,105,100, 86,101,114,116,101,120, 86,101,108,111, 99,105,116,121, 0, 87,111,114,108,100, 0,
- 66, 97,115,101, 0, 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99,
- 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112,
-101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,
-114, 76, 97,121,101,114, 0, 73,109, 97,103,101, 70,111,114,109, 97,116, 68, 97,116, 97, 0, 82,101,110,100,101,114, 68, 97,116,
- 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70,114, 97,
-109,105,110,103, 0, 82,101, 99, 97,115,116, 68, 97,116, 97, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114,
-107,101,114, 0, 80, 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,
-103,115, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,
-116, 83,101,116,116,105,110,103,115, 0, 83, 99,117,108,112,116, 0, 85,118, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116,
- 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 85,110,105,102,105,101,100, 80, 97,105,
-110,116, 83,101,116,116,105,110,103,115, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,
-110,105,116, 83,101,116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116,
-105,110,103, 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 77,111,118,105,101, 67,108,
-105,112, 0, 66, 71,112,105, 99, 0, 77,111,118,105,101, 67,108,105,112, 85,115,101,114, 0, 82,101,103,105,111,110, 86,105,101,
-119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,110,100,101,114, 69,110,103,105,110,101, 0, 86,105,101,119,
- 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101,114, 0, 86,
-105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111,
- 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,
-112, 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,
-108,101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,
-116, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,
-108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83, 99,111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0,
- 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83,
- 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 67, 97, 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,
-112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0,
- 83,112, 97, 99,101, 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0, 83,112, 97, 99,101,
- 67,108,105,112, 0, 77,111,118,105,101, 67,108,105,112, 83, 99,111,112,101,115, 0,117,105, 70,111,110,116, 0,117,105, 70,111,
-110,116, 83,116,121,108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,
-105, 87,105,100,103,101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0,117,105, 80, 97,110,101,108, 67,111,108,111,114,115,
- 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,
-111,114, 0, 98, 84,104,101,109,101, 0, 98, 65,100,100,111,110, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114,
- 68,101,102, 0, 98, 83, 99,114,101,101,110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,
-108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105, 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97,
- 99,101, 84,121,112,101, 0, 65, 82,101,103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,
-108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,
-114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112,
- 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98,
- 83,111,117,110,100, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,
-115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,
-112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0,
- 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114,
-116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117,
- 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,
-116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,
-101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,
-115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114,
-109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,
-115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0,
- 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,
-117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110,
- 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0,
- 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,
-111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117,
- 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,
-114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117,
- 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,
-117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65,
- 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,
-101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97,
-116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116,101,101,114,105,110,103, 65, 99,116,117, 97,116,111,114, 0, 71,
-114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,
-110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0,
- 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0,
- 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,
-108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0,
- 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,
-116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, 75, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,
-107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,
-105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,
-105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83, 97,109,101, 86,111,108,117,109,101, 67,111,110,115,116,114, 97,
-105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120,
- 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111,
- 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115,
-116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,
-114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,
-116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98,
- 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,
-116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,
-116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0,
- 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,
-111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110,107,119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0,
- 98, 70,111,108,108,111,119, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67, 97,109,101,114, 97, 83,111,
-108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 79, 98,106,101, 99,116, 83,111,108,118,101,114, 67,111,110,115,
-116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116,
-114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101,
- 76,105,110,107, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 0,117,105, 66,108,111, 99,107, 0,
- 98, 78,111,100,101, 84,121,112,101, 0, 98, 78,111,100,101, 84,114,101,101, 69,120,101, 99, 0, 98, 78,111,100,101, 83,111, 99,
-107,101,116, 86, 97,108,117,101, 73,110,116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 70,108,111, 97,
-116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 66,111,111,108,101, 97,110, 0, 98, 78,111,100,101, 83,
-111, 99,107,101,116, 86, 97,108,117,101, 86,101, 99,116,111,114, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,
-101, 82, 71, 66, 65, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 78,111,100,101, 66,108,117,114, 68, 97,116, 97,
- 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,108,117,114,
- 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101, 0, 78,111,
-100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,105,108,101, 0, 78,111,100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,
-105,108,101, 83,111, 99,107,101,116, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0,
- 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86,
-101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68,
-105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101,
-110,115, 68,105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111,108,111,
-114,115,112,105,108,108, 0, 78,111,100,101, 84,101,120, 66, 97,115,101, 0, 78,111,100,101, 84,101,120, 83,107,121, 0, 78,111,
-100,101, 84,101,120, 73,109, 97,103,101, 0, 78,111,100,101, 84,101,120, 67,104,101, 99,107,101,114, 0, 78,111,100,101, 84,101,
-120, 69,110,118,105,114,111,110,109,101,110,116, 0, 78,111,100,101, 84,101,120, 71,114, 97,100,105,101,110,116, 0, 78,111,100,
-101, 84,101,120, 78,111,105,115,101, 0, 78,111,100,101, 84,101,120, 86,111,114,111,110,111,105, 0, 78,111,100,101, 84,101,120,
- 77,117,115,103,114, 97,118,101, 0, 78,111,100,101, 84,101,120, 87, 97,118,101, 0, 78,111,100,101, 84,101,120, 77, 97,103,105,
- 99, 0, 78,111,100,101, 83,104, 97,100,101,114, 65,116,116,114,105, 98,117,116,101, 0, 84,101,120, 78,111,100,101, 79,117,116,
-112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,104,
- 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117,115,116,111,109, 68, 97,116, 97,
- 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,105,
-100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,112,114,105,110,
-103, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80,
- 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0,
- 83, 80, 72, 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,
-115, 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0,
- 75, 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,101,
- 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,101,
- 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105,110,100,111,119, 77, 97,
-110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,101,
-110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77, 97,
-112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 68,105,102,102, 73,116,101,
-109, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100,105,102,
-105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105,111,110,
- 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111,100, 95,
- 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104,111,110,
- 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 70, 77,111,100, 95, 83,116,101,
-112,112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, 86, 97,114, 0, 67,104, 97,110,
-110,101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112, 80,
- 97,105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,107,
- 0, 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101, 0,
- 73,100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101, 71,
-111, 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110, 0,
- 66,111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,101,
-114, 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,116,
-101, 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 83,112,101, 97,107,101,114, 0, 77,
-111,118,105,101, 67,108,105,112, 80,114,111,120,121, 0, 77,111,118,105,101, 67,108,105,112, 67, 97, 99,104,101, 0, 77,111,118,
-105,101, 84,114, 97, 99,107,105,110,103, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 84,114, 97, 99,107, 0, 77,111,
-118,105,101, 84,114, 97, 99,107,105,110,103, 77, 97,114,107,101,114, 0, 77,111,118,105,101, 82,101, 99,111,110,115,116,114,117,
- 99,116,101,100, 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 67, 97,109,101,114, 97, 0, 77,
-111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,101,116,116,105,110,103,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,
-110,103, 83,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 82,101, 99,
-111,110,115,116,114,117, 99,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 79, 98,106,101, 99,116, 0,
- 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97,116,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103,
- 68,111,112,101,115,104,101,101,116, 67,104, 97,110,110,101,108, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 68,111,
-112,101,115,104,101,101,116, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 0, 80, 97,105,110,
-116, 83,117,114,102, 97, 99,101, 68, 97,116, 97, 0, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 35, 0, 0, 0, 2, 0, 94, 1, 8, 0, 0, 0, 3, 0, 0, 0, 56, 52, 39, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 8, 0, 0,
+ 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0,
+ 56, 12, 32, 7, 0, 0, 0, 0, 56, 12, 32, 7, 0, 0, 0, 0,184,243, 31, 7, 0, 0, 0, 0,184,243, 31, 7, 0, 0, 0, 0,
+ 40, 54, 32, 7, 0, 0, 0, 0, 40, 54, 32, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,219, 30, 7, 0, 0, 0, 0,136, 53, 32, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,
+205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 30, 90,100,191,154,153,153, 62,
+102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0,
+205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 1, 0, 25, 0, 15, 0,
+120, 0, 60, 0, 3, 0, 5, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 25, 0, 8, 0, 10, 0,200, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 4, 0, 10, 0, 50, 0, 20, 0, 2, 0, 1, 0, 0, 0, 0, 0,128, 63, 60, 0, 0, 0, 0, 0, 2, 0,
+ 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0,
+ 68, 65, 84, 65,168, 36, 0, 0, 56, 12, 32, 7, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255,
+ 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255,
+ 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255,
+ 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255,
+ 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255,
+ 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255,
+ 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255,
+ 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,160,160,160,255,255,255,255,255,
+ 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,172,172,172,128,255,255,255,255, 0, 0, 0,255,
+ 1, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,255,255,255,255,255,255,255,255,
+ 0, 0, 25, 0,236,255, 0, 0, 25, 25, 25,255,128,128,128,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255, 0, 0, 0,255,255,255,255,255,
+ 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255,190,190,190,255,100,100,100,180, 68, 68, 68,255, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255,180, 0,255,255,153, 0,230,255,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,130,130,130,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 32,255,255,255,
+ 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,255,255,255,255, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,200,
+255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0,
+250,250,250,255, 15, 15, 15,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,130,130,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255, 0, 0, 0, 0,250,250,250,255,
+250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,
+135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255,153, 64, 48,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255,240,175,144,255,
+ 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,
+255,133, 0,255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,
+135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,
+255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,
+135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,
+255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116,116,116,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255, 32, 32,143,255,109, 88,129,255,
+ 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 18, 66,176, 38,255,133, 0,178,
+255,133, 0,127, 0,255, 0,255,255, 0, 0,255,225,210,195, 35, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,127, 51, 76,130,135,140, 76,114,114,114,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,255,255,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5,
+155,155,155,160,100,104,111,255,111,106,100,255,104,106,117,255,105,117,110,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255,
+ 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 96,128,255,255,255,255,255,255, 0,170, 0,255,220, 96, 96,255,220, 96, 96,255, 3, 0, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255,
+ 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 32,255,255,255,
+ 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255,
+ 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,
+144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,255,255,255,255, 0, 0, 0,255,144,144, 0,255,
+ 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,
+255,255, 0,255, 4, 0, 0, 0,255,127,127, 0,255,255,255,255,255,255,255, 0,255,127, 0, 0,255,127,127,127,255,200,200,200,
+255,255, 0, 0,255, 0, 0,255,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,
+247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,
+131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,
+240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,
+111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,
+243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,
+211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,
+222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255,
+ 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 80, 0, 0, 0,104,219, 30, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0, 8,220, 30, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95, 51,100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 8,220, 30, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,
+ 40, 49, 32, 7, 0, 0, 0, 0,104,219, 30, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,102, 98,120, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 40, 49, 32, 7, 0, 0, 0, 0,
+208, 0, 0, 0, 1, 0, 0, 0,200, 49, 32, 7, 0, 0, 0, 0, 8,220, 30, 7, 0, 0, 0, 0,105,111, 95, 97,110,105,109, 95,
+ 98,118,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,
+200, 49, 32, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,104, 50, 32, 7, 0, 0, 0, 0, 40, 49, 32, 7, 0, 0, 0, 0,
+105,111, 95,109,101,115,104, 95,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 80, 0, 0, 0,104, 50, 32, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0, 8, 51, 32, 7, 0, 0, 0, 0,
+200, 49, 32, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,111, 98,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 8, 51, 32, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,
+168, 51, 32, 7, 0, 0, 0, 0,104, 50, 32, 7, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,120, 51,100, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,168, 51, 32, 7, 0, 0, 0, 0,
+208, 0, 0, 0, 1, 0, 0, 0, 72, 52, 32, 7, 0, 0, 0, 0, 8, 51, 32, 7, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,
+115,116,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,
+ 72, 52, 32, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,232, 52, 32, 7, 0, 0, 0, 0,168, 51, 32, 7, 0, 0, 0, 0,
+105,111, 95,109,101,115,104, 95,117,118, 95,108, 97,121,111,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 80, 0, 0, 0,232, 52, 32, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,136, 53, 32, 7, 0, 0, 0, 0,
+ 72, 52, 32, 7, 0, 0, 0, 0,105,111, 95, 99,117,114,118,101, 95,115,118,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,136, 53, 32, 7, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,232, 52, 32, 7, 0, 0, 0, 0, 99,121, 99,108,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,232, 0, 0, 0, 40, 54, 32, 7, 0, 0, 0, 0,
+200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 32,
+ 83,116,121,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 12, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 11, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 11, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 8, 0, 5, 0, 5, 0, 8, 0, 2, 0, 8, 0, 4, 0, 0, 0, 68, 78, 65, 49,160, 6, 1, 0,216,191, 73, 8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 80, 13, 0, 0, 42,110,101,120,116, 0, 42,112,114,101,118, 0,
+ 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,120,109,105,110, 0,120,109,
+ 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,112, 0,118, 97,108, 0,
+118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,110, 97,109,101, 91, 54, 52, 93, 0,
+115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,
+108,105, 98, 0,110, 97,109,101, 91, 54, 54, 93, 0,112, 97,100, 0,117,115, 0,105, 99,111,110, 95,105,100, 0,112, 97,100, 50,
+ 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,
+116, 97, 0,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42,112, 97,
+114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0, 99,104, 97,110,103,101,
+100, 95,116,105,109,101,115,116, 97,109,112, 91, 50, 93, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,
+107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,
+116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118,101,114,116, 0,
+105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95,109,105,110, 0,
+115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,101, 0, 99,
+117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,112, 97,100, 49, 0,114,101,108, 97,
+116,105,118,101, 0,116,111,116,101,108,101,109, 0,117,105,100, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112,
+ 91, 54, 52, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,
+101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107,
+ 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 99,116,105,109,101, 0,
+117,105,100,103,101,110, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111,
+ 0,115,116, 97,114,116, 0,101,110,100, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93,
+ 0, 42,110, 97,109,101, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0,
+ 99,117,114, 99, 0,115,101,108, 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111,
+ 95,112,111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,
+122,101, 0,115,101,101,107, 0,100,116,120, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 99,108,105,112,115,
+116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,
+115,105,122,101, 0,115,101,110,115,111,114, 95,120, 0,115,101,110,115,111,114, 95,121, 0,115,104,105,102,116,120, 0,115,104,
+105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 42,100,111,102, 95,111, 98, 0,115,101,110,115,111,114, 95,102,
+105,116, 0,112, 97,100, 91, 55, 93, 0, 42,115, 99,101,110,101, 0,102,114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,
+111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,
+105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,
+116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,114, 0, 42,114,101,110,100,101,114,115, 91, 56, 93, 0,114,101,110,100,101,
+114, 95,115,108,111,116, 0,108, 97,115,116, 95,114,101,110,100,101,114, 95,115,108,111,116, 0,115,111,117,114, 99,101, 0,108,
+ 97,115,116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,
+121,114,101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,
+110,100, 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0,108, 97,115,116,117,112,100, 97,
+116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,
+121, 0,103,101,110, 95,116,121,112,101, 0,103,101,110, 95,102,108, 97,103, 0, 97,115,112,120, 0, 97,115,112,121, 0,116,101,
+120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,
+106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,106,120, 0,112,114,111,106,121,
+ 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, 0,114,111,
+116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,
+116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111,117,116,112,117,116, 0, 98,
+114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,
+108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102,
+ 97, 99, 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,
+105,102,102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114,
+ 97,121,109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,
+105,116,102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99, 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,
+115,102, 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,
+108,101,110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0,107,105,110,107,102,
+ 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,103,114, 97,118,105,116,121,102, 97, 99,
+ 0,108,105,102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,102,105,101,108,100,102, 97,
+ 99, 0,115,104, 97,100,111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0,
+ 98,108,101,110,100,102, 97, 99, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, 97,109,101,115,
+ 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, 0, 42, 99,102,
+114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, 97,110, 99,101,
+ 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105,111,110, 0, 97,
+ 0,116,111,116, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91,
+ 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,105,101,119,115, 99, 97,
+108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99, 0,108,
+ 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,102, 97,108,108,111,102,102, 95,115,111,102,
+116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111,117,114, 99,101, 0,116,111,116,112,111,105,
+110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0,
+111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, 95,116,114,101,101, 0, 42,112,111,105,110,
+116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,112,116,104, 0,110,111,
+105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,112,100,112, 97,100, 51,
+ 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0,102, 97,108,108,111,102,
+102, 95,115,112,101,101,100, 95,115, 99, 97,108,101, 0,112,100,112, 97,100, 50, 0, 42, 99,111, 98, 97, 0, 42,102, 97,108,108,
+111,102,102, 95, 99,117,114,118,101, 0,114,101,115,111,108, 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121,112,101, 0,102,
+105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116,101,110,100, 0,115,109,111,107,101,100, 95,116,121,112,101, 0,105,110,
+116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115,111,117,114, 99,101, 95,
+112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42,100, 97,116, 97,115,101,116, 0, 99, 97, 99,104,101,100,102,114, 97,109,101, 0,
+111, 99,101, 97,110,109,111,100, 91, 54, 52, 93, 0,111,117,116,112,117,116, 0,110,111,105,115,101,115,105,122,101, 0,116,117,
+114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,115, 97,116,117,114, 97,116,105,111,110, 0,
+114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,
+103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,
+116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,
+101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,
+112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100,101,112,116,104,
+ 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115,
+ 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,
+120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,102,109, 97,120, 0,120,114,
+101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,110, 97, 98,108, 97, 0,
+105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,101,110,118, 0, 42,112,100,
+ 0, 42,118,100, 0, 42,111,116, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93,
+ 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0, 99,111, 98, 97, 0, 98,108,
+101,110,100, 95, 99,111,108,111,114, 91, 51, 93, 0, 98,108,101,110,100, 95,102, 97, 99,116,111,114, 0, 98,108,101,110,100, 95,
+116,121,112,101, 0,112, 97,100, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,100,119,114, 0,115,104,100,
+119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,105,115,116, 0,115,112,111,
+116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116,116, 50, 0,
+ 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,
+102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0, 98,108,101,101,100, 98,105, 97,115, 0,112, 97,100, 53,
+ 91, 50, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,114,116,
+121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121,
+ 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,
+114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,
+114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,
+109,101,116,104,111,100, 0,115,104, 97,100,111,119,109, 97,112, 95,116,121,112,101, 0,116,101,120, 97, 99,116, 0,115,104, 97,
+100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,121, 98,108,101,
+110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,114,101, 97,100,
+ 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,107,115, 99, 97,
+116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,116,109, 95,116,
+117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, 99,116,111,114,
+ 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,105,115,116, 97,
+110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101,120,112,111,115,
+117,114,101, 0,115,104, 97,100,111,119, 95,102,114,117,115,116,117,109, 95,115,105,122,101, 0,115,107,121, 95, 99,111,108,111,
+114,115,112, 97, 99,101, 0,112, 97,100, 52, 91, 50, 93, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,
+117,114,101, 0,112, 97,100, 54, 91, 52, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,
+116,116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,111,108, 91,
+ 51, 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,
+110, 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,
+111,102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,104, 97,100,
+101,102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,
+116,105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,110,115,105,
+116,121, 0,109,115, 95,115,112,114,101, 97,100, 0, 97,108,112,104, 97, 95, 98,108,101,110,100, 0,102, 97, 99,101, 95,111,114,
+105,101,110,116, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,115,112,
+101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109,
+ 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121,
+ 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100,
+ 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,103, 97,109,101, 0,102,114,101,115,110,101,108, 95,109,
+105,114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,
+115,110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,
+108,108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,
+114, 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114,
+ 97, 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0,
+ 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114,
+ 97, 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,
+111, 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,
+116, 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,
+101, 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,
+115,116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,
+114,102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,
+101, 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 54, 52, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,
+115,104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101,
+ 0,112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104,
+ 97,100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97,
+ 99, 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,
+108, 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,
+112,101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99,
+ 0,114, 97,109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,
+102, 97, 99, 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,
+101, 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,
+114, 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,
+115,115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,
+116,101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108,
+ 97,103, 0,115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,115,104, 97,
+100,111,119,111,110,108,121, 95,102,108, 97,103, 0,105,110,100,101,120, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0, 42,
+ 98, 98, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,
+101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,
+101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102,108, 97,103,
+ 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114,
+101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,
+103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109,
+ 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115,111,108,118, 0,
+111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115,
+117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, 95,105,110,116,
+101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,119, 0,104, 0,110,117,114, 98,115, 0, 42,107,101,121,105,
+110,100,101,120, 0,115,104, 97,112,101,110,114, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, 98,101,118,
+111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97,116,104,
+ 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, 0,116,119,
+105,115,116, 95,115,109,111,111,116,104, 0,115,109, 97,108,108, 99, 97,112,115, 95,115, 99, 97,108,101, 0,112, 97,116,104,108,
+101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,
+108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115,116,115,101,108,
+ 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,
+114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116,
+ 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, 98,111,120,101,
+115, 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,
+102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0,116,
+111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100,
+ 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0, 98,101,118,102, 97, 99, 49, 0, 98,101,118,102, 97, 99,
+ 50, 0, 42,109,115,101,108,101, 99,116, 0, 42,109,112,111,108,121, 0, 42,109,116,112,111,108,121, 0, 42,109,108,111,111,112,
+ 0, 42,109,108,111,111,112,117,118, 0, 42,109,108,111,111,112, 99,111,108, 0, 42,109,102, 97, 99,101, 0, 42,109,116,102, 97,
+ 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118,101,114,116, 0, 42,
+109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,101,100,105,116, 95, 98,
+116,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,112,100, 97,116, 97, 0,108,100,
+ 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, 0,116,111,
+116,112,111,108,121, 0,116,111,116,108,111,111,112, 0, 97, 99,116, 95,102, 97, 99,101, 0,115,109,111,111,116,104,114,101,115,
+104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112,101, 0,101,100,105,
+116,102,108, 97,103, 0, 42,109,114, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93,
+ 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,
+101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110,114, 0, 42,100,119,
+ 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,108,111,111,112,115,116, 97,114,116,
+ 0,118, 0,101, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,
+105,115,112, 0,108,101,118,101,108, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0, 42,104,105,100,100,101,110, 0,118, 91, 52,
+ 93, 0,109,105,100, 0,112, 97,100, 91, 50, 93, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108,102, 97, 99,
+101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,
+117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,
+108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0,
+ 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0,115,116, 97, 99,107,105,110,100,101,120, 0, 42,101,114,114,111,114, 0,
+109,111,100,105,102,105,101,114, 0, 42,116,101,120,116,117,114,101, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,
+108, 97,121,101,114, 95,110, 97,109,101, 91, 54, 52, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0,116,101,120,109, 97,
+112,112,105,110,103, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108,115, 0, 42,101,
+109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,115,116,114,101,110,103,116,104, 0,100,101,102, 97,120,105,115, 0,
+112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98,
+ 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,
+111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93,
+ 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101,
+ 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98,
+ 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115,
+ 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,
+101,102,103,114,112, 95,110, 97,109,101, 91, 54, 52, 93, 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,
+108,108, 0,116,105,109,101, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0, 42,112,114,111,106,
+101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116,111,114,115,
+ 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,115, 99, 97,108,101,120, 0,115, 99, 97,108,101,121, 0,112,
+101,114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,
+101, 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110,
+ 97,114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,
+115, 0,108,105,102,101,116,105,109,101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,
+118, 67,111,115, 0,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91,
+ 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114,
+ 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108,
+ 95,112, 97,114,109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0,
+ 42,120,110,101,119, 0, 42,120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,
+110,116, 95,120, 0, 42, 99,117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115,
+ 0,110,117,109,102, 97, 99,101,115, 0,116,105,109,101, 95,120, 0,116,105,109,101, 95,120,110,101,119, 0, 42, 98,118,104,116,
+114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111,110, 0,118,101,114,116,101,120,
+ 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0, 42, 98,105,110,100,105,110,102,108,
+117,101,110, 99,101,115, 0, 42, 98,105,110,100,111,102,102,115,101,116,115, 0, 42, 98,105,110,100, 99, 97,103,101, 99,111,115,
+ 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,101,
+110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,101,
+ 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,100,
+109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0,
+ 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, 0,116,111,116,100,109,118,101,114,116, 0,116,111,
+116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,111,115,105,116,105,111,110, 0,114, 97,110,100,111,
+109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,
+116, 0,108,118,108, 0,115, 99,117,108,112,116,108,118,108, 0,116,111,116,108,118,108, 0,115,105,109,112,108,101, 0, 42,102,
+115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103,101,116, 0,118,103,114,111,117,112, 95,110, 97,109,
+101, 91, 54, 52, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105,110,107, 84,121,112,101, 0,115,104,114,105,110,107,
+ 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117,114,102, 76,101,118,101,108,115, 0, 42,111,114,105,
+103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, 0,111,114,105,103,105,110, 79,112,116,115, 0,111,
+102,102,115,101,116, 95,102, 97, 99, 0,111,102,102,115,101,116, 95,102, 97, 99, 95,118,103, 0, 99,114,101, 97,115,101, 95,105,
+110,110,101,114, 0, 99,114,101, 97,115,101, 95,111,117,116,101,114, 0, 99,114,101, 97,115,101, 95,114,105,109, 0,109, 97,116,
+ 95,111,102,115, 0,109, 97,116, 95,111,102,115, 95,114,105,109, 0, 42,111, 98, 95, 97,120,105,115, 0,115,116,101,112,115, 0,
+114,101,110,100,101,114, 95,115,116,101,112,115, 0,105,116,101,114, 0,115, 99,114,101,119, 95,111,102,115, 0, 97,110,103,108,
+101, 0, 42,111, 99,101, 97,110, 0, 42,111, 99,101, 97,110, 99, 97, 99,104,101, 0,114,101,115,111,108,117,116,105,111,110, 0,
+115,112, 97,116,105, 97,108, 95,115,105,122,101, 0,119,105,110,100, 95,118,101,108,111, 99,105,116,121, 0,115,109, 97,108,108,
+101,115,116, 95,119, 97,118,101, 0,119, 97,118,101, 95, 97,108,105,103,110,109,101,110,116, 0,119, 97,118,101, 95,100,105,114,
+101, 99,116,105,111,110, 0,119, 97,118,101, 95,115, 99, 97,108,101, 0, 99,104,111,112, 95, 97,109,111,117,110,116, 0,102,111,
+ 97,109, 95, 99,111,118,101,114, 97,103,101, 0, 98, 97,107,101,115,116, 97,114,116, 0, 98, 97,107,101,101,110,100, 0, 99, 97,
+ 99,104,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111, 97,109,108, 97,121,101,114,110, 97,109,101, 91, 54, 52, 93, 0,
+ 99, 97, 99,104,101,100, 0,103,101,111,109,101,116,114,121, 95,109,111,100,101, 0,114,101,102,114,101,115,104, 0,114,101,112,
+101, 97,116, 95,120, 0,114,101,112,101, 97,116, 95,121, 0,102,111, 97,109, 95,102, 97,100,101, 0, 42,111, 98,106,101, 99,116,
+ 95,102,114,111,109, 0, 42,111, 98,106,101, 99,116, 95,116,111, 0,102, 97,108,108,111,102,102, 95,114, 97,100,105,117,115, 0,
+101,100,105,116, 95,102,108, 97,103,115, 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 0, 42, 99,109, 97,112, 95,
+ 99,117,114,118,101, 0, 97,100,100, 95,116,104,114,101,115,104,111,108,100, 0,114,101,109, 95,116,104,114,101,115,104,111,108,
+100, 0,109, 97,115,107, 95, 99,111,110,115,116, 97,110,116, 0,109, 97,115,107, 95,100,101,102,103,114,112, 95,110, 97,109,101,
+ 91, 54, 52, 93, 0,109, 97,115,107, 95,116,101,120, 95,117,115,101, 95, 99,104, 97,110,110,101,108, 0, 42,109, 97,115,107, 95,
+116,101,120,116,117,114,101, 0, 42,109, 97,115,107, 95,116,101,120, 95,109, 97,112, 95,111, 98,106, 0,109, 97,115,107, 95,116,
+101,120, 95,109, 97,112,112,105,110,103, 0,109, 97,115,107, 95,116,101,120, 95,117,118,108, 97,121,101,114, 95,110, 97,109,101,
+ 91, 54, 52, 93, 0,112, 97,100, 95,105, 49, 0,100,101,102,103,114,112, 95,110, 97,109,101, 95, 97, 91, 54, 52, 93, 0,100,101,
+102,103,114,112, 95,110, 97,109,101, 95, 98, 91, 54, 52, 93, 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 95, 97,
+ 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 95, 98, 0,109,105,120, 95,109,111,100,101, 0,109,105,120, 95,115,
+101,116, 0,112, 97,100, 95, 99, 49, 91, 54, 93, 0,112,114,111,120,105,109,105,116,121, 95,109,111,100,101, 0,112,114,111,120,
+105,109,105,116,121, 95,102,108, 97,103,115, 0, 42,112,114,111,120,105,109,105,116,121, 95,111, 98, 95,116, 97,114,103,101,116,
+ 0,109,105,110, 95,100,105,115,116, 0,109, 97,120, 95,100,105,115,116, 0,112, 97,100, 95,115, 49, 0, 42, 99, 97,110,118, 97,
+115, 0, 42, 98,114,117,115,104, 0,116,104,114,101,115,104,111,108,100, 0,115, 99, 97,108,101, 0,104,101,114,109,105,116,101,
+ 95,110,117,109, 0, 42,108, 97,116,116, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,
+112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119,
+ 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, 99,101,100, 97,116, 97, 0,108, 97,116,109,
+ 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,
+117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,
+117, 98,115,116,114, 91, 54, 52, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,
+114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105,
+ 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 97,118,115, 0, 42,109,112, 97,116,104, 0, 99,111,110,115,116,114, 97,105,
+110,116, 67,104, 97,110,110,101,108,115, 0,101,102,102,101, 99,116, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,
+101,114,115, 0,114,101,115,116,111,114,101, 95,109,111,100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108,
+ 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,115, 99, 97,108,101,
+ 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, 91, 52, 93, 0,114,111,116, 65,120,105,115, 91, 51, 93, 0,
+100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,103,108,101, 0,100,114,111,116, 65,110,103,108,101, 0,111,
+ 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52, 93, 91, 52, 93, 0,105,109, 97,116, 95,114,
+101,110, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0,112, 97,100, 54, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,
+108, 97,103, 0,112,114,111,116,101, 99,116,102,108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103,
+ 0,110,108, 97,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,
+108, 97,103, 0,112, 97,100, 53, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, 0,100,117,112,
+101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,105, 97, 0,102,111,114,109,
+102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97,120, 95,118,101,108, 0,109,
+105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110,103, 84,104,114,101,115,104,
+111,108,100, 0,111, 98,115,116, 97, 99,108,101, 82, 97,100, 0,114,111,116,109,111,100,101, 0, 98,111,117,110,100,116,121,112,
+101, 0, 99,111,108,108,105,115,105,111,110, 95, 98,111,117,110,100,116,121,112,101, 0,114,101,115,116,114,105, 99,116,102,108,
+ 97,103, 0,100,116, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,101,109,112,116,121, 95,100,114, 97,119,115,
+105,122,101, 0,100,117,112,102, 97, 99,101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,
+114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,
+101,102, 0,103, 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,
+116,102,108, 97,103, 0, 97,110,105,115,111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,
+115,116,114, 97,105,110,116,115, 0,110,108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,
+101,115,121,115,116,101,109, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0, 98,111,100,121, 95,116,121,
+112,101, 0,115,104, 97,112,101,102,108, 97,103, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,
+100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116,
+ 68, 97,116, 97, 77, 97,115,107, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0,115,116, 97,116,101, 0,105,
+110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108, 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,
+105,115,116, 0,105,109, 97, 95,111,102,115, 91, 50, 93, 0, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,111,
+114,105,103,108, 97,121, 0,111,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,110,111, 95,100,114, 97,
+119, 0, 97,110,105,109, 97,116,101,100, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108,100, 0,115,104,
+ 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0,122,100,105,114,
+ 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95,102,108,111,119, 0,102, 95,115,105,122,101,
+ 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,102, 95,112,111,119,101,114,
+ 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,
+114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,
+114,102,114,105, 99,116, 0,112,100,101,102, 95,115,116,105, 99,107,110,101,115,115, 0, 97, 98,115,111,114,112,116,105,111,110,
+ 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,
+102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113,
+ 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,
+120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0,
+103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114,116, 91, 51, 93, 0,116,111,116,100, 97,116, 97, 0,102,114, 97,
+109,101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42,100, 97,116, 97, 91, 56, 93, 0,
+ 42, 99,117,114, 91, 56, 93, 0,101,120,116,114, 97,100, 97,116, 97, 0,115,116,101,112, 0,115,105,109,102,114, 97,109,101, 0,
+115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0,108, 97,
+115,116, 95,101,120, 97, 99,116, 0,108, 97,115,116, 95,118, 97,108,105,100, 0, 99,111,109,112,114,101,115,115,105,111,110, 0,
+112,114,101,118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 49, 48, 50, 52,
+ 93, 0, 42, 99, 97, 99,104,101,100, 95,102,114, 97,109,101,115, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116,
+ 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,
+102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116,105,111,110,115,
+ 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67,
+ 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,
+107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80,
+ 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75,
+ 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108, 97,103,115, 0,110,117,109, 99,
+108,117,115,116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,119,101,108,100,105,110,103, 0,116,111,116,115,112,114,105,
+110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107, 0,109,115,103,
+ 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115, 91, 54, 52, 93,
+ 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,115,105, 99,115,
+ 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,109,105,110,103,
+111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,112, 0,110, 97,
+109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 54, 52, 93, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,
+112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 54,
+ 52, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,
+103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,
+110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98,
+ 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,
+115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,110,103,
+112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,
+115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105,103,104,116,115,
+ 0,108, 99,111,109, 91, 51, 93, 0,108,114,111,116, 91, 51, 93, 91, 51, 93, 0,108,115, 99, 97,108,101, 91, 51, 93, 91, 51, 93,
+ 0,108, 97,115,116, 95,102,114, 97,109,101, 0,118,101,108, 91, 51, 93, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118,
+ 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,
+101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101,
+ 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,
+101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,
+116, 0,103,114, 97,118, 91, 51, 93, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0, 98, 97,107,101,
+ 83,116, 97,114,116, 0, 98, 97,107,101, 69,110,100, 0,102,114, 97,109,101, 79,102,102,115,101,116, 0,103,115,116, 97,114, 0,
+109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,
+122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91,
+ 49, 48, 50, 52, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,
+108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,
+112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115,
+ 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,
+105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 83,105,
+122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,122,101,
+ 0, 42,109,101,115,104, 86,101,108,111, 99,105,116,105,101,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,114,116, 0, 99,112,
+115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101,
+ 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115, 0,118,101,108,111,
+ 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 82,
+ 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0, 97,110,105,109, 82, 97,116,101, 0,109,105,115,
+116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,
+110, 98, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103,101, 0,108,105,
+110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121, 66,111,120, 82,
+ 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,111,110, 82,101,115, 0,112,104,121,115,105,
+ 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,111,103,105, 99,115,116,101,112, 0,112,104,
+121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,105,115,105, 0,109,105,115,116,115,116, 97,
+ 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,
+114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,114,109,105,110,100,105,115,116, 0,115,116,
+ 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,
+100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99,
+ 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,
+111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95,
+ 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0,
+ 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0, 97,111, 95,105,110,100,105,114,101, 99,116,
+ 95,101,110,101,114,103,121, 0, 97,111, 95,101,110,118, 95,101,110,101,114,103,121, 0, 97,111, 95,112, 97,100, 50, 0, 97,111,
+ 95,105,110,100,105,114,101, 99,116, 95, 98,111,117,110, 99,101,115, 0, 97,111, 95,112, 97,100, 0, 97,111, 95,115, 97,109,112,
+ 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97,111, 95, 97,112,112,114,
+111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98,108,101,115, 0,115,101,
+108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98,
+ 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,
+114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,
+116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,
+101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,
+115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,
+111,100,101, 99, 84,121,112,101, 0, 99,111,100,101, 99, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0, 99,111,100,
+101, 99, 0, 99,111,100,101, 99, 70,108, 97,103,115, 0, 99,111,108,111,114, 68,101,112,116,104, 0, 99,111,100,101, 99, 84,101,
+109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0,
+109,105,110, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,107,101,121, 70,114, 97,109,101, 82, 97,116,101, 0,
+ 98,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 99,111,100,101, 99, 84,121,112,101, 0, 97,117,100,105,111, 83, 97,109,112,
+108,101, 82, 97,116,101, 0, 97,117,100,105,111, 66,105,116, 68,101,112,116,104, 0, 97,117,100,105,111, 67,104, 97,110,110,101,
+108,115, 0, 97,117,100,105,111, 67,111,100,101, 99, 70,108, 97,103,115, 0, 97,117,100,105,111, 66,105,116, 82, 97,116,101, 0,
+ 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,
+ 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95, 99,104, 97,110,
+110,101,108,115, 0, 97,117,100,105,111, 95,112, 97,100, 0, 97,117,100,105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,
+115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95,
+ 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112, 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,
+114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110, 0,115,112,101,101,100, 95,111,102, 95,115,111,117,110,100,
+ 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111,114, 0,100,105,115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,
+109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121,
+ 95,122,109, 97,115,107, 0,108, 97,121, 95,101,120, 99,108,117,100,101, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,
+108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0,115, 97,109,112,108,101,115, 0,105,109,116,121,112,101, 0,112,108, 97,110,
+101,115, 0,113,117, 97,108,105,116,121, 0, 99,111,109,112,114,101,115,115, 0,101,120,114, 95, 99,111,100,101, 99, 0, 99,105,
+110,101,111,110, 95,102,108, 97,103, 0, 99,105,110,101,111,110, 95,119,104,105,116,101, 0, 99,105,110,101,111,110, 95, 98,108,
+ 97, 99,107, 0, 99,105,110,101,111,110, 95,103, 97,109,109, 97, 0,106,112, 50, 95,102,108, 97,103, 0,105,109, 95,102,111,114,
+109, 97,116, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,113,
+116, 99,111,100,101, 99,115,101,116,116,105,110,103,115, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,115,117, 98,102,114,
+ 97,109,101, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,
+116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,
+100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,
+121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,
+114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,
+122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,115,117, 98,105,109,
+116,121,112,101, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,
+101, 95,111,112,116,105,111,110,115, 0,114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,111, 99,114,
+101,115, 0,112, 97,100, 52, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,
+103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,
+101,114,115, 0, 97, 99,116,108, 97,121, 0,109, 98,108,117,114, 95,115, 97,109,112,108,101,115, 0,120, 97,115,112, 0,121, 97,
+115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,
+102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,
+105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,
+108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,
+114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,
+109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0,112,
+105, 99, 91, 49, 48, 50, 52, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,
+109,112, 95,117,100, 97,116, 97, 91, 55, 54, 56, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,
+109,112, 91, 52, 93, 0,115,101,113, 95,112,114,101,118, 95,116,121,112,101, 0,115,101,113, 95,114,101,110,100, 95,116,121,112,
+101, 0,115,101,113, 95,102,108, 97,103, 0,112, 97,100, 53, 91, 53, 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103,
+ 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100,111,
+119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109,112,
+108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, 97,
+ 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112, 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100,101,
+112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115, 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, 97,
+110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,
+120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,110, 97,109,101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,
+112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109,
+ 97,120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,
+116, 0, 99,111,108, 91, 51, 93, 0, 99,101,108,108,115,105,122,101, 0, 99,101,108,108,104,101,105,103,104,116, 0, 97,103,101,
+110,116,109, 97,120,115,108,111,112,101, 0, 97,103,101,110,116,109, 97,120, 99,108,105,109, 98, 0, 97,103,101,110,116,104,101,
+105,103,104,116, 0, 97,103,101,110,116,114, 97,100,105,117,115, 0,101,100,103,101,109, 97,120,108,101,110, 0,101,100,103,101,
+109, 97,120,101,114,114,111,114, 0,114,101,103,105,111,110,109,105,110,115,105,122,101, 0,114,101,103,105,111,110,109,101,114,
+103,101,115,105,122,101, 0,118,101,114,116,115,112,101,114,112,111,108,121, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,
+100,105,115,116, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,109, 97,120,101,114,114,111,114, 0,102,114, 97,109,105,110,
+103, 0,112,108, 97,121,101,114,102,108, 97,103, 0,114,116, 49, 0,114,116, 50, 0, 97, 97,115, 97,109,112,108,101,115, 0,112,
+ 97,100, 52, 91, 51, 93, 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,
+116,105,111,110, 0,114,101, 99, 97,115,116, 68, 97,116, 97, 0,109, 97,116,109,111,100,101, 0,101,120,105,116,107,101,121, 0,
+111, 98,115,116, 97, 99,108,101, 83,105,109,117,108, 97,116,105,111,110, 0,108,101,118,101,108, 72,101,105,103,104,116, 0, 42,
+ 99, 97,109,101,114, 97, 0, 42,112, 97,105,110,116, 95, 99,117,114,115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,
+114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,115,101, 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108,
+ 95, 97,110,103,108,101, 0,115, 99,114,101,101,110, 95,103,114, 97, 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,105,110,
+116, 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,
+121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116,
+ 0,115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102,
+ 97,100,101, 95,102,114, 97,109,101,115, 0,114, 97,100,105, 97,108, 95,115,121,109,109, 91, 51, 93, 0,108, 97,115,116, 95,120,
+ 0,108, 97,115,116, 95,121, 0,108, 97,115,116, 95, 97,110,103,108,101, 0,100,114, 97,119, 95, 97,110, 99,104,111,114,101,100,
+ 0, 97,110, 99,104,111,114,101,100, 95,115,105,122,101, 0, 97,110, 99,104,111,114,101,100, 95,108,111, 99, 97,116,105,111,110,
+ 91, 51, 93, 0, 97,110, 99,104,111,114,101,100, 95,105,110,105,116,105, 97,108, 95,109,111,117,115,101, 91, 50, 93, 0,100,114,
+ 97,119, 95,112,114,101,115,115,117,114,101, 0,112,114,101,115,115,117,114,101, 95,118, 97,108,117,101, 0,115,112,101, 99,105,
+ 97,108, 95,114,111,116, 97,116,105,111,110, 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116,
+ 95,112,114,101,118, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,
+117,115, 0, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42,117,118,115, 99,117,108,112,116, 0,118,103,114,
+111,117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114,116,121,112,101, 0,106,111,105,110,116,114,105,108,105,109,
+105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116,
+ 0,110,111,114,109, 97,108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,
+105,110,103,115, 0,118,101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114,
+ 97,100,105,117,115, 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,
+103,105,110, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,
+110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,
+111,100,101, 0,117,118, 95,115,117, 98,115,117,114,102, 95,108,101,118,101,108, 0,103,112,101,110, 99,105,108, 95,102,108, 97,
+103,115, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,
+105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,
+114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,
+117,116,111,107,101,121, 95,102,108, 97,103, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101,
+ 0,112, 97,100, 50, 91, 53, 93, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,
+116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,
+108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,
+107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,
+109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,
+110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,
+ 97,110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,
+116,104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,
+101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,
+116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,
+115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115,107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,
+108, 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103,
+ 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99,111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117,
+ 98,100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,
+111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,
+110, 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0,115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,
+103, 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,101,100,103,101, 95,109,111,100,101, 95,108,105,118,101, 95,117,110,
+119,114, 97,112, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,
+114,103,101,116, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0,112,114,111,112,
+111,114,116,105,111,110, 97,108, 95,111, 98,106,101, 99,116,115, 0,112, 97,100, 91, 53, 93, 0, 97,117,116,111, 95,110,111,114,
+109, 97,108,105,122,101, 0,109,117,108,116,105,112, 97,105,110,116, 0,117,115,101, 95,117,118, 95,115, 99,117,108,112,116, 0,
+117,118, 95,115, 99,117,108,112,116, 95,115,101,116,116,105,110,103,115, 0,117,118, 95,115, 99,117,108,112,116, 95,116,111,111,
+108, 0,117,118, 95,114,101,108, 97,120, 95,109,101,116,104,111,100, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,115,
+101,116,116,105,110,103,115, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,115,105,122,
+101, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,117,110,112,114,111,106,101, 99,116,
+101,100, 95,114, 97,100,105,117,115, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95, 97,
+108,112,104, 97, 0,117,110,105,102,105,101,100, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,116,111,116,111,
+ 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106,115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,
+116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101, 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,
+121,115,116,101,109, 0,115,121,115,116,101,109, 95,114,111,116, 97,116,105,111,110, 0,103,114, 97,118,105,116,121, 91, 51, 93,
+ 0,113,117,105, 99,107, 95, 99, 97, 99,104,101, 95,115,116,101,112, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,
+115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,105,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,
+101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0,
+108, 97,121, 95,117,112,100, 97,116,101,100, 0, 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,
+116, 97,116,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0, 42,115,111,117,
+110,100, 95,115, 99,101,110,101, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 95,104, 97,110,100,108,101, 0, 42,115,111,
+117,110,100, 95,115, 99,114,117, 98, 95,104, 97,110,100,108,101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101,
+115, 0, 42,102,112,115, 95,105,110,102,111, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100,
+ 97,103,102,108, 97,103,115, 0, 97, 99,116,105,118,101, 95,107,101,121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,
+101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105, 99,115, 95,115,101,116,116,105,110,103,115, 0, 42, 99,108,
+105,112, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 95,109,111,100, 97,108, 0, 99,117,115,101,114, 0, 98,
+108,101,110,100, 0,118,105,101,119, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52,
+ 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93,
+ 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,
+101,114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,
+111, 99, 97,108, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0,
+ 42,114,101,110,100,101,114, 95,101,110,103,105,110,101, 0, 42,100,101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,
+111,116,104, 95,116,105,109,101,114, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52,
+ 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,
+111,109, 0,105,115, 95,112,101,114,115,112, 0,112,101,114,115,112, 0,118,105,101,119,108,111, 99,107, 0,116,119,100,114, 97,
+119,102,108, 97,103, 0,114,102,108, 97,103, 0,108,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,
+108,118,105,101,119, 0,103,114,105,100,118,105,101,119, 0,116,119, 97,110,103,108,101, 91, 51, 93, 0,114,111,116, 95, 97,110,
+103,108,101, 0,114,111,116, 95, 97,120,105,115, 91, 51, 93, 0,114,101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,
+116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0,
+ 98,117,110,100,108,101, 95,115,105,122,101, 0, 98,117,110,100,108,101, 95,100,114, 97,119,116,121,112,101, 0,108, 97,121, 95,
+117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 98,103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105, 99,
+ 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 54, 52, 93, 0,100,114, 97,119,116,121,112,101, 0,111, 98, 95,
+ 99,101,110,116,114,101, 95, 99,117,114,115,111,114, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,103,
+114,105,100, 0,110,101, 97,114, 0,102, 97,114, 0,109,111,100,101,115,101,108,101, 99,116, 0,103,114,105,100,108,105,110,101,
+115, 0,103,114,105,100,115,117, 98,100,105,118, 0,103,114,105,100,102,108, 97,103, 0,116,119,116,121,112,101, 0,116,119,109,
+111,100,101, 0,116,119,102,108, 97,103, 0,112, 97,100, 50, 91, 50, 93, 0, 97,102,116,101,114,100,114, 97,119, 95,116,114, 97,
+110,115,112, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,121, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,
+121,116,114, 97,110,115,112, 0,122, 98,117,102, 0,120,114, 97,121, 0,112, 97,100, 51, 91, 50, 93, 0, 42,112,114,111,112,101,
+114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91,
+ 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108,
+ 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112,116,111,116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,
+111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105,110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,
+105,110,121, 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0,116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0,
+114,112,116, 95,109, 97,115,107, 0,118, 50,100, 0, 42, 97,100,115, 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,
+116,111,115,110, 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,
+105,110, 98,117,115,101,114, 0,114,101, 95, 97,108,105,103,110, 0,112,114,101,118,105,101,119, 0,116,101,120,116,117,114,101,
+ 95, 99,111,110,116,101,120,116, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,
+100, 0, 42,116,101,120,117,115,101,114, 0,114,101,110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110,
+ 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,105,116,108,101, 91, 51, 50, 93, 0,100,105,114, 91, 49, 48, 53, 54, 93, 0,
+102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,
+101,100,105,116, 91, 50, 53, 54, 93, 0,102,105,108,116,101,114, 95,103,108,111, 98, 91, 54, 52, 93, 0, 97, 99,116,105,118,101,
+ 95,102,105,108,101, 0,115,101,108, 95,102,105,114,115,116, 0,115,101,108, 95,108, 97,115,116, 0,115,111,114,116, 0,100,105,
+115,112,108, 97,121, 0,102, 95,102,112, 0,102,112, 95,115,116,114, 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,
+101,116, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0,
+ 42,102,111,108,100,101,114,115, 95,110,101,120,116, 0, 42,111,112, 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,
+116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,
+114, 0,115,121,115,116,101,109,110,114, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,
+104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,111,117,116,108,105,110,101,118,
+105,115, 0,115,116,111,114,101,102,108, 97,103, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0, 42, 99,117,109, 97,112,
+ 0,115, 99,111,112,101,115, 0,115, 97,109,112,108,101, 95,108,105,110,101, 95,104,105,115,116, 0, 99,117,114,115,111,114, 91,
+ 50, 93, 0, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 99,117,114,116,105,108,101, 0,108,111, 99,107, 0,112,105,110, 0,
+100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, 42,116,101,120,116, 0,
+116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,109,101,110,117,110,114, 0,108,104,101,105,103,104,116, 0, 99,119,105,
+100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115,
+ 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121,110,116, 97,120, 0,108,105,110,101, 95,104,108,105,103,104,
+116, 0,111,118,101,114,119,114,105,116,101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,
+110,101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,
+108,117,103,105,110,115, 0,102,105,110,100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50,
+ 53, 54, 93, 0,109, 97,114,103,105,110, 95, 99,111,108,117,109,110, 0, 42,100,114, 97,119, 99, 97, 99,104,101, 0, 42,112,121,
+ 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,
+114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,
+115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,115, 99,114,105,112,116, 97,
+114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0, 42, 97,114,114, 97,121,
+ 0, 99, 97, 99,104,101,115, 0, 99, 97, 99,104,101, 95,100,105,115,112,108, 97,121, 0, 42,105,100, 0, 97,115,112,101, 99,116,
+ 0,112, 97,100,102, 0,109,120, 0,109,121, 0, 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,
+101,120,102,114,111,109, 0,115,104, 97,100,101,114,102,114,111,109, 0,108,105,110,107,100,114, 97,103, 0,108,101,110, 95, 97,
+108,108,111, 99, 0, 99,117,114,115,111,114, 0,115, 99,114,111,108,108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,
+114,111,109,112,116, 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97,103,101, 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,
+116, 0,115,101,108, 95,101,110,100, 0,102,105,108,116,101,114, 91, 54, 52, 93, 0,120,108,111, 99,107,111,102, 0,121,108,111,
+ 99,107,111,102, 0,117,115,101,114, 0,112, 97,116,104, 95,108,101,110,103,116,104, 0,108,111, 99, 91, 50, 93, 0,115,116, 97,
+ 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,117,110,105,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,116,
+112,114,111, 99, 95,102,108, 97,103, 0, 42,100,114, 97,119, 95, 99,111,110,116,101,120,116, 0,100,111,112,101, 95,115,111,114,
+116, 0,100,111,112,101, 95,102,108, 97,103, 0,102,105,108,101,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0, 98,108,102, 95,105,
+100, 0,117,105,102,111,110,116, 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,
+103, 0,105,116, 97,108,105, 99, 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121,
+ 0,115,104, 97,100,111,119, 97,108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,
+116,108,101, 0,103,114,111,117,112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,
+116, 0,112, 97,110,101,108,122,111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,
+103,101,116, 99,104, 97,114,115, 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97,
+ 99,101, 0, 98,111,120,115,112, 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,
+112, 97, 99,101,121, 0,112, 97,110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,111,117,116,108,
+105,110,101, 91, 52, 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,
+109, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,
+115,104, 97,100,101,116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, 99,107, 0,105,
+110,110,101,114, 95, 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,
+110,110,101,114, 95,107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,
+101,114, 95,100,114,105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93,
+ 0,104,101, 97,100,101,114, 91, 52, 93, 0,115,104,111,119, 95,104,101, 97,100,101,114, 0,119, 99,111,108, 95,114,101,103,117,
+108, 97,114, 0,119, 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, 95,114, 97,100,
+105,111, 0,119, 99,111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, 99,111,108, 95,
+110,117,109, 0,119, 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, 0,119, 99,111,
+108, 95,112,117,108,108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99,111,108, 95,109,
+101,110,117, 95,105,116,101,109, 0,119, 99,111,108, 95,116,111,111,108,116,105,112, 0,119, 99,111,108, 95, 98,111,120, 0,119,
+ 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111,108, 95,108,105,
+115,116, 95,105,116,101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,112, 97,110,101,108, 0,105, 99,111,110,102,105,108,
+101, 91, 50, 53, 54, 93, 0,105, 99,111,110, 95, 97,108,112,104, 97, 0, 98, 97, 99,107, 91, 52, 93, 0,116,105,116,108,101, 91,
+ 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101,
+ 97,100,101,114, 95,116,101,120,116, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,
+117,116,116,111,110, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,
+116,101,120,116, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52,
+ 93, 0,108,105,115,116, 95,116,105,116,108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,
+116, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,
+101, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105,
+ 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52,
+ 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112,
+ 91, 52, 93, 0,115,112,101, 97,107,101,114, 91, 52, 93, 0,101,109,112,116,121, 91, 52, 93, 0, 99, 97,109,101,114, 97, 91, 52,
+ 93, 0,112, 97,100, 91, 56, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,
+112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91,
+ 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101,
+ 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,
+114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0,101,100,103,101, 95, 99,114,101, 97,115,
+101, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101,
+ 95,100,111,116, 91, 52, 93, 0,101,120,116,114, 97, 95,101,100,103,101, 95,108,101,110, 91, 52, 93, 0,101,120,116,114, 97, 95,
+102, 97, 99,101, 95, 97,110,103,108,101, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,114,101, 97, 91, 52, 93,
+ 0,112, 97,100, 51, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,110,111,114,109, 97,108,
+ 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,
+116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52,
+ 93, 0,110,117,114, 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,118,108,105,110,101, 91, 52, 93, 0, 97, 99,
+116, 95,115,112,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,
+114, 98, 95,115,101,108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,115,116,115,101,108, 95,112,111,105,110,116, 91, 52, 93,
+ 0,104, 97,110,100,108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 91, 52, 93, 0,104,
+ 97,110,100,108,101, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,
+110,100,108,101, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,
+102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,
+101, 95,115,101,108, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105,103,110, 91, 52,
+ 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,100,115, 95,
+ 99,104, 97,110,110,101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, 99,111,110,115,
+111,108,101, 95,111,117,116,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, 52, 93, 0, 99,
+111,110,115,111,108,101, 95,105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, 91, 52, 93, 0,
+ 99,111,110,115,111,108,101, 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,111,117,
+116,108,105,110,101, 95,119,105,100,116,104, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0,110,111,111,100,108,101, 95,
+ 99,117,114,118,105,110,103, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52, 93, 0,115,121,
+110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91, 52, 93, 0,109,
+111,118,105,101, 91, 52, 93, 0,109,111,118,105,101, 99,108,105,112, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,
+101,110,101, 91, 52, 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110,
+ 91, 52, 93, 0,116,114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,
+115,104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,
+110,100,108,101, 95,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,
+116,101,120, 95,115,105,122,101, 0,109, 97,114,107,101,114, 95,111,117,116,108,105,110,101, 91, 52, 93, 0,109, 97,114,107,101,
+114, 91, 52, 93, 0, 97, 99,116, 95,109, 97,114,107,101,114, 91, 52, 93, 0,115,101,108, 95,109, 97,114,107,101,114, 91, 52, 93,
+ 0,100,105,115, 95,109, 97,114,107,101,114, 91, 52, 93, 0,108,111, 99,107, 95,109, 97,114,107,101,114, 91, 52, 93, 0, 98,117,
+110,100,108,101, 95,115,111,108,105,100, 91, 52, 93, 0,112, 97,116,104, 95, 98,101,102,111,114,101, 91, 52, 93, 0,112, 97,116,
+104, 95, 97,102,116,101,114, 91, 52, 93, 0, 99, 97,109,101,114, 97, 95,112, 97,116,104, 91, 52, 93, 0,104,112, 97,100, 91, 55,
+ 93, 0,112,114,101,118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104,
+ 95,102, 97, 99,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,101,100,103,101, 91, 52, 93, 0,
+112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,118,101,114,116, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,
+116,105,116, 99,104, 95,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116,
+ 99,104, 95,117,110,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,
+104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,109, 97,116, 99,104, 91, 52, 93, 0,115,101,108,101, 99,116,101,100, 95,104,105,
+103,104,108,105,103,104,116, 91, 52, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118,
+ 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,
+101,113, 0,116,105,109, 97, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,
+108,111,103,105, 99, 0,116,117,115,101,114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, 99,108,105,112, 0,116,
+ 97,114,109, 91, 50, 48, 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101,
+ 91, 54, 52, 93, 0,115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,
+109,112,100,105,114, 91, 55, 54, 56, 93, 0,102,111,110,116,100,105,114, 91, 55, 54, 56, 93, 0,114,101,110,100,101,114,100,105,
+114, 91, 49, 48, 50, 52, 93, 0,116,101,120,116,117,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103,116,101,120,100,105,114,
+ 91, 55, 54, 56, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 55, 54, 56, 93, 0,112,121,116,104,111,110,100,105,114, 91,
+ 55, 54, 56, 93, 0,115,111,117,110,100,100,105,114, 91, 55, 54, 56, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91,
+ 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,
+121,101,114, 95,112,114,101,115,101,116, 0,118, 50,100, 95,109,105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101,
+ 99,111,100,101, 95,115,116,121,108,101, 0,118,101,114,115,105,111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,
+109,101, 0,103, 97,109,101,102,108, 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,
+108, 97,103, 0,108, 97,110,103,117, 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,
+105,120, 98,117,102,115,105,122,101, 0, 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0,
+ 97,117,100,105,111,102,111,114,109, 97,116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110,
+ 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,
+109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,
+115,116,121,108,101,115, 0,107,101,121,109, 97,112,115, 0,117,115,101,114, 95,107,101,121,109, 97,112,115, 0, 97,100,100,111,
+110,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116,101,112,115, 0,117,110,
+100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,
+108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101,116,116,105,110,103,115,
+ 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,
+116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,
+101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,
+101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,103,116,104,114,101,115,104,111,
+108,100, 0,109,101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,
+102,114, 97,109,101,115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98,
+ 99,101,110,116,101,114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,
+101,110,116, 95,102,105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,
+105,116, 0, 99,117,114,115,115,105,122,101, 0, 99,111,108,111,114, 95,112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,
+111, 95,110,101,119, 0,107,101,121,104, 97,110,100,108,101,115, 95,110,101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,
+115, 99,114, 99, 97,115,116,119, 97,105,116, 0,119,105,100,103,101,116, 95,117,110,105,116, 0, 97,110,105,115,111,116,114,111,
+112,105, 99, 95,102,105,108,116,101,114, 0,117,115,101, 95, 49, 54, 98,105,116, 95,116,101,120,116,117,114,101,115, 0,112, 97,
+100, 56, 0,110,100,111,102, 95,115,101,110,115,105,116,105,118,105,116,121, 0,110,100,111,102, 95,102,108, 97,103, 0,103,108,
+ 97,108,112,104, 97, 99,108,105,112, 0,116,101,120,116, 95,114,101,110,100,101,114, 0,112, 97,100, 57, 0, 99,111, 98, 97, 95,
+119,101,105,103,104,116, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,111,118,101,114,108, 97,121, 95, 99,111,108, 91,
+ 51, 93, 0,116,119,101, 97,107, 95,116,104,114,101,115,104,111,108,100, 0, 97,117,116,104,111,114, 91, 56, 48, 93, 0, 99,111,
+109,112,117,116,101, 95,100,101,118,105, 99,101, 95,116,121,112,101, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101,
+ 95,105,100, 0,102, 99,117, 95,105,110, 97, 99,116,105,118,101, 95, 97,108,112,104, 97, 0,118,101,114,116, 98, 97,115,101, 0,
+101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101,110,101, 0,114,101,100,114,
+ 97,119,115, 95,102,108, 97,103, 0,102,117,108,108, 0,116,101,109,112, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119,
+ 0,100,111, 95,114,101,102,114,101,115,104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,
+114, 97,119, 95,112, 97,105,110,116, 99,117,114,115,111,114, 0,100,111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,
+112, 0,109, 97,105,110,119,105,110, 0,115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,
+114, 0, 42, 99,111,110,116,101,120,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0,
+ 42,118, 49, 0, 42,118, 50, 0, 42,116,121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110,
+ 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,
+105,122,101,120, 0,115,105,122,101,121, 0,108, 97, 98,101,108,111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103,
+ 0, 99,111,110,116,114,111,108, 0,115,110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97,
+ 98, 0, 42, 97, 99,116,105,118,101,100, 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,
+105,122,101, 0,108,105,115,116, 95,108, 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101,
+ 0,108,105,115,116, 95,115,101, 97,114, 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,
+117,116,115,112, 97, 99,101,116,121,112,101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97,
+ 0,104, 97,110,100,108,101,114,115, 0, 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,
+119,114, 99,116, 0,115,119,105,110,105,100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116,
+ 0,100,111, 95,100,114, 97,119, 95,111,118,101,114,108, 97,121, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115,
+ 0, 42,104,101, 97,100,101,114,115,116,114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91,
+ 52, 93, 0,115,117, 98,118,101,114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,
+110,115,117, 98,118,101,114,115,105,111,110, 0,119,105,110,112,111,115, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,
+117,114,115, 99,101,110,101, 0,102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,114,101,118,105,115,105,
+111,110, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0,111,114,105,103, 95,119,105,100,116,104, 0,111,114,105,103, 95,104,101,105,
+103,104,116, 0, 98,111,116,116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91,
+ 51, 93, 0,103, 97,109,109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 55, 54, 56, 93, 0,116, 99, 0,
+ 98,117,105,108,100, 95,115,105,122,101, 95,102,108, 97,103,115, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103,115, 0,
+100,111,110,101, 0,115,116, 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100,
+ 97,116, 97, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,
+110, 99,101, 0, 42,105,110,115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,
+114,101,110,116, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,
+101,110,100,111,102,115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112,
+ 0,115, 97,116, 0,109,117,108, 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0,115,
+116,114,101, 97,109,105,110,100,101,120, 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0, 99,108,105,112, 95,
+102,108, 97,103, 0, 42,115,116,114,105,112, 0, 42,115, 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116,
+ 95,102, 97,100,101,114, 0,115,112,101,101,100, 95,102, 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,
+115,101,113, 51, 0,115,101,113, 98, 97,115,101, 0, 42,115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117,110,100,
+ 0,112,105,116, 99,104, 0,112, 97,110, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,
+105,109, 95,115,116, 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,
+100,101, 0, 98,108,101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,
+101,113, 0, 42,115,101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0,
+ 97, 99,116, 95,105,109, 97,103,101,100,105,114, 91, 49, 48, 50, 52, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91,
+ 49, 48, 50, 52, 93, 0,111,118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95,102,108,
+ 97,103, 0,111,118,101,114, 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100,
+ 0,119,105,112,101,116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,
+105,115,116, 0,100, 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83,
+ 99, 97,108,101,121, 73,110,105, 0,120, 73,110,105, 0,121, 73,110,105, 0,114,111,116, 73,110,105, 0,105,110,116,101,114,112,
+111,108, 97,116,105,111,110, 0,117,110,105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77, 97,112, 0,
+103,108,111, 98, 97,108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,
+112,101, 0,117,115,101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111,
+ 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114,
+ 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,
+109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,
+116,101,120,109, 97,112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,
+105,109,101,116,101,120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,
+117,112, 95,118, 0,118,103,114,111,117,112,110, 97,109,101, 91, 54, 52, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118,
+ 91, 54, 52, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,110,114, 0,117,115,101,100, 0,117,115,101,100,101,108,
+101,109, 0, 42,112,111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,
+101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 54, 52, 93, 0,116,111,103,
+103,108,101, 78, 97,109,101, 91, 54, 52, 93, 0,118, 97,108,117,101, 91, 54, 52, 93, 0,109, 97,120,118, 97,108,117,101, 91, 54,
+ 52, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 54,
+ 52, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,116,110, 97,109,
+101, 91, 54, 52, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 54, 52, 93, 0, 99,
+111,110,115,116,114, 97,105,110,116, 91, 54, 52, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,
+116, 91, 54, 52, 93, 0, 98,111,100,121, 91, 54, 52, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,
+116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,
+105,115, 95,115,105,110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,
+112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115,
+ 0,116,111,116,115,108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109,
+ 97,115,107, 0, 42, 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 54, 52, 93, 0, 98,108,101,110,100,105,110, 0,112,
+114,105,111,114,105,116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,
+105,100,101,108,101,110,103,116,104, 0,108, 97,121,101,114, 95,119,101,105,103,104,116, 0,109,105,110, 95,103, 97,105,110, 0,
+109, 97,120, 95,103, 97,105,110, 0,114,101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,
+100,105,115,116, 97,110, 99,101, 0,114,111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,
+101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,
+117,116,101,114, 95,103, 97,105,110, 0,115,110,100,110,114, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0,
+ 42,109,101, 0,108,105,110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51,
+ 93, 0,108,111, 99, 97,108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,
+111, 99, 91, 51, 93, 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,112, 97,100, 49, 91, 51, 93, 0,108,105,110,101, 97,114,
+118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,
+114,101,102,101,114,101,110, 99,101, 0,109,105,110, 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99,
+ 91, 51, 93, 0,109, 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51,
+ 93, 0,109, 97,116,112,114,111,112, 91, 54, 52, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,
+114,105, 98,117,116,105,111,110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111,
+ 97,116, 95, 97,114,103, 95, 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91,
+ 54, 52, 93, 0, 42,116,111, 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91,
+ 54, 52, 93, 0,108,111, 97,100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,
+116, 95, 97,114,103, 0,105,110,102,108,117,101,110, 99,101, 0, 42,115,117, 98,116, 97,114,103,101,116, 0,102, 97, 99,105,110,
+103, 97,120,105,115, 0,118,101,108,111, 99,105,116,121, 0, 97, 99, 99,101,108,101,114, 97,116,105,111,110, 0,116,117,114,110,
+115,112,101,101,100, 0,117,112,100, 97,116,101, 84,105,109,101, 0, 42,110, 97,118,109,101,115,104, 0,103,111, 0, 42,110,101,
+119,112, 97, 99,107,101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101,
+ 0, 42, 99, 97, 99,104,101, 0, 42,119, 97,118,101,102,111,114,109, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,
+108,101, 0, 42,108, 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93,
+ 0, 42,112,114,111,112, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,
+105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93,
+ 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 97,114,109, 95,114,
+111,108,108, 0,120,119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,
+100, 95,104,101, 97,100, 0,114, 97,100, 95,116, 97,105,108, 0,112, 97,100, 91, 49, 93, 0, 98,111,110,101, 98, 97,115,101, 0,
+ 99,104, 97,105,110, 98, 97,115,101, 0, 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98,111,110,101, 0, 42, 97, 99,116, 95,101,
+100, 98,111,110,101, 0, 42,115,107,101,116, 99,104, 0,103,101,118,101,114,116,100,101,102,111,114,109,101,114, 0,108, 97,121,
+101,114, 95,117,115,101,100, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,
+103,104,111,115,116,115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,
+115,116,115,102, 0,103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98,
+ 99, 0,112, 97,116,104, 97, 99, 0, 42,112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100,
+ 95,102,114, 97,109,101, 0,103,104,111,115,116, 95,115,102, 0,103,104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98,
+ 99, 0,103,104,111,115,116, 95, 97, 99, 0,103,104,111,115,116, 95,116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112,
+ 0,103,104,111,115,116, 95,102,108, 97,103, 0,112, 97,116,104, 95,116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,
+112, 97,116,104, 95,118,105,101,119,102,108, 97,103, 0,112, 97,116,104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104,
+ 95,115,102, 0,112, 97,116,104, 95,101,102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97,116,104, 95, 97, 99, 0,105,107,102,108,
+ 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 99,111,110,115,116,102,108, 97,103, 0,115,101,108,101, 99,116,102,108,
+ 97,103, 0,112, 97,100, 48, 91, 54, 93, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0,115,
+105,107,116,114,101,101, 0, 42, 99,117,115,116,111,109, 0, 42, 99,117,115,116,111,109, 95,116,120, 0,101,117,108, 91, 51, 93,
+ 0, 99,104, 97,110, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,
+111,115,101, 95,104,101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,
+110, 91, 51, 93, 0,108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,
+115,116,114,101,116, 99,104, 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0,
+ 42,116,101,109,112, 0, 99,104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97,115,104, 0,112,114,111,120,121, 95,108,
+ 97,121,101,114, 0,115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,
+115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,
+108,118,101,114, 0, 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,112,114,111,120,121, 95, 97, 99,116, 95,
+ 98,111,110,101, 91, 54, 52, 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,115,116,101,112,
+ 0,109, 97,120,115,116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,118,101,108, 0,
+100, 97,109,112,109, 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,116,111,109, 67,
+111,108, 0, 99,115, 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,
+114, 0,105,100,114,111,111,116, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112, 0,115,101, 97,
+114, 99,104,115,116,114, 91, 54, 52, 93, 0,102,105,108,116,101,114,102,108, 97,103, 0,114,101,110, 97,109,101, 73,110,100,101,
+120, 0, 97,100,115, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,
+110,115,112, 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108,
+ 0,108,105,110, 95,101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120,
+ 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,
+103,101,116,115, 0,105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,
+116, 98,111,110,101, 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93,
+ 0,112,111,108,101, 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,
+101,116, 91, 51, 93, 0,110,117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110, 0,120,122, 83, 99, 97,108,101,
+ 77,111,100,101, 0,114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,
+108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,
+111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,
+117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,
+109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,
+105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111,
+ 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91,
+ 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,114,111,116, 65,120,105,115, 0,122,109,105,110, 0,122,109, 97,120, 0,112,
+ 97,100, 91, 57, 93, 0,116,114, 97, 99,107, 91, 54, 52, 93, 0,111, 98,106,101, 99,116, 91, 54, 52, 93, 0, 42,100,101,112,116,
+104, 95,111, 98, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,
+105,100,101, 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0,
+ 97, 99,116,111,102,102,115, 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,
+101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,
+112,117,116, 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,
+101, 0,105,115, 95, 99,111,112,121, 0,101,120,116,101,114,110, 97,108, 0, 42,110,101,119, 95,115,111, 99,107, 0, 42,115,116,
+111,114, 97,103,101, 0,108,105,109,105,116, 0,108,111, 99,120, 0,108,111, 99,121, 0, 42,100,101,102, 97,117,108,116, 95,118,
+ 97,108,117,101, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,115,116, 97, 99,107, 95,116,121,112,101, 0,111,119,110, 95,
+105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,103,114,111,117,112,115,111, 99,107, 0, 42,108,105,110,107, 0,
+110,115, 0, 42,114,101, 99,116, 0,120,115,105,122,101, 0,121,115,105,122,101, 0, 42,110,101,119, 95,110,111,100,101, 0,108,
+ 97,115,116,121, 0,111,117,116,112,117,116,115, 0,109,105,110,105,119,105,100,116,104, 0,117,112,100, 97,116,101, 0,108, 97,
+ 98,101,108, 91, 54, 52, 93, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0,
+ 99,117,115,116,111,109, 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,
+116, 97, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,
+102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,109,115,111, 99,107, 0, 42,
+116,111,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0,105,110,105,116, 0, 99,117,114, 95,105,110,100,101,
+120, 0,110,111,100,101,116,121,112,101, 0, 42,101,120,101, 99,100, 97,116, 97, 0, 40, 42,112,114,111,103,114,101,115,115, 41,
+ 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41,
+ 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, 0, 42,115,100,104, 0,118, 97,108,117,101, 91, 51, 93, 0,118, 97,108,117,101,
+ 91, 52, 93, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,108, 97,121,101,114, 95,105,110,100,101,120, 0,112, 97,115,
+115, 95,105,110,100,101,120, 0,112, 97,115,115, 95,102,108, 97,103, 0,109, 97,120,115,112,101,101,100, 0,109,105,110,115,112,
+101,101,100, 0, 99,117,114,118,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,116,121, 0, 98,111,107,
+101,104, 0,103, 97,109,109, 97, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, 97,103,101, 95,105,110,
+ 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0,115,112,105,110, 0,119,
+114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, 0,
+ 98, 97,115,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111,114,109, 97,116, 0, 97, 99,116,105,118,101, 95,105,110,
+112,117,116, 0,117,115,101, 95,114,101,110,100,101,114, 95,102,111,114,109, 97,116, 0,117,115,101, 95,110,111,100,101, 95,102,
+111,114,109, 97,116, 0,108, 97,121,101,114, 91, 51, 48, 93, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,
+116,104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97,110,110,
+101,108, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0,102, 97, 99, 95,120, 49, 0,102, 97, 99, 95,120, 50, 0,102, 97, 99,
+ 95,121, 49, 0,102, 97, 99, 95,121, 50, 0, 99,111,108,110, 97,109,101, 91, 54, 52, 93, 0, 98,107,116,121,112,101, 0,112, 97,
+100, 95, 99, 49, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114,
+ 0, 98,116,104,114,101,115,104, 0,114,111,116, 97,116,105,111,110, 0,112, 97,100, 95,102, 49, 0, 42,100,105, 99,116, 0, 42,
+110,111,100,101, 0, 99,111,108,109,111,100, 0,109,105,120, 0,102, 97,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0,109,
+ 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, 91, 51,
+ 93, 0,108,105,102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95,105,110,118, 91, 51, 93, 0,108,105,109, 99,104,
+ 97,110, 0,117,110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114, 0,117,115,112,105,
+108,108,103, 0,117,115,112,105,108,108, 98, 0,116,101,120, 95,109, 97,112,112,105,110,103, 0, 99,111,108,111,114, 95,109, 97,
+112,112,105,110,103, 0,115,117,110, 95,100,105,114,101, 99,116,105,111,110, 91, 51, 93, 0,116,117,114, 98,105,100,105,116,121,
+ 0, 99,111,108,111,114, 95,115,112, 97, 99,101, 0,112,114,111,106,101, 99,116,105,111,110, 0,103,114, 97,100,105,101,110,116,
+ 95,116,121,112,101, 0, 99,111,108,111,114,105,110,103, 0,109,117,115,103,114, 97,118,101, 95,116,121,112,101, 0,119, 97,118,
+101, 95,116,121,112,101, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,101, 0,
+101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,
+108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116, 0, 99,104, 97,110,103,101,100, 95,116,
+105,109,101,115,116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91,
+ 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,120,
+ 95,114,101,115,111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,103, 91, 50,
+ 53, 54, 93, 0,100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54, 93, 0,115,
+ 97,109,112,108,101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114, 97, 99,121,
+ 0,119, 97,118,101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119, 97,118,101,
+102,114,109, 95,121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,111,112,101,
+ 95, 97,108,112,104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120, 91, 51, 93,
+ 91, 50, 93, 0,104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,109, 95, 50,
+ 0, 42,119, 97,118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,114,109, 95,
+116,111,116, 0,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0, 42,116,111,103,103,108,101,
+ 95, 98,114,117,115,104, 0, 42,105, 99,111,110, 95,105,109, 98,117,102, 0,105, 99,111,110, 95,102,105,108,101,112, 97,116,104,
+ 91, 49, 48, 50, 52, 93, 0,110,111,114,109, 97,108, 95,119,101,105,103,104,116, 0,111, 98, 95,109,111,100,101, 0,106,105,116,
+116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95,
+115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116,
+ 95,112,108, 97,110,101, 0,112,108, 97,110,101, 95,111,102,102,115,101,116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0,
+118,101,114,116,101,120,112, 97,105,110,116, 95,116,111,111,108, 0,105,109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108,
+ 0,109, 97,115,107, 95,116,111,111,108, 0, 97,117,116,111,115,109,111,111,116,104, 95,102, 97, 99,116,111,114, 0, 99,114,101,
+ 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116,111,114, 0,112,108, 97,110,101, 95,116,114,105,109, 0,116,101,120,116,
+117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97,115, 0,116,101,120,116,117,114,101, 95,111,118,101,114,108, 97,121, 95,
+ 97,108,112,104, 97, 0, 97,100,100, 95, 99,111,108, 91, 51, 93, 0,115,117, 98, 95, 99,111,108, 91, 51, 93, 0, 97, 99,116,105,
+118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0,
+ 42,108, 97,121,101,114,115, 0,116,121,112,101,109, 97,112, 91, 51, 54, 93, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,
+108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, 0, 42,101,120,116,101,114,110, 97,108, 0,114,111,
+116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, 93, 0,114,101,
+115,116, 95,108,101,110,103,116,104, 0,112, 97,114,116,105, 99,108,101, 95,105,110,100,101,120, 91, 50, 93, 0,100,101,108,101,
+116,101, 95,102,108, 97,103, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,
+118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98,
+111,105,100, 0,100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114, 95,105,110,100,
+101,120, 0, 97,108,105,118,101, 0,115,112,114,105,110,103, 95,107, 0,112,108, 97,115,116,105, 99,105,116,121, 95, 99,111,110,
+115,116, 97,110,116, 0,121,105,101,108,100, 95,114, 97,116,105,111, 0,112,108, 97,115,116,105, 99,105,116,121, 95, 98, 97,108,
+ 97,110, 99,101, 0,121,105,101,108,100, 95, 98, 97,108, 97,110, 99,101, 0,118,105,115, 99,111,115,105,116,121, 95,111,109,101,
+103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95,107, 0,115,116,
+105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98,117,111,121, 97,
+110, 99,121, 0,115,112,114,105,110,103, 95,102,114, 97,109,101,115, 0, 42, 98,111,105,100,115, 0, 42,102,108,117,105,100, 0,
+100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,
+116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,
+112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102,114, 97,109,101,115, 0,100,114, 97,119, 95, 99,111,108, 0,114,101,110,
+ 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100, 97,112,116, 95,
+ 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,105,110,116,101,103,114, 97,116,
+111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97,110,105,109, 0,
+ 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114, 97,110,100, 95,
+116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0, 98, 98, 95,115,105,122,101, 91, 50, 93, 0, 98, 98, 95,
+118,101,108, 95,104,101, 97,100, 0, 98, 98, 95,118,101,108, 95,116, 97,105,108, 0, 99,111,108,111,114, 95,118,101, 99, 95,109,
+ 97,120, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116,
+101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118,
+105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0, 99,111,117,114, 97,110,116, 95,116, 97,114,103,101,116,
+ 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114, 97,110,100, 0,112,115, 95,111,102,
+102,115,101,116, 91, 49, 93, 0,103,114,105,100, 95,114,101,115, 0,101,102,102,101, 99,116,111,114, 95, 97,109,111,117,110,116,
+ 0,116,105,109,101, 95,102,108, 97,103, 0,116,105,109,101, 95,112, 97,100, 91, 51, 93, 0,112, 97,114,116,102, 97, 99, 0,116,
+ 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51,
+ 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110,
+100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97,
+ 99, 0, 98,114,111,119,110,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0,
+114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0,
+ 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116,
+ 0, 99,108,117,109,112,112,111,119, 0,107,105,110,107, 95,102,108, 97,116, 0,107,105,110,107, 95, 97,109,112, 95, 99,108,117,
+109,112, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50, 0,114,111,117,
+103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95,101,110,100, 0,
+114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,110,103,116,104, 95,
+116,104,114,101,115, 0,112, 97,114,116,105,110,103, 95,102, 97, 99, 0,112, 97,114,116,105,110,103, 95,109,105,110, 0,112, 97,
+114,116,105,110,103, 95,109, 97,120, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,101,
+ 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105,108, 95, 99,111,
+117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116,115, 0, 42,101,102,
+102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,112, 97,114,
+116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,100,
+ 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99,104,101, 98,117,
+102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111,117,116, 95,100,
+109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102,114, 97,109,101,
+ 0, 98,118,104,116,114,101,101, 95,102,114, 97,109,101, 0, 99,104,105,108,100, 95,115,101,101,100, 0,116,111,116,117,110,101,
+120,105,115,116, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,108,100,
+ 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101,115,
+112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 54, 52, 93, 0,118,103,114,111,117,112, 91, 49, 50, 93,
+ 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,101, 99,116,111,
+114,115, 0, 42,102,108,117,105,100, 95,115,112,114,105,110,103,115, 0,116,111,116, 95,102,108,117,105,100,115,112,114,105,110,
+103,115, 0, 97,108,108,111, 99, 95,102,108,117,105,100,115,112,114,105,110,103,115, 0, 42,116,114,101,101, 0, 42,112,100,100,
+ 0, 42,102,114, 97,110,100, 0,100,116, 95,102,114, 97, 99, 0, 95,112, 97,100, 0, 67,100,105,115, 0, 67,118,105, 0,115,116,
+114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,
+114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105,
+109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100,
+ 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121, 95,115,109,111,
+111,116,104, 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111,110, 0,118,101,108, 95,100, 97,109,112,105,110,
+103, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,114,111,108,108, 0,109, 97,120,115,112,114,105,110,
+103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,114,111,117,112, 95, 98,101,110,100, 0,118,103,114,
+111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,117, 99,116, 0,115,104, 97,112,101,107,101,121, 95,
+114,101,115,116, 0,112,114,101,115,101,116,115, 0,114,101,115,101,116, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,
+115,116, 0,101,112,115,105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,
+105,108,111,110, 0,114,101,112,101,108, 95,102,111,114, 99,101, 0,100,105,115,116, 97,110, 99,101, 95,114,101,112,101,108, 0,
+115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115,
+117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42,
+ 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114,
+ 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0,108,105,115,
+116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101,108, 0, 42,114,101,112,111,114,116,116,
+105,109,101,114, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, 0,119,105,110,
+100,111,119,115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,111,112, 95,117,
+110,100,111, 95,100,101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116,
+115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101,121, 99,111,110,
+102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0, 42, 97,100,100,111,110, 99,111,110,102, 0, 42,117,115,
+101,114, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,105,109,101,114, 0, 42,103,104,
+111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,115, 99,114,101,101,110, 0, 42,110,101,119,115, 99,
+114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 54, 52, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105,
+110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, 0,109,111,100,
+ 97,108, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,115,116, 97,116,
+101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,
+119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,115, 0,115,117,
+ 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,112,
+118, 97,108,117,101, 95,115,116,114, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0, 99,116,
+114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,112,101,
+ 0, 42,112,116,114, 0, 42,114,101,109,111,118,101, 95,105,116,101,109, 0, 42, 97,100,100, 95,105,116,101,109, 0,105,116,101,
+109,115, 0,100,105,102,102, 95,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0,107,
+109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, 0, 98, 97,115,
+101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0,
+ 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109,
+ 0, 42,101,100, 97,116, 97, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116,115, 0, 97,114,114, 97,121,115,105,122,101, 0,
+112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, 0,112,104, 97,115,101, 95,109,117,108,116,105,
+112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, 97,108,117,101, 95,111,102,102,115,101,116, 0,
+109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97,102,116,101,114, 95,109,111,100,101, 0, 98,101,
+102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, 99,108,101,115, 0,114,101, 99,116, 0,112,104,
+ 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101,112, 95,115,105,122,101, 0, 42,114,110, 97, 95,
+112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0,116,114, 97,110,115, 67,104, 97,110, 0,105,100,
+116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95,116, 97,114,103,101,116,115, 0,118, 97,114,105,
+ 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0, 42,101,120,112,114, 95, 99,111,109,112,
+ 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0, 99,111,108,111,114, 95,109,
+111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50, 56, 93, 0,109,
+ 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,115, 0,115,116,
+114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100,109,111,100,101, 0, 42,115,
+112,101, 97,107,101,114, 95,104, 97,110,100,108,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,112,109,111,100,
+101, 0,107,101,121,105,110,103,102,108, 97,103, 0,112, 97,116,104,115, 0,100,101,115, 99,114,105,112,116,105,111,110, 91, 50,
+ 52, 48, 93, 0,116,121,112,101,105,110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, 0, 42,116,109,
+112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,105,118,101,114,
+115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,116, 95,101,120,
+116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,111,112,116,105,
+111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,111,107, 95, 97,
+104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,101,114, 0,102,
+108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, 0,114,117,108,
+101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,116, 95,116,121,
+112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, 95,105,100, 0,
+108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,103,103,114,101,
+115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95,115,112,101,101,
+100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105,114, 95,112,101,
+114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100, 0,108, 97,110,
+100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110,100, 95,109, 97,
+120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,115,
+116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105,100, 95,103,114,
+111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0, 42,116,101,120,
+ 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0,100,120, 0,111,
+109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112,108,105,102,121,
+ 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111,105,115,101, 0,100,105,115,115, 95,
+112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93, 0,100,120, 95,
+119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97, 99,104,101, 95,104,105,103,104, 95,
+ 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101,115, 91, 50, 93,
+ 0, 98,111,114,100,101,114, 95, 99,111,108,108,105,115,105,111,110,115, 0,116,105,109,101, 95,115, 99, 97,108,101, 0,118,111,
+114,116,105, 99,105,116,121, 0,118,101,108,111, 99,105,116,121, 91, 50, 93, 0,118,101,108, 95,109,117,108,116,105, 0,118,103,
+114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, 0,118,103,114,
+111,117,112, 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,110,116,115, 95,
+111,108,100, 0, 42,118,101,108, 0, 42,116,114,105,100,105,118,115, 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, 52, 93, 0,
+110,117,109,116,114,105,115, 0,118,111,108,117,109,101, 95,109, 97,120, 0,118,111,108,117,109,101, 95,109,105,110, 0,100,105,
+115,116, 97,110, 99,101, 95,109, 97,120, 0,100,105,115,116, 97,110, 99,101, 95,114,101,102,101,114,101,110, 99,101, 0, 99,111,
+110,101, 95, 97,110,103,108,101, 95,111,117,116,101,114, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,105,110,110,101,114, 0,
+ 99,111,110,101, 95,118,111,108,117,109,101, 95,111,117,116,101,114, 0,114,101,110,100,101,114, 95,102,108, 97,103, 0, 98,117,
+105,108,100, 95,115,105,122,101, 95,102,108, 97,103, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103, 0,108, 97,115,116,
+115,105,122,101, 91, 50, 93, 0,116,114, 97, 99,107,105,110,103, 0, 42,116,114, 97, 99,107,105,110,103, 95, 99,111,110,116,101,
+120,116, 0,112,114,111,120,121, 0,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 95,104,101,105,103,104,116, 0, 42,116,
+114, 97, 99,107, 95,112,114,101,118,105,101,119, 0,116,114, 97, 99,107, 95,112,111,115, 91, 50, 93, 0,116,114, 97, 99,107, 95,
+100,105,115, 97, 98,108,101,100, 0, 42,109, 97,114,107,101,114, 0,115,108,105,100,101, 95,115, 99, 97,108,101, 91, 50, 93, 0,
+101,114,114,111,114, 0, 42,105,110,116,114,105,110,115,105, 99,115, 0,115,101,110,115,111,114, 95,119,105,100,116,104, 0,112,
+105,120,101,108, 95, 97,115,112,101, 99,116, 0,102,111, 99, 97,108, 0,117,110,105,116,115, 0,112,114,105,110, 99,105,112, 97,
+108, 91, 50, 93, 0,107, 49, 0,107, 50, 0,107, 51, 0,112,111,115, 91, 50, 93, 0,112, 97,116, 95,109,105,110, 91, 50, 93, 0,
+112, 97,116, 95,109, 97,120, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,109,105,110, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,
+109, 97,120, 91, 50, 93, 0,109, 97,114,107,101,114,115,110,114, 0,108, 97,115,116, 95,109, 97,114,107,101,114, 0, 42,109, 97,
+114,107,101,114,115, 0, 98,117,110,100,108,101, 95,112,111,115, 91, 51, 93, 0,112, 97,116, 95,102,108, 97,103, 0,115,101, 97,
+114, 99,104, 95,102,108, 97,103, 0,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,112, 97,116,116,101,114,110, 95,109, 97,
+116, 99,104, 0,116,114, 97, 99,107,101,114, 0,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,109,105,110,105,109,
+117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,116,114, 97, 99,107,101,114, 0,100,
+101,102, 97,117,108,116, 95,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,100,101,102, 97,117,108,116, 95,109,105,
+110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,112, 97,116,116,101,114,
+110, 95,115,105,122,101, 0,100,101,102, 97,117,108,116, 95,115,101, 97,114, 99,104, 95,115,105,122,101, 0,100,101,102, 97,117,
+108,116, 95,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,100,101,102, 97,117,108,116, 95,109, 97,114,103,105,110, 0,100,
+101,102, 97,117,108,116, 95,112, 97,116,116,101,114,110, 95,109, 97,116, 99,104, 0,100,101,102, 97,117,108,116, 95,102,108, 97,
+103, 0,109,111,116,105,111,110, 95,102,108, 97,103, 0,107,101,121,102,114, 97,109,101, 49, 0,107,101,121,102,114, 97,109,101,
+ 50, 0,114,101,102,105,110,101, 95, 99, 97,109,101,114, 97, 95,105,110,116,114,105,110,115,105, 99,115, 0, 99,108,101, 97,110,
+ 95,102,114, 97,109,101,115, 0, 99,108,101, 97,110, 95, 97, 99,116,105,111,110, 0, 99,108,101, 97,110, 95,101,114,114,111,114,
+ 0,111, 98,106,101, 99,116, 95,100,105,115,116, 97,110, 99,101, 0,116,111,116, 95,116,114, 97, 99,107, 0, 97, 99,116, 95,116,
+114, 97, 99,107, 0,109, 97,120,115, 99, 97,108,101, 0, 42,114,111,116, 95,116,114, 97, 99,107, 0,108,111, 99,105,110,102, 0,
+115, 99, 97,108,101,105,110,102, 0,114,111,116,105,110,102, 0, 42,115, 99, 97,108,101,105, 98,117,102, 0,108, 97,115,116, 95,
+ 99, 97,109,101,114, 97, 0, 99, 97,109,110,114, 0, 42, 99, 97,109,101,114, 97,115, 0,116,114, 97, 99,107,115, 0,114,101, 99,
+111,110,115,116,114,117, 99,116,105,111,110, 0,109,101,115,115, 97,103,101, 91, 50, 53, 54, 93, 0,116,111,116, 95,115,101,103,
+109,101,110,116, 0, 42,115,101,103,109,101,110,116,115, 0,109, 97,120, 95,115,101,103,109,101,110,116, 0,116,111,116, 97,108,
+ 95,102,114, 97,109,101,115, 0,116,111,116, 95, 99,104, 97,110,110,101,108, 0,115,111,114,116, 95,109,101,116,104,111,100, 0,
+115,111,114,116, 95,105,110,118,101,114,115,101, 0,115,101,116,116,105,110,103,115, 0, 99, 97,109,101,114, 97, 0,115,116, 97,
+ 98,105,108,105,122, 97,116,105,111,110, 0, 42, 97, 99,116, 95,116,114, 97, 99,107, 0,111, 98,106,101, 99,116,115, 0,111, 98,
+106,101, 99,116,110,114, 0,116,111,116, 95,111, 98,106,101, 99,116, 0,100,111,112,101,115,104,101,101,116, 0, 42, 98,114,117,
+115,104, 95,103,114,111,117,112, 0, 99,117,114,114,101,110,116, 95,102,114, 97,109,101, 0,100,105,115,112, 95,116,121,112,101,
+ 0,105,109, 97,103,101, 95,102,105,108,101,102,111,114,109, 97,116, 0,101,102,102,101, 99,116, 95,117,105, 0,112,114,101,118,
+105,101,119, 95,105,100, 0,105,110,105,116, 95, 99,111,108,111,114, 95,116,121,112,101, 0,112, 97,100, 95,115, 0,105,109, 97,
+103,101, 95,114,101,115,111,108,117,116,105,111,110, 0,115,117, 98,115,116,101,112,115, 0,105,110,105,116, 95, 99,111,108,111,
+114, 91, 52, 93, 0, 42,105,110,105,116, 95,116,101,120,116,117,114,101, 0,105,110,105,116, 95,108, 97,121,101,114,110, 97,109,
+101, 91, 54, 52, 93, 0,100,114,121, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,100,114,121, 95,116,104,114,101,115,104,
+111,108,100, 0,100,101,112,116,104, 95, 99,108, 97,109,112, 0,100,105,115,112, 95,102, 97, 99,116,111,114, 0,115,112,114,101,
+ 97,100, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,115,112,114,101, 97,100, 95,115,112,101,101,100, 0,115,104,114,105,
+110,107, 95,115,112,101,101,100, 0,100,114,105,112, 95,118,101,108, 0,100,114,105,112, 95, 97, 99, 99, 0,105,110,102,108,117,
+101,110, 99,101, 95,115, 99, 97,108,101, 0,114, 97,100,105,117,115, 95,115, 99, 97,108,101, 0,119, 97,118,101, 95,100, 97,109,
+112,105,110,103, 0,119, 97,118,101, 95,115,112,101,101,100, 0,119, 97,118,101, 95,116,105,109,101,115, 99, 97,108,101, 0,119,
+ 97,118,101, 95,115,112,114,105,110,103, 0,105,109, 97,103,101, 95,111,117,116,112,117,116, 95,112, 97,116,104, 91, 49, 48, 50,
+ 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 91, 54, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 50, 91,
+ 54, 52, 93, 0, 42,112,109,100, 0,115,117,114,102, 97, 99,101,115, 0, 97, 99,116,105,118,101, 95,115,117,114, 0,101,114,114,
+111,114, 91, 54, 52, 93, 0, 99,111,108,108,105,115,105,111,110, 0,119,101,116,110,101,115,115, 0,112, 97,114,116,105, 99,108,
+101, 95,114, 97,100,105,117,115, 0,112, 97,114,116,105, 99,108,101, 95,115,109,111,111,116,104, 0,112, 97,105,110,116, 95,100,
+105,115,116, 97,110, 99,101, 0, 42,112, 97,105,110,116, 95,114, 97,109,112, 0, 42,118,101,108, 95,114, 97,109,112, 0,112,114,
+111,120,105,109,105,116,121, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,105,114, 0,119, 97,118,101, 95,102, 97, 99,
+116,111,114, 0,119, 97,118,101, 95, 99,108, 97,109,112, 0,109, 97,120, 95,118,101,108,111, 99,105,116,121, 0,115,109,117,100,
+103,101, 95,115,116,114,101,110,103,116,104, 0, 84, 89, 80, 69, 20, 2, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,
+104,111,114,116, 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,108,111, 97,116,
+ 0,100,111,117, 98,108,101, 0,105,110,116, 54, 52, 95,116, 0,117,105,110,116, 54, 52, 95,116, 0,118,111,105,100, 0, 76,105,
+110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,102,
+ 0,118,101, 99, 51,102, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0,
+ 73, 68, 80,114,111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,
+114,101,118,105,101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111,
+ 67,117,114,118,101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,
+111, 99,107, 0, 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,
+114,107,101,114, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,
+101, 85,115,101,114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,
+109, 0, 82,101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,
+120, 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0,
+ 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 86,111,120,101,108, 68,
+ 97,116, 97, 0, 79, 99,101, 97,110, 84,101,120, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,
+103, 0, 67,111,108,111,114, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 86,111,108,117,109,101, 83,101,116,116,105,110,
+103,115, 0, 71, 97,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86,
+ 70,111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120,
+ 0, 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0,
+ 69,100,105,116, 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120,
+ 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 83,101,108,101, 99,116, 0, 77, 80,111,108,121, 0, 77, 84,101,
+120, 80,111,108,121, 0, 77, 76,111,111,112, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70, 97,
+ 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,
+111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 66, 77, 69,100,105,116, 77,101,115,104, 0,
+ 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,
+116, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,
+116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 79,114,105,103,
+ 83,112, 97, 99,101, 76,111,111,112, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,111,108, 0, 77,117,108,
+116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117,108,116,105,114,
+101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77, 82,101, 99, 97,115,116, 0, 71,114,105,
+100, 80, 97,105,110,116, 77, 97,115,107, 0, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,112,112,105,110,103, 73,
+110,102,111, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68,
+ 97,116, 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,
+105,102,105,101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107,
+ 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,
+105,114,114,111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,
+105,101,114, 68, 97,116, 97, 0, 66,101,118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,
+111,107,101, 68,111,109, 97,105,110, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,
+110,103,115, 0, 83,109,111,107,101, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,
+100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
+ 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,
+102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,
+100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
+ 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,
+114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,
+111,116,104, 83,105,109, 83,101,116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115,
+ 0, 80,111,105,110,116, 67, 97, 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116,
+ 97, 0, 66, 86, 72, 84,114,101,101, 0, 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,
+114,105,118,101,100, 77,101,115,104, 0, 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,
+110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102,
+ 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,
+105, 99,108,101, 83,121,115,116,101,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,
+121,115,116,101,109, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,
+116, 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
+ 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,
+102,105,101,114, 68, 97,116, 97, 0, 83,105,109,112,108,101, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116,
+ 97, 0, 83,104, 97,112,101, 75,101,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, 99,114,101,119, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,
+101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 0, 79, 99,101, 97,110, 67, 97, 99,104,101,
+ 0, 87, 97,114,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 69,100,105,116, 77,111,
+100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 77,105,120, 77,111,100,105,102,105,101,114, 68, 97,
+116, 97, 0, 87,101,105,103,104,116, 86, 71, 80,114,111,120,105,109,105,116,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
+ 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105,
+ 99, 80, 97,105,110,116, 67, 97,110,118, 97,115, 83,101,116,116,105,110,103,115, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,
+116, 66,114,117,115,104, 83,101,116,116,105,110,103,115, 0, 82,101,109,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116,
+ 97, 0, 69,100,105,116, 76, 97,116,116, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,112, 0,
+ 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 0, 98, 71, 80,100,
+ 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 0, 98, 77,111,116,105,111,110, 80, 97,116,104,
+ 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,114,116, 68,101,102,108,101, 99,116, 0, 83,111,102,116,
+ 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, 98,106,101, 99,116, 0, 82, 78, 71, 0, 69,102,102,101,
+ 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,101, 69,120,116,114, 97, 0, 80, 84, 67, 97, 99,104,101,
+ 77,101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,
+110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 70,108,117,105,100, 86,101,114,
+116,101,120, 86,101,108,111, 99,105,116,121, 0, 87,111,114,108,100, 0, 66, 97,115,101, 0, 65,118,105, 67,111,100,101, 99, 68,
+ 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101,
+ 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112,101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,
+100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 73,109, 97,103,101, 70,111,
+114,109, 97,116, 68, 97,116, 97, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,
+101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0, 82,101, 99, 97,115,116, 68, 97,116,
+ 97, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80, 97,105,110,116, 0, 66,114,117,115,
+104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,
+115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116,105,110,103,115, 0, 83, 99,117,108,
+112,116, 0, 85,118, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,
+110,116, 97,116,105,111,110, 0, 85,110,105,102,105,101,100, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 84,111,111,
+108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,110,105,116, 83,101,116,116,105,110,103,115, 0, 80,104,
+121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116,105,110,103, 0, 83, 99,101,110,101, 83,116, 97,116,115,
+ 0, 68, 97,103, 70,111,114,101,115,116, 0, 77,111,118,105,101, 67,108,105,112, 0, 66, 71,112,105, 99, 0, 77,111,118,105,101,
+ 67,108,105,112, 85,115,101,114, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111,
+ 0, 82,101,110,100,101,114, 69,110,103,105,110,101, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,
+105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101,114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,
+107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,
+101, 83,104,101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,
+108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 76,105,115,116, 0,119,109,
+ 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,
+101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101,
+ 0, 83, 99,111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101,
+ 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,
+101, 67, 97, 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101,
+ 76,111,103,105, 99, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101, 67,111,110,115,111,108,101, 0, 83,
+112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0, 83,112, 97, 99,101, 67,108,105,112, 0, 77,111,118,105,101, 67,108,105,112,
+ 83, 99,111,112,101,115, 0,117,105, 70,111,110,116, 0,117,105, 70,111,110,116, 83,116,121,108,101, 0,117,105, 83,116,121,108,
+101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,105, 87,105,100,103,101,116, 83,116, 97,116,101, 67,111,
+108,111,114,115, 0,117,105, 80, 97,110,101,108, 67,111,108,111,114,115, 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101,
+ 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, 98, 65,100,100,
+111,110, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, 98, 83, 99,114,101,101,110, 0, 83, 99,
+114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105,
+ 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, 99,101, 84,121,112,101, 0, 65, 82,101,103,105,111,110,
+ 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,
+109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112,
+ 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,
+117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0, 77,101,116, 97, 83,116, 97, 99,
+107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,
+115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,
+115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,
+108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114,
+ 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,
+111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117,
+ 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,
+111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,
+115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98,
+ 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,
+114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,
+116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101,
+ 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100,
+ 51, 68, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,
+117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,
+116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,
+116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65,
+ 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,
+116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,
+117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,
+105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,
+116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 98,
+ 83,116,101,101,114,105,110,103, 65, 99,116,117, 97,116,111,114, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,
+101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,
+101, 67,104, 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110,
+ 71,114,111,117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108,
+ 0, 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0,
+ 98, 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,
+105,110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101,
+ 73, 75, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0,
+ 98, 82,111,116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,
+101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0,
+ 98, 83, 97,109,101, 86,111,108,117,109,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101,
+ 67,111,110,115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,
+116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,
+105,110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119,
+ 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,
+105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,
+108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,
+105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,
+111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,
+111,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,
+116,114, 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,
+105,110,107,119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 84,114, 97, 99,107, 67,111,
+110,115,116,114, 97,105,110,116, 0, 98, 67, 97,109,101,114, 97, 83,111,108,118,101,114, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 79, 98,106,101, 99,116, 83,111,108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110,
+ 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107,
+ 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, 80,114,101,118,
+105,101,119, 0, 98, 78,111,100,101, 0,117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 0, 98, 78,111,100,
+101, 84,114,101,101, 69,120,101, 99, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 73,110,116, 0, 98, 78,
+111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 70,108,111, 97,116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86,
+ 97,108,117,101, 66,111,111,108,101, 97,110, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 86,101, 99,116,
+111,114, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 82, 71, 66, 65, 0, 78,111,100,101, 73,109, 97,103,
+101, 65,110,105,109, 0, 78,111,100,101, 73,109, 97,103,101, 76, 97,121,101,114, 0, 78,111,100,101, 66,108,117,114, 68, 97,116,
+ 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,108,117,
+114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101, 0, 78,
+111,100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,105,108,101, 0, 78,111,100,101, 73,109, 97,103,101, 77,117,108,116,105,
+ 70,105,108,101, 83,111, 99,107,101,116, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115,
+ 0, 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101,
+ 86,101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116,
+ 68,105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,
+101,110,115, 68,105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111,108,
+111,114,115,112,105,108,108, 0, 78,111,100,101, 84,101,120, 66, 97,115,101, 0, 78,111,100,101, 84,101,120, 83,107,121, 0, 78,
+111,100,101, 84,101,120, 73,109, 97,103,101, 0, 78,111,100,101, 84,101,120, 67,104,101, 99,107,101,114, 0, 78,111,100,101, 84,
+101,120, 69,110,118,105,114,111,110,109,101,110,116, 0, 78,111,100,101, 84,101,120, 71,114, 97,100,105,101,110,116, 0, 78,111,
+100,101, 84,101,120, 78,111,105,115,101, 0, 78,111,100,101, 84,101,120, 86,111,114,111,110,111,105, 0, 78,111,100,101, 84,101,
+120, 77,117,115,103,114, 97,118,101, 0, 78,111,100,101, 84,101,120, 87, 97,118,101, 0, 78,111,100,101, 84,101,120, 77, 97,103,
+105, 99, 0, 78,111,100,101, 83,104, 97,100,101,114, 65,116,116,114,105, 98,117,116,101, 0, 84,101,120, 78,111,100,101, 79,117,
+116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,
+104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117,115,116,111,109, 68, 97,116,
+ 97, 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,
+105,100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,112,114,105,
+110,103, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0,
+ 80, 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97,
+ 0, 83, 80, 72, 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,
+103,115, 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121,
+ 0, 75, 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,
+101, 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,
+101, 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105,110,100,111,119, 77,
+ 97,110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,
+101,110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77,
+ 97,112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 68,105,102,102, 73,116,
+101,109, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100,105,
+102,105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105,111,
+110, 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111,100,
+ 95, 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104,111,
+110, 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 70, 77,111,100, 95, 83,116,
+101,112,112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, 86, 97,114, 0, 67,104, 97,
+110,110,101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112,
+ 80, 97,105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,
+107, 0, 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101,
+ 0, 73,100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101,
+ 71,111, 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110,
+ 0, 66,111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,
+101,114, 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,
+116,101, 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 83,112,101, 97,107,101,114, 0,
+ 77,111,118,105,101, 67,108,105,112, 80,114,111,120,121, 0, 77,111,118,105,101, 67,108,105,112, 67, 97, 99,104,101, 0, 77,111,
+118,105,101, 84,114, 97, 99,107,105,110,103, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 84,114, 97, 99,107, 0, 77,
+111,118,105,101, 84,114, 97, 99,107,105,110,103, 77, 97,114,107,101,114, 0, 77,111,118,105,101, 82,101, 99,111,110,115,116,114,
+117, 99,116,101,100, 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 67, 97,109,101,114, 97, 0,
+ 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,101,116,116,105,110,103,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,
+105,110,103, 83,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 82,101,
+ 99,111,110,115,116,114,117, 99,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 79, 98,106,101, 99,116,
+ 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97,116,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,
+103, 68,111,112,101,115,104,101,101,116, 67,104, 97,110,110,101,108, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 68,
+111,112,101,115,104,101,101,116, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 0, 80, 97,105,
+110,116, 83,117,114,102, 97, 99,101, 68, 97,116, 97, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0,
4, 0, 4, 0, 8, 0, 8, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 12, 0, 16, 0, 16, 0, 32, 0,128, 0,
-120, 0,152, 8, 0, 0, 40, 0,144, 0,112, 5,112, 0, 36, 0, 56, 0,160, 0,192, 0,224, 0, 96, 0, 40, 0, 48, 0,224, 0,
+120, 0,144, 8, 0, 0, 40, 0,144, 0,112, 5,112, 0, 36, 0, 56, 0,160, 0,192, 0,224, 0, 96, 0, 40, 0, 48, 0,224, 0,
16, 0,200, 0, 40, 0,216, 11, 48, 5, 0, 0, 0, 0, 0, 0, 56, 1,168, 1,216, 4, 24, 0, 8, 3,200, 0, 0, 0,104, 0,
64, 1, 56, 4, 80, 0, 24, 1,144, 0, 56, 3, 16, 2, 88, 0, 16, 0,128, 3,152, 0,136, 4, 0, 0,104, 0,104, 0, 0, 1,
- 80, 0, 8, 0, 16, 0, 32, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0,232, 4, 8, 0, 12, 0, 16, 0, 8, 0, 12, 0, 4, 0,
- 20, 0, 48, 0, 64, 0, 20, 0, 12, 0, 16, 0, 4, 0, 8, 0, 0, 0,176, 0,144, 1, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0,
- 8, 0, 24, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 4, 0,112, 0,200, 0,136, 0,192, 0,192, 0,128, 0,192, 0,192, 0,
-128, 0,120, 0,200, 0,120, 0,144, 0, 16, 1, 56, 0,200, 0, 24, 1, 40, 1,120, 0,184, 0,200, 0, 64, 1,200, 0, 88, 1,
-112, 0,168, 0, 0, 0,152, 0, 48, 0, 40, 5,192, 0, 0, 0,152, 0, 0, 0, 0, 0,128, 0, 8, 0, 8, 0,112, 1,144, 0,
-152, 2,136, 0,192, 0,120, 0,128, 0,224, 4,208, 0,200, 0,112, 0,208, 0,144, 0, 16, 5, 0, 0, 0, 0, 48, 1,104, 1,
-160, 1,104, 1,136, 0,104, 0,112, 0,128, 0, 16, 0, 96, 1, 88, 0, 0, 0,200, 0,216, 0,152, 0, 48, 0, 24, 0,120, 0,
-152, 0,216, 1, 0, 1,184, 0, 0, 0, 72, 0, 32, 0,176, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 24, 2, 40, 0,
-184, 0,152, 0, 64, 0, 72, 0, 32, 0,128, 0, 24, 0, 56, 9, 64, 0, 24, 0, 16, 0, 56, 0,168, 0, 96, 0, 24, 0, 88, 6,
- 48, 0, 16, 0,168, 0, 96, 0, 24, 0, 56, 0,120, 0, 24, 0,240, 1, 32, 0, 8, 0, 24, 0, 80, 8, 0, 0, 0, 0,216, 8,
-104, 0, 8, 0,112, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 56, 0,144, 0, 64, 0,240, 0,112, 0,248, 0,240, 0,
-160, 7,104, 0, 0, 0,168, 0, 0, 0, 24, 1, 16, 0, 16, 0, 40, 33,128, 16, 24, 16,216, 0,160, 2,168, 5, 64, 0, 24, 0,
-208, 0, 48, 1, 72, 0, 40, 0,136, 1,104, 0, 48, 1, 56, 0, 24, 4, 32, 0,232, 0, 32, 0, 32, 0, 8, 0, 80, 3,224, 1,
- 16, 0,168, 36, 80, 0, 56, 0,112, 38, 8, 1, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 48, 4,
- 8, 1, 16, 0, 8, 0, 44, 0, 16, 4, 72, 3,200, 4, 80, 1,208, 4, 32, 0, 12, 0, 24, 0, 32, 0, 16, 0, 24, 0, 24, 0,
- 32, 0,136, 1, 0, 0, 64, 0, 96, 0, 80, 0, 8, 0, 80, 0,136, 0,200, 0, 72, 0, 8, 0,136, 0, 76, 0, 72, 0,204, 0,
-136, 0,136, 0,128, 0,136, 0, 92, 0,128, 0, 80, 0,112, 0, 16, 0,168, 0, 32, 0, 72, 0,120, 0, 24, 0,144, 0,112, 0,
-148, 0, 32, 0,128, 0, 88, 0, 88, 0,208, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0,160, 0, 48, 0, 40, 0, 72, 1, 0, 1,
- 16, 0, 32, 2, 4, 0, 40, 0,120, 0, 72, 1,120, 0, 56, 0,120, 0,160, 0,112, 0,184, 0, 24, 0, 88, 0, 80, 0, 80, 0,
- 80, 0, 8, 0, 72, 0,104, 0,104, 0, 80, 0, 80, 0, 24, 0, 88, 0,104, 0, 16, 0,144, 0,128, 0, 88, 0, 28, 0, 28, 0,
- 28, 0, 88, 0, 24, 0,160, 0, 16, 0,152, 0, 72, 0,168, 0, 48, 0,208, 0, 56, 0, 16, 0, 88, 1, 0, 0, 0, 0, 0, 0,
- 16, 0, 16, 0, 4, 0, 24, 0, 16, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 32, 4, 40, 4, 32, 0, 44, 0, 24, 0, 8, 0,
-128, 0, 64, 0, 32, 0, 16, 0, 32, 0, 32, 0, 8, 0, 96, 0, 20, 0,200, 3,216, 3,208, 3,200, 3,208, 3,208, 3,200, 3,
-208, 3,208, 3,208, 3,208, 3, 64, 0, 64, 0, 12, 0, 56, 0, 24, 0,104, 0, 0, 4, 24, 0, 56, 0, 56, 0, 20, 0, 16, 0,
- 64, 0, 40, 0, 32, 0,192, 0, 60, 0, 16, 3,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0,
- 88, 1, 0, 1,168, 0, 0, 0, 0, 0, 0, 0,184, 0, 0, 0, 32, 0,136, 0, 0, 0,120, 0, 24, 0, 24, 0, 16, 0, 24, 0,
- 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, 16, 0,104, 0, 0, 1, 40, 0,208, 0,104, 0,112, 0,216, 1,
- 32, 0,128, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, 0, 0,184, 0, 8, 3, 0, 0, 16, 1,192, 0,
- 16, 0, 72, 0, 48, 0, 64, 0, 56, 0, 24, 0,128, 0, 0, 1, 32, 0, 24, 0, 16, 6, 0, 0, 83, 84, 82, 67,209, 1, 0, 0,
- 12, 0, 2, 0, 12, 0, 0, 0, 12, 0, 1, 0, 13, 0, 3, 0, 13, 0, 0, 0, 13, 0, 1, 0, 11, 0, 2, 0, 14, 0, 2, 0,
- 11, 0, 3, 0, 11, 0, 4, 0, 15, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 16, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,
- 17, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 18, 0, 4, 0, 4, 0, 8, 0, 4, 0, 9, 0, 4, 0, 10, 0,
- 4, 0, 11, 0, 19, 0, 4, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 20, 0, 4, 0, 11, 0, 12, 0,
- 14, 0, 13, 0, 4, 0, 14, 0, 4, 0, 15, 0, 21, 0, 10, 0, 21, 0, 0, 0, 21, 0, 1, 0, 0, 0, 16, 0, 0, 0, 17, 0,
- 2, 0, 18, 0, 0, 0, 19, 0, 4, 0, 20, 0, 20, 0, 21, 0, 4, 0, 22, 0, 4, 0, 23, 0, 22, 0, 11, 0, 11, 0, 0, 0,
- 11, 0, 1, 0, 22, 0, 24, 0, 23, 0, 25, 0, 0, 0, 26, 0, 2, 0, 27, 0, 2, 0, 28, 0, 2, 0, 18, 0, 4, 0, 29, 0,
- 4, 0, 30, 0, 21, 0, 31, 0, 23, 0, 8, 0, 22, 0, 32, 0, 22, 0, 33, 0, 24, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0,
- 4, 0, 37, 0, 4, 0, 27, 0, 23, 0, 38, 0, 25, 0, 5, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0,
- 4, 0, 43, 0, 26, 0, 6, 0, 27, 0, 44, 0, 2, 0, 45, 0, 2, 0, 46, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 47, 0,
- 28, 0, 21, 0, 28, 0, 0, 0, 28, 0, 1, 0, 29, 0, 48, 0, 30, 0, 49, 0, 19, 0, 50, 0, 19, 0, 51, 0, 2, 0, 45, 0,
- 2, 0, 46, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 18, 0, 2, 0, 56, 0, 7, 0, 10, 0,
- 7, 0, 11, 0, 4, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 26, 0, 61, 0, 31, 0, 7, 0, 22, 0, 32, 0,
- 14, 0, 62, 0, 19, 0, 63, 0, 2, 0, 45, 0, 2, 0, 64, 0, 2, 0, 65, 0, 2, 0, 27, 0, 32, 0, 16, 0, 32, 0, 0, 0,
- 32, 0, 1, 0, 7, 0, 66, 0, 7, 0, 60, 0, 2, 0, 16, 0, 2, 0, 67, 0, 2, 0, 68, 0, 2, 0, 18, 0, 4, 0, 69, 0,
- 4, 0, 70, 0, 11, 0, 2, 0, 7, 0, 71, 0, 0, 0, 19, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 33, 0, 15, 0,
- 22, 0, 32, 0, 34, 0, 75, 0, 32, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 4, 0, 27, 0, 14, 0, 79, 0, 31, 0, 80, 0,
- 22, 0, 81, 0, 2, 0, 16, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 18, 0, 7, 0, 84, 0, 4, 0, 85, 0, 35, 0, 6, 0,
- 35, 0, 0, 0, 35, 0, 1, 0, 0, 0, 86, 0, 0, 0, 87, 0, 4, 0, 22, 0, 4, 0, 88, 0, 36, 0, 10, 0, 36, 0, 0, 0,
- 36, 0, 1, 0, 4, 0, 89, 0, 4, 0, 90, 0, 4, 0, 91, 0, 4, 0, 67, 0, 4, 0, 13, 0, 4, 0, 92, 0, 0, 0, 93, 0,
- 0, 0, 94, 0, 37, 0, 15, 0, 22, 0, 32, 0, 0, 0, 95, 0, 4, 0, 92, 0, 4, 0, 96, 0, 14, 0, 97, 0, 35, 0, 98, 0,
- 35, 0, 99, 0, 4, 0,100, 0, 4, 0,101, 0, 14, 0,102, 0, 0, 0,103, 0, 4, 0,104, 0, 4, 0,105, 0, 11, 0,106, 0,
- 8, 0,107, 0, 38, 0, 3, 0, 4, 0,108, 0, 4, 0,109, 0, 11, 0, 2, 0, 39, 0, 20, 0, 22, 0, 32, 0, 34, 0, 75, 0,
- 0, 0, 16, 0, 0, 0,110, 0, 2, 0, 18, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0,
- 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, 7, 0,119, 0, 7, 0,120, 0, 7, 0,121, 0, 31, 0, 80, 0, 27, 0,122, 0,
- 0, 0,123, 0, 0, 0,124, 0, 40, 0, 14, 0, 41, 0,125, 0, 4, 0,126, 0, 4, 0,127, 0, 4, 0,128, 0, 4, 0,129, 0,
- 0, 0,130, 0, 0, 0,131, 0, 0, 0,132, 0, 0, 0, 27, 0, 2, 0,133, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0, 18, 0,
- 4, 0, 30, 0, 42, 0, 33, 0, 22, 0, 32, 0, 0, 0, 35, 0, 14, 0,136, 0, 43, 0,137, 0, 44, 0,138, 0, 45, 0,139, 0,
- 45, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,132, 0, 2, 0, 18, 0, 2, 0,143, 0, 2, 0, 16, 0, 4, 0,144, 0,
- 2, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, 2, 0,150, 0, 4, 0,151, 0, 4, 0,152, 0,
- 38, 0,153, 0, 25, 0,154, 0, 7, 0,155, 0, 4, 0,156, 0, 2, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 0, 0,160, 0,
- 0, 0,161, 0, 7, 0,162, 0, 7, 0,163, 0, 46, 0, 65, 0, 2, 0,164, 0, 2, 0,165, 0, 2, 0,166, 0, 2, 0,167, 0,
- 27, 0,168, 0, 47, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 7, 0,175, 0,
- 7, 0,176, 0, 7, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, 2, 0,182, 0, 2, 0,183, 0,
- 0, 0,184, 0, 0, 0,124, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0, 56, 0,
+ 80, 0, 8, 0, 16, 0, 32, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 16, 5, 8, 0, 12, 0, 16, 0, 8, 0, 12, 0, 4, 0,
+ 20, 0, 48, 0, 64, 0, 20, 0, 12, 0, 16, 0, 4, 0, 8, 0, 0, 0,184, 0,160, 1, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0,
+ 8, 0, 24, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 4, 0, 16, 0,112, 0,200, 0,136, 0,192, 0,192, 0,128, 0,192, 0,
+192, 0,128, 0,120, 0,200, 0,120, 0,144, 0, 16, 1, 56, 0,200, 0, 24, 1, 40, 1,120, 0,184, 0,200, 0, 64, 1,200, 0,
+ 88, 1,112, 0,168, 0, 0, 0,152, 0, 48, 0, 40, 5,192, 0, 0, 0,152, 0, 0, 0, 0, 0,128, 0, 8, 0, 8, 0,112, 1,
+144, 0,152, 2,136, 0,192, 0,120, 0,128, 0,224, 4,208, 0,200, 0,112, 0,208, 0,144, 0, 16, 5, 0, 0, 0, 0, 48, 1,
+104, 1,160, 1,104, 1,136, 0,104, 0,112, 0,128, 0, 16, 0, 96, 1, 88, 0, 0, 0,200, 0,216, 0,152, 0, 48, 0, 24, 0,
+120, 0,152, 0,216, 1, 0, 1,184, 0, 0, 0, 72, 0, 32, 0,176, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 24, 2,
+ 40, 0,184, 0,152, 0, 64, 0, 72, 0, 32, 0,128, 0, 24, 0, 56, 9, 64, 0, 24, 0, 16, 0, 56, 0,168, 0, 96, 0, 24, 0,
+ 96, 6, 48, 0, 16, 0,168, 0, 96, 0, 24, 0, 56, 0,120, 0, 24, 0,240, 1, 32, 0, 8, 0, 24, 0, 80, 8, 0, 0, 0, 0,
+224, 8,104, 0, 8, 0,112, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 56, 0,144, 0, 64, 0,240, 0,112, 0,248, 0,
+240, 0,160, 7,104, 0, 0, 0,168, 0, 0, 0, 24, 1, 16, 0, 16, 0, 40, 33,128, 16, 24, 16,216, 0,160, 2,168, 5, 64, 0,
+ 24, 0,208, 0, 48, 1, 72, 0, 40, 0,136, 1,104, 0, 56, 1, 56, 0, 24, 4, 32, 0,232, 0, 32, 0, 32, 0, 8, 0, 80, 3,
+224, 1, 16, 0,168, 36, 80, 0, 56, 0,112, 38, 8, 1, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0,
+ 48, 4, 8, 1, 16, 0, 8, 0, 44, 0, 16, 4, 72, 3,200, 4, 80, 1,208, 4, 32, 0, 12, 0, 24, 0, 32, 0, 16, 0, 24, 0,
+ 24, 0, 32, 0,136, 1, 0, 0, 64, 0, 96, 0, 80, 0, 8, 0, 80, 0,136, 0,200, 0, 72, 0, 8, 0,136, 0, 76, 0, 72, 0,
+204, 0,136, 0,136, 0,128, 0,136, 0, 92, 0,128, 0, 80, 0,112, 0, 16, 0,168, 0, 32, 0, 72, 0,120, 0, 24, 0,144, 0,
+112, 0,148, 0, 32, 0,128, 0, 88, 0, 88, 0,208, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0,160, 0, 48, 0, 40, 0, 72, 1,
+ 0, 1, 16, 0, 32, 2, 4, 0, 40, 0,120, 0, 72, 1,120, 0, 56, 0,120, 0,160, 0,112, 0,184, 0, 24, 0, 88, 0, 80, 0,
+ 80, 0, 80, 0, 8, 0, 72, 0,104, 0,104, 0, 80, 0, 80, 0, 24, 0, 88, 0,104, 0, 16, 0,144, 0,128, 0, 88, 0, 28, 0,
+ 28, 0, 28, 0, 88, 0, 24, 0,160, 0, 16, 0,152, 0, 72, 0,168, 0, 48, 0,208, 0, 56, 0, 16, 0, 88, 1, 0, 0, 0, 0,
+ 0, 0, 16, 0, 16, 0, 4, 0, 24, 0, 16, 0, 16, 0, 12, 0, 40, 0, 28, 0, 12, 0, 12, 0, 32, 4, 40, 4, 64, 4, 44, 0,
+ 24, 0, 8, 0,128, 0, 64, 0, 32, 0, 16, 0, 32, 0, 32, 0, 8, 0, 96, 0, 20, 0,200, 3,216, 3,208, 3,200, 3,208, 3,
+208, 3,200, 3,208, 3,208, 3,208, 3,208, 3, 64, 0, 64, 0, 12, 0, 56, 0, 24, 0,104, 0, 0, 4, 24, 0, 56, 0, 56, 0,
+ 20, 0, 16, 0, 64, 0, 40, 0, 32, 0,192, 0, 60, 0, 16, 3,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,
+192, 0, 40, 0, 88, 1, 0, 1,168, 0, 0, 0, 0, 0, 0, 0,184, 0, 0, 0, 32, 0,136, 0, 0, 0,120, 0, 24, 0, 24, 0,
+ 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, 16, 0,104, 0, 0, 1, 40, 0,208, 0,104, 0,
+112, 0,216, 1, 32, 0,128, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, 0, 0,184, 0, 8, 3, 0, 0,
+ 24, 1,192, 0, 16, 0, 72, 0, 48, 0, 64, 0, 56, 0, 24, 0,128, 0, 0, 1, 48, 0, 32, 0, 16, 6, 0, 0, 83, 84, 82, 67,
+211, 1, 0, 0, 12, 0, 2, 0, 12, 0, 0, 0, 12, 0, 1, 0, 13, 0, 3, 0, 13, 0, 0, 0, 13, 0, 1, 0, 11, 0, 2, 0,
+ 14, 0, 2, 0, 11, 0, 3, 0, 11, 0, 4, 0, 15, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 16, 0, 2, 0, 7, 0, 5, 0,
+ 7, 0, 6, 0, 17, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 18, 0, 4, 0, 4, 0, 8, 0, 4, 0, 9, 0,
+ 4, 0, 10, 0, 4, 0, 11, 0, 19, 0, 4, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 20, 0, 4, 0,
+ 11, 0, 12, 0, 14, 0, 13, 0, 4, 0, 14, 0, 4, 0, 15, 0, 21, 0, 10, 0, 21, 0, 0, 0, 21, 0, 1, 0, 0, 0, 16, 0,
+ 0, 0, 17, 0, 2, 0, 18, 0, 0, 0, 19, 0, 4, 0, 20, 0, 20, 0, 21, 0, 4, 0, 22, 0, 4, 0, 23, 0, 22, 0, 11, 0,
+ 11, 0, 0, 0, 11, 0, 1, 0, 22, 0, 24, 0, 23, 0, 25, 0, 0, 0, 26, 0, 2, 0, 27, 0, 2, 0, 28, 0, 2, 0, 18, 0,
+ 4, 0, 29, 0, 4, 0, 30, 0, 21, 0, 31, 0, 23, 0, 6, 0, 22, 0, 32, 0, 22, 0, 33, 0, 24, 0, 34, 0, 0, 0, 35, 0,
+ 0, 0, 36, 0, 23, 0, 37, 0, 25, 0, 5, 0, 4, 0, 38, 0, 4, 0, 39, 0, 2, 0, 40, 0, 2, 0, 41, 0, 4, 0, 42, 0,
+ 26, 0, 6, 0, 27, 0, 43, 0, 2, 0, 44, 0, 2, 0, 45, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 46, 0, 28, 0, 21, 0,
+ 28, 0, 0, 0, 28, 0, 1, 0, 29, 0, 47, 0, 30, 0, 48, 0, 19, 0, 49, 0, 19, 0, 50, 0, 2, 0, 44, 0, 2, 0, 45, 0,
+ 2, 0, 51, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 18, 0, 2, 0, 55, 0, 7, 0, 10, 0, 7, 0, 11, 0,
+ 4, 0, 56, 0, 7, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 26, 0, 60, 0, 31, 0, 7, 0, 22, 0, 32, 0, 14, 0, 61, 0,
+ 19, 0, 62, 0, 2, 0, 44, 0, 2, 0, 63, 0, 2, 0, 64, 0, 2, 0, 27, 0, 32, 0, 16, 0, 32, 0, 0, 0, 32, 0, 1, 0,
+ 7, 0, 65, 0, 7, 0, 59, 0, 2, 0, 16, 0, 2, 0, 66, 0, 2, 0, 67, 0, 2, 0, 18, 0, 4, 0, 68, 0, 4, 0, 69, 0,
+ 11, 0, 2, 0, 7, 0, 70, 0, 0, 0, 19, 0, 0, 0, 71, 0, 7, 0, 72, 0, 7, 0, 73, 0, 33, 0, 15, 0, 22, 0, 32, 0,
+ 34, 0, 74, 0, 32, 0, 75, 0, 0, 0, 76, 0, 4, 0, 77, 0, 4, 0, 27, 0, 14, 0, 78, 0, 31, 0, 79, 0, 22, 0, 80, 0,
+ 2, 0, 16, 0, 2, 0, 81, 0, 2, 0, 82, 0, 2, 0, 18, 0, 7, 0, 83, 0, 4, 0, 84, 0, 35, 0, 6, 0, 35, 0, 0, 0,
+ 35, 0, 1, 0, 0, 0, 85, 0, 0, 0, 86, 0, 4, 0, 22, 0, 4, 0, 87, 0, 36, 0, 10, 0, 36, 0, 0, 0, 36, 0, 1, 0,
+ 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 90, 0, 4, 0, 66, 0, 4, 0, 13, 0, 4, 0, 91, 0, 0, 0, 92, 0, 0, 0, 93, 0,
+ 37, 0, 15, 0, 22, 0, 32, 0, 0, 0, 94, 0, 4, 0, 91, 0, 4, 0, 95, 0, 14, 0, 96, 0, 35, 0, 97, 0, 35, 0, 98, 0,
+ 4, 0, 99, 0, 4, 0,100, 0, 14, 0,101, 0, 0, 0,102, 0, 4, 0,103, 0, 4, 0,104, 0, 11, 0,105, 0, 8, 0,106, 0,
+ 38, 0, 3, 0, 4, 0,107, 0, 4, 0,108, 0, 11, 0, 2, 0, 39, 0, 20, 0, 22, 0, 32, 0, 34, 0, 74, 0, 0, 0, 16, 0,
+ 0, 0,109, 0, 2, 0, 18, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0,
+ 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, 7, 0,119, 0, 7, 0,120, 0, 31, 0, 79, 0, 27, 0,121, 0, 0, 0,122, 0,
+ 0, 0,123, 0, 40, 0, 14, 0, 41, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 4, 0,127, 0, 4, 0,128, 0, 0, 0,129, 0,
+ 0, 0,130, 0, 0, 0,131, 0, 0, 0, 27, 0, 2, 0,132, 0, 2, 0,133, 0, 2, 0,134, 0, 2, 0, 18, 0, 4, 0, 30, 0,
+ 42, 0, 33, 0, 22, 0, 32, 0, 0, 0, 35, 0, 14, 0,135, 0, 43, 0,136, 0, 44, 0,137, 0, 45, 0,138, 0, 45, 0,139, 0,
+ 2, 0,140, 0, 2, 0,141, 0, 2, 0,131, 0, 2, 0, 18, 0, 2, 0,142, 0, 2, 0, 16, 0, 4, 0,143, 0, 2, 0,144, 0,
+ 2, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, 4, 0,150, 0, 4, 0,151, 0, 38, 0,152, 0,
+ 25, 0,153, 0, 7, 0,154, 0, 4, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 2, 0,158, 0, 0, 0,159, 0, 0, 0,160, 0,
+ 7, 0,161, 0, 7, 0,162, 0, 46, 0, 65, 0, 2, 0,163, 0, 2, 0,164, 0, 2, 0,165, 0, 2, 0,166, 0, 27, 0,167, 0,
+ 47, 0,168, 0, 0, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 7, 0,174, 0, 7, 0,175, 0,
+ 7, 0,176, 0, 2, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, 2, 0,182, 0, 0, 0,183, 0,
+ 0, 0,123, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 55, 0, 7, 0,189, 0,
7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0,
7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0,
7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0,
7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0, 7, 0,218, 0, 7, 0,219, 0, 7, 0,220, 0, 7, 0,221, 0,
- 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, 48, 0, 15, 0, 0, 0, 35, 0, 11, 0,227, 0,
- 0, 0,228, 0, 0, 0,229, 0, 4, 0,230, 0, 4, 0,231, 0, 11, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235, 0,
- 4, 0,236, 0, 11, 0,237, 0, 11, 0,238, 0, 4, 0,239, 0, 4, 0, 27, 0, 49, 0, 6, 0, 7, 0,185, 0, 7, 0,186, 0,
- 7, 0,187, 0, 7, 0,240, 0, 7, 0, 66, 0, 4, 0, 63, 0, 50, 0, 5, 0, 2, 0, 18, 0, 2, 0, 37, 0, 2, 0, 63, 0,
- 2, 0,241, 0, 49, 0,235, 0, 51, 0, 17, 0, 27, 0,168, 0, 42, 0,242, 0, 52, 0,243, 0, 7, 0,244, 0, 7, 0,245, 0,
- 2, 0, 16, 0, 2, 0,246, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,247, 0, 4, 0,248, 0, 2, 0,249, 0, 2, 0,250, 0,
- 4, 0,132, 0, 4, 0,144, 0, 2, 0,251, 0, 2, 0,252, 0, 53, 0, 25, 0, 2, 0, 18, 0, 2, 0,253, 0, 7, 0,254, 0,
- 7, 0,255, 0, 2, 0,143, 0, 2, 0, 0, 1, 4, 0, 1, 1, 4, 0, 2, 1, 27, 0,168, 0, 4, 0, 3, 1, 2, 0, 4, 1,
- 2, 0, 5, 1, 11, 0, 6, 1, 7, 0, 7, 1, 7, 0, 8, 1, 2, 0, 9, 1, 2, 0, 10, 1, 2, 0, 11, 1, 2, 0, 12, 1,
- 7, 0, 13, 1, 7, 0, 14, 1, 7, 0, 15, 1, 7, 0, 16, 1, 50, 0, 17, 1, 54, 0, 18, 1, 55, 0, 13, 0, 4, 0, 19, 1,
- 4, 0, 20, 1, 2, 0, 21, 1, 2, 0, 18, 0, 2, 0, 22, 1, 2, 0, 23, 1, 27, 0,168, 0, 7, 0, 24, 1, 4, 0, 25, 1,
- 0, 0, 26, 1, 7, 0, 27, 1, 4, 0, 28, 1, 4, 0,132, 0, 56, 0, 4, 0, 27, 0,168, 0, 0, 0, 29, 1, 4, 0, 30, 1,
- 4, 0, 27, 0, 47, 0, 64, 0, 22, 0, 32, 0, 34, 0, 75, 0, 7, 0, 31, 1, 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1,
- 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 7, 0, 30, 0, 7, 0, 40, 1, 7, 0, 41, 1,
- 7, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1,
- 7, 0, 50, 1, 7, 0, 51, 1, 2, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, 2, 0, 55, 1, 2, 0, 56, 1, 2, 0, 57, 1,
- 2, 0, 58, 1, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0, 59, 1, 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1,
- 4, 0, 63, 1, 4, 0, 64, 1, 2, 0, 65, 1, 2, 0, 66, 1, 2, 0, 22, 1, 2, 0,130, 0, 4, 0, 22, 0, 4, 0,127, 0,
- 4, 0,128, 0, 4, 0,129, 0, 7, 0, 67, 1, 7, 0, 68, 1, 7, 0, 67, 0, 40, 0, 69, 1, 57, 0, 70, 1, 31, 0, 80, 0,
- 42, 0,242, 0, 48, 0, 71, 1, 50, 0, 17, 1, 51, 0, 72, 1, 25, 0,154, 0, 53, 0, 73, 1, 55, 0, 74, 1, 56, 0, 75, 1,
- 0, 0, 76, 1, 0, 0,124, 0, 58, 0, 13, 0, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0,176, 0, 4, 0, 18, 0, 0, 0,171, 0,
- 0, 0,172, 0, 0, 0,173, 0, 0, 0,174, 0, 4, 0, 27, 0, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 27, 0, 44, 0,
- 59, 0, 9, 0, 50, 0, 82, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 4, 0, 18, 0, 7, 0, 83, 1, 7, 0, 84, 1,
- 4, 0, 85, 1, 4, 0, 86, 1, 60, 0, 74, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 87, 1,
- 2, 0,179, 0, 2, 0, 88, 1, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0, 89, 1, 7, 0, 90, 1,
- 7, 0, 91, 1, 7, 0, 92, 1, 7, 0, 93, 1, 7, 0, 94, 1, 7, 0, 95, 1, 7, 0, 96, 1, 7, 0, 97, 1, 7, 0, 98, 1,
- 7, 0, 99, 1, 54, 0,100, 1, 2, 0,253, 0, 2, 0, 30, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,101, 1, 7, 0,102, 1,
- 7, 0,103, 1, 7, 0,104, 1, 7, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 2, 0,108, 1, 2, 0,109, 1, 0, 0,110, 1,
- 0, 0,111, 1, 2, 0,112, 1, 2, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, 2, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1,
- 7, 0,119, 1, 7, 0,120, 1, 2, 0,121, 1, 2, 0, 67, 0, 2, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1,
- 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1,
- 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, 7, 0,137, 1, 2, 0,138, 1, 0, 0,139, 1, 31, 0, 80, 0, 46, 0,140, 1,
- 2, 0,141, 1, 2, 0, 76, 1, 0, 0,142, 1, 25, 0,154, 0, 57, 0, 70, 1, 61, 0, 18, 0, 7, 0,143, 1, 7, 0,144, 1,
- 7, 0,145, 1, 7, 0,146, 1, 7, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1,
- 2, 0,153, 1, 2, 0,154, 1, 2, 0,155, 1, 2, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1,
- 62, 0, 4, 0, 4, 0, 18, 0, 4, 0,161, 1, 4, 0,162, 1, 4, 0, 67, 0, 63, 0,126, 0, 22, 0, 32, 0, 34, 0, 75, 0,
- 2, 0,163, 1, 2, 0, 18, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1,
- 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1,
- 7, 0,175, 1, 7, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1, 7, 0,179, 1, 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1,
- 7, 0,183, 1, 61, 0,184, 1, 62, 0,185, 1, 7, 0,186, 1, 7, 0,187, 1, 7, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1,
- 7, 0,191, 1, 7, 0,192, 1, 2, 0,193, 1, 2, 0,194, 1, 2, 0,195, 1, 0, 0,196, 1, 0, 0,197, 1, 7, 0,198, 1,
- 7, 0,199, 1, 2, 0,200, 1, 2, 0,201, 1, 7, 0,202, 1, 7, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, 2, 0,206, 1,
- 2, 0,207, 1, 4, 0, 87, 1, 4, 0,208, 1, 2, 0,209, 1, 2, 0,210, 1, 2, 0,211, 1, 2, 0,212, 1, 7, 0,213, 1,
- 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1,
- 7, 0,222, 1, 0, 0,223, 1, 7, 0,224, 1, 7, 0,225, 1, 7, 0,226, 1, 4, 0,227, 1, 0, 0,228, 1, 0, 0,122, 1,
- 0, 0,229, 1, 0, 0, 76, 1, 2, 0,230, 1, 2, 0,231, 1, 2, 0,141, 1, 2, 0,232, 1, 2, 0,233, 1, 2, 0,234, 1,
- 7, 0,235, 1, 7, 0,236, 1, 7, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 2, 0,164, 0, 2, 0,165, 0, 50, 0,240, 1,
- 50, 0,241, 1, 0, 0,242, 1, 0, 0,243, 1, 0, 0,244, 1, 0, 0,245, 1, 2, 0,246, 1, 2, 0,247, 1, 7, 0,248, 1,
- 7, 0,249, 1, 46, 0,140, 1, 57, 0, 70, 1, 31, 0, 80, 0, 64, 0,250, 1, 25, 0,154, 0, 7, 0,251, 1, 7, 0,252, 1,
- 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, 2, 0, 0, 2, 2, 0, 30, 0, 7, 0, 1, 2, 7, 0, 2, 2, 7, 0, 3, 2,
- 7, 0, 4, 2, 7, 0, 5, 2, 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, 7, 0, 9, 2, 2, 0, 10, 2, 2, 0, 11, 2,
- 4, 0, 12, 2, 2, 0, 13, 2, 2, 0, 14, 2, 14, 0, 15, 2, 65, 0, 4, 0, 22, 0, 32, 0, 0, 0, 35, 0, 66, 0, 2, 0,
- 38, 0,153, 0, 67, 0, 20, 0, 67, 0, 0, 0, 67, 0, 1, 0, 68, 0, 16, 2, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 17, 2,
- 2, 0, 18, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 22, 2,
- 7, 0, 23, 2, 7, 0, 24, 2, 7, 0, 25, 2, 7, 0, 22, 0, 7, 0, 26, 2, 7, 0, 27, 2, 69, 0, 20, 0, 22, 0, 32, 0,
- 34, 0, 75, 0, 68, 0, 16, 2, 14, 0, 28, 2, 14, 0, 29, 2, 14, 0, 30, 2, 31, 0, 80, 0, 63, 0, 31, 2, 0, 0, 18, 0,
- 0, 0, 32, 2, 2, 0, 33, 2, 2, 0,178, 0, 2, 0, 27, 0, 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1, 7, 0, 34, 2,
- 7, 0, 35, 2, 7, 0, 36, 2, 67, 0, 37, 2, 30, 0, 11, 0, 7, 0, 38, 2, 7, 0, 39, 2, 7, 0, 40, 2, 7, 0,255, 0,
- 2, 0, 54, 0, 0, 0, 41, 2, 0, 0, 42, 2, 0, 0, 43, 2, 0, 0, 44, 2, 0, 0, 45, 2, 0, 0, 46, 2, 29, 0, 7, 0,
- 7, 0, 47, 2, 7, 0, 39, 2, 7, 0, 40, 2, 2, 0, 43, 2, 2, 0, 46, 2, 7, 0,255, 0, 7, 0, 27, 0, 70, 0, 21, 0,
- 70, 0, 0, 0, 70, 0, 1, 0, 2, 0, 16, 0, 2, 0, 48, 2, 2, 0, 46, 2, 2, 0, 18, 0, 2, 0, 49, 2, 2, 0, 50, 2,
- 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 53, 2, 2, 0, 54, 2, 2, 0, 55, 2, 2, 0, 56, 2, 7, 0, 57, 2, 7, 0, 58, 2,
- 29, 0, 48, 0, 30, 0, 49, 0, 2, 0, 59, 2, 2, 0, 60, 2, 4, 0, 61, 2, 71, 0, 5, 0, 2, 0, 62, 2, 2, 0, 48, 2,
- 0, 0, 18, 0, 0, 0, 27, 0, 2, 0, 30, 0, 72, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 63, 2, 7, 0, 64, 2,
- 73, 0, 4, 0, 14, 0, 65, 2, 74, 0, 66, 2, 4, 0, 67, 2, 0, 0, 94, 0, 75, 0, 68, 0, 22, 0, 32, 0, 34, 0, 75, 0,
- 68, 0, 16, 2, 14, 0, 68, 2, 14, 0, 29, 2, 73, 0, 69, 2, 27, 0, 70, 2, 27, 0, 71, 2, 27, 0, 72, 2, 31, 0, 80, 0,
- 76, 0, 73, 2, 33, 0, 74, 2, 63, 0, 31, 2, 14, 0, 75, 2, 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1, 2, 0, 16, 0,
- 2, 0,178, 0, 2, 0, 76, 2, 2, 0, 77, 2, 7, 0, 78, 2, 7, 0, 79, 2, 4, 0, 80, 2, 2, 0, 27, 0, 2, 0, 33, 2,
- 2, 0, 18, 0, 2, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, 2, 0, 51, 2, 2, 0, 52, 2, 2, 0, 85, 2,
- 2, 0, 86, 2, 4, 0, 87, 2, 11, 0, 88, 2, 2, 0, 22, 0, 2, 0, 97, 0, 2, 0, 66, 0, 2, 0, 89, 2, 7, 0, 90, 2,
- 7, 0, 91, 2, 7, 0, 92, 2, 7, 0, 93, 2, 7, 0, 94, 2, 7, 0, 95, 2, 7, 0, 96, 2, 7, 0, 97, 2, 7, 0, 98, 2,
- 7, 0, 99, 2, 0, 0,100, 2, 77, 0,101, 2, 78, 0,102, 2, 0, 0,103, 2, 65, 0,104, 2, 65, 0,105, 2, 65, 0,106, 2,
- 65, 0,107, 2, 4, 0,108, 2, 7, 0, 84, 0, 4, 0,109, 2, 4, 0,110, 2, 72, 0,111, 2, 4, 0,112, 2, 4, 0,113, 2,
- 71, 0,114, 2, 71, 0,115, 2, 79, 0, 47, 0, 22, 0, 32, 0, 34, 0, 75, 0, 68, 0, 16, 2, 31, 0, 80, 0, 33, 0, 74, 2,
- 63, 0, 31, 2, 80, 0,116, 2, 81, 0,117, 2, 82, 0,118, 2, 83, 0,119, 2, 84, 0,120, 2, 85, 0,121, 2, 86, 0,122, 2,
- 87, 0,123, 2, 88, 0,124, 2, 89, 0,125, 2, 90, 0,126, 2, 91, 0,127, 2, 92, 0,128, 2, 93, 0,129, 2, 79, 0,130, 2,
- 94, 0,131, 2, 95, 0,132, 2, 95, 0,133, 2, 95, 0,134, 2, 95, 0,135, 2, 95, 0,136, 2, 4, 0, 53, 0, 4, 0,137, 2,
- 4, 0,138, 2, 4, 0,139, 2, 4, 0,140, 2, 4, 0,141, 2, 4, 0,142, 2, 7, 0, 77, 1, 7, 0,176, 0, 7, 0, 78, 1,
- 2, 0,178, 0, 2, 0, 76, 2, 2, 0,143, 2, 2, 0, 18, 0, 2, 0,144, 2, 2, 0,145, 2, 0, 0,146, 2, 0, 0,147, 2,
- 2, 0, 33, 2, 96, 0,148, 2, 88, 0, 8, 0, 11, 0,149, 2, 7, 0,150, 2, 4, 0,151, 2, 0, 0, 18, 0, 0, 0,152, 2,
- 2, 0, 87, 1, 2, 0,153, 2, 2, 0,154, 2, 86, 0, 7, 0, 4, 0,155, 2, 4, 0,156, 2, 4, 0,157, 2, 4, 0,158, 2,
- 2, 0, 48, 2, 0, 0,159, 2, 0, 0, 18, 0, 90, 0, 5, 0, 4, 0,155, 2, 4, 0,156, 2, 0, 0,160, 2, 0, 0,161, 2,
- 2, 0, 18, 0, 97, 0, 2, 0, 4, 0,162, 2, 7, 0, 40, 2, 91, 0, 3, 0, 97, 0,163, 2, 4, 0,164, 2, 4, 0, 18, 0,
- 89, 0, 4, 0, 7, 0,165, 2, 2, 0,166, 2, 0, 0, 18, 0, 0, 0,161, 2, 92, 0, 4, 0, 0, 0,240, 0, 0, 0,185, 0,
- 0, 0,186, 0, 0, 0,187, 0, 81, 0, 5, 0, 4, 0,167, 2, 4, 0,141, 2, 2, 0, 48, 2, 0, 0, 18, 0, 0, 0, 27, 0,
- 83, 0, 2, 0, 4, 0,168, 2, 4, 0,169, 2, 82, 0, 6, 0, 42, 0,149, 2, 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1,
- 2, 0,153, 2, 2, 0,154, 2, 84, 0, 2, 0, 7, 0,170, 2, 4, 0, 18, 0, 85, 0, 4, 0, 0, 0,185, 0, 0, 0,186, 0,
- 0, 0,187, 0, 0, 0,240, 0, 93, 0, 1, 0, 7, 0,171, 2, 80, 0, 2, 0, 4, 0, 14, 2, 4, 0, 16, 0, 87, 0, 7, 0,
- 7, 0,150, 2, 42, 0,149, 2, 0, 0, 18, 0, 0, 0,152, 2, 2, 0, 87, 1, 2, 0,153, 2, 2, 0,154, 2, 98, 0, 1, 0,
- 7, 0,172, 2, 99, 0, 1, 0, 4, 0,173, 2,100, 0, 1, 0, 0, 0,174, 2,101, 0, 1, 0, 7, 0,150, 2,102, 0, 1, 0,
- 7, 0,170, 2,103, 0, 4, 0, 4, 0,175, 2, 4, 0,176, 2, 7, 0,177, 2, 4, 0,178, 2,104, 0, 4, 0, 7, 0,240, 0,
- 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0,105, 0, 1, 0,104, 0,151, 2,106, 0, 5, 0, 4, 0,179, 2, 4, 0,180, 2,
- 0, 0, 18, 0, 0, 0, 48, 2, 0, 0,181, 2,107, 0, 2, 0, 4, 0,182, 2, 4, 0,180, 2,108, 0, 10, 0,108, 0, 0, 0,
-108, 0, 1, 0,106, 0,183, 2,105, 0,184, 2,107, 0,185, 2, 4, 0, 53, 0, 4, 0,138, 2, 4, 0,137, 2, 4, 0, 27, 0,
- 89, 0,186, 2, 96, 0, 14, 0, 14, 0,187, 2, 89, 0,186, 2, 0, 0,188, 2, 0, 0,189, 2, 0, 0,190, 2, 0, 0,191, 2,
- 0, 0,192, 2, 0, 0,193, 2, 0, 0,194, 2, 0, 0, 18, 0, 95, 0,132, 2, 95, 0,134, 2, 2, 0,195, 2, 0, 0,196, 2,
-109, 0, 1, 0, 4, 0,173, 2,110, 0, 9, 0,110, 0, 0, 0,110, 0, 1, 0, 4, 0, 16, 0, 4, 0, 87, 1, 4, 0,197, 2,
- 4, 0, 27, 0, 0, 0, 19, 0, 41, 0,125, 0, 0, 0,198, 2,111, 0, 6, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2,
- 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2,112, 0, 7, 0,110, 0,199, 2, 2, 0,205, 2, 2, 0,187, 2, 2, 0,206, 2,
- 2, 0, 92, 0, 11, 0,207, 2, 11, 0,208, 2,113, 0, 5, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 19, 0, 7, 0,209, 2,
- 0, 0, 94, 0,114, 0, 5, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 19, 0, 2, 0,210, 2, 0, 0,211, 2,115, 0, 5, 0,
-110, 0,199, 2, 7, 0, 90, 0, 7, 0,212, 2, 4, 0,213, 2, 4, 0,214, 2,116, 0, 5, 0,110, 0,199, 2, 27, 0,215, 2,
- 0, 0, 72, 0, 4, 0, 87, 1, 4, 0, 18, 0,117, 0, 13, 0,110, 0,199, 2, 27, 0,216, 2, 27, 0,217, 2, 27, 0,218, 2,
- 27, 0,219, 2, 7, 0,220, 2, 7, 0,221, 2, 7, 0,212, 2, 7, 0,222, 2, 4, 0,223, 2, 4, 0,224, 2, 4, 0, 92, 0,
- 4, 0,225, 2,118, 0, 5, 0,110, 0,199, 2, 2, 0,226, 2, 2, 0, 18, 0, 7, 0,227, 2, 27, 0,228, 2,119, 0, 3, 0,
-110, 0,199, 2, 7, 0,229, 2, 4, 0, 92, 0,120, 0, 10, 0,110, 0,199, 2, 7, 0,230, 2, 4, 0,231, 2, 4, 0, 27, 0,
- 2, 0, 92, 0, 2, 0,232, 2, 2, 0,233, 2, 2, 0,234, 2, 7, 0,235, 2, 0, 0,236, 2,121, 0, 3, 0,110, 0,199, 2,
- 7, 0, 27, 0, 4, 0, 16, 0,122, 0, 6, 0,110, 0,199, 2,123, 0,237, 2,124, 0,238, 2,125, 0,239, 2, 7, 0,240, 2,
- 4, 0, 16, 0,126, 0, 11, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2,
- 7, 0,209, 2, 4, 0,241, 2, 0, 0,236, 2, 7, 0,242, 2, 4, 0, 27, 0,127, 0, 12, 0,110, 0,199, 2, 27, 0,243, 2,
- 42, 0,244, 2, 4, 0, 92, 0, 4, 0,245, 2, 7, 0,246, 2, 7, 0,247, 2, 7, 0,248, 2, 7, 0,249, 2, 0, 0,202, 2,
- 4, 0,203, 2, 4, 0, 27, 0,128, 0, 3, 0,110, 0,199, 2, 7, 0,250, 2, 4, 0,251, 2,129, 0, 5, 0,110, 0,199, 2,
- 7, 0,252, 2, 0, 0,236, 2, 2, 0, 18, 0, 2, 0,253, 2,130, 0, 8, 0,110, 0,199, 2, 27, 0,168, 0, 7, 0,252, 2,
- 7, 0,255, 0, 7, 0,108, 0, 0, 0,236, 2, 2, 0, 18, 0, 2, 0, 16, 0,131, 0, 21, 0,110, 0,199, 2, 47, 0,200, 2,
- 27, 0,201, 2, 0, 0,202, 2, 4, 0,203, 2, 4, 0,204, 2, 27, 0,254, 2, 0, 0,236, 2, 2, 0, 18, 0, 2, 0, 27, 0,
- 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 1, 3, 7, 0, 82, 2, 7, 0, 2, 3, 7, 0, 3, 3, 7, 0, 4, 3, 7, 0, 5, 3,
- 7, 0, 6, 3, 7, 0, 7, 3, 7, 0, 67, 0,132, 0, 7, 0,110, 0,199, 2, 2, 0, 8, 3, 2, 0, 9, 3, 4, 0, 30, 0,
- 27, 0,168, 0, 7, 0, 10, 3, 0, 0,236, 2,133, 0, 10, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0, 11, 3, 7, 0, 12, 3,
- 7, 0, 13, 3, 7, 0, 5, 3, 4, 0, 14, 3, 4, 0, 15, 3, 7, 0, 16, 3, 0, 0, 19, 0,134, 0, 1, 0,110, 0,199, 2,
-135, 0, 7, 0,110, 0,199, 2, 41, 0,125, 0,136, 0, 17, 3,137, 0, 18, 3,138, 0, 19, 3,139, 0, 20, 3, 14, 0, 21, 3,
-140, 0, 13, 0,110, 0,199, 2, 89, 0, 22, 3, 89, 0, 23, 3, 89, 0, 24, 3, 89, 0, 25, 3, 89, 0, 26, 3, 89, 0, 27, 3,
- 86, 0, 28, 3, 4, 0, 29, 3, 4, 0, 30, 3, 7, 0, 31, 3, 7, 0, 32, 3,141, 0, 33, 3,142, 0, 7, 0,110, 0,199, 2,
- 89, 0, 22, 3, 89, 0, 34, 3,143, 0, 35, 3,144, 0, 33, 3, 4, 0, 36, 3, 4, 0, 29, 3,145, 0, 4, 0,110, 0,199, 2,
- 27, 0,168, 0, 4, 0, 37, 3, 4, 0, 27, 0,146, 0, 2, 0, 4, 0, 38, 3, 7, 0, 40, 2,147, 0, 2, 0, 4, 0,128, 0,
- 4, 0, 39, 3,148, 0, 24, 0,110, 0,199, 2, 27, 0,168, 0, 0, 0,236, 2, 2, 0, 40, 3, 2, 0, 18, 0, 2, 0, 87, 1,
- 2, 0, 27, 0,146, 0, 41, 3, 4, 0, 42, 3, 7, 0, 43, 3, 4, 0, 53, 0, 4, 0, 44, 3,147, 0, 45, 3,146, 0, 46, 3,
- 4, 0, 47, 3, 4, 0, 48, 3, 4, 0, 49, 3, 4, 0, 39, 3, 7, 0, 50, 3, 7, 0, 51, 3, 7, 0, 52, 3, 7, 0, 53, 3,
- 7, 0, 54, 3, 11, 0, 55, 3,149, 0, 8, 0,110, 0,199, 2,150, 0, 56, 3,143, 0, 35, 3, 4, 0, 57, 3, 4, 0, 58, 3,
- 4, 0, 59, 3, 2, 0, 18, 0, 2, 0, 56, 0,151, 0, 8, 0,110, 0,199, 2, 27, 0, 44, 0, 2, 0, 3, 1, 2, 0, 18, 0,
- 2, 0,226, 2, 2, 0, 56, 0, 7, 0, 60, 3, 7, 0, 61, 3,152, 0, 6, 0,110, 0,199, 2, 4, 0, 62, 3, 2, 0, 18, 0,
- 2, 0, 63, 3, 7, 0, 64, 3, 0, 0,170, 0,153, 0, 8, 0,110, 0,199, 2, 0, 0, 65, 3, 0, 0, 66, 3, 0, 0,193, 2,
- 0, 0, 67, 3, 0, 0, 68, 3, 0, 0, 92, 0, 0, 0,181, 2,154, 0, 3, 0,110, 0,199, 2,155, 0, 69, 3,139, 0, 20, 3,
-156, 0, 10, 0,110, 0,199, 2, 27, 0, 70, 3, 27, 0, 71, 3, 0, 0, 72, 3, 7, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3,
- 0, 0, 76, 3, 0, 0, 77, 3, 0, 0,211, 2,157, 0, 9, 0,110, 0,199, 2, 27, 0, 78, 3, 0, 0, 72, 3, 7, 0, 79, 3,
- 7, 0, 80, 3, 0, 0, 87, 1, 0, 0,226, 2, 0, 0, 81, 3, 0, 0, 27, 0,158, 0, 1, 0,110, 0,199, 2,159, 0, 11, 0,
-110, 0,199, 2, 0, 0,236, 2, 7, 0,128, 0, 7, 0, 82, 3, 7, 0, 83, 3, 7, 0, 84, 3, 7, 0, 85, 3, 7, 0, 86, 3,
- 4, 0, 18, 0, 2, 0, 87, 3, 2, 0, 88, 3,160, 0, 9, 0,110, 0,199, 2, 27, 0, 89, 3, 4, 0, 90, 3, 4, 0, 91, 3,
- 4, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 2, 0,226, 2, 2, 0, 18, 0,161, 0, 29, 0,110, 0,199, 2,162, 0, 95, 3,
-163, 0, 96, 3, 4, 0, 97, 3, 4, 0, 98, 3, 7, 0, 99, 3, 7, 0, 4, 3, 7, 0,100, 3, 7, 0,250, 0, 7, 0,101, 3,
- 7, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 7, 0,105, 3, 7, 0,240, 2, 4, 0,106, 3, 4, 0,107, 3, 0, 0,108, 3,
- 0, 0,109, 3, 0, 0,110, 3, 0, 0,111, 3, 0, 0, 18, 0, 0, 0,112, 3, 2, 0,113, 3, 2, 0,114, 3, 4, 0,214, 2,
- 7, 0,108, 0, 7, 0,115, 3, 4, 0, 27, 0,164, 0, 15, 0,110, 0,199, 2, 47, 0,200, 2, 27, 0,201, 2, 0, 0,202, 2,
- 4, 0,203, 2, 4, 0,204, 2, 27, 0,116, 3, 27, 0,117, 3, 54, 0,100, 1, 0, 0,236, 2, 7, 0,209, 2, 7, 0,118, 3,
- 0, 0, 18, 0, 0, 0,253, 0, 0, 0,211, 2,165, 0, 16, 0,110, 0,199, 2, 0, 0,236, 2, 2, 0,119, 3, 2, 0,253, 0,
- 7, 0,120, 3, 54, 0,121, 3, 7, 0,122, 3, 7, 0,123, 3, 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3, 47, 0,127, 3,
- 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3,166, 0, 16, 0,110, 0,199, 2, 0, 0,132, 3, 0, 0,133, 3,
- 7, 0,134, 3, 7, 0,135, 3, 0, 0,136, 3, 0, 0,137, 3, 0, 0,138, 3, 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3,
- 47, 0,127, 3, 27, 0,128, 3, 4, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3,167, 0, 16, 0,110, 0,199, 2, 0, 0,236, 2,
- 4, 0,139, 3, 4, 0,140, 3, 27, 0,141, 3, 7, 0,124, 3, 0, 0,125, 3, 4, 0,126, 3, 47, 0,127, 3, 27, 0,128, 3,
- 4, 0,129, 3, 0, 0,130, 3, 7, 0,142, 3, 7, 0,143, 3, 2, 0,253, 0, 2, 0,144, 3,168, 0, 5, 0,110, 0,199, 2,
-169, 0,145, 3,170, 0,146, 3, 4, 0, 16, 0, 4, 0, 27, 0,171, 0, 8, 0,110, 0,199, 2, 7, 0,147, 3, 7, 0,148, 3,
- 7, 0,149, 3, 0, 0,250, 0, 0, 0, 18, 0, 0, 0, 87, 1, 0, 0, 27, 0,172, 0, 3, 0,173, 0,150, 3, 4, 0, 67, 2,
- 0, 0, 94, 0,173, 0, 29, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0, 49, 2, 2, 0, 50, 2, 2, 0,151, 3, 2, 0, 18, 0,
- 2, 0,152, 3, 2, 0,153, 3, 2, 0,154, 3, 2, 0, 30, 0, 0, 0,155, 3, 0, 0,156, 3, 0, 0,157, 3, 0, 0,247, 1,
- 4, 0, 27, 0, 7, 0,158, 3, 7, 0,159, 3, 7, 0,160, 3, 7, 0,161, 3, 7, 0,162, 3, 7, 0,163, 3, 29, 0,164, 3,
- 31, 0, 80, 0, 33, 0, 74, 2, 91, 0,127, 2, 0, 0, 72, 0, 7, 0,165, 3, 7, 0,166, 3,172, 0,167, 3,174, 0, 5, 0,
-174, 0, 0, 0,174, 0, 1, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,124, 0, 68, 0, 3, 0, 7, 0,168, 3, 4, 0, 18, 0,
- 4, 0, 27, 0, 27, 0,128, 0, 22, 0, 32, 0, 34, 0, 75, 0,175, 0,169, 3, 2, 0, 16, 0, 2, 0,170, 3, 4, 0,171, 3,
- 4, 0,172, 3, 4, 0,173, 3, 0, 0,174, 3, 27, 0, 38, 0, 27, 0,175, 3, 27, 0,176, 3, 27, 0,177, 3, 27, 0,178, 3,
- 31, 0, 80, 0, 68, 0, 16, 2,176, 0,179, 3,176, 0,180, 3,177, 0,181, 3, 11, 0, 2, 0,178, 0,182, 3,179, 0,183, 3,
-180, 0,184, 3, 14, 0,185, 3, 14, 0,186, 3, 14, 0, 29, 2, 14, 0,187, 3, 14, 0,188, 3, 4, 0, 87, 1, 4, 0,189, 3,
- 63, 0, 31, 2, 0, 0,190, 3, 4, 0, 33, 2, 4, 0,191, 3, 7, 0, 77, 1, 7, 0,192, 3, 7, 0,193, 3, 7, 0,176, 0,
- 7, 0,194, 3, 7, 0,195, 3, 7, 0, 78, 1, 7, 0,196, 3, 7, 0, 19, 2, 7, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3,
- 7, 0,200, 3, 7, 0,201, 3, 7, 0,202, 3, 7, 0, 12, 3, 7, 0,203, 3, 7, 0,244, 0, 7, 0,204, 3, 4, 0,205, 3,
- 4, 0,206, 3, 2, 0, 18, 0, 2, 0,207, 3, 2, 0,208, 3, 2, 0,209, 3, 2, 0,210, 3, 2, 0,211, 3, 2, 0,212, 3,
- 2, 0,213, 3, 2, 0,214, 3, 0, 0,215, 3, 0, 0,216, 3, 4, 0,217, 3, 4, 0,218, 3, 4, 0,219, 3, 4, 0,220, 3,
- 7, 0,221, 3, 7, 0, 84, 0, 7, 0,222, 3, 7, 0,223, 3, 7, 0,224, 3, 7, 0,225, 3, 7, 0,226, 3, 7, 0,220, 0,
- 7, 0,227, 3, 7, 0,228, 3, 7, 0,229, 3, 7, 0,230, 3, 7, 0,231, 3, 2, 0,232, 3, 0, 0,233, 3, 0, 0,234, 3,
- 0, 0,235, 3, 0, 0,236, 3, 0, 0,110, 0, 0, 0,237, 3, 7, 0,238, 3, 7, 0,239, 3, 14, 0,240, 3, 14, 0,241, 3,
- 14, 0,242, 3, 14, 0,243, 3, 7, 0,244, 3, 2, 0, 14, 2, 2, 0,245, 3, 7, 0,151, 2, 4, 0,246, 3, 4, 0,247, 3,
-181, 0,248, 3, 2, 0,249, 3, 2, 0,251, 0, 7, 0,250, 3, 14, 0,251, 3, 14, 0,252, 3, 14, 0,253, 3, 14, 0,254, 3,
-182, 0, 73, 1,183, 0,255, 3, 64, 0, 0, 4, 0, 0, 1, 4, 0, 0, 2, 4, 2, 0, 67, 2, 7, 0,143, 2,155, 0, 3, 4,
-143, 0, 4, 4,143, 0, 5, 4, 10, 0, 6, 4, 10, 0, 7, 4, 4, 0, 8, 4, 4, 0, 9, 4, 14, 0, 10, 4, 14, 0, 11, 4,
- 14, 0, 12, 4, 7, 0, 13, 4,184, 0, 14, 0,184, 0, 0, 0,184, 0, 1, 0, 27, 0, 38, 0, 7, 0, 12, 3, 7, 0, 79, 1,
- 7, 0, 13, 3, 7, 0, 5, 3, 0, 0, 19, 0, 4, 0, 14, 3, 4, 0, 15, 3, 4, 0, 14, 4, 2, 0, 16, 0, 2, 0, 15, 4,
- 7, 0, 16, 3,185, 0, 12, 0,185, 0, 0, 0,185, 0, 1, 0, 27, 0, 44, 0, 4, 0, 16, 4, 4, 0, 14, 2, 7, 0, 79, 1,
- 7, 0, 17, 4, 7, 0, 18, 4, 7, 0,170, 2, 2, 0, 16, 0, 0, 0, 19, 4, 0, 0, 20, 4,182, 0, 40, 0, 4, 0, 18, 0,
- 2, 0, 21, 4, 2, 0, 22, 4, 2, 0, 5, 3, 2, 0, 23, 4, 2, 0, 24, 4, 2, 0, 25, 4, 2, 0, 26, 4, 2, 0, 27, 4,
- 7, 0, 28, 4, 7, 0, 29, 4, 7, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, 7, 0, 33, 4, 7, 0, 34, 4, 7, 0, 35, 4,
- 7, 0, 36, 4, 7, 0, 37, 4, 7, 0, 38, 4, 7, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4,
- 7, 0, 44, 4, 7, 0, 45, 4, 7, 0, 46, 4, 7, 0, 47, 4, 7, 0, 48, 4, 7, 0, 49, 4, 7, 0, 50, 4, 7, 0, 51, 4,
- 7, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4, 47, 0,169, 0,186, 0, 55, 4, 7, 0, 56, 4, 4, 0,214, 2,187, 0, 5, 0,
- 64, 0,250, 1, 7, 0, 57, 4, 7, 0, 58, 4, 2, 0, 18, 0, 2, 0, 59, 4,188, 0, 5, 0,188, 0, 0, 0,188, 0, 1, 0,
- 4, 0, 16, 0, 4, 0, 60, 4, 11, 0, 2, 0,189, 0, 9, 0,189, 0, 0, 0,189, 0, 1, 0, 4, 0, 61, 4, 4, 0, 62, 4,
- 4, 0, 63, 4, 4, 0, 18, 0, 11, 0, 64, 4, 11, 0, 65, 4, 14, 0, 66, 4,139, 0, 23, 0,139, 0, 0, 0,139, 0, 1, 0,
- 4, 0, 18, 0, 4, 0, 67, 4, 4, 0, 68, 4, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 73, 4,
- 4, 0, 27, 0, 4, 0, 62, 4, 4, 0, 14, 2, 2, 0, 74, 4, 2, 0, 56, 0, 0, 0, 19, 0, 0, 0, 75, 4, 0, 0, 76, 4,
- 0, 0, 77, 4, 0, 0, 78, 4, 14, 0, 79, 4,190, 0, 80, 4, 11, 0, 81, 4,191, 0, 1, 0, 7, 0, 47, 2,181, 0, 30, 0,
- 4, 0, 18, 0, 7, 0, 82, 4, 7, 0, 83, 4, 7, 0, 84, 4, 4, 0, 85, 4, 4, 0, 86, 4, 4, 0, 87, 4, 4, 0, 88, 4,
- 7, 0, 89, 4, 7, 0, 90, 4, 7, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, 7, 0, 94, 4, 7, 0, 95, 4, 7, 0, 96, 4,
- 7, 0, 97, 4, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 7, 0,103, 4, 7, 0,104, 4,
- 7, 0,105, 4, 7, 0,106, 4, 4, 0,107, 4, 4, 0,108, 4, 7, 0,109, 4, 7, 0,227, 3,183, 0, 54, 0, 4, 0, 62, 4,
- 4, 0,110, 4,192, 0,111, 4,193, 0,112, 4, 0, 0, 27, 0, 0, 0,113, 4, 2, 0,114, 4, 7, 0,115, 4, 0, 0,116, 4,
- 7, 0,117, 4, 7, 0,118, 4, 7, 0,119, 4, 7, 0,120, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,123, 4, 7, 0,124, 4,
- 7, 0,125, 4, 2, 0,126, 4, 0, 0,127, 4, 2, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4, 0, 0,131, 4, 4, 0,129, 0,
- 4, 0,132, 4, 4, 0,133, 4, 2, 0,134, 4, 2, 0,135, 4,191, 0,136, 4, 4, 0,137, 4, 4, 0, 82, 0, 7, 0,138, 4,
- 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 2, 0,142, 4, 2, 0,143, 4, 2, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4,
- 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4,194, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4,139, 0,153, 4, 14, 0, 21, 3,
-187, 0,154, 4, 7, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 4, 0,158, 4,195, 0, 1, 0, 7, 0,159, 4,155, 0, 52, 0,
-154, 0,160, 4, 2, 0, 16, 0, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, 7, 0,164, 4, 2, 0,165, 4, 2, 0,166, 4,
- 7, 0,167, 4, 2, 0,168, 4, 2, 0,169, 4, 7, 0,170, 4, 7, 0,171, 4, 7, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4,
- 4, 0,175, 4, 4, 0, 27, 0, 7, 0,176, 4, 4, 0,177, 4, 7, 0,178, 4, 7, 0,179, 4, 7, 0,180, 4, 79, 0,181, 4,
- 79, 0,182, 4, 0, 0,183, 4, 7, 0,184, 4, 7, 0,185, 4, 31, 0, 80, 0, 2, 0,186, 4, 0, 0,187, 4, 0, 0,188, 4,
- 7, 0,189, 4, 4, 0,190, 4, 7, 0,191, 4, 7, 0,192, 4, 4, 0,193, 4, 4, 0, 18, 0, 7, 0,194, 4, 7, 0,195, 4,
- 7, 0,196, 4,195, 0,197, 4, 4, 0, 53, 0, 7, 0,198, 4, 7, 0,199, 4, 7, 0,200, 4, 7, 0,201, 4, 7, 0,202, 4,
- 7, 0,203, 4, 7, 0,204, 4, 4, 0,205, 4, 7, 0,206, 4,196, 0, 78, 0, 22, 0, 32, 0, 34, 0, 75, 0, 2, 0,179, 0,
- 2, 0, 88, 1, 2, 0,122, 1, 2, 0,207, 4, 7, 0,208, 4, 7, 0,209, 4, 7, 0,210, 4, 7, 0,211, 4, 7, 0,212, 4,
- 7, 0,213, 4, 7, 0,170, 1, 7, 0,172, 1, 7, 0,171, 1, 7, 0, 30, 0, 4, 0,214, 4, 7, 0,215, 4, 7, 0,216, 4,
- 7, 0,217, 4, 7, 0,218, 4, 7, 0,219, 4, 7, 0,220, 4, 7, 0,221, 4, 2, 0,222, 4, 2, 0, 87, 1, 2, 0,223, 4,
- 2, 0,224, 4, 2, 0,225, 4, 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, 7, 0,229, 4, 7, 0,230, 4, 7, 0,231, 4,
- 7, 0,232, 4, 7, 0,233, 4, 7, 0,234, 4, 7, 0,235, 4, 7, 0,236, 4, 7, 0,237, 4, 7, 0,238, 4, 7, 0,239, 4,
- 7, 0,240, 4, 2, 0,241, 4, 2, 0,242, 4, 2, 0,243, 4, 2, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4,
- 7, 0,248, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4,
- 7, 0, 0, 5, 7, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5,
- 2, 0, 8, 5, 2, 0, 18, 0, 7, 0, 9, 5, 7, 0, 10, 5, 31, 0, 80, 0, 46, 0,140, 1, 2, 0,141, 1, 2, 0, 76, 1,
- 2, 0,181, 2, 25, 0,154, 0, 57, 0, 70, 1,197, 0, 8, 0,197, 0, 0, 0,197, 0, 1, 0, 4, 0,205, 3, 4, 0, 11, 5,
- 4, 0, 18, 0, 2, 0, 12, 5, 2, 0, 13, 5, 27, 0,168, 0,198, 0, 13, 0, 11, 0, 14, 5, 11, 0, 15, 5, 4, 0, 16, 5,
- 4, 0, 17, 5, 4, 0, 18, 5, 4, 0, 19, 5, 4, 0, 20, 5, 4, 0, 21, 5, 4, 0, 22, 5, 4, 0, 23, 5, 4, 0, 24, 5,
- 4, 0, 27, 0, 0, 0, 25, 5,199, 0, 5, 0, 11, 0, 26, 5, 11, 0, 27, 5, 4, 0, 28, 5, 4, 0, 30, 0, 0, 0, 29, 5,
-200, 0, 17, 0, 4, 0, 30, 5, 4, 0, 31, 5, 4, 0, 32, 5, 4, 0, 33, 5, 4, 0, 34, 5, 4, 0, 35, 5, 4, 0, 36, 5,
- 4, 0, 37, 5, 4, 0, 38, 5, 4, 0, 39, 5, 4, 0, 40, 5, 4, 0, 41, 5, 2, 0, 42, 5, 2, 0, 43, 5, 4, 0, 44, 5,
- 4, 0, 45, 5, 4, 0, 67, 0,201, 0, 17, 0, 4, 0, 16, 0, 4, 0, 32, 5, 4, 0, 46, 5, 4, 0, 47, 5, 4, 0, 48, 5,
- 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 51, 5, 7, 0, 52, 5, 4, 0, 53, 5, 4, 0, 92, 0, 4, 0, 54, 5, 4, 0, 55, 5,
- 4, 0, 56, 5, 4, 0, 57, 5, 4, 0, 58, 5, 21, 0, 31, 0,202, 0, 9, 0, 4, 0, 59, 5, 7, 0, 60, 5, 7, 0, 61, 5,
- 7, 0, 62, 5, 4, 0, 63, 5, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 84, 4, 7, 0, 30, 0,203, 0, 13, 0,203, 0, 0, 0,
-203, 0, 1, 0, 0, 0, 19, 0, 63, 0, 64, 5, 64, 0, 65, 5, 4, 0,205, 3, 4, 0, 66, 5, 4, 0, 67, 5, 4, 0, 68, 5,
- 4, 0, 69, 5, 4, 0, 70, 5, 4, 0, 71, 5, 4, 0, 27, 0,204, 0, 13, 0, 0, 0, 72, 5, 0, 0,250, 0, 0, 0, 73, 5,
- 0, 0, 18, 0, 0, 0, 74, 5, 0, 0, 75, 5, 0, 0, 76, 5, 0, 0, 77, 5, 2, 0, 78, 5, 2, 0, 79, 5, 7, 0, 80, 5,
- 0, 0, 81, 5, 0, 0,124, 0,205, 0,106, 0,204, 0, 82, 5,198, 0, 83, 5,199, 0, 84, 5,200, 0, 85, 5,201, 0, 86, 5,
- 4, 0, 36, 3, 4, 0,129, 0, 4, 0,132, 4, 7, 0, 87, 5, 4, 0, 88, 5, 4, 0, 89, 5, 4, 0, 90, 5, 4, 0, 91, 5,
- 2, 0, 18, 0, 2, 0, 92, 5, 7, 0, 93, 5, 7, 0, 94, 5, 7, 0, 95, 5, 7, 0, 96, 5, 7, 0, 97, 5, 2, 0, 98, 5,
- 2, 0, 99, 5, 2, 0,100, 5, 2, 0,101, 5, 2, 0,250, 0, 2, 0,102, 5, 4, 0,103, 5, 2, 0,104, 5, 2, 0,105, 5,
- 2, 0,109, 1, 2, 0,108, 0, 2, 0,106, 5, 2, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, 2, 0,110, 5, 2, 0, 73, 5,
- 2, 0, 72, 5, 2, 0,111, 5, 2, 0, 74, 5, 2, 0,112, 5, 4, 0,113, 5, 4, 0, 87, 1, 4, 0,114, 5, 2, 0,115, 5,
- 2, 0, 67, 0, 2, 0,116, 5, 2, 0,117, 5, 2, 0,118, 5, 2, 0,119, 5, 2, 0,120, 5, 2, 0,121, 5, 19, 0,122, 5,
- 19, 0,123, 5, 18, 0,124, 5, 14, 0,125, 5, 2, 0,126, 5, 2, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,130, 5,
- 7, 0,131, 5, 4, 0,132, 5, 7, 0,133, 5, 7, 0,134, 5, 7, 0,135, 5, 7, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5,
- 2, 0,139, 5, 2, 0,140, 5, 2, 0,141, 5, 2, 0,142, 5, 7, 0,143, 5, 7, 0,144, 5, 7, 0,145, 5, 0, 0,146, 5,
- 4, 0,147, 5, 2, 0,148, 5, 2, 0,247, 1, 0, 0,149, 5, 7, 0,150, 5, 7, 0,151, 5, 0, 0,152, 5, 0, 0,153, 5,
- 0, 0,154, 5, 0, 0,155, 5, 4, 0,156, 5, 2, 0,157, 5, 2, 0,158, 5, 7, 0,159, 5, 7, 0,160, 5, 2, 0,161, 5,
- 2, 0,162, 5, 7, 0,163, 5, 2, 0,164, 5, 2, 0,165, 5, 4, 0,166, 5, 2, 0,167, 5, 2, 0,168, 5, 2, 0,169, 5,
- 2, 0,170, 5, 7, 0,171, 5, 7, 0, 30, 0, 37, 0,172, 5, 0, 0,173, 5,206, 0, 9, 0,206, 0, 0, 0,206, 0, 1, 0,
- 0, 0,174, 5, 2, 0,175, 5, 2, 0,176, 5, 2, 0,177, 5, 2, 0, 67, 0, 7, 0,178, 5, 7, 0, 30, 0,207, 0, 7, 0,
- 2, 0,231, 2, 2, 0, 87, 1, 2, 0, 94, 3, 2, 0,179, 5, 7, 0,180, 5, 7, 0, 30, 0, 37, 0,181, 5,208, 0, 5, 0,
- 7, 0,182, 5, 0, 0, 16, 0, 0, 0, 67, 0, 0, 0, 30, 0, 0, 0,247, 1,209, 0, 15, 0, 7, 0,183, 5, 7, 0,184, 5,
- 7, 0,185, 5, 7, 0,186, 5, 7, 0,187, 5, 7, 0,188, 5, 7, 0,189, 5, 7, 0,190, 5, 7, 0,191, 5, 7, 0,192, 5,
- 4, 0,193, 5, 7, 0,194, 5, 7, 0,195, 5, 2, 0, 67, 0, 2, 0, 30, 0,210, 0, 32, 0,208, 0,196, 5, 2, 0,197, 5,
- 2, 0, 99, 5, 2, 0,100, 5, 2, 0,101, 5, 2, 0,250, 0, 2, 0,102, 5, 2, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5,
- 2, 0,201, 5,207, 0,202, 5, 2, 0,203, 5, 2, 0,104, 5, 7, 0,204, 5,209, 0,205, 5, 7, 0,220, 4, 7, 0,221, 4,
- 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,206, 5, 2, 0,223, 4, 2, 0,224, 4, 2, 0,207, 5, 2, 0, 27, 0, 2, 0,225, 4,
- 2, 0,226, 4, 2, 0,227, 4, 2, 0,228, 4, 2, 0,208, 5, 2, 0, 67, 0, 7, 0,209, 5,211, 0, 6, 0,211, 0, 0, 0,
-211, 0, 1, 0, 4, 0, 61, 4, 0, 0, 19, 0, 4, 0, 18, 0, 27, 0,210, 5,212, 0, 4, 0,213, 0,146, 3, 11, 0,211, 5,
- 0, 0,212, 5, 4, 0, 92, 0,214, 0, 8, 0,212, 0,213, 5, 2, 0, 18, 0, 2, 0, 27, 0, 2, 0,214, 5, 2, 0,215, 5,
- 2, 0,216, 5, 4, 0, 67, 0, 11, 0,217, 5,215, 0, 6, 0, 2, 0,108, 0, 2, 0, 67, 4, 2, 0,218, 5, 2, 0,225, 2,
- 4, 0, 18, 0, 7, 0,209, 2,216, 0, 14, 0, 2, 0, 18, 0, 2, 0,219, 5, 2, 0,220, 5, 2, 0,221, 5,215, 0,222, 5,
- 11, 0,217, 5, 7, 0,223, 5, 7, 0, 56, 0, 4, 0,224, 5, 4, 0,225, 5, 4, 0,226, 5, 4, 0,227, 5, 41, 0,125, 0,
- 27, 0,168, 0,217, 0, 14, 0,212, 0,213, 5, 4, 0, 92, 0, 4, 0,228, 5, 7, 0,229, 5, 7, 0,230, 5, 7, 0,231, 5,
- 4, 0,232, 5, 4, 0,233, 5, 7, 0,234, 5, 7, 0,235, 5, 4, 0,236, 5, 7, 0,237, 5, 7, 0,238, 5, 4, 0, 27, 0,
-218, 0, 1, 0,212, 0,213, 5,219, 0, 7, 0,212, 0,213, 5, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0, 37, 0, 4, 0,239, 5,
- 91, 0,240, 5, 11, 0,217, 5,220, 0, 5, 0,220, 0, 0, 0,220, 0, 1, 0, 0, 0, 19, 0, 7, 0,241, 5, 4, 0, 27, 0,
-221, 0, 6, 0, 4, 0,108, 0, 7, 0,242, 5, 7, 0,178, 1, 7, 0, 40, 2, 4, 0, 18, 0, 4, 0, 27, 0,222, 0, 85, 0,
-219, 0,243, 5,219, 0,244, 5,217, 0,169, 3,218, 0,245, 5, 7, 0,246, 5, 2, 0,247, 5, 2, 0,247, 1, 7, 0,248, 5,
- 7, 0,249, 5, 2, 0, 67, 4, 2, 0,250, 5, 7, 0,251, 5, 7, 0,252, 5, 7, 0,253, 5, 2, 0,254, 5, 2, 0,224, 5,
- 2, 0,255, 5, 2, 0, 0, 6, 2, 0, 1, 6, 2, 0, 2, 6, 7, 0, 3, 6, 7, 0, 4, 6, 7, 0, 5, 6, 2, 0, 6, 6,
- 2, 0, 7, 6, 2, 0, 8, 6, 2, 0, 9, 6, 2, 0, 10, 6, 2, 0, 11, 6, 2, 0, 12, 6, 2, 0, 13, 6,214, 0, 14, 6,
-216, 0, 15, 6, 7, 0, 16, 6, 7, 0, 17, 6, 7, 0, 18, 6, 2, 0, 19, 6, 2, 0, 20, 6, 0, 0, 21, 6, 0, 0, 22, 6,
- 2, 0, 23, 6, 7, 0, 24, 6, 7, 0, 25, 6, 7, 0, 26, 6, 7, 0, 27, 6, 7, 0, 28, 6, 7, 0, 29, 6, 7, 0, 30, 6,
- 7, 0, 31, 6, 7, 0, 32, 6, 7, 0, 33, 6, 2, 0, 34, 6, 0, 0, 35, 6, 0, 0, 36, 6, 0, 0, 37, 6, 0, 0, 38, 6,
- 27, 0, 39, 6, 0, 0, 40, 6, 0, 0, 41, 6, 0, 0, 42, 6, 0, 0, 43, 6, 0, 0, 44, 6, 0, 0, 45, 6, 0, 0, 46, 6,
- 0, 0, 47, 6, 0, 0, 48, 6, 0, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 52, 6, 2, 0, 53, 6, 0, 0, 54, 6,
- 0, 0, 55, 6, 0, 0, 56, 6, 0, 0, 57, 6, 4, 0, 58, 6, 4, 0, 59, 6, 4, 0, 60, 6, 4, 0, 61, 6, 2, 0, 62, 6,
- 2, 0, 67, 0, 4, 0, 63, 6, 7, 0, 64, 6, 7, 0, 65, 6,221, 0, 66, 6,223, 0, 8, 0, 4, 0, 67, 6, 4, 0, 68, 6,
- 4, 0, 69, 6, 4, 0, 70, 6, 4, 0, 71, 6, 4, 0, 72, 6, 4, 0, 53, 0, 4, 0,138, 2,224, 0, 4, 0, 7, 0, 73, 6,
- 0, 0, 74, 6, 0, 0, 75, 6, 2, 0, 18, 0,225, 0, 4, 0, 7, 0, 76, 6, 4, 0, 18, 0, 4, 0, 77, 6, 4, 0, 56, 0,
- 41, 0, 46, 0, 22, 0, 32, 0, 34, 0, 75, 0, 27, 0,210, 5,196, 0, 78, 6, 41, 0, 79, 6, 14, 0, 80, 6,197, 0, 81, 6,
- 27, 0, 82, 6, 7, 0, 83, 6, 7, 0, 84, 6, 7, 0, 85, 6, 7, 0, 86, 6, 4, 0,205, 3, 4, 0, 87, 6, 4, 0, 88, 6,
- 2, 0, 18, 0, 2, 0, 76, 1, 57, 0, 70, 1,226, 0, 89, 6,222, 0, 90, 6,227, 0, 91, 6,205, 0,185, 0,202, 0, 92, 6,
- 14, 0,102, 0, 14, 0, 93, 6, 11, 0, 94, 6, 11, 0, 95, 6, 11, 0, 96, 6, 11, 0, 97, 6, 11, 0, 98, 6,228, 0, 99, 6,
- 2, 0,100, 6, 2, 0,101, 6, 2, 0,251, 0, 2, 0,206, 3, 4, 0,216, 3, 4, 0,102, 6, 14, 0,103, 6,208, 0,196, 5,
-210, 0,104, 6,224, 0,105, 6,178, 0,182, 3,225, 0,106, 6,229, 0,107, 6, 10, 0, 7, 4, 10, 0,108, 6,230, 0, 14, 0,
-230, 0, 0, 0,230, 0, 1, 0, 42, 0,242, 0, 40, 0, 69, 1,229, 0,107, 6,231, 0,109, 6, 7, 0, 97, 2, 7, 0, 98, 2,
- 7, 0,108, 0, 7, 0,110, 6, 2, 0,111, 6, 2, 0, 18, 0, 2, 0,143, 0, 2, 0, 27, 0,232, 0, 39, 0, 7, 0,112, 6,
- 7, 0,113, 6, 7, 0,114, 6, 7, 0,115, 6, 7, 0,116, 6, 7, 0,117, 6, 7, 0,118, 6, 7, 0,119, 6, 7, 0,120, 6,
- 68, 0,121, 6,178, 0,182, 3,232, 0,122, 6,233, 0,123, 6,234, 0,124, 6,235, 0,125, 6,236, 0,126, 6,237, 0,127, 6,
- 7, 0,128, 6, 7, 0,129, 6, 7, 0, 94, 1, 7, 0,130, 6, 7, 0,131, 6, 7, 0,132, 6, 7, 0,133, 6, 7, 0,175, 0,
- 7, 0,134, 6, 0, 0,135, 6, 0, 0,136, 6, 0, 0,111, 6, 0, 0,137, 6, 2, 0,138, 6, 2, 0,139, 6, 7, 0,140, 6,
- 2, 0,141, 6, 2, 0,142, 6, 7, 0,143, 6, 7, 0,144, 6, 7, 0,145, 6, 7, 0,146, 6,238, 0, 51, 0,239, 0, 0, 0,
-239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6, 7, 0,129, 6, 7, 0, 94, 1, 7, 0,151, 6,
- 2, 0,152, 6, 0, 0,211, 2, 4, 0,153, 6, 2, 0,136, 6, 2, 0,111, 6, 27, 0,210, 5, 27, 0,154, 6, 14, 0,155, 6,
-230, 0,156, 6,238, 0,122, 6, 0, 0,157, 6, 4, 0,205, 3, 4, 0, 87, 6, 2, 0,158, 6, 2, 0,159, 6, 2, 0,160, 6,
- 2, 0,161, 6, 2, 0, 18, 0, 2, 0, 32, 2, 7, 0,114, 0, 7, 0,162, 6, 7, 0,163, 6, 7, 0,164, 6, 7, 0,175, 0,
- 7, 0, 83, 6, 2, 0,165, 6, 2, 0,166, 6, 2, 0,167, 6, 0, 0,168, 6, 0, 0,169, 6, 0, 0,170, 6, 0, 0,171, 6,
- 0, 0,172, 6, 14, 0,173, 6, 14, 0,174, 6, 14, 0,175, 6, 2, 0,176, 6, 2, 0,152, 2, 2, 0,177, 6, 0, 0,178, 6,
- 11, 0,179, 6,178, 0,182, 3,240, 0, 24, 0, 19, 0, 37, 0, 19, 0, 63, 0, 18, 0,180, 6, 18, 0,181, 6, 18, 0,182, 6,
- 7, 0,183, 6, 7, 0,184, 6, 7, 0,185, 6, 7, 0,186, 6, 2, 0,187, 6, 2, 0,188, 6, 2, 0,189, 6, 2, 0,190, 6,
- 2, 0,191, 6, 2, 0, 18, 0, 2, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 2, 0,161, 6,
- 7, 0,197, 6, 4, 0,198, 6, 4, 0,199, 6,239, 0, 6, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6,
- 7, 0,149, 6, 2, 0,150, 6,241, 0, 8, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6,
- 2, 0,150, 6, 0, 0,200, 6, 0, 0,124, 0,242, 0, 14, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6,
- 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6,243, 0,202, 6, 14, 0,203, 6, 2, 0, 87, 1, 2, 0,204, 6, 4, 0, 18, 0,
- 7, 0,205, 6, 4, 0,161, 6,244, 0, 21, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6,
- 2, 0,150, 6,240, 0,201, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, 2, 0,209, 6, 2, 0,192, 6, 2, 0,210, 6,
- 2, 0,211, 6, 0, 0, 18, 0, 0, 0, 27, 0, 11, 0, 73, 2, 4, 0,212, 6, 4, 0,213, 6, 22, 0,214, 6, 11, 0,215, 6,
-245, 0, 18, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6,
- 7, 0, 97, 2, 7, 0, 98, 2, 2, 0,206, 6, 2, 0,216, 6, 2, 0,217, 6, 2, 0,218, 6, 4, 0, 18, 0, 7, 0,219, 6,
- 4, 0,111, 6, 4, 0, 27, 0,178, 0,182, 3,246, 0, 16, 0, 0, 0,220, 6, 0, 0,221, 6, 0, 0,222, 6, 0, 0,223, 6,
- 0, 0,224, 6, 0, 0,225, 6, 4, 0,226, 6, 4, 0,227, 6, 4, 0,228, 6, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,229, 6,
- 2, 0,230, 6, 2, 0,190, 1, 2, 0,231, 6, 0, 0,232, 6,247, 0, 16, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6,
- 4, 0,148, 6, 4, 0,233, 6,246, 0,234, 6,248, 0,235, 6, 14, 0,236, 6, 14, 0,237, 6,249, 0,238, 6,237, 0,239, 6,
-250, 0,240, 6, 2, 0,241, 6, 2, 0,242, 6, 2, 0,243, 6, 2, 0, 30, 0,251, 0, 15, 0,239, 0, 0, 0,239, 0, 1, 0,
- 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6, 14, 0,244, 6,252, 0,245, 6, 0, 0,246, 6,
-253, 0,247, 6, 2, 0, 18, 0, 2, 0,248, 6, 2, 0,249, 6, 2, 0,250, 6,254, 0, 25, 0,239, 0, 0, 0,239, 0, 1, 0,
- 14, 0,147, 6, 4, 0,148, 6, 4, 0, 18, 0, 42, 0,244, 2, 40, 0, 69, 1, 54, 0,251, 6,255, 0,252, 6, 0, 1,253, 6,
-178, 0,182, 3, 7, 0,254, 6, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,219, 6, 7, 0,255, 6, 7, 0, 0, 7, 2, 0, 1, 7,
- 2, 0, 27, 0, 2, 0, 2, 7, 2, 0, 3, 7, 0, 0, 4, 7, 0, 0, 5, 7, 0, 0, 6, 7, 0, 0,161, 6, 1, 1, 11, 0,
-239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6, 2, 0,204, 6, 2, 0, 18, 0,
- 4, 0, 27, 0,243, 0,202, 6,240, 0,201, 6, 2, 1, 31, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6,
- 7, 0,149, 6, 2, 0,150, 6, 37, 0, 7, 7, 4, 0, 8, 7, 4, 0, 9, 7, 2, 0, 92, 0, 2, 0, 10, 7, 2, 0, 11, 7,
- 0, 0, 12, 7, 0, 0, 13, 7, 4, 0, 14, 7, 4, 0, 15, 7, 4, 0, 16, 7, 2, 0, 17, 7, 2, 0, 18, 7, 2, 0, 19, 7,
- 2, 0, 20, 7, 7, 0, 21, 7, 18, 0, 22, 7, 18, 0, 23, 7, 4, 0, 24, 7, 4, 0, 25, 7, 0, 0, 26, 7, 0, 0, 27, 7,
- 2, 0, 28, 7, 0, 0,211, 2, 11, 0, 29, 7, 3, 1, 10, 0, 22, 0, 32, 0, 11, 0, 30, 7, 11, 0, 31, 7, 11, 0, 32, 7,
- 11, 0, 33, 7, 11, 0, 34, 7, 4, 0, 92, 0, 4, 0, 35, 7, 0, 0, 36, 7, 0, 0, 37, 7, 4, 1, 10, 0,239, 0, 0, 0,
-239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 3, 1, 38, 7, 2, 0, 92, 0, 2, 0, 10, 7, 4, 0, 67, 0,
- 11, 0, 39, 7, 5, 1, 3, 0, 5, 1, 0, 0, 5, 1, 1, 0, 7, 0, 40, 7, 6, 1, 9, 0,239, 0, 0, 0,239, 0, 1, 0,
- 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6,240, 0,201, 6, 14, 0, 41, 7, 4, 0, 42, 7, 4, 0, 18, 0, 7, 1, 27, 0,
-239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6,240, 0,201, 6, 22, 0, 43, 7,
- 22, 0, 81, 0, 2, 0, 18, 0, 2, 0, 67, 0, 7, 0, 44, 7, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0,219, 6, 7, 0, 45, 7,
- 7, 0, 46, 7, 7, 0, 47, 7, 57, 0, 70, 1, 57, 0, 48, 7, 4, 0, 49, 7, 2, 0, 50, 7, 2, 0, 51, 7, 2, 0,251, 0,
- 2, 0, 86, 1, 14, 0, 52, 7,178, 0,182, 3, 8, 1, 10, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6,
- 7, 0,149, 6, 2, 0,150, 6, 2, 0, 18, 0, 2, 0,214, 3, 4, 0, 27, 0,178, 0,182, 3, 9, 1, 7, 0, 9, 1, 0, 0,
- 9, 1, 1, 0, 4, 0, 53, 7, 4, 0, 22, 0, 0, 0, 86, 0, 4, 0, 54, 7, 4, 0, 16, 0, 10, 1, 14, 0,239, 0, 0, 0,
-239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6, 2, 0,150, 6, 4, 0, 11, 7, 4, 0, 27, 0, 14, 0, 55, 7,
- 14, 0, 56, 7, 0, 0, 57, 7, 0, 0, 58, 7, 4, 0, 59, 7, 4, 0, 60, 7, 11, 1, 6, 0,239, 0, 0, 0,239, 0, 1, 0,
- 14, 0,147, 6, 4, 0,148, 6, 4, 0, 27, 0, 0, 0, 61, 7, 12, 1, 25, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6,
- 4, 0,148, 6, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0, 62, 7, 7, 0, 63, 7, 7, 0,219, 6,231, 0, 64, 7,229, 0,107, 6,
- 13, 1,252, 6, 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,111, 6, 4, 0, 65, 7, 7, 0, 66, 7, 7, 0,148, 3, 7, 0, 94, 3,
- 4, 0, 27, 0, 7, 0, 67, 7, 7, 0, 68, 7, 4, 0, 69, 7, 4, 0, 30, 0, 11, 0, 70, 7, 14, 1, 7, 0, 14, 1, 0, 0,
- 14, 1, 1, 0, 0, 0, 71, 7, 2, 0, 72, 7, 2, 0, 73, 7, 2, 0, 74, 7, 2, 0, 27, 0, 15, 1, 12, 0, 2, 0, 73, 7,
- 2, 0, 75, 7, 2, 0, 76, 7, 0, 0,211, 2, 2, 0, 77, 7, 2, 0, 78, 7, 2, 0, 79, 7, 2, 0, 80, 7, 2, 0, 81, 7,
- 2, 0,192, 6, 7, 0, 82, 7, 7, 0, 83, 7, 16, 1, 18, 0, 16, 1, 0, 0, 16, 1, 1, 0, 0, 0, 19, 0, 15, 1, 84, 7,
- 15, 1, 85, 7, 15, 1, 86, 7, 15, 1, 87, 7, 7, 0, 88, 7, 2, 0, 89, 7, 2, 0, 90, 7, 2, 0, 91, 7, 2, 0, 92, 7,
- 2, 0, 93, 7, 2, 0, 94, 7, 2, 0, 95, 7, 2, 0, 96, 7, 2, 0, 97, 7, 2, 0, 27, 0, 17, 1, 10, 0, 0, 0, 98, 7,
- 0, 0, 99, 7, 0, 0,100, 7, 0, 0,101, 7, 0, 0,102, 7, 0, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, 2, 0,106, 7,
- 2, 0,107, 7, 18, 1, 8, 0, 0, 0,108, 7, 0, 0,109, 7, 0, 0,110, 7, 0, 0,111, 7, 0, 0,112, 7, 0, 0,113, 7,
- 7, 0,110, 6, 7, 0, 27, 0, 19, 1, 3, 0, 0, 0,114, 7, 2, 0,115, 7, 2, 0, 27, 0, 20, 1, 22, 0, 17, 1,116, 7,
- 17, 1,117, 7, 17, 1,118, 7, 17, 1,119, 7, 17, 1,120, 7, 17, 1,121, 7, 17, 1,122, 7, 17, 1,123, 7, 17, 1,124, 7,
- 17, 1,125, 7, 17, 1,126, 7, 17, 1,127, 7, 17, 1,128, 7, 17, 1,129, 7, 17, 1,130, 7, 17, 1,131, 7, 17, 1,132, 7,
- 18, 1,133, 7, 19, 1,134, 7, 0, 0,135, 7, 7, 0,136, 7, 7, 0, 27, 0, 21, 1,122, 0, 0, 0,137, 7, 0, 0,138, 7,
- 0, 0,102, 7, 0, 0,139, 7, 0, 0,114, 7, 0, 0,140, 7, 0, 0,141, 7, 0, 0,142, 7, 0, 0,143, 7, 0, 0,144, 7,
- 0, 0,145, 7, 0, 0,146, 7, 0, 0,147, 7, 0, 0,148, 7, 0, 0,149, 7, 0, 0,150, 7, 0, 0,151, 7, 0, 0,152, 7,
- 0, 0,153, 7, 0, 0,154, 7, 0, 0,155, 7, 0, 0,156, 7, 0, 0,157, 7, 0, 0,158, 7, 0, 0,159, 7, 0, 0,160, 7,
- 0, 0,161, 7, 0, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, 0, 0,165, 7, 0, 0,166, 7, 0, 0,167, 7, 0, 0,168, 7,
- 0, 0,169, 7, 0, 0,170, 7, 0, 0,171, 7, 0, 0,172, 7, 0, 0,173, 7, 0, 0,174, 7, 0, 0,175, 7, 0, 0,176, 7,
- 0, 0,177, 7, 0, 0,178, 7, 0, 0,179, 7, 0, 0,180, 7, 0, 0,181, 7, 0, 0,182, 7, 0, 0,183, 7, 0, 0,184, 7,
- 0, 0,185, 7, 0, 0,186, 7, 0, 0,187, 7, 0, 0,188, 7, 0, 0,189, 7, 0, 0,190, 7, 0, 0,191, 7, 0, 0,192, 7,
- 0, 0,193, 7, 0, 0,194, 7, 0, 0,195, 7, 0, 0,196, 7, 0, 0,197, 7, 0, 0,198, 7, 0, 0,199, 7, 0, 0,200, 7,
- 0, 0,201, 7, 0, 0,202, 7, 0, 0,203, 7, 0, 0,204, 7, 0, 0,205, 7, 0, 0,206, 7, 0, 0,207, 7, 0, 0,208, 7,
- 0, 0,209, 7, 0, 0,210, 7, 0, 0,211, 7, 0, 0,212, 7, 0, 0,213, 7, 0, 0,214, 7, 0, 0,215, 7, 0, 0,216, 7,
- 0, 0,217, 7, 0, 0,218, 7, 0, 0,219, 7, 0, 0,220, 7, 0, 0,221, 7, 0, 0,222, 7, 0, 0,223, 7, 0, 0,224, 7,
- 0, 0,225, 7, 0, 0,226, 7, 0, 0,227, 7, 0, 0,228, 7, 0, 0,229, 7, 0, 0,230, 7, 0, 0,231, 7, 0, 0,232, 7,
- 0, 0,233, 7, 0, 0,234, 7, 0, 0,235, 7, 0, 0,236, 7, 0, 0,237, 7, 0, 0,238, 7, 0, 0,239, 7, 0, 0,240, 7,
- 0, 0,241, 7, 0, 0,242, 7, 0, 0,243, 7, 0, 0,244, 7, 0, 0,245, 7, 0, 0,246, 7, 0, 0,247, 7, 0, 0,248, 7,
- 0, 0,249, 7, 0, 0,250, 7, 0, 0,251, 7, 0, 0,252, 7, 0, 0,253, 7, 0, 0,254, 7, 0, 0,255, 7, 0, 0, 0, 8,
- 22, 1, 5, 0, 0, 0, 1, 8, 0, 0,160, 7, 0, 0,166, 7, 2, 0, 18, 0, 2, 0, 27, 0, 23, 1, 24, 0, 23, 1, 0, 0,
- 23, 1, 1, 0, 0, 0,174, 5, 20, 1, 2, 8, 21, 1, 3, 8, 21, 1, 4, 8, 21, 1, 5, 8, 21, 1, 6, 8, 21, 1, 7, 8,
- 21, 1, 8, 8, 21, 1, 9, 8, 21, 1, 10, 8, 21, 1, 11, 8, 21, 1, 12, 8, 21, 1, 13, 8, 21, 1, 14, 8, 21, 1, 15, 8,
- 21, 1, 16, 8, 21, 1, 17, 8, 21, 1, 18, 8, 21, 1, 19, 8, 22, 1, 20, 8, 4, 0, 21, 8, 4, 0, 27, 0, 24, 1, 3, 0,
- 24, 1, 0, 0, 24, 1, 1, 0, 0, 0, 22, 8, 25, 1, 5, 0, 4, 0, 18, 0, 4, 0, 27, 0, 7, 0,151, 2, 7, 0, 23, 8,
- 7, 0, 47, 2, 26, 1, 95, 0, 4, 0, 18, 0, 4, 0, 24, 8, 4, 0, 25, 8, 0, 0, 26, 8, 0, 0, 27, 8, 0, 0, 28, 8,
- 0, 0, 29, 8, 0, 0, 30, 8, 0, 0, 31, 8, 0, 0, 32, 8, 0, 0, 33, 8, 0, 0, 34, 8, 0, 0, 35, 8, 4, 0, 36, 8,
- 2, 0, 37, 8, 2, 0, 38, 8, 2, 0, 39, 8, 2, 0, 40, 8, 4, 0, 41, 8, 4, 0, 42, 8, 4, 0, 43, 8, 4, 0, 44, 8,
- 2, 0, 45, 8, 2, 0, 46, 8, 4, 0, 47, 8, 4, 0, 48, 8, 4, 0, 49, 8, 4, 0, 50, 8, 4, 0, 51, 8, 4, 0, 55, 7,
- 4, 0, 52, 8, 2, 0, 53, 8, 2, 0, 54, 8, 2, 0, 55, 8, 2, 0, 56, 8, 14, 0, 57, 8, 14, 0, 58, 8, 14, 0, 59, 8,
- 14, 0, 60, 8, 14, 0, 61, 8, 14, 0, 62, 8, 0, 0, 63, 8, 2, 0, 64, 8, 2, 0, 65, 8, 2, 0, 66, 8, 2, 0, 67, 8,
- 2, 0, 68, 8, 2, 0, 69, 8, 2, 0, 70, 8, 2, 0, 71, 8, 25, 1, 72, 8, 2, 0, 73, 8, 2, 0, 74, 8, 2, 0, 75, 8,
- 2, 0, 76, 8, 2, 0, 77, 8, 2, 0, 78, 8, 2, 0, 79, 8, 2, 0, 80, 8, 4, 0, 81, 8, 4, 0, 82, 8, 2, 0, 83, 8,
- 2, 0, 84, 8, 2, 0, 85, 8, 2, 0, 86, 8, 2, 0, 87, 8, 2, 0, 88, 8, 2, 0, 89, 8, 2, 0, 90, 8, 2, 0, 91, 8,
- 2, 0, 92, 8, 2, 0, 93, 8, 2, 0, 94, 8, 2, 0, 95, 8, 2, 0, 96, 8, 2, 0, 97, 8, 2, 0, 98, 8, 2, 0, 99, 8,
- 2, 0,100, 8, 7, 0,101, 8, 4, 0,102, 8, 7, 0,103, 8, 2, 0, 19, 6, 2, 0, 20, 6, 2, 0,104, 8, 2, 0,105, 8,
- 50, 0,106, 8, 7, 0,107, 8, 2, 0,108, 8, 2, 0,247, 1, 0, 0,109, 8, 4, 0,110, 8, 4, 0,111, 8, 7, 0,112, 8,
- 7, 0, 27, 0, 27, 1, 24, 0, 22, 0, 32, 0, 14, 0,113, 8, 14, 0,114, 8, 14, 0,115, 8, 14, 0,147, 6, 41, 0,125, 0,
- 41, 0,116, 8, 4, 0,117, 8, 4, 0, 67, 0, 2, 0,118, 8, 2, 0,119, 8, 2, 0,120, 8, 2, 0,121, 8, 2, 0,122, 8,
- 2, 0,123, 8, 2, 0,124, 8, 2, 0,125, 8, 2, 0,126, 8, 2, 0,127, 8, 2, 0,128, 8, 2, 0, 27, 0,237, 0,129, 8,
- 11, 0,130, 8, 2, 0,131, 8, 28, 1, 5, 0, 28, 1, 0, 0, 28, 1, 1, 0, 28, 1,132, 8, 15, 0,133, 8, 4, 0, 18, 0,
- 29, 1, 7, 0, 29, 1, 0, 0, 29, 1, 1, 0, 28, 1,134, 8, 28, 1,135, 8, 2, 0,123, 5, 2, 0, 18, 0, 4, 0, 27, 0,
- 30, 1, 25, 0, 30, 1, 0, 0, 30, 1, 1, 0, 31, 1,136, 8, 32, 1,240, 6, 0, 0,137, 8, 0, 0,138, 8, 0, 0,139, 8,
- 2, 0,140, 8, 2, 0,141, 8, 2, 0,142, 8, 2, 0,143, 8, 2, 0,144, 8, 2, 0, 27, 0, 2, 0, 18, 0, 2, 0,145, 8,
- 2, 0,146, 8, 2, 0,147, 8, 4, 0,148, 8, 30, 1,149, 8, 11, 0,150, 8, 4, 0,151, 8, 4, 0,152, 8, 4, 0,153, 8,
- 4, 0,154, 8, 0, 0,155, 8, 33, 1, 22, 0, 33, 1, 0, 0, 33, 1, 1, 0, 28, 1,134, 8, 28, 1,135, 8, 28, 1,156, 8,
- 28, 1,157, 8, 27, 1,158, 8, 18, 0, 51, 0, 0, 0,148, 6, 0, 0,159, 8, 2, 0,193, 6, 2, 0,194, 6, 2, 0,160, 8,
- 2, 0, 27, 0, 2, 0,122, 8, 2, 0, 54, 7, 2, 0, 18, 0, 34, 1,136, 8, 14, 0,161, 8, 14, 0,147, 6, 14, 0,162, 8,
- 14, 0,163, 8, 35, 1, 24, 0, 35, 1, 0, 0, 35, 1, 1, 0,240, 0,201, 6, 18, 0,164, 8, 18, 0,165, 8, 2, 0,193, 6,
- 2, 0,194, 6, 2, 0,166, 8, 2, 0,167, 8, 2, 0,168, 8, 2, 0, 18, 0, 7, 0, 93, 2, 2, 0,142, 8, 2, 0,143, 8,
- 2, 0,121, 8, 2, 0,169, 8, 2, 0,126, 8, 2, 0, 86, 1, 36, 1,136, 8, 14, 0,170, 8, 14, 0,171, 8, 14, 0,162, 8,
- 0, 0,172, 8, 11, 0,173, 8, 37, 1, 14, 0, 0, 0,174, 8, 2, 0,175, 8, 2, 0,176, 8, 2, 0,177, 8, 2, 0,178, 8,
- 2, 0,112, 5, 2, 0,179, 8, 27, 1,180, 8, 41, 0,181, 8, 4, 0,182, 8, 4, 0,183, 8, 4, 0,184, 8, 4, 0, 27, 0,
- 0, 0, 71, 7, 38, 1, 3, 0, 0, 0,185, 8, 4, 0,186, 8, 4, 0,187, 8, 39, 1, 4, 0, 4, 0, 8, 7, 4, 0,188, 8,
- 4, 0, 14, 7, 4, 0,189, 8, 40, 1, 2, 0, 4, 0,190, 8, 4, 0,191, 8, 41, 1, 5, 0, 7, 0,192, 8, 7, 0,193, 8,
- 7, 0,194, 8, 4, 0, 18, 0, 4, 0, 27, 0, 42, 1, 7, 0, 0, 0,195, 8, 0, 0,222, 6, 44, 0,138, 0, 2, 0,196, 8,
- 2, 0, 74, 5, 2, 0,197, 8, 2, 0,198, 8, 43, 1, 12, 0, 43, 1, 0, 0, 43, 1, 1, 0, 4, 0, 28, 0, 4, 0,199, 8,
- 4, 0,200, 8, 4, 0,201, 8, 38, 1,202, 8, 0, 0,195, 8, 42, 1,176, 3, 39, 1,203, 8, 40, 1,204, 8, 41, 1,205, 8,
- 44, 1, 12, 0, 0, 0, 35, 0, 11, 0,227, 0, 0, 0,228, 0, 4, 0,231, 0, 4, 0,239, 0, 11, 0,232, 0, 7, 0,234, 0,
- 7, 0,235, 0, 11, 0,206, 8, 11, 0,207, 8, 11, 0,236, 0, 11, 0,238, 0, 45, 1, 50, 0, 45, 1, 0, 0, 45, 1, 1, 0,
- 11, 0,208, 8, 11, 0, 25, 0, 0, 0, 19, 0, 4, 0, 18, 0, 4, 0, 16, 0, 4, 0, 22, 0, 4, 0, 90, 0, 4, 0,209, 8,
- 4, 0,210, 8, 4, 0,200, 8, 4, 0,201, 8, 4, 0,211, 8, 4, 0,250, 0, 4, 0,212, 8, 4, 0,213, 8, 7, 0,214, 8,
- 7, 0,215, 8, 7, 0,216, 8, 2, 0,217, 8, 2, 0,218, 8, 4, 0,219, 8, 4, 0,220, 8, 43, 1,221, 8, 31, 0, 80, 0,
- 41, 0,125, 0, 27, 0,222, 8, 44, 0,138, 0,229, 0,107, 6, 7, 0,223, 8, 7, 0,224, 8, 44, 1, 71, 1, 45, 1,225, 8,
- 45, 1,226, 8, 45, 1,227, 8, 14, 0,228, 8, 46, 1,229, 8, 11, 0,230, 8, 7, 0, 84, 4, 7, 0,231, 8, 7, 0,232, 8,
- 7, 0,233, 8, 11, 0,234, 8, 4, 0,235, 8, 4, 0,236, 8, 4, 0,237, 8, 7, 0,238, 8, 4, 0,129, 0, 4, 0, 27, 0,
- 47, 1, 4, 0, 47, 1, 0, 0, 47, 1, 1, 0, 14, 0,239, 8, 45, 1,240, 8,226, 0, 11, 0, 14, 0,241, 8, 14, 0,228, 8,
- 14, 0,242, 8, 45, 1,243, 8, 0, 0,244, 8, 0, 0,245, 8, 4, 0,246, 8, 4, 0,247, 8, 4, 0,248, 8, 4, 0, 27, 0,
- 19, 0,249, 8, 48, 1, 4, 0, 7, 0,250, 8, 7, 0, 94, 3, 2, 0,251, 8, 2, 0,252, 8, 49, 1, 6, 0, 7, 0,253, 8,
- 7, 0,254, 8, 7, 0,255, 8, 7, 0, 0, 9, 4, 0, 1, 9, 4, 0, 2, 9, 50, 1, 8, 0, 7, 0, 3, 9, 7, 0, 4, 9,
- 7, 0, 5, 9, 7, 0, 6, 9, 7, 0, 7, 9, 4, 0,250, 2, 4, 0, 8, 9, 4, 0, 9, 9, 51, 1, 2, 0, 7, 0,182, 5,
- 7, 0, 27, 0, 52, 1, 5, 0, 7, 0, 10, 9, 7, 0, 11, 9, 4, 0, 92, 0, 4, 0,212, 2, 4, 0, 12, 9, 53, 1, 6, 0,
- 53, 1, 0, 0, 53, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0, 56, 0, 54, 1, 8, 0, 54, 1, 0, 0,
- 54, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0, 56, 0, 7, 0, 22, 0, 7, 0,129, 0, 55, 1, 45, 0,
- 55, 1, 0, 0, 55, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0,246, 0, 2, 0,126, 4, 2, 0, 14, 9,
- 7, 0, 15, 9, 7, 0, 91, 0, 7, 0, 7, 3, 4, 0, 16, 9, 4, 0, 82, 0, 4, 0,214, 2, 7, 0, 17, 9, 7, 0, 18, 9,
- 7, 0, 19, 9, 7, 0, 20, 9, 7, 0, 21, 9, 7, 0, 22, 9, 7, 0, 4, 3, 7, 0, 68, 1, 7, 0, 23, 9, 7, 0, 24, 9,
- 7, 0, 27, 0, 7, 0, 25, 9, 7, 0, 26, 9, 7, 0, 27, 9, 2, 0, 28, 9, 2, 0, 29, 9, 2, 0, 30, 9, 2, 0, 31, 9,
- 2, 0, 32, 9, 2, 0, 33, 9, 2, 0, 34, 9, 2, 0, 35, 9, 2, 0, 32, 2, 2, 0, 36, 9, 2, 0, 29, 2, 2, 0, 37, 9,
- 0, 0, 38, 9, 0, 0, 39, 9, 7, 0,244, 0, 56, 1, 40, 9, 64, 0,250, 1, 57, 1, 16, 0, 57, 1, 0, 0, 57, 1, 1, 0,
- 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 13, 9, 2, 0,246, 0, 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 1, 3, 7, 0, 82, 2,
- 7, 0, 2, 3, 7, 0, 3, 3, 7, 0, 41, 9, 7, 0, 4, 3, 7, 0, 6, 3, 7, 0, 7, 3,253, 0, 5, 0, 2, 0, 16, 0,
- 2, 0, 42, 9, 2, 0, 18, 0, 2, 0, 43, 9, 22, 0, 43, 7,252, 0, 3, 0, 4, 0, 69, 0, 4, 0, 44, 9,253, 0, 2, 0,
- 58, 1, 7, 0, 58, 1, 0, 0, 58, 1, 1, 0, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 21, 0, 11, 0, 45, 9,
- 59, 1, 5, 0, 0, 0, 19, 0, 7, 0, 94, 1, 7, 0, 46, 9, 4, 0, 47, 9, 4, 0, 27, 0, 60, 1, 4, 0, 2, 0, 16, 0,
- 2, 0, 18, 0, 2, 0, 67, 0, 2, 0, 30, 0, 61, 1, 4, 0, 0, 0, 19, 0, 63, 0, 48, 9, 7, 0, 94, 1, 7, 0, 27, 0,
- 62, 1, 6, 0, 2, 0, 49, 9, 2, 0, 50, 9, 2, 0, 16, 0, 2, 0, 51, 9, 0, 0, 52, 9, 0, 0, 53, 9, 63, 1, 5, 0,
- 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, 0, 0, 54, 9, 0, 0, 55, 9, 64, 1, 3, 0, 4, 0, 16, 0, 4, 0, 27, 0,
- 0, 0, 19, 0, 65, 1, 4, 0, 2, 0, 56, 9, 2, 0, 57, 9, 2, 0, 18, 0, 2, 0, 27, 0, 66, 1, 6, 0, 0, 0, 19, 0,
- 0, 0, 58, 9, 2, 0, 59, 9, 2, 0, 4, 3, 2, 0, 87, 1, 2, 0, 30, 0, 67, 1, 5, 0, 0, 0, 19, 0, 7, 0, 94, 3,
- 7, 0,217, 4, 2, 0, 18, 0, 2, 0,226, 2, 68, 1, 3, 0, 0, 0, 19, 0, 4, 0,214, 2, 4, 0, 56, 9, 69, 1, 7, 0,
- 0, 0, 19, 0, 7, 0,217, 4, 0, 0, 60, 9, 0, 0, 61, 9, 2, 0, 87, 1, 2, 0, 67, 0, 4, 0, 62, 9, 70, 1, 4, 0,
- 0, 0, 63, 9, 0, 0, 64, 9, 4, 0, 16, 0, 7, 0,230, 2, 71, 1, 3, 0, 27, 0, 65, 9, 0, 0, 66, 9, 0, 0, 67, 9,
- 72, 1, 18, 0, 72, 1, 0, 0, 72, 1, 1, 0, 2, 0, 16, 0, 2, 0, 68, 9, 2, 0, 18, 0, 2, 0, 69, 9, 2, 0, 70, 9,
- 2, 0, 71, 9, 2, 0, 67, 0, 2, 0, 30, 0, 0, 0, 19, 0, 11, 0, 2, 0, 73, 1, 72, 9, 27, 0, 44, 0, 2, 0,218, 5,
- 2, 0,176, 2, 2, 0, 73, 9, 2, 0, 27, 0, 74, 1, 11, 0, 0, 0, 19, 0, 0, 0, 16, 0, 0, 0, 74, 9, 2, 0, 18, 0,
- 2, 0,226, 2, 2, 0, 75, 9, 4, 0, 76, 9, 4, 0, 77, 9, 4, 0, 78, 9, 4, 0, 79, 9, 4, 0, 80, 9, 75, 1, 1, 0,
- 0, 0, 81, 9, 76, 1, 4, 0, 37, 0, 7, 7, 0, 0, 22, 8, 4, 0, 87, 1, 4, 0, 18, 0, 73, 1, 18, 0, 73, 1, 0, 0,
- 73, 1, 1, 0, 73, 1, 82, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 83, 9, 2, 0, 71, 9, 2, 0, 68, 9, 2, 0, 84, 9,
- 2, 0, 30, 0, 2, 0,247, 1, 0, 0, 19, 0, 11, 0, 2, 0, 77, 1, 72, 9, 72, 1, 85, 9, 2, 0, 14, 0, 2, 0, 86, 9,
- 4, 0, 87, 9, 78, 1, 3, 0, 4, 0,240, 2, 4, 0, 27, 0, 27, 0, 44, 0, 79, 1, 15, 0,176, 0, 88, 9, 2, 0, 16, 0,
- 2, 0, 18, 0, 7, 0, 15, 9, 7, 0, 91, 0, 0, 0, 19, 0, 0, 0, 89, 9, 2, 0, 90, 9, 2, 0, 91, 9, 2, 0,134, 0,
- 2, 0, 92, 9, 2, 0, 93, 9, 2, 0, 27, 0, 7, 0, 94, 9, 7, 0, 95, 9, 80, 1, 8, 0, 7, 0, 96, 9, 7, 0, 97, 9,
- 7, 0, 98, 9, 7, 0, 99, 9, 7, 0,100, 9, 7, 0,101, 9, 7, 0,102, 9, 7, 0,103, 9, 81, 1, 13, 0, 2, 0, 18, 0,
- 2, 0,104, 9, 4, 0, 67, 0, 4, 0, 30, 0, 2, 0,178, 6, 7, 0, 84, 4, 7, 0,231, 8, 46, 1,229, 8, 80, 1,105, 9,
- 2, 0, 16, 0, 2, 0,117, 5, 2, 0,216, 3, 2, 0,106, 9, 82, 1, 11, 0, 4, 0,240, 2, 2, 0, 16, 0, 2, 0, 18, 0,
- 27, 0, 44, 0, 79, 0,107, 9, 0, 0, 19, 0, 7, 0,108, 9, 7, 0,109, 9, 7, 0,222, 3, 2, 0,110, 9, 2, 0,111, 9,
- 83, 1, 5, 0, 2, 0, 16, 0, 2, 0, 67, 0, 4, 0, 27, 0, 41, 0,125, 0, 27, 0,210, 5, 84, 1, 5, 0, 4, 0, 27, 0,
- 4, 0, 16, 0, 0, 0, 19, 0, 0, 0, 54, 9, 27, 0, 44, 0, 85, 1, 13, 0, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 68, 9,
- 2, 0,223, 3, 7, 0,112, 9, 7, 0,113, 9, 7, 0, 86, 1, 7, 0,114, 9, 7, 0,192, 3, 7, 0,196, 3, 7, 0,115, 9,
- 7, 0,116, 9, 27, 0,117, 9, 86, 1, 10, 0, 2, 0, 18, 0, 2, 0, 16, 0, 7, 0, 15, 9, 7, 0, 91, 0, 0, 0, 19, 0,
- 0, 0, 89, 9, 2, 0, 67, 0, 2, 0, 30, 0, 2, 0,247, 1, 2, 0,117, 5, 87, 1, 8, 0, 27, 0, 44, 0, 7, 0, 1, 3,
- 7, 0,118, 9, 7, 0,119, 9, 7, 0,223, 3, 2, 0, 67, 0, 2, 0,226, 2, 7, 0, 30, 0, 88, 1, 12, 0, 2, 0, 16, 0,
- 2, 0, 87, 1, 2, 0, 18, 0, 2, 0, 4, 3, 2, 0,240, 2, 2, 0,120, 9, 4, 0, 27, 0, 7, 0,121, 9, 7, 0,122, 9,
- 7, 0,123, 9, 7, 0,124, 9, 0, 0,125, 9, 89, 1, 9, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 15, 9, 4, 0, 91, 0,
- 0, 0, 19, 0, 2, 0, 86, 1, 2, 0, 63, 0, 2, 0,126, 9, 2, 0,127, 9, 90, 1, 7, 0, 4, 0,214, 2, 4, 0,128, 9,
- 4, 0,129, 9, 4, 0,130, 9, 7, 0,131, 9, 7, 0,132, 9, 0, 0, 60, 9, 91, 1, 7, 0, 0, 0,133, 9, 27, 0,134, 9,
- 0, 0, 66, 9, 2, 0,135, 9, 2, 0, 67, 0, 4, 0, 30, 0, 0, 0, 67, 9, 92, 1, 6, 0, 2, 0, 18, 0, 2, 0, 16, 0,
- 4, 0, 15, 9, 4, 0, 91, 0, 0, 0,136, 9, 0, 0,137, 9, 93, 1, 1, 0, 4, 0, 18, 0, 94, 1, 6, 0, 0, 0, 94, 0,
- 2, 0, 16, 0, 2, 0, 18, 0, 4, 0,138, 9, 7, 0,139, 9, 37, 0, 7, 7, 95, 1, 4, 0, 0, 0,181, 2, 2, 0, 18, 0,
- 4, 0, 16, 0, 27, 0, 44, 0, 96, 1, 2, 0, 4, 0, 16, 0, 4, 0,182, 6, 97, 1, 8, 0, 0, 0, 63, 9, 0, 0, 64, 9,
- 4, 0, 16, 0, 7, 0, 40, 2, 7, 0,140, 9, 7, 0, 27, 0, 27, 0, 70, 3, 27, 0,141, 9, 98, 1, 11, 0, 0, 0, 55, 6,
- 0, 0, 18, 0, 2, 0,142, 9, 4, 0, 16, 0, 7, 0, 94, 1, 7, 0,143, 9, 7, 0,144, 9, 7, 0,145, 9, 4, 0,146, 9,
- 27, 0, 70, 3, 27, 0,147, 9, 77, 1, 10, 0, 77, 1, 0, 0, 77, 1, 1, 0, 77, 1, 82, 9, 2, 0, 16, 0, 2, 0, 18, 0,
- 2, 0, 68, 9, 2, 0,148, 9, 0, 0, 19, 0, 11, 0, 2, 0, 27, 0, 44, 0, 46, 1, 17, 0, 22, 0, 32, 0, 0, 0, 35, 0,
- 38, 0,153, 0, 11, 0,227, 0, 38, 0,149, 9, 31, 0, 80, 0, 7, 0, 84, 4, 7, 0,150, 9, 7, 0,231, 8, 7, 0, 96, 9,
- 7, 0, 97, 9, 7, 0,151, 9, 4, 0, 92, 0, 4, 0, 27, 0, 11, 0,152, 9, 11, 0,153, 9, 11, 0,154, 9, 99, 1, 6, 0,
- 99, 1, 0, 0, 99, 1, 1, 0, 27, 0, 44, 0, 11, 0,155, 9, 2, 0,251, 0, 0, 0,211, 2, 64, 0, 4, 0, 22, 0, 32, 0,
- 14, 0,156, 9, 4, 0,134, 0, 7, 0,157, 9,100, 1, 28, 0,100, 1, 0, 0,100, 1, 1, 0, 21, 0,158, 9,100, 1, 38, 0,
- 14, 0,159, 9, 0, 0, 19, 0, 7, 0,160, 9, 7, 0,161, 9, 7, 0,162, 9, 7, 0,163, 9, 4, 0, 18, 0, 7, 0,164, 9,
- 7, 0,165, 9, 7, 0,166, 9, 7, 0,167, 9, 7, 0, 94, 1, 7, 0, 40, 2, 7, 0,168, 9, 7, 0,212, 2, 7, 0,169, 9,
- 7, 0,170, 9, 7, 0,171, 9, 7, 0,172, 9, 7, 0,173, 9, 7, 0,176, 0, 4, 0,134, 0, 2, 0,255, 5, 2, 0,174, 9,
-101, 1, 27, 0, 22, 0, 32, 0, 34, 0, 75, 0, 14, 0,175, 9, 14, 0,176, 9, 14, 0,177, 9,100, 1,178, 9, 11, 0,179, 9,
- 11, 0,180, 9, 4, 0, 18, 0, 4, 0,158, 6, 4, 0,181, 9, 4, 0, 27, 0, 2, 0, 8, 3, 2, 0,212, 6, 4, 0,182, 9,
- 4, 0,134, 0, 4, 0,183, 9, 2, 0,184, 9, 2, 0,185, 9, 2, 0,186, 9, 2, 0,187, 9, 4, 0,188, 9, 4, 0,189, 9,
- 4, 0,190, 9, 4, 0,191, 9, 4, 0,192, 9, 4, 0,193, 9,102, 1, 2, 0, 7, 0,165, 2, 4, 0, 18, 0,180, 0, 5, 0,
-102, 1,194, 9, 4, 0,212, 2, 4, 0,195, 9, 4, 0,196, 9, 4, 0, 18, 0,179, 0, 16, 0, 4, 0,197, 9, 4, 0,198, 9,
- 4, 0,199, 9, 4, 0,200, 9, 2, 0,201, 9, 2, 0,202, 9, 2, 0,203, 9, 2, 0,251, 0, 2, 0,204, 9, 2, 0,205, 9,
- 2, 0,206, 9, 2, 0,207, 9, 4, 0,208, 9, 4, 0,209, 9, 4, 0,210, 9, 4, 0,211, 9,103, 1, 40, 0,103, 1, 0, 0,
-103, 1, 1, 0, 21, 0,158, 9, 14, 0,251, 3, 0, 0, 19, 0, 2, 0, 18, 0, 2, 0,212, 9, 2, 0,209, 3, 2, 0,213, 9,
- 0, 0,214, 9, 0, 0,215, 9, 0, 0,216, 9,100, 1,217, 9,103, 1, 38, 0,103, 1,218, 9, 14, 0,219, 9, 14, 0,220, 9,
-180, 0,184, 3, 27, 0,221, 9,103, 1,222, 9, 7, 0, 77, 1, 7, 0,176, 0, 7, 0,223, 9, 7, 0, 19, 2, 7, 0,198, 3,
- 7, 0,200, 3, 2, 0,232, 3, 2, 0, 27, 0, 7, 0,224, 9, 7, 0,225, 9, 7, 0,203, 3, 7, 0,226, 9, 7, 0,227, 9,
- 7, 0,228, 9, 7, 0,229, 9, 7, 0,230, 9, 7, 0,231, 9, 7, 0,232, 9, 7, 0,233, 9, 11, 0,234, 9,177, 0, 16, 0,
- 14, 0,235, 9, 74, 0,236, 9, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,237, 9, 4, 0, 67, 0, 7, 0, 84, 0, 7, 0,238, 9,
- 7, 0,239, 9, 14, 0,240, 9, 4, 0,241, 9, 4, 0,242, 9, 11, 0,243, 9, 11, 0,244, 9,179, 0,183, 3, 0, 0,245, 9,
-104, 1, 1, 0, 4, 0,242, 9,105, 1, 12, 0, 4, 0,242, 9, 7, 0, 80, 9, 2, 0,246, 9, 2, 0,247, 9, 7, 0,248, 9,
- 7, 0,249, 9, 2, 0,250, 9, 2, 0, 18, 0, 7, 0,251, 9, 7, 0,252, 9, 7, 0,253, 9, 7, 0,254, 9,106, 1, 7, 0,
-106, 1, 0, 0,106, 1, 1, 0, 14, 0,255, 9, 4, 0, 18, 0, 4, 0, 0, 10, 0, 0, 19, 0, 22, 1, 1, 10,176, 0, 9, 0,
- 22, 0, 32, 0, 14, 0, 2, 10, 14, 0,235, 9, 14, 0, 3, 10, 14, 0,102, 0, 4, 0, 18, 0, 4, 0, 4, 10, 4, 0, 5, 10,
- 4, 0, 27, 0,243, 0, 8, 0, 22, 0, 6, 10, 14, 0,235, 9, 64, 0, 7, 10, 0, 0, 8, 10, 4, 0, 9, 10, 4, 0, 18, 0,
- 4, 0, 10, 10, 4, 0, 27, 0,107, 1, 13, 0,239, 0, 0, 0,239, 0, 1, 0, 14, 0,147, 6, 4, 0,148, 6, 7, 0,149, 6,
- 2, 0,150, 6,240, 0,201, 6,176, 0,179, 3,243, 0, 11, 10, 0, 0, 87, 1, 0, 0,204, 6, 2, 0, 18, 0, 7, 0, 12, 10,
-108, 1, 8, 0,108, 1, 0, 0,108, 1, 1, 0,106, 1, 13, 10, 31, 0, 80, 0, 14, 0,185, 3, 4, 0, 18, 0, 0, 0, 19, 0,
- 4, 0,119, 8,109, 1, 5, 0,109, 1, 0, 0,109, 1, 1, 0, 31, 0, 80, 0, 2, 0, 18, 0, 0, 0, 14, 10,110, 1, 14, 0,
-110, 1, 0, 0,110, 1, 1, 0, 11, 0, 2, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 15, 10, 0, 0, 16, 10, 0, 0, 19, 0,
- 2, 0, 27, 0, 7, 0, 17, 10, 7, 0, 18, 10, 31, 0, 80, 0, 7, 0, 19, 10, 7, 0, 20, 10,111, 1, 9, 0,111, 1, 0, 0,
-111, 1, 1, 0, 27, 0, 21, 10, 0, 0, 11, 3, 7, 0, 22, 10, 2, 0, 23, 10, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 24, 10,
-112, 1, 7, 0, 37, 0, 7, 7, 21, 0,158, 9, 4, 0, 18, 0, 4, 0, 25, 10, 14, 0, 26, 10, 27, 0, 21, 10, 0, 0, 11, 3,
-113, 1, 15, 0, 27, 0, 21, 10, 2, 0, 27, 10, 2, 0, 18, 0, 2, 0, 28, 10, 2, 0, 29, 10, 0, 0, 11, 3, 27, 0, 30, 10,
- 0, 0, 31, 10, 7, 0, 32, 10, 7, 0, 40, 2, 7, 0, 33, 10, 7, 0, 34, 10, 2, 0, 16, 0, 2, 0, 87, 1, 7, 0, 94, 1,
-114, 1, 6, 0, 27, 0, 21, 10, 7, 0,194, 9, 2, 0, 35, 10, 2, 0, 36, 10, 2, 0, 18, 0, 2, 0, 37, 10,115, 1, 6, 0,
- 27, 0, 21, 10, 4, 0, 38, 10, 4, 0, 39, 10, 4, 0, 92, 0, 4, 0, 27, 0, 0, 0, 11, 3,116, 1, 4, 0, 27, 0, 21, 10,
- 4, 0, 18, 0, 4, 0, 38, 10, 0, 0, 11, 3,117, 1, 4, 0, 27, 0, 21, 10, 4, 0, 18, 0, 4, 0, 38, 10, 0, 0, 11, 3,
-118, 1, 4, 0, 27, 0, 21, 10, 4, 0, 18, 0, 4, 0, 38, 10, 0, 0, 11, 3,119, 1, 2, 0, 4, 0, 18, 0, 7, 0, 84, 4,
-120, 1, 2, 0, 27, 0, 21, 10, 0, 0, 11, 3,121, 1, 10, 0, 27, 0, 21, 10, 4, 0, 40, 10, 7, 0,128, 0, 4, 0, 18, 0,
- 2, 0, 5, 7, 2, 0, 41, 10, 2, 0, 67, 0, 2, 0, 30, 0, 7, 0, 42, 10, 0, 0, 11, 3,122, 1, 10, 0, 27, 0, 21, 10,
- 2, 0, 16, 0, 2, 0,134, 4, 4, 0, 90, 0, 4, 0, 91, 0, 7, 0,118, 9, 7, 0,119, 9, 4, 0, 27, 0,176, 0, 88, 9,
- 0, 0, 11, 3,123, 1, 4, 0, 27, 0, 21, 10, 4, 0,210, 3, 4, 0, 43, 10, 0, 0, 11, 3,124, 1, 4, 0, 27, 0, 21, 10,
- 4, 0,210, 3, 4, 0, 27, 0, 0, 0, 11, 3,125, 1, 6, 0, 27, 0, 21, 10, 7, 0,128, 0, 7, 0, 82, 3, 4, 0, 44, 10,
- 2, 0,210, 3, 2, 0,211, 3,126, 1, 6, 0, 27, 0, 21, 10, 4, 0, 45, 10, 4, 0, 46, 10, 7, 0, 47, 10, 7, 0, 48, 10,
- 0, 0, 11, 3,127, 1, 16, 0, 27, 0, 21, 10, 27, 0,218, 9, 4, 0, 16, 0, 7, 0, 49, 10, 7, 0, 50, 10, 7, 0, 51, 10,
- 7, 0, 52, 10, 7, 0, 53, 10, 7, 0, 54, 10, 7, 0, 55, 10, 7, 0, 56, 10, 7, 0, 57, 10, 2, 0, 18, 0, 2, 0, 27, 0,
- 2, 0, 67, 0, 2, 0, 30, 0,128, 1, 3, 0, 27, 0, 21, 10, 4, 0, 18, 0, 4, 0, 32, 2,129, 1, 5, 0, 27, 0, 21, 10,
- 4, 0, 18, 0, 4, 0, 27, 0, 7, 0, 58, 10, 0, 0, 11, 3,130, 1, 10, 0, 27, 0, 21, 10, 0, 0, 11, 3, 2, 0, 59, 10,
- 2, 0, 60, 10, 0, 0, 61, 10, 0, 0, 62, 10, 7, 0, 63, 10, 7, 0, 64, 10, 7, 0, 65, 10, 7, 0, 66, 10,131, 1, 5, 0,
- 27, 0, 21, 10, 0, 0, 11, 3, 7, 0,220, 2, 2, 0, 67, 10, 2, 0, 18, 0,132, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0,
- 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 68, 10, 7, 0, 69, 10, 2, 0, 18, 0, 2, 0, 32, 2,133, 1, 8, 0, 7, 0, 8, 0,
- 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 68, 10, 7, 0, 69, 10, 2, 0, 18, 0, 2, 0, 32, 2,134, 1, 8, 0,
- 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 68, 10, 7, 0, 69, 10, 2, 0, 18, 0, 2, 0, 32, 2,
-135, 1, 7, 0, 27, 0, 21, 10, 0, 0, 11, 3, 7, 0, 94, 1, 7, 0,103, 1, 2, 0, 18, 0, 2, 0, 87, 1, 4, 0, 27, 0,
-136, 1, 5, 0, 27, 0, 70, 3, 7, 0, 94, 1, 2, 0, 74, 3, 0, 0, 76, 3, 0, 0, 70, 10,137, 1, 7, 0,229, 0,107, 6,
- 0, 0, 71, 10, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 72, 10, 27, 0,210, 5, 27, 0, 73, 10,138, 1, 3, 0,229, 0,107, 6,
- 4, 0, 18, 0, 4, 0, 27, 0,139, 1, 6, 0,229, 0,107, 6, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 72, 10, 7, 0, 58, 10,
- 27, 0,210, 5,140, 1, 10, 0,140, 1, 0, 0,140, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 74, 10, 7, 0, 31, 1,
- 7, 0, 32, 1, 2, 0,255, 9, 2, 0, 75, 10, 27, 0, 44, 0,141, 1, 22, 0,141, 1, 0, 0,141, 1, 1, 0, 2, 0, 18, 0,
- 2, 0, 87, 1, 2, 0, 76, 10, 2, 0, 77, 10, 31, 0, 80, 0,176, 0, 88, 9, 27, 0,168, 0, 7, 0, 90, 0, 7, 0, 91, 0,
- 7, 0, 78, 10, 7, 0, 79, 10, 7, 0, 80, 10, 7, 0, 81, 10, 7, 0,253, 2, 7, 0,148, 3, 7, 0, 90, 9, 7, 0, 82, 10,
- 0, 0, 83, 10, 0, 0, 84, 10, 14, 0,188, 3,142, 1, 11, 0, 7, 0, 47, 2, 7, 0,118, 9, 7, 0,119, 9, 11, 0, 2, 0,
- 2, 0, 85, 10, 2, 0, 86, 10, 2, 0, 87, 10, 2, 0, 88, 10, 2, 0, 89, 10, 2, 0, 90, 10, 2, 0,181, 2,143, 1, 21, 0,
-143, 1, 0, 0,143, 1, 1, 0,143, 1, 91, 10, 0, 0, 19, 0, 11, 0, 92, 10, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 93, 10,
- 2, 0, 94, 10, 7, 0, 95, 10, 7, 0, 96, 10, 11, 0, 97, 10, 2, 0, 98, 10, 2, 0, 99, 10, 4, 0,247, 1, 11, 0,152, 9,
- 4, 0,100, 10, 4, 0,101, 10,143, 1,102, 10,144, 1,103, 10,142, 1,104, 10,145, 1, 4, 0, 0, 0,105, 10, 2, 0,106, 10,
- 2, 0,107, 10, 4, 0, 27, 0,146, 1, 37, 0,146, 1, 0, 0,146, 1, 1, 0,146, 1,108, 10, 0, 0, 19, 0, 2, 0, 16, 0,
- 2, 0, 18, 0, 2, 0,199, 8, 2, 0,176, 2, 2, 0,109, 10, 2, 0, 10, 7, 2, 0, 98, 10, 2, 0, 42, 9, 14, 0, 83, 9,
- 14, 0,110, 10,146, 1, 38, 0, 22, 0, 43, 7, 11, 0, 92, 10, 7, 0, 95, 10, 7, 0, 96, 10, 7, 0, 82, 2, 7, 0, 1, 3,
- 7, 0,111, 10, 4, 0,112, 10, 0, 0,113, 10, 2, 0,114, 10, 2, 0,115, 10, 7, 0,116, 10, 7, 0,117, 10, 2, 0,118, 10,
- 2, 0,119, 10, 11, 0,120, 10, 19, 0,121, 10, 19, 0,122, 10, 19, 0,123, 10,145, 1,154, 0,147, 1,124, 10,148, 1,125, 10,
-144, 1, 8, 0,144, 1, 0, 0,144, 1, 1, 0,146, 1,126, 10,146, 1,127, 10,143, 1,128, 10,143, 1,129, 10, 4, 0, 18, 0,
- 4, 0, 27, 0, 57, 0, 20, 0, 22, 0, 32, 0, 34, 0, 75, 0,178, 0,182, 3, 14, 0,130, 10, 14, 0,131, 10, 4, 0, 16, 0,
- 4, 0,132, 10, 4, 0,133, 10, 4, 0, 18, 0, 4, 0,112, 10, 4, 0,134, 10, 14, 0, 83, 9, 14, 0,110, 10,149, 1,135, 10,
- 11, 0,136, 10, 11, 0,137, 10, 4, 0,138, 10, 11, 0,139, 10, 11, 0,140, 10, 11, 0,141, 10,150, 1, 4, 0, 4, 0, 17, 0,
- 4, 0,230, 2, 4, 0,118, 9, 4, 0,119, 9,151, 1, 4, 0, 4, 0, 17, 0, 7, 0,230, 2, 7, 0,118, 9, 7, 0,119, 9,
-152, 1, 2, 0, 0, 0,230, 2, 0, 0, 86, 1,153, 1, 4, 0, 4, 0, 17, 0, 7, 0,142, 10, 7, 0,118, 9, 7, 0,119, 9,
-154, 1, 1, 0, 7, 0,143, 10,155, 1, 6, 0, 4, 0,127, 0, 4, 0,129, 0, 4, 0, 42, 9, 0, 0,144, 10, 0, 0,145, 10,
- 2, 0, 27, 0,156, 1, 16, 0, 2, 0,142, 8, 2, 0,143, 8, 2, 0, 71, 5, 2, 0,146, 10, 2, 0,147, 10, 2, 0, 68, 0,
- 2, 0, 44, 7, 2, 0,148, 10, 7, 0,252, 2, 7, 0,149, 10, 7, 0,150, 10, 2, 0,109, 1, 0, 0,151, 10, 0, 0,152, 10,
- 4, 0,153, 10, 4, 0,154, 10,157, 1, 9, 0, 7, 0,155, 10, 7, 0,156, 10, 7, 0,151, 9, 7, 0, 94, 3, 7, 0,157, 10,
- 7, 0,219, 6, 2, 0, 92, 3, 0, 0,158, 10, 0, 0, 27, 0,158, 1, 4, 0, 7, 0,159, 10, 7, 0,160, 10, 2, 0, 92, 3,
- 2, 0, 27, 0,159, 1, 3, 0, 7, 0,161, 10, 7, 0,214, 8, 7, 0, 14, 0,160, 1, 4, 0, 0, 0, 35, 0,204, 0, 82, 5,
- 4, 0,129, 0, 4, 0,132, 4,161, 1, 6, 0, 0, 0,162, 10,204, 0,163, 10, 4, 0,129, 0, 4, 0,132, 4, 4, 0,164, 10,
- 4, 0, 27, 0,162, 1, 4, 0, 2, 0,165, 10, 2, 0,166, 10, 4, 0, 30, 0,204, 0,163, 10,163, 1, 9, 0, 7, 0,167, 10,
- 7, 0,168, 10, 7, 0,169, 10, 7, 0, 93, 2, 7, 0,170, 10, 7, 0,171, 10, 7, 0,172, 10, 2, 0,173, 10, 2, 0,174, 10,
-164, 1, 8, 0, 2, 0,175, 10, 2, 0,176, 10, 2, 0,177, 10, 2, 0,178, 10, 7, 0,179, 10, 7, 0,180, 10, 7, 0,181, 10,
- 7, 0,182, 10,165, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,166, 1, 2, 0, 0, 0,170, 0, 0, 0,183, 10,167, 1, 1, 0,
- 0, 0, 19, 0,168, 1, 12, 0, 0, 0,184, 10, 0, 0,185, 10, 0, 0,210, 6, 0, 0,186, 10, 2, 0, 71, 5, 2, 0,187, 10,
- 7, 0,188, 10, 7, 0,189, 10, 7, 0,190, 10, 7, 0,148, 3, 7, 0,191, 10, 7, 0,192, 10,169, 1, 2, 0, 11, 0,193, 10,
- 11, 0,194, 10,170, 1, 13, 0, 0, 0, 74, 5, 0, 0, 16, 0, 0, 0, 92, 3, 0, 0, 94, 3, 0, 0,185, 10, 0, 0,108, 0,
- 0, 0,181, 2, 7, 0,195, 10, 7, 0,196, 10, 7, 0,147, 3, 7, 0,197, 10, 7, 0,198, 10, 7, 0,192, 10,171, 1, 8, 0,
- 7, 0, 49, 9, 7, 0,128, 0, 7, 0,152, 10, 7, 0,172, 2, 7, 0,199, 10, 7, 0,240, 0, 7, 0,200, 10, 4, 0, 16, 0,
-172, 1, 4, 0, 2, 0,201, 10, 2, 0,202, 10, 2, 0,203, 10, 2, 0, 27, 0,173, 1, 8, 0, 7, 0,204, 10, 7, 0,220, 2,
- 7, 0,205, 10, 7, 0,192, 8, 7, 0,193, 8, 7, 0,194, 8, 7, 0,206, 10, 7, 0,207, 10,174, 1, 6, 0, 2, 0,208, 10,
- 2, 0,209, 10, 7, 0,210, 10, 7, 0,211, 10, 7, 0,212, 10, 7, 0,213, 10,175, 1, 2, 0, 58, 0,214, 10, 59, 0,215, 10,
-176, 1, 3, 0,175, 1, 80, 6, 7, 0,216, 10, 7, 0,217, 10,177, 1, 3, 0,175, 1, 80, 6, 4, 0,218, 10, 4, 0, 27, 0,
-178, 1, 1, 0,175, 1, 80, 6,179, 1, 3, 0,175, 1, 80, 6, 4, 0,218, 10, 4, 0,219, 10,180, 1, 3, 0,175, 1, 80, 6,
- 4, 0,220, 10, 4, 0, 27, 0,181, 1, 1, 0,175, 1, 80, 6,182, 1, 3, 0,175, 1, 80, 6, 4, 0,221, 10, 4, 0, 27, 0,
-183, 1, 3, 0,175, 1, 80, 6, 4, 0,222, 10, 4, 0, 27, 0,184, 1, 3, 0,175, 1, 80, 6, 4, 0,223, 10, 4, 0, 27, 0,
-185, 1, 3, 0,175, 1, 80, 6, 4, 0,250, 0, 4, 0, 27, 0,186, 1, 1, 0, 0, 0, 19, 0,187, 1, 1, 0, 0, 0, 19, 0,
-188, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 18, 0, 2, 0,224, 10,189, 1, 10, 0, 2, 0, 62, 4, 2, 0, 18, 0,
- 7, 0,217, 4, 7, 0,225, 10, 7, 0,226, 10, 7, 0,227, 10, 7, 0,228, 10,188, 1,229, 10,188, 1,230, 10,188, 1,231, 10,
- 54, 0, 11, 0, 4, 0, 18, 0, 4, 0, 63, 0, 4, 0,232, 10, 4, 0,233, 10, 19, 0,234, 10, 19, 0,235, 10,189, 1,236, 10,
- 7, 0,237, 10, 7, 0,238, 10, 7, 0,239, 10, 7, 0,240, 10, 0, 1, 10, 0, 4, 0,255, 9, 4, 0,241, 10, 7, 0,242, 10,
- 7, 0,243, 10, 7, 0,244, 10, 7, 0,245, 10, 7, 0, 9, 0, 7, 0, 11, 0, 4, 0, 87, 1, 4, 0, 1, 3,255, 0, 18, 0,
- 4, 0,132, 0, 4, 0,246, 10, 4, 0,247, 10, 7, 0,248, 10, 4, 0,249, 10, 7, 0,250, 10, 7, 0,251, 10, 4, 0,252, 10,
- 7, 0,253, 10, 4, 0,254, 10, 7, 0,255, 10, 0, 1, 0, 11, 7, 0, 1, 11, 7, 0, 2, 11, 7, 0, 3, 11, 7, 0, 4, 11,
- 4, 0, 5, 11, 4, 0, 27, 0,190, 1, 4, 0, 42, 0,244, 2, 7, 0, 6, 11, 7, 0,178, 1, 7, 0, 27, 0,213, 0, 35, 0,
- 22, 0, 32, 0,190, 1, 7, 11, 54, 0,229, 10, 46, 0, 8, 11, 52, 0, 9, 11, 25, 0,154, 0, 0, 0, 10, 11, 7, 0, 11, 11,
- 2, 0,110, 6, 2, 0, 12, 11, 7, 0, 40, 2, 4, 0,108, 0, 4, 0, 18, 0, 7, 0, 13, 11, 4, 0, 90, 2, 4, 0, 14, 11,
- 7, 0, 15, 11, 7, 0, 16, 11, 7, 0, 17, 11, 7, 0,178, 1, 4, 0, 18, 11, 7, 0, 19, 11, 0, 0, 20, 11, 0, 0, 21, 11,
- 0, 0, 22, 11, 0, 0, 27, 0, 7, 0, 23, 11, 7, 0, 24, 11, 7, 0, 25, 11, 7, 0, 1, 3, 7, 0, 26, 11, 4, 0, 27, 11,
- 7, 0,242, 5, 7, 0, 28, 11, 7, 0, 29, 11,191, 1, 10, 0, 4, 0, 16, 0, 4, 0,128, 0, 4, 0, 18, 0, 4, 0, 15, 4,
- 4, 0, 30, 11, 4, 0, 31, 11, 4, 0, 32, 11, 4, 0, 70, 0, 0, 0, 19, 0, 11, 0, 2, 0,192, 1, 1, 0, 0, 0, 71, 7,
- 95, 0, 8, 0,191, 1, 33, 11, 4, 0, 34, 11, 4, 0, 35, 11, 4, 0, 36, 11, 4, 0, 37, 11, 4, 0, 30, 0, 11, 0, 38, 11,
-192, 1, 39, 11,193, 1, 5, 0, 7, 0,165, 2, 7, 0,240, 2, 7, 0, 40, 2, 2, 0,147, 2, 2, 0, 27, 0,194, 1, 5, 0,
- 7, 0,165, 2, 7, 0,159, 4, 7, 0, 40, 11, 7, 0, 41, 11, 7, 0,240, 2,195, 1, 5, 0, 27, 0, 42, 11,196, 1, 21, 0,
- 7, 0, 76, 6, 7, 0, 43, 11, 7, 0, 56, 0,197, 1, 3, 0, 7, 0, 44, 11, 4, 0, 45, 11, 4, 0, 46, 11,198, 1, 7, 0,
- 4, 0, 47, 11, 4, 0, 48, 11, 4, 0, 49, 11, 7, 0, 50, 11, 7, 0, 51, 11, 7, 0, 52, 11, 7, 0, 56, 0,199, 1, 8, 0,
-199, 1, 0, 0,199, 1, 1, 0, 27, 0, 44, 0, 4, 0, 3, 1, 2, 0, 18, 0, 2, 0, 87, 1, 7, 0,240, 2, 7, 0, 57, 9,
-200, 1, 7, 0,200, 1, 0, 0,200, 1, 1, 0, 27, 0, 44, 0, 2, 0,225, 2, 2, 0, 18, 0, 2, 0, 14, 2, 2, 0, 56, 0,
-201, 1, 17, 0,194, 1, 8, 4,194, 1, 53, 11,193, 1, 54, 11,194, 1, 40, 9,195, 1, 55, 11, 4, 0, 82, 0, 7, 0,240, 2,
- 7, 0, 7, 3, 7, 0, 56, 11, 4, 0, 47, 11, 4, 0, 57, 11, 7, 0, 51, 11, 7, 0, 52, 11, 7, 0,108, 0, 4, 0, 58, 11,
- 2, 0, 18, 0, 2, 0, 59, 11,202, 1, 15, 0, 7, 0,255, 0, 7, 0, 60, 11, 7, 0, 44, 11, 7, 0, 61, 11, 7, 0, 62, 11,
- 7, 0, 63, 11, 7, 0, 64, 11, 7, 0, 65, 11, 7, 0, 66, 11, 7, 0, 67, 11, 7, 0, 68, 11, 7, 0, 69, 11, 7, 0, 70, 11,
- 4, 0, 18, 0, 4, 0, 71, 11,203, 1,128, 0, 22, 0, 32, 0, 34, 0, 75, 0,204, 1, 72, 11,202, 1, 73, 11,187, 0,154, 4,
- 4, 0, 18, 0, 4, 0, 56, 0, 2, 0, 16, 0, 2, 0, 59, 10, 2, 0, 74, 11, 2, 0,122, 1, 2, 0, 75, 11, 2, 0,232, 3,
- 2, 0, 76, 11, 2, 0, 77, 11, 2, 0, 78, 11, 2, 0, 79, 11, 2, 0, 80, 11, 2, 0, 81, 11, 2, 0, 82, 11, 2, 0, 83, 11,
- 2, 0, 84, 11, 2, 0,226, 5, 2, 0, 85, 11, 2, 0, 86, 11, 2, 0, 87, 11, 2, 0, 88, 11, 2, 0, 89, 11, 2, 0, 29, 2,
- 2, 0, 33, 9, 2, 0, 8, 9, 2, 0, 90, 11, 2, 0, 91, 11, 2, 0, 25, 4, 2, 0, 26, 4, 2, 0, 92, 11, 2, 0, 93, 11,
- 2, 0, 94, 11, 2, 0, 95, 11, 7, 0, 96, 11, 7, 0, 97, 11, 7, 0, 98, 11, 7, 0, 99, 11, 7, 0,100, 11, 7, 0,101, 11,
- 7, 0,102, 11, 2, 0,156, 5, 2, 0,103, 11, 7, 0,104, 11, 7, 0,105, 11, 7, 0,106, 11, 7, 0, 15, 9, 7, 0, 91, 0,
- 7, 0, 7, 3, 7, 0, 21, 9, 7, 0,107, 11, 7, 0,108, 11, 7, 0,109, 11, 7, 0,110, 11, 7, 0,111, 11, 7, 0,112, 11,
- 4, 0, 16, 9, 4, 0, 14, 9, 4, 0,113, 11, 4, 0,114, 11, 2, 0,115, 11, 2, 0,116, 11, 7, 0, 17, 9, 7, 0, 18, 9,
- 7, 0, 19, 9, 7, 0,117, 11, 7, 0,118, 11, 7, 0,119, 11, 7, 0,120, 11, 7, 0,121, 11, 7, 0,122, 11, 7, 0,123, 11,
- 7, 0,124, 11, 7, 0,125, 11, 7, 0,222, 3, 7, 0,108, 0, 7, 0,126, 11, 7, 0,127, 11, 7, 0,128, 11, 7, 0,129, 11,
- 7, 0,214, 0, 7, 0,130, 11, 4, 0,131, 11, 4, 0,132, 11, 7, 0,133, 11, 7, 0,134, 11, 7, 0,135, 11, 7, 0,136, 11,
- 7, 0,137, 11, 7, 0,213, 0, 7, 0,138, 11, 7, 0, 52, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0,139, 11, 7, 0,140, 11,
- 7, 0,141, 11, 7, 0,142, 11, 7, 0,143, 11, 7, 0,144, 11, 7, 0,145, 11, 7, 0,146, 11, 7, 0,147, 11, 7, 0,148, 11,
- 7, 0,149, 11, 7, 0,150, 11, 7, 0,151, 11, 7, 0,152, 11, 7, 0,153, 11, 7, 0,154, 11, 7, 0,155, 11, 7, 0,156, 11,
- 4, 0,157, 11, 4, 0,158, 11, 46, 0,140, 1, 64, 0, 0, 4, 14, 0,159, 11, 64, 0,160, 11, 27, 0,161, 11, 27, 0,162, 11,
- 31, 0, 80, 0,182, 0, 73, 1,182, 0,163, 11,150, 0, 52, 0,150, 0, 0, 0,150, 0, 1, 0,203, 1,164, 11,201, 1,165, 11,
-198, 1,218, 9,190, 0, 80, 4, 11, 0, 81, 4,205, 1,166, 11,205, 1,167, 11, 14, 0,168, 11, 14, 0,169, 11,135, 0,170, 11,
-143, 0,171, 11,143, 0,172, 11, 27, 0,173, 11, 27, 0,174, 11, 27, 0, 38, 0, 14, 0, 26, 10, 0, 0, 19, 0, 7, 0,244, 0,
- 7, 0, 36, 3, 7, 0,175, 11, 7, 0,176, 11, 4, 0,214, 2, 4, 0,177, 11, 4, 0, 18, 0, 4, 0, 16, 9, 4, 0,178, 11,
- 4, 0,179, 11, 4, 0,180, 11, 4, 0,181, 11, 2, 0,251, 0, 2, 0,182, 11, 2, 0,183, 11, 2, 0,184, 11, 0, 0,185, 11,
- 2, 0,186, 11, 2, 0,187, 11, 2, 0,188, 11, 11, 0,189, 11,139, 0,153, 4, 14, 0, 21, 3, 14, 0,190, 11,197, 1,191, 11,
- 4, 0,192, 11, 4, 0,193, 11,206, 1,194, 11,141, 0, 33, 3,207, 1,195, 11, 7, 0,196, 11, 7, 0,197, 11, 7, 0,198, 11,
-137, 0, 38, 0,208, 1,152, 9, 7, 0,123, 4, 7, 0,199, 11, 7, 0,200, 11, 7, 0, 76, 6, 7, 0,236, 3, 7, 0,222, 3,
- 7, 0,201, 11, 7, 0, 92, 2, 7, 0,202, 11, 7, 0,203, 11, 7, 0,204, 11, 7, 0,205, 11, 7, 0,206, 11, 7, 0,207, 11,
- 7, 0,124, 4, 7, 0,208, 11, 7, 0,209, 11, 7, 0,210, 11, 7, 0,125, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,211, 11,
- 7, 0,212, 11, 7, 0,213, 11, 4, 0,214, 11, 4, 0, 92, 0, 4, 0,215, 11, 4, 0,216, 11, 2, 0,217, 11, 2, 0,218, 11,
- 2, 0,219, 11, 2, 0,220, 11, 2, 0,221, 11, 2, 0,222, 11, 2, 0,223, 11, 2, 0, 27, 0,187, 0,154, 4,138, 0, 11, 0,
-208, 1,224, 11, 7, 0,225, 11, 7, 0,226, 11, 7, 0,251, 1, 7, 0,227, 11, 7, 0,228, 11, 7, 0,229, 11, 4, 0, 92, 0,
- 2, 0,230, 11, 2, 0,231, 11, 64, 0,250, 1,209, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,232, 11,
-210, 1, 6, 0,210, 1, 0, 0,210, 1, 1, 0,209, 1,194, 9, 4, 0, 1, 1, 2, 0,233, 11, 2, 0, 18, 0,211, 1, 5, 0,
-211, 1, 0, 0,211, 1, 1, 0, 14, 0,234, 11, 4, 0,235, 11, 4, 0, 18, 0,212, 1, 9, 0,212, 1, 0, 0,212, 1, 1, 0,
- 14, 0,127, 0,211, 1,236, 11, 4, 0, 18, 0, 2, 0,233, 11, 2, 0,237, 11, 7, 0, 93, 0, 0, 0,238, 11,178, 0, 6, 0,
- 22, 0, 32, 0, 14, 0,125, 5, 4, 0, 18, 0, 2, 0,239, 11, 2, 0,240, 11, 11, 0,241, 11,213, 1, 6, 0, 14, 0,242, 11,
- 4, 0,243, 11, 4, 0,244, 11, 4, 0, 18, 0, 4, 0, 27, 0,237, 0,245, 11,214, 1, 19, 0, 22, 0, 32, 0,215, 1,246, 11,
-215, 1,247, 11, 14, 0,248, 11, 4, 0,249, 11, 2, 0,250, 11, 2, 0,251, 11, 14, 0,252, 11, 14, 0,253, 11,213, 1,254, 11,
- 14, 0,255, 11, 14, 0, 0, 12, 14, 0, 1, 12, 14, 0, 2, 12,216, 1, 3, 12,216, 1, 4, 12,216, 1, 5, 12, 14, 0, 6, 12,
-237, 0, 7, 12,215, 1, 32, 0,215, 1, 0, 0,215, 1, 1, 0, 11, 0, 8, 12, 4, 0,120, 8, 2, 0, 9, 12, 2, 0, 27, 0,
- 27, 1, 10, 12, 27, 1, 11, 12, 0, 0, 12, 12, 2, 0, 13, 12, 2, 0, 14, 12, 2, 0,142, 8, 2, 0,143, 8, 2, 0, 15, 12,
- 2, 0, 16, 12, 2, 0, 15, 4, 2, 0, 54, 7, 2, 0, 17, 12, 2, 0, 18, 12, 2, 0, 19, 12, 2, 0, 30, 0,217, 1, 20, 12,
-218, 1, 21, 12,219, 1, 22, 12, 4, 0, 23, 12, 4, 0, 24, 12, 11, 0, 25, 12, 14, 0,253, 11, 14, 0,162, 8, 14, 0, 26, 12,
- 14, 0, 27, 12, 14, 0, 28, 12,220, 1, 18, 0,220, 1, 0, 0,220, 1, 1, 0, 0, 0, 29, 12, 21, 0, 31, 0, 0, 0, 30, 12,
- 2, 0, 31, 12, 2, 0, 16, 0, 2, 0, 14, 0, 2, 0, 32, 12, 2, 0, 33, 12, 2, 0, 34, 12, 2, 0, 35, 12, 2, 0, 36, 12,
- 2, 0, 18, 0, 2, 0, 37, 12, 2, 0, 32, 0, 2, 0, 27, 0,221, 1, 38, 12,222, 1, 4, 0,222, 1, 0, 0,222, 1, 1, 0,
-220, 1, 39, 12,220, 1, 40, 12,223, 1, 11, 0,223, 1, 0, 0,223, 1, 1, 0, 14, 0, 41, 12, 14, 0, 42, 12, 0, 0, 29, 12,
- 2, 0, 43, 12, 2, 0, 44, 12, 2, 0, 18, 0, 2, 0, 45, 12, 4, 0, 46, 12, 11, 0, 47, 12,216, 1, 7, 0,216, 1, 0, 0,
-216, 1, 1, 0, 0, 0, 29, 12, 0, 0, 48, 12, 14, 0, 60, 8, 4, 0, 49, 12, 4, 0, 18, 0,249, 0, 14, 0,249, 0, 0, 0,
-249, 0, 1, 0, 0, 0, 29, 12, 21, 0, 31, 0,224, 1,136, 8, 11, 0, 50, 12, 11, 0, 51, 12,221, 1, 38, 12,213, 1, 52, 12,
- 14, 0, 53, 12,249, 0, 54, 12, 32, 1,240, 6, 2, 0, 18, 0, 2, 0, 86, 1,225, 1, 12, 0,225, 1, 0, 0,225, 1, 1, 0,
- 11, 0, 2, 0, 11, 0, 55, 12, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0,140, 9, 7, 0,129, 0, 7, 0,132, 4,
- 7, 0, 90, 9, 7, 0, 82, 10,226, 1, 5, 0, 7, 0, 56, 12, 4, 0, 57, 12, 4, 0, 58, 12, 4, 0, 87, 1, 4, 0, 18, 0,
-227, 1, 6, 0, 7, 0, 59, 12, 7, 0, 60, 12, 7, 0, 61, 12, 7, 0, 62, 12, 4, 0, 16, 0, 4, 0, 18, 0,228, 1, 5, 0,
- 7, 0,118, 9, 7, 0,119, 9, 7, 0,240, 2, 2, 0, 43, 2, 2, 0, 44, 2,229, 1, 5, 0,228, 1, 2, 0, 4, 0, 53, 0,
- 7, 0, 63, 12, 7, 0,118, 9, 7, 0,119, 9,230, 1, 4, 0, 2, 0, 64, 12, 2, 0, 65, 12, 2, 0, 66, 12, 2, 0, 67, 12,
-231, 1, 2, 0, 37, 0, 38, 7, 21, 0,158, 9,232, 1, 3, 0, 19, 0, 68, 12, 4, 0, 18, 0, 4, 0, 27, 0,233, 1, 6, 0,
- 7, 0,108, 0, 7, 0,209, 2, 7, 0, 69, 12, 7, 0, 27, 0, 2, 0,250, 0, 2, 0, 70, 12,234, 1, 5, 0, 7, 0, 71, 12,
- 7, 0,128, 0, 7, 0,195, 9, 7, 0,196, 9, 4, 0, 18, 0,235, 1, 6, 0, 22, 0, 43, 7, 0, 0, 72, 12, 0, 0, 73, 12,
- 2, 0, 74, 12, 2, 0, 18, 0, 4, 0, 75, 12,236, 1, 7, 0,236, 1, 0, 0,236, 1, 1, 0, 0, 0, 19, 0,235, 1, 76, 12,
- 2, 0, 77, 12, 2, 0, 16, 0, 7, 0, 60, 0,237, 1, 7, 0, 14, 0, 78, 12, 0, 0, 79, 12, 11, 0, 80, 12, 7, 0, 60, 0,
- 7, 0,140, 9, 4, 0, 16, 0, 4, 0, 18, 0,238, 1, 3, 0, 7, 0, 81, 12, 4, 0, 18, 0, 4, 0, 27, 0,239, 1, 15, 0,
-239, 1, 0, 0,239, 1, 1, 0,106, 1, 13, 10,237, 1, 61, 0, 14, 0,188, 3, 30, 0, 49, 0,238, 1, 82, 12, 4, 0, 53, 0,
- 7, 0, 60, 0, 2, 0, 18, 0, 2, 0, 22, 1, 4, 0, 83, 12, 0, 0, 72, 12, 4, 0, 84, 12, 7, 0, 85, 12,240, 1, 2, 0,
- 0, 0, 86, 12, 0, 0, 87, 12,241, 1, 4, 0,241, 1, 0, 0,241, 1, 1, 0,176, 0, 70, 3, 14, 0, 88, 12,242, 1, 25, 0,
-242, 1, 0, 0,242, 1, 1, 0, 14, 0, 89, 12,176, 0, 88, 9,241, 1, 90, 12, 14, 0, 91, 12, 14, 0,188, 3, 0, 0, 19, 0,
- 7, 0,140, 9, 7, 0, 92, 12, 7, 0, 90, 0, 7, 0, 91, 0, 7, 0, 78, 10, 7, 0, 79, 10, 7, 0,253, 2, 7, 0,148, 3,
- 7, 0, 90, 9, 7, 0, 82, 10, 2, 0, 93, 12, 2, 0, 94, 12, 2, 0, 67, 0, 2, 0, 16, 0, 11, 0, 95, 12, 4, 0, 18, 0,
- 4, 0, 30, 0,243, 1, 6, 0,243, 1, 0, 0,243, 1, 1, 0, 14, 0, 89, 12, 4, 0, 18, 0, 4, 0, 14, 2, 0, 0, 19, 0,
-244, 1, 11, 0,244, 1, 0, 0,244, 1, 1, 0, 22, 0, 43, 7, 0, 0, 96, 12, 4, 0, 75, 12, 2, 0, 97, 12, 2, 0, 27, 0,
- 0, 0, 72, 12, 4, 0, 83, 12, 2, 0, 18, 0, 2, 0, 98, 12,245, 1, 10, 0,245, 1, 0, 0,245, 1, 1, 0, 14, 0, 99, 12,
- 0, 0, 29, 12, 0, 0, 19, 0, 0, 0,100, 12, 0, 0,101, 12, 2, 0, 18, 0, 2, 0, 98, 12, 4, 0,102, 12,246, 1, 5, 0,
-246, 1, 0, 0,246, 1, 1, 0, 0, 0, 72, 12, 4, 0, 83, 12, 7, 0,230, 2, 34, 0, 12, 0,176, 0,179, 3,176, 0,103, 12,
-241, 1, 90, 12, 14, 0,104, 12,242, 1,105, 12, 14, 0,106, 12, 14, 0,107, 12, 4, 0, 18, 0, 4, 0,251, 0, 2, 0,108, 12,
- 2, 0,109, 12, 7, 0,110, 12,247, 1, 2, 0, 22, 0, 32, 0, 34, 0, 75, 0,248, 1, 5, 0,248, 1, 0, 0,248, 1, 1, 0,
- 4, 0, 16, 0, 4, 0, 18, 0, 0, 0,174, 5,249, 1, 6, 0,248, 1,111, 12, 27, 0, 44, 0, 4, 0,112, 12, 7, 0,113, 12,
- 4, 0,114, 12, 4, 0,255, 9,250, 1, 3, 0,248, 1,111, 12, 4, 0,112, 12, 7, 0,115, 12,251, 1, 8, 0,248, 1,111, 12,
- 27, 0, 44, 0, 7, 0, 77, 1, 7, 0,116, 12, 7, 0, 36, 3, 7, 0,151, 9, 4, 0,112, 12, 4, 0,117, 12,252, 1, 5, 0,
-248, 1,111, 12, 7, 0,118, 12, 7, 0,176, 2, 7, 0, 3, 3, 7, 0, 56, 0,253, 1, 3, 0,248, 1,111, 12, 7, 0,151, 9,
- 7, 0,119, 12,196, 1, 4, 0, 7, 0,120, 12, 7, 0,127, 11, 2, 0,121, 12, 2, 0, 87, 1,254, 1, 14, 0,254, 1, 0, 0,
-254, 1, 1, 0, 14, 0,122, 12, 14, 0,123, 12, 14, 0,124, 12, 0, 0,174, 5, 4, 0, 32, 0, 4, 0, 18, 0, 4, 0,125, 12,
- 7, 0,126, 12, 4, 0,114, 12, 4, 0,255, 9, 7, 0, 84, 4, 7, 0, 5, 3,204, 1, 23, 0, 4, 0,112, 12, 4, 0,127, 12,
- 7, 0,128, 12, 7, 0, 1, 3, 7, 0,129, 12, 7, 0,231, 8, 7, 0,120, 12, 7, 0,130, 12, 7, 0,209, 2, 7, 0,248, 10,
- 7, 0,217, 4, 7, 0,131, 12, 7, 0,132, 12, 7, 0,133, 12, 7, 0,134, 12, 7, 0,135, 12, 7, 0,136, 12, 7, 0,137, 12,
- 7, 0,138, 12, 7, 0,139, 12, 7, 0,140, 12, 7, 0,141, 12, 14, 0,142, 12,123, 0, 40, 0,122, 0,143, 12,255, 1, 73, 11,
- 64, 0,144, 12, 64, 0,160, 11, 64, 0,145, 12, 0, 2,146, 12, 43, 0,169, 0, 43, 0,147, 12, 43, 0,148, 12, 7, 0,149, 12,
- 7, 0,150, 12, 7, 0,151, 12, 7, 0,152, 12, 7, 0,153, 12, 7, 0,119, 8, 7, 0,154, 12, 7, 0,178, 1, 7, 0,155, 12,
- 4, 0,156, 12, 4, 0,157, 12, 4, 0,158, 12, 4, 0, 92, 0, 4, 0, 27, 0, 4, 0,159, 12, 2, 0,160, 12, 2, 0,161, 12,
- 4, 0,162, 12, 7, 0,209, 2, 4, 0,163, 12, 7, 0,164, 12, 4, 0,165, 12, 4, 0,166, 12, 4, 0,167, 12,139, 0,168, 12,
- 14, 0,169, 12,187, 0,154, 4, 4, 0,170, 12, 7, 0,171, 12, 7, 0,172, 12, 4, 0, 30, 0,124, 0, 12, 0,122, 0,143, 12,
-150, 0, 56, 3, 7, 0,143, 1, 7, 0,119, 8, 7, 0,173, 12, 7, 0,174, 12, 7, 0,175, 12, 2, 0,176, 12, 2, 0,177, 12,
- 2, 0,178, 12, 2, 0, 16, 0, 4, 0, 92, 0,125, 0, 15, 0,122, 0,143, 12,141, 0, 33, 3, 7, 0,194, 9, 7, 0,179, 12,
- 7, 0,180, 12, 4, 0,181, 12, 7, 0, 79, 1, 7, 0,182, 12, 4, 0, 35, 10, 4, 0, 29, 3, 4, 0,183, 12, 7, 0,152, 12,
- 2, 0, 16, 0, 2, 0, 27, 0, 4, 0, 30, 0, 1, 2, 15, 0, 22, 0, 32, 0, 34, 0, 75, 0, 46, 1,229, 8, 7, 0,184, 12,
- 7, 0,185, 12, 7, 0,186, 12, 7, 0,187, 12, 7, 0,150, 9, 7, 0,188, 12, 7, 0,189, 12, 7, 0,190, 12, 7, 0, 84, 4,
- 7, 0,231, 8, 2, 0, 18, 0, 2, 0,114, 9,231, 0, 3, 0, 4, 0,126, 0, 2, 0,216, 6, 2, 0,191, 12, 2, 2, 5, 0,
- 0, 0,195, 8, 2, 0,196, 8, 2, 0, 74, 5, 2, 0,192, 12, 2, 0,193, 12,229, 0, 16, 0, 22, 0, 32, 0, 34, 0, 75, 0,
- 0, 0, 35, 0, 4, 0,143, 0, 4, 0,144, 0, 4, 0,194, 12, 7, 0,162, 0, 7, 0,163, 0, 44, 0,138, 0, 3, 2,152, 9,
-178, 0,182, 3, 4, 2,195, 12, 11, 0,196, 12, 2, 2,197, 12, 4, 0, 18, 0, 4, 0, 22, 0, 13, 1, 10, 0, 4, 0,132, 0,
- 4, 0,198, 12, 52, 0,199, 12, 7, 0,200, 12, 2, 0,201, 12, 0, 0,181, 2, 4, 0,126, 0, 5, 2,175, 3, 6, 2,202, 12,
- 7, 0,203, 12, 7, 2, 3, 0, 4, 0,126, 0, 7, 0,204, 12, 7, 0, 79, 1, 8, 2, 11, 0, 11, 0,205, 12, 7, 0,206, 12,
- 7, 0,207, 12, 7, 0, 27, 0, 7, 0,208, 12, 2, 0,209, 12, 2, 0, 67, 0, 7, 0,210, 12, 7, 0,211, 12, 7, 0,212, 12,
- 7, 0,213, 12, 6, 2, 3, 0, 7, 0,214, 12, 4, 0,126, 0, 4, 0, 18, 0, 5, 2, 24, 0, 5, 2, 0, 0, 5, 2, 1, 0,
- 0, 0, 19, 0, 7, 0,215, 12, 7, 0,216, 12, 7, 0,217, 12, 7, 0,218, 12, 7, 0, 6, 11, 4, 0,219, 12, 4, 0,220, 12,
- 6, 2,221, 12, 7, 0,222, 12, 7, 0,204, 12, 4, 0, 18, 0, 4, 0,223, 12, 4, 0,224, 12, 7, 0, 85, 12, 2, 0,225, 12,
- 2, 0,227, 3, 2, 0,226, 12, 2, 0,227, 12, 2, 0,228, 12, 2, 0, 30, 0, 7, 0,229, 12, 9, 2, 22, 0, 4, 0, 18, 0,
- 2, 0,230, 12, 2, 0,231, 12, 7, 0,232, 12, 2, 0,233, 12, 2, 0,234, 12, 2, 0,235, 12, 2, 0,236, 12, 2, 0,237, 12,
- 2, 0,238, 12, 2, 0,239, 12, 2, 0, 3, 3, 4, 0,240, 12, 4, 0,241, 12, 2, 0,242, 12, 2, 0, 30, 0, 7, 0, 94, 1,
- 4, 0,243, 12, 4, 0,244, 12, 7, 0,245, 12, 7, 0,246, 12, 4, 0,247, 1, 10, 2, 12, 0, 4, 0, 18, 0, 4, 0,247, 12,
- 4, 0,248, 12, 7, 0,249, 12, 5, 2,250, 12, 7, 0,251, 12, 7, 0,252, 12, 7, 0,253, 12, 4, 0,190, 1, 4, 0,132, 0,
- 7, 0,148, 3, 52, 0,254, 12, 11, 2, 5, 0, 4, 0, 18, 0, 7, 0,204, 12, 4, 0,255, 12, 4, 0, 0, 13, 7, 2, 1, 13,
- 12, 2, 7, 0, 12, 2, 0, 0, 12, 2, 1, 0, 0, 0, 19, 0, 4, 0, 18, 0, 7, 0,148, 3, 14, 0, 2, 13, 11, 2, 3, 13,
- 13, 2, 1, 0, 0, 0, 4, 13, 14, 2, 5, 0, 14, 2, 0, 0, 14, 2, 1, 0, 5, 2,175, 3, 4, 0, 18, 0, 4, 0, 27, 0,
- 15, 2, 3, 0, 14, 0,255, 9, 4, 0, 5, 13, 4, 0, 27, 0, 4, 2, 11, 0, 9, 2, 6, 13, 8, 2, 7, 13, 14, 0, 2, 13,
- 11, 2, 3, 13, 10, 2, 8, 13, 5, 2, 9, 13, 14, 0, 10, 13, 4, 0, 11, 13, 4, 0, 12, 13, 13, 2, 91, 6, 15, 2, 13, 13,
- 16, 2, 48, 0, 16, 2, 0, 0, 16, 2, 1, 0,169, 0,145, 3, 17, 2, 2, 0, 64, 0, 14, 13,187, 0,154, 4,139, 0,153, 4,
- 14, 0, 21, 3, 4, 0, 15, 13, 0, 0, 19, 0, 2, 0,163, 10, 2, 0, 16, 0, 2, 0, 16, 13, 2, 0, 17, 13, 2, 0, 18, 13,
- 2, 0, 19, 13, 2, 0, 20, 13, 2, 0, 21, 13, 4, 0, 92, 0, 4, 0,186, 3, 4, 0, 22, 13, 4, 0, 23, 13, 4, 0,195, 9,
- 4, 0,196, 9, 4, 0, 27, 0, 7, 0, 24, 13, 47, 0, 25, 13, 0, 0, 26, 13, 4, 0, 27, 13, 4, 0,162, 12, 7, 0, 28, 13,
- 7, 0, 29, 13, 7, 0, 30, 13, 7, 0, 31, 13, 7, 0, 32, 13, 7, 0, 33, 13, 7, 0, 34, 13, 7, 0, 35, 13, 7, 0, 36, 13,
- 7, 0, 37, 13, 7, 0, 38, 13, 7, 0, 39, 13, 7, 0, 40, 13, 7, 0, 41, 13, 0, 0,202, 2, 0, 0, 42, 13, 0, 0, 43, 13,
- 0, 0, 44, 13,169, 0, 7, 0,168, 0, 45, 13,143, 0, 35, 3, 14, 0, 46, 13, 2, 0, 47, 13, 2, 0, 92, 0, 4, 0, 27, 0,
- 0, 0, 48, 13,170, 0, 24, 0,168, 0, 45, 13,143, 0, 35, 3,150, 0, 56, 3, 63, 0, 26, 2, 4, 0, 92, 0, 4, 0, 49, 13,
- 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,178, 1, 7, 0, 50, 13, 7, 0, 51, 13, 7, 0, 52, 13, 7, 0, 53, 13,
- 50, 0, 54, 13, 50, 0, 55, 13, 2, 0, 56, 13, 2, 0,223, 10, 2, 0, 57, 13, 2, 0, 27, 0, 7, 0, 58, 13, 7, 0, 59, 13,
- 7, 0, 60, 13, 7, 0, 61, 13, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 48, 0, 15, 0, 0, 0, 35, 0, 11, 0,226, 0, 0, 0,227, 0,
+ 0, 0,228, 0, 4, 0,229, 0, 4, 0,230, 0, 11, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 4, 0,235, 0,
+ 11, 0,236, 0, 11, 0,237, 0, 4, 0,238, 0, 4, 0, 27, 0, 49, 0, 6, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0,
+ 7, 0,239, 0, 7, 0, 65, 0, 4, 0, 62, 0, 50, 0, 5, 0, 2, 0, 18, 0, 2, 0,240, 0, 2, 0, 62, 0, 2, 0,241, 0,
+ 49, 0,234, 0, 51, 0, 17, 0, 27, 0,167, 0, 42, 0,242, 0, 52, 0,243, 0, 7, 0,244, 0, 7, 0,245, 0, 2, 0, 16, 0,
+ 2, 0,246, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,247, 0, 4, 0,248, 0, 2, 0,249, 0, 2, 0,250, 0, 4, 0,131, 0,
+ 4, 0,143, 0, 2, 0,251, 0, 2, 0,252, 0, 53, 0, 25, 0, 2, 0, 18, 0, 2, 0,253, 0, 7, 0,254, 0, 7, 0,255, 0,
+ 2, 0,142, 0, 2, 0, 0, 1, 4, 0, 1, 1, 4, 0, 2, 1, 27, 0,167, 0, 4, 0, 3, 1, 2, 0, 4, 1, 2, 0, 5, 1,
+ 11, 0, 6, 1, 7, 0, 7, 1, 7, 0, 8, 1, 2, 0, 9, 1, 2, 0, 10, 1, 2, 0, 11, 1, 2, 0, 12, 1, 7, 0, 13, 1,
+ 7, 0, 14, 1, 7, 0, 15, 1, 7, 0, 16, 1, 50, 0, 17, 1, 54, 0, 18, 1, 55, 0, 13, 0, 4, 0, 19, 1, 4, 0, 20, 1,
+ 2, 0, 21, 1, 2, 0, 18, 0, 2, 0, 22, 1, 2, 0, 23, 1, 27, 0,167, 0, 7, 0, 24, 1, 4, 0, 25, 1, 0, 0, 26, 1,
+ 7, 0, 27, 1, 4, 0, 28, 1, 4, 0,131, 0, 56, 0, 4, 0, 27, 0,167, 0, 0, 0, 29, 1, 4, 0, 30, 1, 4, 0, 27, 0,
+ 47, 0, 64, 0, 22, 0, 32, 0, 34, 0, 74, 0, 7, 0, 31, 1, 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1,
+ 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 7, 0, 30, 0, 7, 0, 40, 1, 7, 0, 41, 1, 7, 0, 42, 1,
+ 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1,
+ 7, 0, 51, 1, 2, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, 2, 0, 55, 1, 2, 0, 56, 1, 2, 0, 57, 1, 2, 0, 58, 1,
+ 2, 0, 18, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0, 59, 1, 7, 0, 60, 1, 7, 0, 61, 1, 7, 0, 62, 1, 4, 0, 63, 1,
+ 4, 0, 64, 1, 2, 0, 65, 1, 2, 0, 66, 1, 2, 0, 22, 1, 2, 0,129, 0, 4, 0, 22, 0, 4, 0,126, 0, 4, 0,127, 0,
+ 4, 0,128, 0, 7, 0, 67, 1, 7, 0, 68, 1, 7, 0, 66, 0, 40, 0, 69, 1, 57, 0, 70, 1, 31, 0, 79, 0, 42, 0,242, 0,
+ 48, 0, 71, 1, 50, 0, 17, 1, 51, 0, 72, 1, 25, 0,153, 0, 53, 0, 73, 1, 55, 0, 74, 1, 56, 0, 75, 1, 0, 0, 76, 1,
+ 0, 0,123, 0, 58, 0, 13, 0, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0,175, 0, 4, 0, 18, 0, 0, 0,170, 0, 0, 0,171, 0,
+ 0, 0,172, 0, 0, 0,173, 0, 4, 0, 27, 0, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 27, 0, 43, 0, 59, 0, 9, 0,
+ 50, 0, 82, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 4, 0, 18, 0, 7, 0, 83, 1, 7, 0, 84, 1, 4, 0, 85, 1,
+ 4, 0, 86, 1, 60, 0, 76, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 87, 1, 2, 0,178, 0,
+ 2, 0, 88, 1, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0, 89, 1, 7, 0, 90, 1, 7, 0, 91, 1,
+ 7, 0, 92, 1, 7, 0, 93, 1, 7, 0, 94, 1, 7, 0, 95, 1, 7, 0, 96, 1, 7, 0, 97, 1, 7, 0, 98, 1, 7, 0, 99, 1,
+ 54, 0,100, 1, 2, 0,253, 0, 2, 0, 30, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,101, 1, 7, 0,102, 1, 7, 0,103, 1,
+ 7, 0,104, 1, 7, 0,105, 1, 7, 0,106, 1, 2, 0,107, 1, 2, 0,108, 1, 2, 0,109, 1, 2, 0,110, 1, 0, 0,111, 1,
+ 0, 0,112, 1, 2, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, 2, 0,116, 1, 2, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1,
+ 7, 0,120, 1, 7, 0,121, 1, 2, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 2, 0,127, 1,
+ 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1,
+ 7, 0,136, 1, 7, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 2, 0,141, 1, 0, 0,142, 1, 31, 0, 79, 0,
+ 46, 0,143, 1, 2, 0,144, 1, 2, 0, 76, 1, 0, 0,145, 1, 25, 0,153, 0, 57, 0, 70, 1, 61, 0, 18, 0, 7, 0,146, 1,
+ 7, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 7, 0,154, 1,
+ 7, 0,155, 1, 2, 0,156, 1, 2, 0,157, 1, 2, 0,158, 1, 2, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1,
+ 7, 0,163, 1, 62, 0, 4, 0, 4, 0, 18, 0, 4, 0,164, 1, 4, 0,165, 1, 4, 0, 66, 0, 63, 0,126, 0, 22, 0, 32, 0,
+ 34, 0, 74, 0, 2, 0,166, 1, 2, 0, 18, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,167, 1, 7, 0,168, 1,
+ 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1, 7, 0,175, 1, 7, 0,176, 1,
+ 7, 0,177, 1, 7, 0,178, 1, 7, 0,179, 1, 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1,
+ 7, 0,185, 1, 7, 0,186, 1, 61, 0,187, 1, 62, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1, 7, 0,191, 1, 7, 0,192, 1,
+ 7, 0,193, 1, 7, 0,194, 1, 7, 0,195, 1, 2, 0,196, 1, 2, 0,197, 1, 2, 0,198, 1, 0, 0,199, 1, 0, 0,200, 1,
+ 7, 0,201, 1, 7, 0,202, 1, 2, 0,203, 1, 2, 0,204, 1, 7, 0,205, 1, 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1,
+ 2, 0,209, 1, 2, 0,210, 1, 4, 0, 87, 1, 4, 0,211, 1, 2, 0,212, 1, 2, 0,213, 1, 2, 0,214, 1, 2, 0,215, 1,
+ 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 7, 0,222, 1, 7, 0,223, 1,
+ 7, 0,224, 1, 7, 0,225, 1, 0, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, 7, 0,229, 1, 4, 0,230, 1, 0, 0,231, 1,
+ 0, 0,124, 1, 0, 0,232, 1, 0, 0, 76, 1, 2, 0,233, 1, 2, 0,234, 1, 2, 0,144, 1, 2, 0,235, 1, 2, 0,236, 1,
+ 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 7, 0,240, 1, 7, 0,241, 1, 7, 0,242, 1, 2, 0,163, 0, 2, 0,164, 0,
+ 50, 0,243, 1, 50, 0,244, 1, 0, 0,245, 1, 0, 0,246, 1, 0, 0,247, 1, 0, 0,248, 1, 2, 0,249, 1, 2, 0,250, 1,
+ 7, 0,251, 1, 7, 0,252, 1, 46, 0,143, 1, 57, 0, 70, 1, 31, 0, 79, 0, 64, 0,253, 1, 25, 0,153, 0, 7, 0,254, 1,
+ 7, 0,255, 1, 7, 0, 0, 2, 7, 0, 1, 2, 7, 0, 2, 2, 2, 0, 3, 2, 2, 0, 30, 0, 7, 0, 4, 2, 7, 0, 5, 2,
+ 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, 7, 0, 9, 2, 7, 0, 10, 2, 7, 0, 11, 2, 7, 0, 12, 2, 2, 0, 13, 2,
+ 2, 0, 14, 2, 4, 0, 15, 2, 2, 0, 16, 2, 2, 0, 17, 2, 14, 0, 18, 2, 65, 0, 4, 0, 22, 0, 32, 0, 0, 0, 35, 0,
+ 66, 0, 2, 0, 38, 0,152, 0, 67, 0, 20, 0, 67, 0, 0, 0, 67, 0, 1, 0, 68, 0, 19, 2, 2, 0, 16, 0, 2, 0, 18, 0,
+ 2, 0, 20, 2, 2, 0, 21, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 22, 2, 7, 0, 23, 2, 7, 0, 24, 2,
+ 7, 0, 25, 2, 7, 0, 26, 2, 7, 0, 27, 2, 7, 0, 28, 2, 7, 0, 22, 0, 7, 0, 29, 2, 7, 0, 30, 2, 69, 0, 20, 0,
+ 22, 0, 32, 0, 34, 0, 74, 0, 68, 0, 19, 2, 14, 0, 31, 2, 14, 0, 32, 2, 14, 0, 33, 2, 31, 0, 79, 0, 63, 0, 34, 2,
+ 0, 0, 18, 0, 0, 0, 35, 2, 2, 0, 36, 2, 2, 0,177, 0, 2, 0, 27, 0, 7, 0, 77, 1, 7, 0,175, 0, 7, 0, 78, 1,
+ 7, 0, 37, 2, 7, 0, 38, 2, 7, 0, 39, 2, 67, 0, 40, 2, 30, 0, 11, 0, 7, 0, 41, 2, 7, 0, 42, 2, 7, 0, 43, 2,
+ 7, 0,255, 0, 2, 0, 53, 0, 0, 0, 44, 2, 0, 0, 45, 2, 0, 0, 46, 2, 0, 0, 47, 2, 0, 0, 48, 2, 0, 0, 49, 2,
+ 29, 0, 7, 0, 7, 0, 50, 2, 7, 0, 42, 2, 7, 0, 43, 2, 2, 0, 46, 2, 2, 0, 49, 2, 7, 0,255, 0, 7, 0, 27, 0,
+ 70, 0, 21, 0, 70, 0, 0, 0, 70, 0, 1, 0, 2, 0, 16, 0, 2, 0, 51, 2, 2, 0, 49, 2, 2, 0, 18, 0, 2, 0, 52, 2,
+ 2, 0, 53, 2, 2, 0, 54, 2, 2, 0, 55, 2, 2, 0, 56, 2, 2, 0, 57, 2, 2, 0, 58, 2, 2, 0, 59, 2, 7, 0, 60, 2,
+ 7, 0, 61, 2, 29, 0, 47, 0, 30, 0, 48, 0, 2, 0, 62, 2, 2, 0, 63, 2, 4, 0, 64, 2, 71, 0, 5, 0, 2, 0, 65, 2,
+ 2, 0, 51, 2, 0, 0, 18, 0, 0, 0, 27, 0, 2, 0, 30, 0, 72, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 66, 2,
+ 7, 0, 67, 2, 73, 0, 4, 0, 14, 0, 68, 2, 74, 0, 69, 2, 4, 0, 70, 2, 0, 0, 93, 0, 75, 0, 70, 0, 22, 0, 32, 0,
+ 34, 0, 74, 0, 68, 0, 19, 2, 14, 0, 71, 2, 14, 0, 32, 2, 73, 0, 72, 2, 27, 0, 73, 2, 27, 0, 74, 2, 27, 0, 75, 2,
+ 31, 0, 79, 0, 76, 0, 76, 2, 33, 0, 77, 2, 63, 0, 34, 2, 14, 0, 78, 2, 7, 0, 77, 1, 7, 0,175, 0, 7, 0, 78, 1,
+ 2, 0, 16, 0, 2, 0,177, 0, 2, 0, 79, 2, 2, 0, 80, 2, 7, 0, 81, 2, 7, 0, 82, 2, 4, 0, 83, 2, 2, 0, 27, 0,
+ 2, 0, 36, 2, 2, 0, 18, 0, 2, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, 7, 0, 87, 2, 2, 0, 54, 2, 2, 0, 55, 2,
+ 2, 0, 88, 2, 2, 0, 89, 2, 4, 0, 90, 2, 11, 0, 91, 2, 2, 0, 22, 0, 2, 0, 96, 0, 2, 0, 65, 0, 2, 0, 92, 2,
+ 7, 0, 93, 2, 7, 0, 94, 2, 7, 0, 95, 2, 7, 0, 96, 2, 7, 0, 97, 2, 7, 0, 98, 2, 7, 0, 99, 2, 7, 0,100, 2,
+ 7, 0,101, 2, 7, 0,102, 2, 0, 0,103, 2, 77, 0,104, 2, 78, 0,105, 2, 0, 0,106, 2, 65, 0,107, 2, 65, 0,108, 2,
+ 65, 0,109, 2, 65, 0,110, 2, 4, 0,111, 2, 7, 0, 83, 0, 4, 0,112, 2, 4, 0,113, 2, 72, 0,114, 2, 4, 0,115, 2,
+ 4, 0,116, 2, 71, 0,117, 2, 71, 0,118, 2, 7, 0,119, 2, 7, 0,120, 2, 79, 0, 47, 0, 22, 0, 32, 0, 34, 0, 74, 0,
+ 68, 0, 19, 2, 31, 0, 79, 0, 33, 0, 77, 2, 63, 0, 34, 2, 80, 0,121, 2, 81, 0,122, 2, 82, 0,123, 2, 83, 0,124, 2,
+ 84, 0,125, 2, 85, 0,126, 2, 86, 0,127, 2, 87, 0,128, 2, 88, 0,129, 2, 89, 0,130, 2, 90, 0,131, 2, 91, 0,132, 2,
+ 92, 0,133, 2, 93, 0,134, 2, 79, 0,135, 2, 94, 0,136, 2, 95, 0,137, 2, 95, 0,138, 2, 95, 0,139, 2, 95, 0,140, 2,
+ 95, 0,141, 2, 4, 0, 52, 0, 4, 0,142, 2, 4, 0,143, 2, 4, 0,144, 2, 4, 0,145, 2, 4, 0,146, 2, 4, 0,147, 2,
+ 7, 0, 77, 1, 7, 0,175, 0, 7, 0, 78, 1, 2, 0,177, 0, 2, 0, 79, 2, 2, 0,148, 2, 2, 0, 18, 0, 2, 0,149, 2,
+ 2, 0,150, 2, 0, 0,151, 2, 0, 0,152, 2, 2, 0, 36, 2, 96, 0,153, 2, 88, 0, 8, 0, 11, 0,154, 2, 7, 0,155, 2,
+ 4, 0,156, 2, 0, 0, 18, 0, 0, 0,157, 2, 2, 0, 87, 1, 2, 0,158, 2, 2, 0,159, 2, 86, 0, 7, 0, 4, 0,160, 2,
+ 4, 0,161, 2, 4, 0,162, 2, 4, 0,163, 2, 2, 0, 51, 2, 0, 0,164, 2, 0, 0, 18, 0, 90, 0, 5, 0, 4, 0,160, 2,
+ 4, 0,161, 2, 0, 0,165, 2, 0, 0,166, 2, 2, 0, 18, 0, 97, 0, 2, 0, 4, 0,167, 2, 7, 0, 43, 2, 91, 0, 3, 0,
+ 97, 0,168, 2, 4, 0,169, 2, 4, 0, 18, 0, 89, 0, 4, 0, 7, 0,170, 2, 2, 0,171, 2, 0, 0, 18, 0, 0, 0,166, 2,
+ 92, 0, 4, 0, 0, 0,239, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, 81, 0, 5, 0, 4, 0,172, 2, 4, 0,146, 2,
+ 2, 0, 51, 2, 0, 0, 18, 0, 0, 0, 27, 0, 83, 0, 2, 0, 4, 0,173, 2, 4, 0,174, 2, 82, 0, 6, 0, 42, 0,154, 2,
+ 0, 0, 18, 0, 0, 0,157, 2, 2, 0, 87, 1, 2, 0,158, 2, 2, 0,159, 2, 84, 0, 2, 0, 7, 0,175, 2, 4, 0, 18, 0,
+ 85, 0, 4, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,239, 0, 93, 0, 1, 0, 7, 0,176, 2, 80, 0, 2, 0,
+ 4, 0, 17, 2, 4, 0, 16, 0, 87, 0, 7, 0, 7, 0,155, 2, 42, 0,154, 2, 0, 0, 18, 0, 0, 0,157, 2, 2, 0, 87, 1,
+ 2, 0,158, 2, 2, 0,159, 2, 98, 0, 1, 0, 7, 0,177, 2, 99, 0, 1, 0, 4, 0,178, 2,100, 0, 1, 0, 0, 0,179, 2,
+101, 0, 1, 0, 7, 0,155, 2,102, 0, 1, 0, 7, 0,175, 2,103, 0, 4, 0, 4, 0,180, 2, 4, 0,181, 2, 7, 0,182, 2,
+ 4, 0,183, 2,104, 0, 4, 0, 7, 0,239, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0,105, 0, 1, 0,104, 0,156, 2,
+106, 0, 5, 0, 4, 0,184, 2, 4, 0,185, 2, 0, 0, 18, 0, 0, 0, 51, 2, 0, 0,186, 2,107, 0, 2, 0, 4, 0,187, 2,
+ 4, 0,185, 2,108, 0, 10, 0,108, 0, 0, 0,108, 0, 1, 0,106, 0,188, 2,105, 0,189, 2,107, 0,190, 2, 4, 0, 52, 0,
+ 4, 0,143, 2, 4, 0,142, 2, 4, 0, 27, 0, 89, 0,191, 2, 96, 0, 14, 0, 14, 0,192, 2, 89, 0,191, 2, 0, 0,193, 2,
+ 0, 0,194, 2, 0, 0,195, 2, 0, 0,196, 2, 0, 0,197, 2, 0, 0,198, 2, 0, 0,199, 2, 0, 0, 18, 0, 95, 0,137, 2,
+ 95, 0,139, 2, 2, 0,200, 2, 0, 0,201, 2,109, 0, 1, 0, 4, 0,178, 2,110, 0, 3, 0, 7, 0, 2, 0, 4, 0,181, 2,
+ 4, 0, 27, 0,111, 0, 9, 0,111, 0, 0, 0,111, 0, 1, 0, 4, 0, 16, 0, 4, 0, 87, 1, 4, 0,202, 2, 4, 0, 27, 0,
+ 0, 0, 19, 0, 41, 0,124, 0, 0, 0,203, 2,112, 0, 6, 0,111, 0,204, 2, 47, 0,205, 2, 27, 0,206, 2, 0, 0,207, 2,
+ 4, 0,208, 2, 4, 0,209, 2,113, 0, 7, 0,111, 0,204, 2, 2, 0,210, 2, 2, 0,192, 2, 2, 0,211, 2, 2, 0, 91, 0,
+ 11, 0,212, 2, 11, 0,213, 2,114, 0, 5, 0,111, 0,204, 2, 27, 0,167, 0, 0, 0, 19, 0, 7, 0,214, 2, 0, 0, 93, 0,
+115, 0, 5, 0,111, 0,204, 2, 27, 0,167, 0, 0, 0, 19, 0, 2, 0,215, 2, 0, 0,216, 2,116, 0, 5, 0,111, 0,204, 2,
+ 7, 0, 89, 0, 7, 0,217, 2, 4, 0,218, 2, 4, 0,219, 2,117, 0, 5, 0,111, 0,204, 2, 27, 0,220, 2, 0, 0, 71, 0,
+ 4, 0, 87, 1, 4, 0, 18, 0,118, 0, 13, 0,111, 0,204, 2, 27, 0,221, 2, 27, 0,222, 2, 27, 0,223, 2, 27, 0,224, 2,
+ 7, 0,225, 2, 7, 0,226, 2, 7, 0,217, 2, 7, 0,227, 2, 4, 0,228, 2, 4, 0,229, 2, 4, 0, 91, 0, 4, 0,230, 2,
+119, 0, 5, 0,111, 0,204, 2, 2, 0,231, 2, 2, 0, 18, 0, 7, 0,232, 2, 27, 0,233, 2,120, 0, 3, 0,111, 0,204, 2,
+ 7, 0,234, 2, 4, 0, 91, 0,121, 0, 10, 0,111, 0,204, 2, 7, 0,235, 2, 4, 0,236, 2, 4, 0, 27, 0, 2, 0, 91, 0,
+ 2, 0,237, 2, 2, 0,238, 2, 2, 0,239, 2, 7, 0,240, 2, 0, 0,241, 2,122, 0, 3, 0,111, 0,204, 2, 7, 0, 27, 0,
+ 4, 0, 16, 0,123, 0, 6, 0,111, 0,204, 2,124, 0,242, 2,125, 0,243, 2,126, 0,244, 2, 7, 0,245, 2, 4, 0, 16, 0,
+127, 0, 11, 0,111, 0,204, 2, 47, 0,205, 2, 27, 0,206, 2, 0, 0,207, 2, 4, 0,208, 2, 4, 0,209, 2, 7, 0,214, 2,
+ 4, 0,246, 2, 0, 0,241, 2, 7, 0,247, 2, 4, 0, 27, 0,128, 0, 12, 0,111, 0,204, 2, 27, 0,248, 2, 42, 0,249, 2,
+ 4, 0, 91, 0, 4, 0,250, 2, 7, 0,251, 2, 7, 0,252, 2, 7, 0,253, 2, 7, 0,254, 2, 0, 0,207, 2, 4, 0,208, 2,
+ 4, 0, 27, 0,129, 0, 3, 0,111, 0,204, 2, 7, 0,255, 2, 4, 0, 0, 3,130, 0, 5, 0,111, 0,204, 2, 7, 0, 1, 3,
+ 0, 0,241, 2, 2, 0, 18, 0, 2, 0, 2, 3,131, 0, 8, 0,111, 0,204, 2, 27, 0,167, 0, 7, 0, 1, 3, 7, 0,255, 0,
+ 7, 0,107, 0, 0, 0,241, 2, 2, 0, 18, 0, 2, 0, 16, 0,132, 0, 21, 0,111, 0,204, 2, 47, 0,205, 2, 27, 0,206, 2,
+ 0, 0,207, 2, 4, 0,208, 2, 4, 0,209, 2, 27, 0, 3, 3, 0, 0,241, 2, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 4, 3,
+ 7, 0, 5, 3, 7, 0, 6, 3, 7, 0, 85, 2, 7, 0, 7, 3, 7, 0, 8, 3, 7, 0, 9, 3, 7, 0, 10, 3, 7, 0, 11, 3,
+ 7, 0, 12, 3, 7, 0, 66, 0,133, 0, 7, 0,111, 0,204, 2, 2, 0, 13, 3, 2, 0, 14, 3, 4, 0, 30, 0, 27, 0,167, 0,
+ 7, 0, 15, 3, 0, 0,241, 2,134, 0, 10, 0,111, 0,204, 2, 27, 0,167, 0, 0, 0, 16, 3, 7, 0, 17, 3, 7, 0, 18, 3,
+ 7, 0, 10, 3, 4, 0, 19, 3, 4, 0, 20, 3, 7, 0, 21, 3, 0, 0, 19, 0,135, 0, 1, 0,111, 0,204, 2,136, 0, 7, 0,
+111, 0,204, 2, 41, 0,124, 0,137, 0, 22, 3,138, 0, 23, 3,139, 0, 24, 3,140, 0, 25, 3, 14, 0, 26, 3,141, 0, 13, 0,
+111, 0,204, 2, 89, 0, 27, 3, 89, 0, 28, 3, 89, 0, 29, 3, 89, 0, 30, 3, 89, 0, 31, 3, 89, 0, 32, 3, 86, 0, 33, 3,
+ 4, 0, 34, 3, 4, 0, 35, 3, 7, 0, 36, 3, 7, 0, 37, 3,142, 0, 38, 3,143, 0, 7, 0,111, 0,204, 2, 89, 0, 27, 3,
+ 89, 0, 39, 3,144, 0, 40, 3,145, 0, 38, 3, 4, 0, 41, 3, 4, 0, 34, 3,146, 0, 4, 0,111, 0,204, 2, 27, 0,167, 0,
+ 4, 0, 42, 3, 4, 0, 27, 0,147, 0, 2, 0, 4, 0, 43, 3, 7, 0, 43, 2,148, 0, 2, 0, 4, 0,127, 0, 4, 0, 44, 3,
+149, 0, 24, 0,111, 0,204, 2, 27, 0,167, 0, 0, 0,241, 2, 2, 0, 45, 3, 2, 0, 18, 0, 2, 0, 87, 1, 2, 0, 27, 0,
+147, 0, 46, 3, 4, 0, 47, 3, 7, 0, 48, 3, 4, 0, 52, 0, 4, 0, 49, 3,148, 0, 50, 3,147, 0, 51, 3, 4, 0, 52, 3,
+ 4, 0, 53, 3, 4, 0, 54, 3, 4, 0, 44, 3, 7, 0, 55, 3, 7, 0, 56, 3, 7, 0, 57, 3, 7, 0, 58, 3, 7, 0, 59, 3,
+ 11, 0, 60, 3,150, 0, 8, 0,111, 0,204, 2,151, 0, 61, 3,144, 0, 40, 3, 4, 0, 62, 3, 4, 0, 63, 3, 4, 0, 64, 3,
+ 2, 0, 18, 0, 2, 0, 55, 0,152, 0, 8, 0,111, 0,204, 2, 27, 0, 43, 0, 2, 0, 3, 1, 2, 0, 18, 0, 2, 0,231, 2,
+ 2, 0, 55, 0, 7, 0, 65, 3, 7, 0, 66, 3,153, 0, 6, 0,111, 0,204, 2, 4, 0, 67, 3, 2, 0, 18, 0, 2, 0, 68, 3,
+ 7, 0, 69, 3, 0, 0,169, 0,154, 0, 8, 0,111, 0,204, 2, 0, 0, 70, 3, 0, 0, 71, 3, 0, 0,198, 2, 0, 0, 72, 3,
+ 0, 0, 73, 3, 0, 0, 91, 0, 0, 0,186, 2,155, 0, 3, 0,111, 0,204, 2,156, 0, 74, 3,140, 0, 25, 3,157, 0, 10, 0,
+111, 0,204, 2, 27, 0, 75, 3, 27, 0, 76, 3, 0, 0, 77, 3, 7, 0, 78, 3, 2, 0, 79, 3, 2, 0, 80, 3, 0, 0, 81, 3,
+ 0, 0, 82, 3, 0, 0,216, 2,158, 0, 9, 0,111, 0,204, 2, 27, 0, 83, 3, 0, 0, 77, 3, 7, 0, 84, 3, 7, 0, 85, 3,
+ 0, 0, 87, 1, 0, 0,231, 2, 0, 0, 86, 3, 0, 0, 27, 0,159, 0, 1, 0,111, 0,204, 2,160, 0, 11, 0,111, 0,204, 2,
+ 0, 0,241, 2, 7, 0,127, 0, 7, 0, 87, 3, 7, 0, 88, 3, 7, 0, 89, 3, 7, 0, 90, 3, 7, 0, 91, 3, 4, 0, 18, 0,
+ 2, 0, 92, 3, 2, 0, 93, 3,161, 0, 9, 0,111, 0,204, 2, 27, 0, 94, 3, 4, 0, 95, 3, 4, 0, 96, 3, 4, 0, 97, 3,
+ 7, 0, 98, 3, 7, 0, 99, 3, 2, 0,231, 2, 2, 0, 18, 0,162, 0, 29, 0,111, 0,204, 2,163, 0,100, 3,164, 0,101, 3,
+ 4, 0,102, 3, 4, 0,103, 3, 7, 0,104, 3, 7, 0, 9, 3, 7, 0,105, 3, 7, 0,250, 0, 7, 0,106, 3, 7, 0,107, 3,
+ 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,245, 2, 4, 0,111, 3, 4, 0,112, 3, 0, 0,113, 3, 0, 0,114, 3,
+ 0, 0,115, 3, 0, 0,116, 3, 0, 0, 18, 0, 0, 0,117, 3, 2, 0,118, 3, 2, 0,119, 3, 4, 0,219, 2, 7, 0,107, 0,
+ 7, 0,120, 3, 4, 0, 27, 0,165, 0, 15, 0,111, 0,204, 2, 47, 0,205, 2, 27, 0,206, 2, 0, 0,207, 2, 4, 0,208, 2,
+ 4, 0,209, 2, 27, 0,121, 3, 27, 0,122, 3, 54, 0,100, 1, 0, 0,241, 2, 7, 0,214, 2, 7, 0,123, 3, 0, 0, 18, 0,
+ 0, 0,253, 0, 0, 0,216, 2,166, 0, 16, 0,111, 0,204, 2, 0, 0,241, 2, 2, 0,124, 3, 2, 0,253, 0, 7, 0,125, 3,
+ 54, 0,126, 3, 7, 0,127, 3, 7, 0,128, 3, 7, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3, 47, 0,132, 3, 27, 0,133, 3,
+ 4, 0,134, 3, 0, 0,135, 3, 4, 0,136, 3,167, 0, 16, 0,111, 0,204, 2, 0, 0,137, 3, 0, 0,138, 3, 7, 0,139, 3,
+ 7, 0,140, 3, 0, 0,141, 3, 0, 0,142, 3, 0, 0,143, 3, 7, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3, 47, 0,132, 3,
+ 27, 0,133, 3, 4, 0,134, 3, 0, 0,135, 3, 4, 0,136, 3,168, 0, 16, 0,111, 0,204, 2, 0, 0,241, 2, 4, 0,144, 3,
+ 4, 0,145, 3, 27, 0,146, 3, 7, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3, 47, 0,132, 3, 27, 0,133, 3, 4, 0,134, 3,
+ 0, 0,135, 3, 7, 0,147, 3, 7, 0,148, 3, 2, 0,253, 0, 2, 0,149, 3,169, 0, 5, 0,111, 0,204, 2,170, 0,150, 3,
+171, 0,151, 3, 4, 0, 16, 0, 4, 0, 27, 0,172, 0, 8, 0,111, 0,204, 2, 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3,
+ 0, 0,250, 0, 0, 0, 18, 0, 0, 0, 87, 1, 0, 0, 27, 0,173, 0, 3, 0,174, 0,155, 3, 4, 0, 70, 2, 0, 0, 93, 0,
+174, 0, 29, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0, 52, 2, 2, 0, 53, 2, 2, 0,156, 3, 2, 0, 18, 0, 2, 0,157, 3,
+ 2, 0,158, 3, 2, 0,159, 3, 2, 0, 30, 0, 0, 0,160, 3, 0, 0,161, 3, 0, 0,162, 3, 0, 0,250, 1, 4, 0, 27, 0,
+ 7, 0,163, 3, 7, 0,164, 3, 7, 0,165, 3, 7, 0,166, 3, 7, 0,167, 3, 7, 0,168, 3, 29, 0,169, 3, 31, 0, 79, 0,
+ 33, 0, 77, 2, 91, 0,132, 2, 0, 0, 71, 0, 7, 0,170, 3, 7, 0,171, 3,173, 0,172, 3,175, 0, 5, 0,175, 0, 0, 0,
+175, 0, 1, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,123, 0, 68, 0, 3, 0, 7, 0,173, 3, 4, 0, 18, 0, 4, 0, 27, 0,
+ 27, 0,128, 0, 22, 0, 32, 0, 34, 0, 74, 0,176, 0,174, 3, 2, 0, 16, 0, 2, 0,175, 3, 4, 0,176, 3, 4, 0,177, 3,
+ 4, 0,178, 3, 0, 0,179, 3, 27, 0, 37, 0, 27, 0,180, 3, 27, 0,181, 3, 27, 0,182, 3, 27, 0,183, 3, 31, 0, 79, 0,
+ 68, 0, 19, 2,177, 0,184, 3,177, 0,185, 3,178, 0,186, 3, 11, 0, 2, 0,179, 0,187, 3,180, 0,188, 3,181, 0,189, 3,
+ 14, 0,190, 3, 14, 0,191, 3, 14, 0, 32, 2, 14, 0,192, 3, 14, 0,193, 3, 4, 0, 87, 1, 4, 0,194, 3, 63, 0, 34, 2,
+ 0, 0,195, 3, 4, 0, 36, 2, 4, 0,196, 3, 7, 0, 77, 1, 7, 0,197, 3, 7, 0,198, 3, 7, 0,175, 0, 7, 0,199, 3,
+ 7, 0,200, 3, 7, 0, 78, 1, 7, 0,201, 3, 7, 0, 22, 2, 7, 0,202, 3, 7, 0,203, 3, 7, 0,204, 3, 7, 0,205, 3,
+ 7, 0,206, 3, 7, 0,207, 3, 7, 0, 17, 3, 7, 0,208, 3, 7, 0,244, 0, 7, 0,209, 3, 4, 0,210, 3, 4, 0,211, 3,
+ 2, 0, 18, 0, 2, 0,212, 3, 2, 0,213, 3, 2, 0,214, 3, 2, 0,215, 3, 2, 0,216, 3, 2, 0,217, 3, 2, 0,218, 3,
+ 2, 0,219, 3, 0, 0,220, 3, 0, 0,221, 3, 4, 0,222, 3, 4, 0,223, 3, 4, 0,224, 3, 4, 0,225, 3, 7, 0,226, 3,
+ 7, 0, 83, 0, 7, 0,227, 3, 7, 0,228, 3, 7, 0,229, 3, 7, 0,230, 3, 7, 0,231, 3, 7, 0,219, 0, 7, 0,232, 3,
+ 7, 0,233, 3, 7, 0,234, 3, 7, 0,235, 3, 7, 0,236, 3, 2, 0,237, 3, 0, 0,238, 3, 0, 0,239, 3, 0, 0,240, 3,
+ 0, 0,241, 3, 0, 0,109, 0, 0, 0,242, 3, 7, 0,243, 3, 7, 0,244, 3, 14, 0,245, 3, 14, 0,246, 3, 14, 0,247, 3,
+ 14, 0,248, 3, 7, 0,249, 3, 2, 0, 17, 2, 2, 0,250, 3, 7, 0,156, 2, 4, 0,251, 3, 4, 0,252, 3,182, 0,253, 3,
+ 2, 0,254, 3, 2, 0,251, 0, 7, 0,255, 3, 14, 0, 0, 4, 14, 0, 1, 4, 14, 0, 2, 4, 14, 0, 3, 4,183, 0, 73, 1,
+184, 0, 4, 4, 64, 0, 5, 4, 0, 0, 6, 4, 0, 0, 7, 4, 2, 0, 70, 2, 7, 0,148, 2,156, 0, 8, 4,144, 0, 9, 4,
+144, 0, 10, 4, 10, 0, 11, 4, 10, 0, 12, 4, 4, 0, 13, 4, 4, 0, 14, 4, 14, 0, 15, 4, 14, 0, 16, 4, 14, 0, 17, 4,
+ 7, 0, 18, 4,185, 0, 14, 0,185, 0, 0, 0,185, 0, 1, 0, 27, 0, 37, 0, 7, 0, 17, 3, 7, 0, 79, 1, 7, 0, 18, 3,
+ 7, 0, 10, 3, 0, 0, 19, 0, 4, 0, 19, 3, 4, 0, 20, 3, 4, 0, 19, 4, 2, 0, 16, 0, 2, 0, 20, 4, 7, 0, 21, 3,
+186, 0, 12, 0,186, 0, 0, 0,186, 0, 1, 0, 27, 0, 43, 0, 4, 0, 21, 4, 4, 0, 17, 2, 7, 0, 79, 1, 7, 0, 22, 4,
+ 7, 0, 23, 4, 7, 0,175, 2, 2, 0, 16, 0, 0, 0, 24, 4, 0, 0, 25, 4,183, 0, 40, 0, 4, 0, 18, 0, 2, 0, 26, 4,
+ 2, 0, 27, 4, 2, 0, 10, 3, 2, 0, 28, 4, 2, 0, 29, 4, 2, 0, 30, 4, 2, 0, 31, 4, 2, 0, 32, 4, 7, 0, 33, 4,
+ 7, 0, 34, 4, 7, 0, 35, 4, 7, 0, 36, 4, 7, 0, 37, 4, 7, 0, 38, 4, 7, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4,
+ 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 7, 0, 45, 4, 7, 0, 46, 4, 7, 0, 47, 4, 7, 0, 48, 4, 7, 0, 49, 4,
+ 7, 0, 50, 4, 7, 0, 51, 4, 7, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4, 7, 0, 55, 4, 7, 0, 56, 4, 7, 0, 57, 4,
+ 7, 0, 58, 4, 7, 0, 59, 4, 47, 0,168, 0,187, 0, 60, 4, 7, 0, 61, 4, 4, 0,219, 2,188, 0, 5, 0, 64, 0,253, 1,
+ 7, 0, 62, 4, 7, 0, 63, 4, 2, 0, 18, 0, 2, 0, 64, 4,189, 0, 5, 0,189, 0, 0, 0,189, 0, 1, 0, 4, 0, 16, 0,
+ 4, 0, 65, 4, 11, 0, 2, 0,190, 0, 9, 0,190, 0, 0, 0,190, 0, 1, 0, 4, 0, 66, 4, 4, 0, 67, 4, 4, 0, 68, 4,
+ 4, 0, 18, 0, 11, 0, 69, 4, 11, 0, 70, 4, 14, 0, 71, 4,140, 0, 23, 0,140, 0, 0, 0,140, 0, 1, 0, 4, 0, 18, 0,
+ 4, 0, 72, 4, 4, 0, 73, 4, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, 4, 0, 77, 4, 4, 0, 78, 4, 4, 0, 27, 0,
+ 4, 0, 67, 4, 4, 0, 17, 2, 2, 0, 79, 4, 2, 0, 55, 0, 0, 0, 19, 0, 0, 0, 80, 4, 0, 0, 81, 4, 0, 0, 82, 4,
+ 0, 0, 83, 4, 14, 0, 84, 4,191, 0, 85, 4, 11, 0, 86, 4,192, 0, 1, 0, 7, 0, 50, 2,182, 0, 30, 0, 4, 0, 18, 0,
+ 7, 0, 87, 4, 7, 0, 88, 4, 7, 0, 89, 4, 4, 0, 90, 4, 4, 0, 91, 4, 4, 0, 92, 4, 4, 0, 93, 4, 7, 0, 94, 4,
+ 7, 0, 95, 4, 7, 0, 96, 4, 7, 0, 97, 4, 7, 0, 98, 4, 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4,
+ 7, 0,103, 4, 7, 0,104, 4, 7, 0,105, 4, 7, 0,106, 4, 7, 0,107, 4, 7, 0,108, 4, 7, 0,109, 4, 7, 0,110, 4,
+ 7, 0,111, 4, 4, 0,112, 4, 4, 0,113, 4, 7, 0,114, 4, 7, 0,232, 3,184, 0, 54, 0, 4, 0, 67, 4, 4, 0,115, 4,
+193, 0,116, 4,194, 0,117, 4, 0, 0, 27, 0, 0, 0,118, 4, 2, 0,119, 4, 7, 0,120, 4, 0, 0,121, 4, 7, 0,122, 4,
+ 7, 0,123, 4, 7, 0,124, 4, 7, 0,125, 4, 7, 0,126, 4, 7, 0,127, 4, 7, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4,
+ 2, 0,131, 4, 0, 0,132, 4, 2, 0,133, 4, 7, 0,134, 4, 7, 0,135, 4, 0, 0,136, 4, 4, 0,128, 0, 4, 0,137, 4,
+ 4, 0,138, 4, 2, 0,139, 4, 2, 0,140, 4,192, 0,141, 4, 4, 0,142, 4, 4, 0, 81, 0, 7, 0,143, 4, 7, 0,144, 4,
+ 7, 0,145, 4, 7, 0,146, 4, 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4, 2, 0,150, 4, 2, 0,151, 4, 2, 0,152, 4,
+ 2, 0,153, 4, 2, 0,154, 4,195, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4,140, 0,158, 4, 14, 0, 26, 3,188, 0,159, 4,
+ 7, 0,160, 4, 7, 0,161, 4, 7, 0,162, 4, 4, 0,163, 4,196, 0, 1, 0, 7, 0,164, 4,156, 0, 52, 0,155, 0,165, 4,
+ 2, 0, 16, 0, 2, 0,166, 4, 2, 0,167, 4, 2, 0,168, 4, 7, 0,169, 4, 2, 0,170, 4, 2, 0,171, 4, 7, 0,172, 4,
+ 2, 0,173, 4, 2, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, 4, 0,178, 4, 4, 0,179, 4, 4, 0,180, 4,
+ 4, 0, 27, 0, 7, 0,181, 4, 4, 0,182, 4, 7, 0,183, 4, 7, 0,184, 4, 7, 0,185, 4, 79, 0,186, 4, 79, 0,187, 4,
+ 0, 0,188, 4, 7, 0,189, 4, 7, 0,190, 4, 31, 0, 79, 0, 2, 0,191, 4, 0, 0,192, 4, 0, 0,193, 4, 7, 0,194, 4,
+ 4, 0,195, 4, 7, 0,196, 4, 7, 0,197, 4, 4, 0,198, 4, 4, 0, 18, 0, 7, 0,199, 4, 7, 0,200, 4, 7, 0,201, 4,
+196, 0,202, 4, 4, 0, 52, 0, 7, 0,203, 4, 7, 0,204, 4, 7, 0,205, 4, 7, 0,206, 4, 7, 0,207, 4, 7, 0,208, 4,
+ 7, 0,209, 4, 4, 0,210, 4, 7, 0,211, 4,197, 0, 78, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0,178, 0, 2, 0, 88, 1,
+ 2, 0,124, 1, 2, 0,212, 4, 7, 0,213, 4, 7, 0,214, 4, 7, 0,215, 4, 7, 0,216, 4, 7, 0,217, 4, 7, 0,218, 4,
+ 7, 0,173, 1, 7, 0,175, 1, 7, 0,174, 1, 7, 0, 30, 0, 4, 0,219, 4, 7, 0,220, 4, 7, 0,221, 4, 7, 0,222, 4,
+ 7, 0,223, 4, 7, 0,224, 4, 7, 0,225, 4, 7, 0,226, 4, 2, 0,227, 4, 2, 0, 87, 1, 2, 0,228, 4, 2, 0,229, 4,
+ 2, 0,230, 4, 2, 0,231, 4, 2, 0,232, 4, 2, 0,233, 4, 7, 0,234, 4, 7, 0,235, 4, 7, 0,236, 4, 7, 0,237, 4,
+ 7, 0,238, 4, 7, 0,239, 4, 7, 0,240, 4, 7, 0,241, 4, 7, 0,242, 4, 7, 0,243, 4, 7, 0,244, 4, 7, 0,245, 4,
+ 2, 0,246, 4, 2, 0,247, 4, 2, 0,248, 4, 2, 0,249, 4, 7, 0,250, 4, 7, 0,251, 4, 7, 0,252, 4, 7, 0,253, 4,
+ 2, 0,254, 4, 2, 0,255, 4, 2, 0, 0, 5, 2, 0, 1, 5, 7, 0, 2, 5, 7, 0, 3, 5, 7, 0, 4, 5, 7, 0, 5, 5,
+ 7, 0, 6, 5, 7, 0, 7, 5, 7, 0, 8, 5, 2, 0, 9, 5, 2, 0, 10, 5, 2, 0, 11, 5, 2, 0, 12, 5, 2, 0, 13, 5,
+ 2, 0, 18, 0, 7, 0, 14, 5, 7, 0, 15, 5, 31, 0, 79, 0, 46, 0,143, 1, 2, 0,144, 1, 2, 0, 76, 1, 2, 0,186, 2,
+ 25, 0,153, 0, 57, 0, 70, 1,198, 0, 8, 0,198, 0, 0, 0,198, 0, 1, 0, 4, 0,210, 3, 4, 0, 16, 5, 4, 0, 18, 0,
+ 2, 0, 17, 5, 2, 0, 18, 5, 27, 0,167, 0,199, 0, 13, 0, 11, 0, 19, 5, 11, 0, 20, 5, 4, 0, 21, 5, 4, 0, 22, 5,
+ 4, 0, 23, 5, 4, 0, 24, 5, 4, 0, 25, 5, 4, 0, 26, 5, 4, 0, 27, 5, 4, 0, 28, 5, 4, 0, 29, 5, 4, 0, 27, 0,
+ 0, 0, 30, 5,200, 0, 5, 0, 11, 0, 31, 5, 11, 0, 32, 5, 4, 0, 33, 5, 4, 0, 30, 0, 0, 0, 34, 5,201, 0, 17, 0,
+ 4, 0, 35, 5, 4, 0, 36, 5, 4, 0, 37, 5, 4, 0, 38, 5, 4, 0, 39, 5, 4, 0, 40, 5, 4, 0, 41, 5, 4, 0, 42, 5,
+ 4, 0, 43, 5, 4, 0, 44, 5, 4, 0, 45, 5, 4, 0, 46, 5, 2, 0, 47, 5, 2, 0, 48, 5, 4, 0, 49, 5, 4, 0, 50, 5,
+ 4, 0, 66, 0,202, 0, 17, 0, 4, 0, 16, 0, 4, 0, 37, 5, 4, 0, 51, 5, 4, 0, 52, 5, 4, 0, 53, 5, 4, 0, 54, 5,
+ 4, 0, 55, 5, 4, 0, 56, 5, 7, 0, 57, 5, 4, 0, 58, 5, 4, 0, 91, 0, 4, 0, 59, 5, 4, 0, 60, 5, 4, 0, 61, 5,
+ 4, 0, 62, 5, 4, 0, 63, 5, 21, 0, 31, 0,203, 0, 9, 0, 4, 0, 64, 5, 7, 0, 65, 5, 7, 0, 66, 5, 7, 0, 67, 5,
+ 4, 0, 68, 5, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 89, 4, 7, 0, 30, 0,204, 0, 13, 0,204, 0, 0, 0,204, 0, 1, 0,
+ 0, 0, 19, 0, 63, 0, 69, 5, 64, 0, 70, 5, 4, 0,210, 3, 4, 0, 71, 5, 4, 0, 72, 5, 4, 0, 73, 5, 4, 0, 74, 5,
+ 4, 0, 75, 5, 4, 0, 76, 5, 4, 0, 27, 0,205, 0, 13, 0, 0, 0, 77, 5, 0, 0,250, 0, 0, 0, 78, 5, 0, 0, 18, 0,
+ 0, 0, 79, 5, 0, 0, 80, 5, 0, 0, 81, 5, 0, 0, 82, 5, 2, 0, 83, 5, 2, 0, 84, 5, 7, 0, 85, 5, 0, 0, 86, 5,
+ 0, 0,123, 0,206, 0,106, 0,205, 0, 87, 5,199, 0, 88, 5,200, 0, 89, 5,201, 0, 90, 5,202, 0, 91, 5, 4, 0, 41, 3,
+ 4, 0,128, 0, 4, 0,137, 4, 7, 0, 92, 5, 4, 0, 93, 5, 4, 0, 94, 5, 4, 0, 95, 5, 4, 0, 96, 5, 2, 0, 18, 0,
+ 2, 0, 97, 5, 7, 0, 98, 5, 7, 0, 99, 5, 7, 0,100, 5, 7, 0,101, 5, 7, 0,102, 5, 2, 0,103, 5, 2, 0,104, 5,
+ 2, 0,105, 5, 2, 0,106, 5, 2, 0,250, 0, 2, 0,107, 5, 4, 0,108, 5, 2, 0,109, 5, 2, 0,110, 5, 2, 0,110, 1,
+ 2, 0,107, 0, 2, 0,111, 5, 2, 0,112, 5, 2, 0,113, 5, 2, 0,114, 5, 2, 0,115, 5, 2, 0, 78, 5, 2, 0, 77, 5,
+ 2, 0,116, 5, 2, 0, 79, 5, 2, 0,117, 5, 4, 0,118, 5, 4, 0, 87, 1, 4, 0,119, 5, 2, 0,120, 5, 2, 0, 66, 0,
+ 2, 0,121, 5, 2, 0,122, 5, 2, 0,123, 5, 2, 0,124, 5, 2, 0,125, 5, 2, 0,126, 5, 19, 0,127, 5, 19, 0,128, 5,
+ 18, 0,129, 5, 14, 0,130, 5, 2, 0,131, 5, 2, 0,132, 5, 7, 0,133, 5, 7, 0,134, 5, 7, 0,135, 5, 7, 0,136, 5,
+ 4, 0,137, 5, 7, 0,138, 5, 7, 0,139, 5, 7, 0,140, 5, 7, 0,141, 5, 2, 0,142, 5, 2, 0,143, 5, 2, 0,144, 5,
+ 2, 0,145, 5, 2, 0,146, 5, 2, 0,147, 5, 7, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, 0, 0,151, 5, 4, 0,152, 5,
+ 2, 0,153, 5, 2, 0,250, 1, 0, 0,154, 5, 7, 0,155, 5, 7, 0,156, 5, 0, 0,157, 5, 0, 0,158, 5, 0, 0,159, 5,
+ 0, 0,160, 5, 4, 0,161, 5, 2, 0,162, 5, 2, 0,163, 5, 7, 0,164, 5, 7, 0,165, 5, 2, 0,166, 5, 2, 0,167, 5,
+ 7, 0,168, 5, 2, 0,169, 5, 2, 0,170, 5, 4, 0,171, 5, 2, 0,172, 5, 2, 0,173, 5, 2, 0,174, 5, 2, 0,175, 5,
+ 7, 0,176, 5, 7, 0, 30, 0, 37, 0,177, 5, 0, 0,178, 5,207, 0, 9, 0,207, 0, 0, 0,207, 0, 1, 0, 0, 0,179, 5,
+ 2, 0,180, 5, 2, 0,181, 5, 2, 0,182, 5, 2, 0, 66, 0, 7, 0,183, 5, 7, 0, 30, 0,208, 0, 7, 0, 2, 0,236, 2,
+ 2, 0, 87, 1, 2, 0, 99, 3, 2, 0,184, 5, 7, 0,185, 5, 7, 0, 30, 0, 37, 0,186, 5,209, 0, 5, 0, 7, 0,187, 5,
+ 0, 0, 16, 0, 0, 0, 66, 0, 0, 0, 30, 0, 0, 0,250, 1,210, 0, 15, 0, 7, 0,188, 5, 7, 0,189, 5, 7, 0,190, 5,
+ 7, 0,191, 5, 7, 0,192, 5, 7, 0,193, 5, 7, 0,194, 5, 7, 0,195, 5, 7, 0,196, 5, 7, 0,197, 5, 4, 0,198, 5,
+ 7, 0,199, 5, 7, 0,200, 5, 2, 0, 66, 0, 2, 0, 30, 0,211, 0, 32, 0,209, 0,201, 5, 2, 0,202, 5, 2, 0,104, 5,
+ 2, 0,105, 5, 2, 0,106, 5, 2, 0,250, 0, 2, 0,107, 5, 2, 0,203, 5, 2, 0,204, 5, 2, 0,205, 5, 2, 0,206, 5,
+208, 0,207, 5, 2, 0,208, 5, 2, 0,109, 5, 7, 0,209, 5,210, 0,210, 5, 7, 0,225, 4, 7, 0,226, 4, 4, 0, 18, 0,
+ 2, 0, 87, 1, 2, 0,211, 5, 2, 0,228, 4, 2, 0,229, 4, 2, 0,212, 5, 2, 0, 27, 0, 2, 0,230, 4, 2, 0,231, 4,
+ 2, 0,232, 4, 2, 0,233, 4, 2, 0,213, 5, 2, 0, 66, 0, 7, 0,214, 5,212, 0, 6, 0,212, 0, 0, 0,212, 0, 1, 0,
+ 4, 0, 66, 4, 0, 0, 19, 0, 4, 0, 18, 0, 27, 0,215, 5,213, 0, 4, 0,214, 0,151, 3, 11, 0,216, 5, 0, 0,217, 5,
+ 4, 0, 91, 0,215, 0, 8, 0,213, 0,218, 5, 2, 0, 18, 0, 2, 0, 27, 0, 2, 0,219, 5, 2, 0,220, 5, 2, 0,221, 5,
+ 4, 0, 66, 0, 11, 0,222, 5,216, 0, 6, 0, 2, 0,107, 0, 2, 0, 72, 4, 2, 0,223, 5, 2, 0,230, 2, 4, 0, 18, 0,
+ 7, 0,214, 2,217, 0, 14, 0, 2, 0, 18, 0, 2, 0,224, 5, 2, 0,225, 5, 2, 0,226, 5,216, 0,227, 5, 11, 0,222, 5,
+ 7, 0,228, 5, 7, 0, 55, 0, 4, 0,229, 5, 4, 0,230, 5, 4, 0,231, 5, 4, 0,232, 5, 41, 0,124, 0, 27, 0,167, 0,
+218, 0, 14, 0,213, 0,218, 5, 4, 0, 91, 0, 4, 0,233, 5, 7, 0,234, 5, 7, 0,235, 5, 7, 0,236, 5, 4, 0,237, 5,
+ 4, 0,238, 5, 7, 0,239, 5, 7, 0,240, 5, 4, 0,241, 5, 7, 0,242, 5, 7, 0,243, 5, 4, 0, 27, 0,219, 0, 1, 0,
+213, 0,218, 5,220, 0, 7, 0,213, 0,218, 5, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,240, 0, 4, 0,244, 5, 91, 0,245, 5,
+ 11, 0,222, 5,221, 0, 5, 0,221, 0, 0, 0,221, 0, 1, 0, 0, 0, 19, 0, 7, 0,246, 5, 4, 0, 27, 0,222, 0, 6, 0,
+ 4, 0,107, 0, 7, 0,247, 5, 7, 0,181, 1, 7, 0, 43, 2, 4, 0, 18, 0, 4, 0, 27, 0,223, 0, 85, 0,220, 0,248, 5,
+220, 0,249, 5,218, 0,174, 3,219, 0,250, 5, 7, 0,251, 5, 2, 0,252, 5, 2, 0,250, 1, 7, 0,253, 5, 7, 0,254, 5,
+ 2, 0, 72, 4, 2, 0,255, 5, 7, 0, 0, 6, 7, 0, 1, 6, 7, 0, 2, 6, 2, 0, 3, 6, 2, 0,229, 5, 2, 0, 4, 6,
+ 2, 0, 5, 6, 2, 0, 6, 6, 2, 0, 7, 6, 7, 0, 8, 6, 7, 0, 9, 6, 7, 0, 10, 6, 2, 0, 11, 6, 2, 0, 12, 6,
+ 2, 0, 13, 6, 2, 0, 14, 6, 2, 0, 15, 6, 2, 0, 16, 6, 2, 0, 17, 6, 2, 0, 18, 6,215, 0, 19, 6,217, 0, 20, 6,
+ 7, 0, 21, 6, 7, 0, 22, 6, 7, 0, 23, 6, 2, 0, 24, 6, 2, 0, 25, 6, 0, 0, 26, 6, 0, 0, 27, 6, 2, 0, 28, 6,
+ 7, 0, 29, 6, 7, 0, 30, 6, 7, 0, 31, 6, 7, 0, 32, 6, 7, 0, 33, 6, 7, 0, 34, 6, 7, 0, 35, 6, 7, 0, 36, 6,
+ 7, 0, 37, 6, 7, 0, 38, 6, 2, 0, 39, 6, 0, 0, 40, 6, 0, 0, 41, 6, 0, 0, 42, 6, 0, 0, 43, 6, 27, 0, 44, 6,
+ 0, 0, 45, 6, 0, 0, 46, 6, 0, 0, 47, 6, 0, 0, 48, 6, 0, 0, 49, 6, 0, 0, 50, 6, 0, 0, 51, 6, 0, 0, 52, 6,
+ 0, 0, 53, 6, 0, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, 2, 0, 57, 6, 2, 0, 58, 6, 0, 0, 59, 6, 0, 0, 60, 6,
+ 0, 0, 61, 6, 0, 0, 62, 6, 4, 0, 63, 6, 4, 0, 64, 6, 4, 0, 65, 6, 4, 0, 66, 6, 2, 0, 67, 6, 2, 0, 66, 0,
+ 4, 0, 68, 6, 7, 0, 69, 6, 7, 0, 70, 6,222, 0, 71, 6,224, 0, 8, 0, 4, 0, 72, 6, 4, 0, 73, 6, 4, 0, 74, 6,
+ 4, 0, 75, 6, 4, 0, 76, 6, 4, 0, 77, 6, 4, 0, 52, 0, 4, 0,143, 2,225, 0, 4, 0, 7, 0, 78, 6, 0, 0, 79, 6,
+ 0, 0, 80, 6, 2, 0, 18, 0,226, 0, 4, 0, 7, 0, 81, 6, 4, 0, 18, 0, 4, 0, 82, 6, 4, 0, 55, 0, 41, 0, 46, 0,
+ 22, 0, 32, 0, 34, 0, 74, 0, 27, 0,215, 5,197, 0, 83, 6, 41, 0, 84, 6, 14, 0, 85, 6,198, 0, 86, 6, 27, 0, 87, 6,
+ 7, 0, 88, 6, 7, 0, 89, 6, 7, 0, 90, 6, 7, 0, 91, 6, 4, 0,210, 3, 4, 0, 92, 6, 4, 0, 93, 6, 2, 0, 18, 0,
+ 2, 0, 76, 1, 57, 0, 70, 1,227, 0, 94, 6,223, 0, 95, 6,228, 0, 96, 6,206, 0,184, 0,203, 0, 97, 6, 14, 0,101, 0,
+ 14, 0, 98, 6, 11, 0, 99, 6, 11, 0,100, 6, 11, 0,101, 6, 11, 0,102, 6, 11, 0,103, 6,229, 0,104, 6, 2, 0,105, 6,
+ 2, 0,106, 6, 2, 0,251, 0, 2, 0,211, 3, 4, 0,221, 3, 4, 0,107, 6, 14, 0,108, 6,209, 0,201, 5,211, 0,109, 6,
+225, 0,110, 6,179, 0,187, 3,226, 0,111, 6,230, 0,112, 6, 10, 0, 12, 4, 10, 0,113, 6,231, 0, 14, 0,231, 0, 0, 0,
+231, 0, 1, 0, 42, 0,242, 0, 40, 0, 69, 1,230, 0,112, 6,232, 0,114, 6, 7, 0,100, 2, 7, 0,101, 2, 7, 0,107, 0,
+ 7, 0,115, 6, 2, 0,116, 6, 2, 0, 18, 0, 2, 0,142, 0, 2, 0, 27, 0,233, 0, 39, 0, 7, 0,117, 6, 7, 0,118, 6,
+ 7, 0,119, 6, 7, 0,120, 6, 7, 0,121, 6, 7, 0,122, 6, 7, 0,123, 6, 7, 0,124, 6, 7, 0,125, 6, 68, 0,126, 6,
+179, 0,187, 3,233, 0,127, 6,234, 0,128, 6,235, 0,129, 6,236, 0,130, 6,237, 0,131, 6,238, 0,132, 6, 7, 0,133, 6,
+ 7, 0,134, 6, 7, 0, 94, 1, 7, 0,135, 6, 7, 0,136, 6, 7, 0,137, 6, 7, 0,138, 6, 7, 0,174, 0, 7, 0,139, 6,
+ 0, 0,140, 6, 0, 0,141, 6, 0, 0,116, 6, 0, 0,142, 6, 2, 0,143, 6, 2, 0,144, 6, 7, 0,145, 6, 2, 0,146, 6,
+ 2, 0,147, 6, 7, 0,148, 6, 7, 0,149, 6, 7, 0,150, 6, 7, 0,151, 6,239, 0, 51, 0,240, 0, 0, 0,240, 0, 1, 0,
+ 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6, 7, 0,134, 6, 7, 0, 94, 1, 7, 0,156, 6, 2, 0,157, 6,
+ 0, 0,216, 2, 4, 0,158, 6, 2, 0,141, 6, 2, 0,116, 6, 27, 0,215, 5, 27, 0,159, 6, 14, 0,160, 6,231, 0,161, 6,
+239, 0,127, 6, 0, 0,162, 6, 4, 0,210, 3, 4, 0, 92, 6, 2, 0,163, 6, 2, 0,164, 6, 2, 0,165, 6, 2, 0,166, 6,
+ 2, 0, 18, 0, 2, 0, 35, 2, 7, 0,113, 0, 7, 0,167, 6, 7, 0,168, 6, 7, 0,169, 6, 7, 0,174, 0, 7, 0, 88, 6,
+ 2, 0,170, 6, 2, 0,171, 6, 2, 0,172, 6, 0, 0,173, 6, 0, 0,174, 6, 0, 0,175, 6, 0, 0,176, 6, 0, 0,177, 6,
+ 14, 0,178, 6, 14, 0,179, 6, 14, 0,180, 6, 2, 0,181, 6, 2, 0,157, 2, 2, 0,182, 6, 0, 0,183, 6, 11, 0,184, 6,
+179, 0,187, 3,241, 0, 24, 0, 19, 0,240, 0, 19, 0, 62, 0, 18, 0,185, 6, 18, 0,186, 6, 18, 0,187, 6, 7, 0,188, 6,
+ 7, 0,189, 6, 7, 0,190, 6, 7, 0,191, 6, 2, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6,
+ 2, 0, 18, 0, 2, 0,197, 6, 2, 0,198, 6, 2, 0,199, 6, 2, 0,200, 6, 2, 0,201, 6, 2, 0,166, 6, 7, 0,202, 6,
+ 4, 0,203, 6, 4, 0,204, 6,240, 0, 6, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6,
+ 2, 0,155, 6,242, 0, 8, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6,
+ 0, 0,205, 6, 0, 0,123, 0,243, 0, 14, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6,
+ 2, 0,155, 6,241, 0,206, 6,244, 0,207, 6, 14, 0,208, 6, 2, 0, 87, 1, 2, 0,209, 6, 4, 0, 18, 0, 7, 0,210, 6,
+ 4, 0,166, 6,245, 0, 21, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6,
+241, 0,206, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6, 2, 0,214, 6, 2, 0,197, 6, 2, 0,215, 6, 2, 0,216, 6,
+ 0, 0, 18, 0, 0, 0, 27, 0, 11, 0, 76, 2, 4, 0,217, 6, 4, 0,218, 6, 22, 0,219, 6, 11, 0,220, 6,246, 0, 18, 0,
+240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6,241, 0,206, 6, 7, 0,100, 2,
+ 7, 0,101, 2, 2, 0,211, 6, 2, 0,221, 6, 2, 0,222, 6, 2, 0,223, 6, 4, 0, 18, 0, 7, 0,224, 6, 4, 0,116, 6,
+ 4, 0, 27, 0,179, 0,187, 3,247, 0, 16, 0, 0, 0,225, 6, 0, 0,226, 6, 0, 0,227, 6, 0, 0,228, 6, 0, 0,229, 6,
+ 0, 0,230, 6, 4, 0,231, 6, 4, 0,232, 6, 4, 0,233, 6, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,234, 6, 2, 0,235, 6,
+ 2, 0,193, 1, 2, 0,236, 6, 0, 0,237, 6,248, 0, 16, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6,
+ 4, 0,238, 6,247, 0,239, 6,249, 0,240, 6, 14, 0,241, 6, 14, 0,242, 6,250, 0,243, 6,238, 0,244, 6,251, 0,245, 6,
+ 2, 0,246, 6, 2, 0,247, 6, 2, 0,248, 6, 2, 0, 30, 0,252, 0, 15, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6,
+ 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6,241, 0,206, 6, 14, 0,249, 6,253, 0,250, 6, 0, 0,251, 6,254, 0,252, 6,
+ 2, 0, 18, 0, 2, 0,253, 6, 2, 0,254, 6, 2, 0,255, 6,255, 0, 25, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6,
+ 4, 0,153, 6, 4, 0, 18, 0, 42, 0,249, 2, 40, 0, 69, 1, 54, 0, 0, 7, 0, 1, 1, 7, 1, 1, 2, 7,179, 0,187, 3,
+ 7, 0, 3, 7, 7, 0,100, 2, 7, 0,101, 2, 7, 0,224, 6, 7, 0, 4, 7, 7, 0, 5, 7, 2, 0, 6, 7, 2, 0, 27, 0,
+ 2, 0, 7, 7, 2, 0, 8, 7, 0, 0, 9, 7, 0, 0, 10, 7, 0, 0, 11, 7, 0, 0,166, 6, 2, 1, 11, 0,240, 0, 0, 0,
+240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6, 2, 0,209, 6, 2, 0, 18, 0, 4, 0, 27, 0,
+244, 0,207, 6,241, 0,206, 6, 3, 1, 31, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6,
+ 2, 0,155, 6, 37, 0, 12, 7, 4, 0, 13, 7, 4, 0, 14, 7, 2, 0, 91, 0, 2, 0, 15, 7, 2, 0, 16, 7, 0, 0, 17, 7,
+ 0, 0, 18, 7, 4, 0, 19, 7, 4, 0, 20, 7, 4, 0, 21, 7, 2, 0, 22, 7, 2, 0, 23, 7, 2, 0, 24, 7, 2, 0, 25, 7,
+ 7, 0, 26, 7, 18, 0, 27, 7, 18, 0, 28, 7, 4, 0, 29, 7, 4, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, 2, 0, 33, 7,
+ 0, 0,216, 2, 11, 0, 34, 7, 4, 1, 10, 0, 22, 0, 32, 0, 11, 0, 35, 7, 11, 0, 36, 7, 11, 0, 37, 7, 11, 0, 38, 7,
+ 11, 0, 39, 7, 4, 0, 91, 0, 4, 0, 40, 7, 0, 0, 41, 7, 0, 0, 42, 7, 5, 1, 10, 0,240, 0, 0, 0,240, 0, 1, 0,
+ 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 4, 1, 43, 7, 2, 0, 91, 0, 2, 0, 15, 7, 4, 0, 66, 0, 11, 0, 44, 7,
+ 6, 1, 3, 0, 6, 1, 0, 0, 6, 1, 1, 0, 7, 0, 45, 7, 7, 1, 9, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6,
+ 4, 0,153, 6, 7, 0,154, 6,241, 0,206, 6, 14, 0, 46, 7, 4, 0, 47, 7, 4, 0, 18, 0, 8, 1, 27, 0,240, 0, 0, 0,
+240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6,241, 0,206, 6, 22, 0, 48, 7, 22, 0, 80, 0,
+ 2, 0, 18, 0, 2, 0, 66, 0, 7, 0, 49, 7, 7, 0,100, 2, 7, 0,101, 2, 7, 0,224, 6, 7, 0, 50, 7, 7, 0, 51, 7,
+ 7, 0, 52, 7, 57, 0, 70, 1, 57, 0, 53, 7, 4, 0, 54, 7, 2, 0, 55, 7, 2, 0, 56, 7, 2, 0,251, 0, 2, 0, 86, 1,
+ 14, 0, 57, 7,179, 0,187, 3, 9, 1, 10, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6,
+ 2, 0,155, 6, 2, 0, 18, 0, 2, 0,219, 3, 4, 0, 27, 0,179, 0,187, 3, 10, 1, 7, 0, 10, 1, 0, 0, 10, 1, 1, 0,
+ 4, 0, 58, 7, 4, 0, 22, 0, 0, 0, 85, 0, 4, 0, 59, 7, 4, 0, 16, 0, 11, 1, 14, 0,240, 0, 0, 0,240, 0, 1, 0,
+ 14, 0,152, 6, 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6, 4, 0, 16, 7, 4, 0, 27, 0, 14, 0, 60, 7, 14, 0, 61, 7,
+ 0, 0, 62, 7, 0, 0, 63, 7, 4, 0, 64, 7, 4, 0, 65, 7, 12, 1, 6, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6,
+ 4, 0,153, 6, 4, 0, 27, 0, 0, 0, 66, 7, 13, 1, 28, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6, 4, 0,153, 6,
+ 7, 0,100, 2, 7, 0,101, 2, 7, 0, 67, 7, 7, 0, 68, 7, 7, 0,224, 6,232, 0, 69, 7,230, 0,112, 6, 14, 1, 1, 7,
+ 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,116, 6, 4, 0, 70, 7, 7, 0, 71, 7, 7, 0,153, 3, 7, 0, 99, 3, 4, 0, 27, 0,
+ 7, 0, 72, 7, 7, 0, 73, 7, 4, 0, 74, 7, 4, 0, 30, 0, 11, 0, 75, 7, 2, 0, 76, 7, 2, 0, 77, 7, 4, 0,250, 1,
+ 15, 1, 7, 0, 15, 1, 0, 0, 15, 1, 1, 0, 0, 0, 78, 7, 2, 0, 79, 7, 2, 0, 80, 7, 2, 0, 81, 7, 2, 0, 27, 0,
+ 16, 1, 12, 0, 2, 0, 80, 7, 2, 0, 82, 7, 2, 0, 83, 7, 0, 0,216, 2, 2, 0, 84, 7, 2, 0, 85, 7, 2, 0, 86, 7,
+ 2, 0, 87, 7, 2, 0, 88, 7, 2, 0,197, 6, 7, 0, 89, 7, 7, 0, 90, 7, 17, 1, 18, 0, 17, 1, 0, 0, 17, 1, 1, 0,
+ 0, 0, 19, 0, 16, 1, 91, 7, 16, 1, 92, 7, 16, 1, 93, 7, 16, 1, 94, 7, 7, 0, 95, 7, 2, 0, 96, 7, 2, 0, 97, 7,
+ 2, 0, 98, 7, 2, 0, 99, 7, 2, 0,100, 7, 2, 0,101, 7, 2, 0,102, 7, 2, 0,103, 7, 2, 0,104, 7, 2, 0, 27, 0,
+ 18, 1, 10, 0, 0, 0,105, 7, 0, 0,106, 7, 0, 0,107, 7, 0, 0,108, 7, 0, 0,109, 7, 0, 0,110, 7, 2, 0,111, 7,
+ 2, 0,112, 7, 2, 0,113, 7, 2, 0,114, 7, 19, 1, 8, 0, 0, 0,115, 7, 0, 0,116, 7, 0, 0,117, 7, 0, 0,118, 7,
+ 0, 0,119, 7, 0, 0,120, 7, 7, 0,115, 6, 7, 0, 27, 0, 20, 1, 3, 0, 0, 0,121, 7, 2, 0,122, 7, 2, 0, 27, 0,
+ 21, 1, 22, 0, 18, 1,123, 7, 18, 1,124, 7, 18, 1,125, 7, 18, 1,126, 7, 18, 1,127, 7, 18, 1,128, 7, 18, 1,129, 7,
+ 18, 1,130, 7, 18, 1,131, 7, 18, 1,132, 7, 18, 1,133, 7, 18, 1,134, 7, 18, 1,135, 7, 18, 1,136, 7, 18, 1,137, 7,
+ 18, 1,138, 7, 18, 1,139, 7, 19, 1,140, 7, 20, 1,141, 7, 0, 0,142, 7, 7, 0,143, 7, 7, 0, 27, 0, 22, 1,122, 0,
+ 0, 0,144, 7, 0, 0,145, 7, 0, 0,109, 7, 0, 0,146, 7, 0, 0,121, 7, 0, 0,147, 7, 0, 0,148, 7, 0, 0,149, 7,
+ 0, 0,150, 7, 0, 0,151, 7, 0, 0,152, 7, 0, 0,153, 7, 0, 0,154, 7, 0, 0,155, 7, 0, 0,156, 7, 0, 0,157, 7,
+ 0, 0,158, 7, 0, 0,159, 7, 0, 0,160, 7, 0, 0,161, 7, 0, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, 0, 0,165, 7,
+ 0, 0,166, 7, 0, 0,167, 7, 0, 0,168, 7, 0, 0,169, 7, 0, 0,170, 7, 0, 0,171, 7, 0, 0,172, 7, 0, 0,173, 7,
+ 0, 0,174, 7, 0, 0,175, 7, 0, 0,176, 7, 0, 0,177, 7, 0, 0,178, 7, 0, 0,179, 7, 0, 0,180, 7, 0, 0,181, 7,
+ 0, 0,182, 7, 0, 0,183, 7, 0, 0,184, 7, 0, 0,185, 7, 0, 0,186, 7, 0, 0,187, 7, 0, 0,188, 7, 0, 0,189, 7,
+ 0, 0,190, 7, 0, 0,191, 7, 0, 0,192, 7, 0, 0,193, 7, 0, 0,194, 7, 0, 0,195, 7, 0, 0,196, 7, 0, 0,197, 7,
+ 0, 0,198, 7, 0, 0,199, 7, 0, 0,200, 7, 0, 0,201, 7, 0, 0,202, 7, 0, 0,203, 7, 0, 0,204, 7, 0, 0,205, 7,
+ 0, 0,206, 7, 0, 0,207, 7, 0, 0,208, 7, 0, 0,209, 7, 0, 0,210, 7, 0, 0,211, 7, 0, 0,212, 7, 0, 0,213, 7,
+ 0, 0,214, 7, 0, 0,215, 7, 0, 0,216, 7, 0, 0,217, 7, 0, 0,218, 7, 0, 0,219, 7, 0, 0,220, 7, 0, 0,221, 7,
+ 0, 0,222, 7, 0, 0,223, 7, 0, 0,224, 7, 0, 0,225, 7, 0, 0,226, 7, 0, 0,227, 7, 0, 0,228, 7, 0, 0,229, 7,
+ 0, 0,230, 7, 0, 0,231, 7, 0, 0,232, 7, 0, 0,233, 7, 0, 0,234, 7, 0, 0,235, 7, 0, 0,236, 7, 0, 0,237, 7,
+ 0, 0,238, 7, 0, 0,239, 7, 0, 0,240, 7, 0, 0,241, 7, 0, 0,242, 7, 0, 0,243, 7, 0, 0,244, 7, 0, 0,245, 7,
+ 0, 0,246, 7, 0, 0,247, 7, 0, 0,248, 7, 0, 0,249, 7, 0, 0,250, 7, 0, 0,251, 7, 0, 0,252, 7, 0, 0,253, 7,
+ 0, 0,254, 7, 0, 0,255, 7, 0, 0, 0, 8, 0, 0, 1, 8, 0, 0, 2, 8, 0, 0, 3, 8, 0, 0, 4, 8, 0, 0, 5, 8,
+ 0, 0, 6, 8, 0, 0, 7, 8, 23, 1, 5, 0, 0, 0, 8, 8, 0, 0,167, 7, 0, 0,173, 7, 2, 0, 18, 0, 2, 0, 27, 0,
+ 24, 1, 24, 0, 24, 1, 0, 0, 24, 1, 1, 0, 0, 0,179, 5, 21, 1, 9, 8, 22, 1, 10, 8, 22, 1, 11, 8, 22, 1, 12, 8,
+ 22, 1, 13, 8, 22, 1, 14, 8, 22, 1, 15, 8, 22, 1, 16, 8, 22, 1, 17, 8, 22, 1, 18, 8, 22, 1, 19, 8, 22, 1, 20, 8,
+ 22, 1, 21, 8, 22, 1, 22, 8, 22, 1, 23, 8, 22, 1, 24, 8, 22, 1, 25, 8, 22, 1, 26, 8, 23, 1, 27, 8, 4, 0, 28, 8,
+ 4, 0, 27, 0, 25, 1, 3, 0, 25, 1, 0, 0, 25, 1, 1, 0, 0, 0, 29, 8, 26, 1, 5, 0, 4, 0, 18, 0, 4, 0, 27, 0,
+ 7, 0,156, 2, 7, 0, 30, 8, 7, 0, 50, 2, 27, 1, 95, 0, 4, 0, 18, 0, 4, 0, 31, 8, 4, 0, 32, 8, 0, 0, 33, 8,
+ 0, 0, 34, 8, 0, 0, 35, 8, 0, 0, 36, 8, 0, 0, 37, 8, 0, 0, 38, 8, 0, 0, 39, 8, 0, 0, 40, 8, 0, 0, 41, 8,
+ 0, 0, 42, 8, 4, 0, 43, 8, 2, 0, 44, 8, 2, 0, 45, 8, 2, 0, 46, 8, 2, 0, 47, 8, 4, 0, 48, 8, 4, 0, 49, 8,
+ 4, 0, 50, 8, 4, 0, 51, 8, 2, 0, 52, 8, 2, 0, 53, 8, 4, 0, 54, 8, 4, 0, 55, 8, 4, 0, 56, 8, 4, 0, 57, 8,
+ 4, 0, 58, 8, 4, 0, 60, 7, 4, 0, 59, 8, 2, 0, 60, 8, 2, 0, 61, 8, 2, 0, 62, 8, 2, 0, 63, 8, 14, 0, 64, 8,
+ 14, 0, 65, 8, 14, 0, 66, 8, 14, 0, 67, 8, 14, 0, 68, 8, 14, 0, 69, 8, 0, 0, 70, 8, 2, 0, 71, 8, 2, 0, 72, 8,
+ 2, 0, 73, 8, 2, 0, 74, 8, 2, 0, 75, 8, 2, 0, 76, 8, 2, 0, 77, 8, 2, 0, 78, 8, 26, 1, 79, 8, 2, 0, 80, 8,
+ 2, 0, 81, 8, 2, 0, 82, 8, 2, 0, 83, 8, 2, 0, 84, 8, 2, 0, 85, 8, 2, 0, 86, 8, 2, 0, 87, 8, 4, 0, 88, 8,
+ 4, 0, 89, 8, 2, 0, 90, 8, 2, 0, 91, 8, 2, 0, 92, 8, 2, 0, 93, 8, 2, 0, 94, 8, 2, 0, 95, 8, 2, 0, 96, 8,
+ 2, 0, 97, 8, 2, 0, 98, 8, 2, 0, 99, 8, 2, 0,100, 8, 2, 0,101, 8, 2, 0,102, 8, 2, 0,103, 8, 2, 0,104, 8,
+ 2, 0,105, 8, 2, 0,106, 8, 2, 0,107, 8, 7, 0,108, 8, 4, 0,109, 8, 7, 0,110, 8, 2, 0, 24, 6, 2, 0, 25, 6,
+ 2, 0,111, 8, 2, 0,112, 8, 50, 0,113, 8, 7, 0,114, 8, 2, 0,115, 8, 2, 0,250, 1, 0, 0,116, 8, 4, 0,117, 8,
+ 4, 0,118, 8, 7, 0,119, 8, 7, 0, 27, 0, 28, 1, 24, 0, 22, 0, 32, 0, 14, 0,120, 8, 14, 0,121, 8, 14, 0,122, 8,
+ 14, 0,152, 6, 41, 0,124, 0, 41, 0,123, 8, 4, 0,124, 8, 4, 0, 66, 0, 2, 0,125, 8, 2, 0,126, 8, 2, 0,127, 8,
+ 2, 0,128, 8, 2, 0,129, 8, 2, 0,130, 8, 2, 0,131, 8, 2, 0,132, 8, 2, 0,133, 8, 2, 0,134, 8, 2, 0,135, 8,
+ 2, 0, 27, 0,238, 0,136, 8, 11, 0,137, 8, 2, 0,138, 8, 29, 1, 5, 0, 29, 1, 0, 0, 29, 1, 1, 0, 29, 1,139, 8,
+ 15, 0,140, 8, 4, 0, 18, 0, 30, 1, 7, 0, 30, 1, 0, 0, 30, 1, 1, 0, 29, 1,141, 8, 29, 1,142, 8, 2, 0,128, 5,
+ 2, 0, 18, 0, 4, 0, 27, 0, 31, 1, 25, 0, 31, 1, 0, 0, 31, 1, 1, 0, 32, 1,143, 8, 33, 1,245, 6, 0, 0,144, 8,
+ 0, 0,145, 8, 0, 0,146, 8, 2, 0,147, 8, 2, 0,148, 8, 2, 0,149, 8, 2, 0,150, 8, 2, 0,151, 8, 2, 0, 27, 0,
+ 2, 0, 18, 0, 2, 0,152, 8, 2, 0,153, 8, 2, 0,154, 8, 4, 0,155, 8, 31, 1,156, 8, 11, 0,157, 8, 4, 0,158, 8,
+ 4, 0,159, 8, 4, 0,160, 8, 4, 0,161, 8, 0, 0,162, 8, 34, 1, 22, 0, 34, 1, 0, 0, 34, 1, 1, 0, 29, 1,141, 8,
+ 29, 1,142, 8, 29, 1,163, 8, 29, 1,164, 8, 28, 1,165, 8, 18, 0, 50, 0, 0, 0,153, 6, 0, 0,166, 8, 2, 0,198, 6,
+ 2, 0,199, 6, 2, 0,167, 8, 2, 0, 27, 0, 2, 0,129, 8, 2, 0, 59, 7, 2, 0, 18, 0, 35, 1,143, 8, 14, 0,168, 8,
+ 14, 0,152, 6, 14, 0,169, 8, 14, 0,170, 8, 36, 1, 24, 0, 36, 1, 0, 0, 36, 1, 1, 0,241, 0,206, 6, 18, 0,171, 8,
+ 18, 0,172, 8, 2, 0,198, 6, 2, 0,199, 6, 2, 0,173, 8, 2, 0,174, 8, 2, 0,175, 8, 2, 0, 18, 0, 7, 0, 96, 2,
+ 2, 0,149, 8, 2, 0,150, 8, 2, 0,128, 8, 2, 0,176, 8, 2, 0,133, 8, 2, 0, 86, 1, 37, 1,143, 8, 14, 0,177, 8,
+ 14, 0,178, 8, 14, 0,169, 8, 0, 0,179, 8, 11, 0,180, 8, 38, 1, 14, 0, 0, 0,181, 8, 2, 0,182, 8, 2, 0,183, 8,
+ 2, 0,184, 8, 2, 0,185, 8, 2, 0,117, 5, 2, 0,186, 8, 28, 1,187, 8, 41, 0,188, 8, 4, 0,189, 8, 4, 0,190, 8,
+ 4, 0,191, 8, 4, 0, 27, 0, 0, 0, 78, 7, 39, 1, 3, 0, 0, 0,192, 8, 4, 0,193, 8, 4, 0,194, 8, 40, 1, 4, 0,
+ 4, 0, 13, 7, 4, 0,195, 8, 4, 0, 19, 7, 4, 0,196, 8, 41, 1, 2, 0, 4, 0,197, 8, 4, 0,198, 8, 42, 1, 5, 0,
+ 7, 0,199, 8, 7, 0,200, 8, 7, 0,201, 8, 4, 0, 18, 0, 4, 0, 27, 0, 43, 1, 7, 0, 0, 0,202, 8, 0, 0,227, 6,
+ 44, 0,137, 0, 2, 0,203, 8, 2, 0, 79, 5, 2, 0,204, 8, 2, 0,205, 8, 44, 1, 12, 0, 44, 1, 0, 0, 44, 1, 1, 0,
+ 4, 0, 28, 0, 4, 0,206, 8, 4, 0,207, 8, 4, 0,208, 8, 39, 1,209, 8, 0, 0,202, 8, 43, 1,181, 3, 40, 1,210, 8,
+ 41, 1,211, 8, 42, 1,212, 8, 45, 1, 12, 0, 0, 0, 35, 0, 11, 0,226, 0, 0, 0,227, 0, 4, 0,230, 0, 4, 0,238, 0,
+ 11, 0,231, 0, 7, 0,233, 0, 7, 0,234, 0, 11, 0,213, 8, 11, 0,214, 8, 11, 0,235, 0, 11, 0,237, 0, 46, 1, 50, 0,
+ 46, 1, 0, 0, 46, 1, 1, 0, 11, 0,215, 8, 11, 0, 25, 0, 0, 0, 19, 0, 4, 0, 18, 0, 4, 0, 16, 0, 4, 0, 22, 0,
+ 4, 0, 89, 0, 4, 0,216, 8, 4, 0,217, 8, 4, 0,207, 8, 4, 0,208, 8, 4, 0,218, 8, 4, 0,250, 0, 4, 0,219, 8,
+ 4, 0,220, 8, 7, 0,221, 8, 7, 0,222, 8, 7, 0,223, 8, 2, 0,224, 8, 2, 0,225, 8, 4, 0,226, 8, 4, 0,227, 8,
+ 44, 1,228, 8, 31, 0, 79, 0, 41, 0,124, 0, 27, 0,229, 8, 44, 0,137, 0,230, 0,112, 6, 7, 0,230, 8, 7, 0,231, 8,
+ 45, 1, 71, 1, 46, 1,232, 8, 46, 1,233, 8, 46, 1,234, 8, 14, 0,235, 8, 47, 1,236, 8, 11, 0,237, 8, 7, 0, 89, 4,
+ 7, 0,238, 8, 7, 0,239, 8, 7, 0,240, 8, 11, 0,241, 8, 4, 0,242, 8, 4, 0,243, 8, 4, 0,244, 8, 7, 0,245, 8,
+ 4, 0,128, 0, 4, 0, 27, 0, 48, 1, 4, 0, 48, 1, 0, 0, 48, 1, 1, 0, 14, 0,246, 8, 46, 1,247, 8,227, 0, 11, 0,
+ 14, 0,248, 8, 14, 0,235, 8, 14, 0,249, 8, 46, 1,250, 8, 0, 0,251, 8, 0, 0,252, 8, 4, 0,253, 8, 4, 0,254, 8,
+ 4, 0,255, 8, 4, 0, 27, 0, 19, 0, 0, 9, 49, 1, 4, 0, 7, 0, 1, 9, 7, 0, 99, 3, 2, 0, 2, 9, 2, 0, 3, 9,
+ 50, 1, 6, 0, 7, 0, 4, 9, 7, 0, 5, 9, 7, 0, 6, 9, 7, 0, 7, 9, 4, 0, 8, 9, 4, 0, 9, 9, 51, 1, 8, 0,
+ 7, 0, 10, 9, 7, 0, 11, 9, 7, 0, 12, 9, 7, 0, 13, 9, 7, 0, 14, 9, 4, 0,255, 2, 4, 0, 15, 9, 4, 0, 16, 9,
+ 52, 1, 2, 0, 7, 0,187, 5, 7, 0, 27, 0, 53, 1, 5, 0, 7, 0, 17, 9, 7, 0, 18, 9, 4, 0, 91, 0, 4, 0,217, 2,
+ 4, 0, 19, 9, 54, 1, 6, 0, 54, 1, 0, 0, 54, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 20, 9, 2, 0, 55, 0,
+ 55, 1, 8, 0, 55, 1, 0, 0, 55, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 20, 9, 2, 0, 55, 0, 7, 0, 22, 0,
+ 7, 0,128, 0, 56, 1, 45, 0, 56, 1, 0, 0, 56, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 20, 9, 2, 0,246, 0,
+ 2, 0,131, 4, 2, 0, 21, 9, 7, 0, 22, 9, 7, 0, 90, 0, 7, 0, 12, 3, 4, 0, 23, 9, 4, 0, 81, 0, 4, 0,219, 2,
+ 7, 0, 24, 9, 7, 0, 25, 9, 7, 0, 26, 9, 7, 0, 27, 9, 7, 0, 28, 9, 7, 0, 29, 9, 7, 0, 9, 3, 7, 0, 68, 1,
+ 7, 0, 30, 9, 7, 0, 31, 9, 7, 0, 27, 0, 7, 0, 32, 9, 7, 0, 33, 9, 7, 0, 34, 9, 2, 0, 35, 9, 2, 0, 36, 9,
+ 2, 0, 37, 9, 2, 0, 38, 9, 2, 0, 39, 9, 2, 0, 40, 9, 2, 0, 41, 9, 2, 0, 42, 9, 2, 0, 35, 2, 2, 0, 43, 9,
+ 2, 0, 32, 2, 2, 0, 44, 9, 0, 0, 45, 9, 0, 0, 46, 9, 7, 0,244, 0, 57, 1, 47, 9, 64, 0,253, 1, 58, 1, 16, 0,
+ 58, 1, 0, 0, 58, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 20, 9, 2, 0,246, 0, 7, 0, 4, 3, 7, 0, 5, 3,
+ 7, 0, 6, 3, 7, 0, 85, 2, 7, 0, 7, 3, 7, 0, 8, 3, 7, 0, 48, 9, 7, 0, 9, 3, 7, 0, 11, 3, 7, 0, 12, 3,
+254, 0, 5, 0, 2, 0, 16, 0, 2, 0, 49, 9, 2, 0, 18, 0, 2, 0, 50, 9, 22, 0, 48, 7,253, 0, 3, 0, 4, 0, 68, 0,
+ 4, 0, 51, 9,254, 0, 2, 0, 59, 1, 7, 0, 59, 1, 0, 0, 59, 1, 1, 0, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0,
+ 4, 0, 21, 0, 11, 0, 52, 9, 60, 1, 5, 0, 0, 0, 19, 0, 7, 0, 94, 1, 7, 0, 53, 9, 4, 0, 54, 9, 4, 0, 27, 0,
+ 61, 1, 4, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 66, 0, 2, 0, 30, 0, 62, 1, 4, 0, 0, 0, 19, 0, 63, 0, 55, 9,
+ 7, 0, 94, 1, 7, 0, 27, 0, 63, 1, 6, 0, 2, 0, 56, 9, 2, 0, 57, 9, 2, 0, 16, 0, 2, 0, 58, 9, 0, 0, 59, 9,
+ 0, 0, 60, 9, 64, 1, 5, 0, 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, 0, 0, 61, 9, 0, 0, 62, 9, 65, 1, 3, 0,
+ 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, 66, 1, 4, 0, 2, 0, 63, 9, 2, 0, 64, 9, 2, 0, 18, 0, 2, 0, 27, 0,
+ 67, 1, 6, 0, 0, 0, 19, 0, 0, 0, 65, 9, 2, 0, 66, 9, 2, 0, 9, 3, 2, 0, 87, 1, 2, 0, 30, 0, 68, 1, 5, 0,
+ 0, 0, 19, 0, 7, 0, 99, 3, 7, 0,222, 4, 2, 0, 18, 0, 2, 0,231, 2, 69, 1, 3, 0, 0, 0, 19, 0, 4, 0,219, 2,
+ 4, 0, 63, 9, 70, 1, 7, 0, 0, 0, 19, 0, 7, 0,222, 4, 0, 0, 67, 9, 0, 0, 68, 9, 2, 0, 87, 1, 2, 0, 66, 0,
+ 4, 0, 69, 9, 71, 1, 4, 0, 0, 0, 70, 9, 0, 0, 71, 9, 4, 0, 16, 0, 7, 0,235, 2, 72, 1, 3, 0, 27, 0, 72, 9,
+ 0, 0, 73, 9, 0, 0, 74, 9, 73, 1, 18, 0, 73, 1, 0, 0, 73, 1, 1, 0, 2, 0, 16, 0, 2, 0, 75, 9, 2, 0, 18, 0,
+ 2, 0, 76, 9, 2, 0, 77, 9, 2, 0, 78, 9, 2, 0, 66, 0, 2, 0, 30, 0, 0, 0, 19, 0, 11, 0, 2, 0, 74, 1, 79, 9,
+ 27, 0, 43, 0, 2, 0,223, 5, 2, 0,181, 2, 2, 0, 80, 9, 2, 0, 27, 0, 75, 1, 11, 0, 0, 0, 19, 0, 0, 0, 16, 0,
+ 0, 0, 81, 9, 2, 0, 18, 0, 2, 0,231, 2, 2, 0, 82, 9, 4, 0, 83, 9, 4, 0, 84, 9, 4, 0, 85, 9, 4, 0, 86, 9,
+ 4, 0, 87, 9, 76, 1, 1, 0, 0, 0, 88, 9, 77, 1, 4, 0, 37, 0, 12, 7, 0, 0, 29, 8, 4, 0, 87, 1, 4, 0, 18, 0,
+ 74, 1, 18, 0, 74, 1, 0, 0, 74, 1, 1, 0, 74, 1, 89, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 90, 9, 2, 0, 78, 9,
+ 2, 0, 75, 9, 2, 0, 91, 9, 2, 0, 30, 0, 2, 0,250, 1, 0, 0, 19, 0, 11, 0, 2, 0, 78, 1, 79, 9, 73, 1, 92, 9,
+ 2, 0, 14, 0, 2, 0, 93, 9, 4, 0, 94, 9, 79, 1, 3, 0, 4, 0,245, 2, 4, 0, 27, 0, 27, 0, 43, 0, 80, 1, 15, 0,
+177, 0, 95, 9, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0, 22, 9, 7, 0, 90, 0, 0, 0, 19, 0, 0, 0, 96, 9, 2, 0, 97, 9,
+ 2, 0, 98, 9, 2, 0,133, 0, 2, 0, 99, 9, 2, 0,100, 9, 2, 0, 27, 0, 7, 0,101, 9, 7, 0,102, 9, 81, 1, 8, 0,
+ 7, 0,103, 9, 7, 0,104, 9, 7, 0,105, 9, 7, 0,106, 9, 7, 0,107, 9, 7, 0,108, 9, 7, 0,109, 9, 7, 0,110, 9,
+ 82, 1, 13, 0, 2, 0, 18, 0, 2, 0,111, 9, 4, 0, 66, 0, 4, 0, 30, 0, 2, 0,183, 6, 7, 0, 89, 4, 7, 0,238, 8,
+ 47, 1,236, 8, 81, 1,112, 9, 2, 0, 16, 0, 2, 0,122, 5, 2, 0,221, 3, 2, 0,113, 9, 83, 1, 11, 0, 4, 0,245, 2,
+ 2, 0, 16, 0, 2, 0, 18, 0, 27, 0, 43, 0, 79, 0,114, 9, 0, 0, 19, 0, 7, 0,115, 9, 7, 0,116, 9, 7, 0,227, 3,
+ 2, 0,117, 9, 2, 0,118, 9, 84, 1, 5, 0, 2, 0, 16, 0, 2, 0, 66, 0, 4, 0, 27, 0, 41, 0,124, 0, 27, 0,215, 5,
+ 85, 1, 5, 0, 4, 0, 27, 0, 4, 0, 16, 0, 0, 0, 19, 0, 0, 0, 61, 9, 27, 0, 43, 0, 86, 1, 13, 0, 2, 0, 18, 0,
+ 2, 0, 16, 0, 2, 0, 75, 9, 2, 0,228, 3, 7, 0,119, 9, 7, 0,120, 9, 7, 0, 86, 1, 7, 0,121, 9, 7, 0,197, 3,
+ 7, 0,201, 3, 7, 0,122, 9, 7, 0,123, 9, 27, 0,124, 9, 87, 1, 10, 0, 2, 0, 18, 0, 2, 0, 16, 0, 7, 0, 22, 9,
+ 7, 0, 90, 0, 0, 0, 19, 0, 0, 0, 96, 9, 2, 0, 66, 0, 2, 0, 30, 0, 2, 0,250, 1, 2, 0,122, 5, 88, 1, 8, 0,
+ 27, 0, 43, 0, 7, 0, 6, 3, 7, 0,125, 9, 7, 0,126, 9, 7, 0,228, 3, 2, 0, 66, 0, 2, 0,231, 2, 7, 0, 30, 0,
+ 89, 1, 12, 0, 2, 0, 16, 0, 2, 0, 87, 1, 2, 0, 18, 0, 2, 0, 9, 3, 2, 0,245, 2, 2, 0,127, 9, 4, 0, 27, 0,
+ 7, 0,128, 9, 7, 0,129, 9, 7, 0,130, 9, 7, 0,131, 9, 0, 0,132, 9, 90, 1, 9, 0, 2, 0, 18, 0, 2, 0, 16, 0,
+ 4, 0, 22, 9, 4, 0, 90, 0, 0, 0, 19, 0, 2, 0, 86, 1, 2, 0, 62, 0, 2, 0,133, 9, 2, 0,134, 9, 91, 1, 7, 0,
+ 4, 0,219, 2, 4, 0,135, 9, 4, 0,136, 9, 4, 0,137, 9, 7, 0,138, 9, 7, 0,139, 9, 0, 0, 67, 9, 92, 1, 7, 0,
+ 0, 0,140, 9, 27, 0,141, 9, 0, 0, 73, 9, 2, 0,142, 9, 2, 0, 66, 0, 4, 0, 30, 0, 0, 0, 74, 9, 93, 1, 6, 0,
+ 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 22, 9, 4, 0, 90, 0, 0, 0,143, 9, 0, 0,144, 9, 94, 1, 1, 0, 4, 0, 18, 0,
+ 95, 1, 6, 0, 0, 0, 93, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0,145, 9, 7, 0,146, 9, 37, 0, 12, 7, 96, 1, 4, 0,
+ 0, 0,186, 2, 2, 0, 18, 0, 4, 0, 16, 0, 27, 0, 43, 0, 97, 1, 2, 0, 4, 0, 16, 0, 4, 0,187, 6, 98, 1, 8, 0,
+ 0, 0, 70, 9, 0, 0, 71, 9, 4, 0, 16, 0, 7, 0, 43, 2, 7, 0,147, 9, 7, 0, 27, 0, 27, 0, 75, 3, 27, 0,148, 9,
+ 99, 1, 11, 0, 0, 0, 60, 6, 0, 0, 18, 0, 2, 0,149, 9, 4, 0, 16, 0, 7, 0, 94, 1, 7, 0,150, 9, 7, 0,151, 9,
+ 7, 0,152, 9, 4, 0,153, 9, 27, 0, 75, 3, 27, 0,154, 9, 78, 1, 10, 0, 78, 1, 0, 0, 78, 1, 1, 0, 78, 1, 89, 9,
+ 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 75, 9, 2, 0,155, 9, 0, 0, 19, 0, 11, 0, 2, 0, 27, 0, 43, 0, 47, 1, 17, 0,
+ 22, 0, 32, 0, 0, 0, 35, 0, 38, 0,152, 0, 11, 0,226, 0, 38, 0,156, 9, 31, 0, 79, 0, 7, 0, 89, 4, 7, 0,157, 9,
+ 7, 0,238, 8, 7, 0,103, 9, 7, 0,104, 9, 7, 0,158, 9, 4, 0, 91, 0, 4, 0, 27, 0, 11, 0,159, 9, 11, 0,160, 9,
+ 11, 0,161, 9,100, 1, 6, 0,100, 1, 0, 0,100, 1, 1, 0, 27, 0, 43, 0, 11, 0,162, 9, 2, 0,251, 0, 0, 0,216, 2,
+ 64, 0, 4, 0, 22, 0, 32, 0, 14, 0,163, 9, 4, 0,133, 0, 7, 0,164, 9,101, 1, 28, 0,101, 1, 0, 0,101, 1, 1, 0,
+ 21, 0,165, 9,101, 1, 37, 0, 14, 0,166, 9, 0, 0, 19, 0, 7, 0,167, 9, 7, 0,168, 9, 7, 0,169, 9, 7, 0,170, 9,
+ 4, 0, 18, 0, 7, 0,171, 9, 7, 0,172, 9, 7, 0,173, 9, 7, 0,174, 9, 7, 0, 94, 1, 7, 0, 43, 2, 7, 0,175, 9,
+ 7, 0,217, 2, 7, 0,176, 9, 7, 0,177, 9, 7, 0,178, 9, 7, 0,179, 9, 7, 0,180, 9, 7, 0,175, 0, 4, 0,133, 0,
+ 2, 0, 4, 6, 2, 0,181, 9,102, 1, 27, 0, 22, 0, 32, 0, 34, 0, 74, 0, 14, 0,182, 9, 14, 0,183, 9, 14, 0,184, 9,
+101, 1,185, 9, 11, 0,186, 9, 11, 0,187, 9, 4, 0, 18, 0, 4, 0,163, 6, 4, 0,188, 9, 4, 0, 27, 0, 2, 0, 13, 3,
+ 2, 0,217, 6, 4, 0,189, 9, 4, 0,133, 0, 4, 0,190, 9, 2, 0,191, 9, 2, 0,192, 9, 2, 0,193, 9, 2, 0,194, 9,
+ 4, 0,195, 9, 4, 0,196, 9, 4, 0,197, 9, 4, 0,198, 9, 4, 0,199, 9, 4, 0,200, 9,103, 1, 2, 0, 7, 0,170, 2,
+ 4, 0, 18, 0,181, 0, 5, 0,103, 1,201, 9, 4, 0,217, 2, 4, 0,202, 9, 4, 0,203, 9, 4, 0, 18, 0,180, 0, 16, 0,
+ 4, 0,204, 9, 4, 0,205, 9, 4, 0,206, 9, 4, 0,207, 9, 2, 0,208, 9, 2, 0,209, 9, 2, 0,210, 9, 2, 0,251, 0,
+ 2, 0,211, 9, 2, 0,212, 9, 2, 0,213, 9, 2, 0,214, 9, 4, 0,215, 9, 4, 0,216, 9, 4, 0,217, 9, 4, 0,218, 9,
+104, 1, 40, 0,104, 1, 0, 0,104, 1, 1, 0, 21, 0,165, 9, 14, 0, 0, 4, 0, 0, 19, 0, 2, 0, 18, 0, 2, 0,219, 9,
+ 2, 0,214, 3, 2, 0,220, 9, 0, 0,221, 9, 0, 0,222, 9, 0, 0,223, 9,101, 1,224, 9,104, 1, 37, 0,104, 1,225, 9,
+ 14, 0,226, 9, 14, 0,227, 9,181, 0,189, 3, 27, 0,228, 9,104, 1,229, 9, 7, 0, 77, 1, 7, 0,175, 0, 7, 0,230, 9,
+ 7, 0, 22, 2, 7, 0,203, 3, 7, 0,205, 3, 2, 0,237, 3, 2, 0, 27, 0, 7, 0,231, 9, 7, 0,232, 9, 7, 0,208, 3,
+ 7, 0,233, 9, 7, 0,234, 9, 7, 0,235, 9, 7, 0,236, 9, 7, 0,237, 9, 7, 0,238, 9, 7, 0,239, 9, 7, 0,240, 9,
+ 11, 0,241, 9,178, 0, 16, 0, 14, 0,242, 9, 74, 0,243, 9, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,244, 9, 4, 0, 66, 0,
+ 7, 0, 83, 0, 7, 0,245, 9, 7, 0,246, 9, 14, 0,247, 9, 4, 0,248, 9, 4, 0,249, 9, 11, 0,250, 9, 11, 0,251, 9,
+180, 0,188, 3, 0, 0,252, 9,105, 1, 1, 0, 4, 0,249, 9,106, 1, 12, 0, 4, 0,249, 9, 7, 0, 87, 9, 2, 0,253, 9,
+ 2, 0,254, 9, 7, 0,255, 9, 7, 0, 0, 10, 2, 0, 1, 10, 2, 0, 18, 0, 7, 0, 2, 10, 7, 0, 3, 10, 7, 0, 4, 10,
+ 7, 0, 5, 10,107, 1, 7, 0,107, 1, 0, 0,107, 1, 1, 0, 14, 0, 6, 10, 4, 0, 18, 0, 4, 0, 7, 10, 0, 0, 19, 0,
+ 23, 1, 8, 10,177, 0, 9, 0, 22, 0, 32, 0, 14, 0, 9, 10, 14, 0,242, 9, 14, 0, 10, 10, 14, 0,101, 0, 4, 0, 18, 0,
+ 4, 0, 11, 10, 4, 0, 12, 10, 4, 0, 27, 0,244, 0, 8, 0, 22, 0, 13, 10, 14, 0,242, 9, 64, 0, 14, 10, 0, 0, 15, 10,
+ 4, 0, 16, 10, 4, 0, 18, 0, 4, 0, 17, 10, 4, 0, 27, 0,108, 1, 13, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,152, 6,
+ 4, 0,153, 6, 7, 0,154, 6, 2, 0,155, 6,241, 0,206, 6,177, 0,184, 3,244, 0, 18, 10, 0, 0, 87, 1, 0, 0,209, 6,
+ 2, 0, 18, 0, 7, 0, 19, 10,109, 1, 8, 0,109, 1, 0, 0,109, 1, 1, 0,107, 1, 20, 10, 31, 0, 79, 0, 14, 0,190, 3,
+ 4, 0, 18, 0, 0, 0, 19, 0, 4, 0,126, 8,110, 1, 5, 0,110, 1, 0, 0,110, 1, 1, 0, 31, 0, 79, 0, 2, 0, 18, 0,
+ 0, 0, 21, 10,111, 1, 14, 0,111, 1, 0, 0,111, 1, 1, 0, 11, 0, 2, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 22, 10,
+ 0, 0, 23, 10, 0, 0, 19, 0, 2, 0, 27, 0, 7, 0, 24, 10, 7, 0, 25, 10, 31, 0, 79, 0, 7, 0, 26, 10, 7, 0, 27, 10,
+112, 1, 9, 0,112, 1, 0, 0,112, 1, 1, 0, 27, 0, 28, 10, 0, 0, 16, 3, 7, 0, 29, 10, 2, 0, 30, 10, 2, 0, 18, 0,
+ 2, 0, 16, 0, 2, 0, 31, 10,113, 1, 7, 0, 37, 0, 12, 7, 21, 0,165, 9, 4, 0, 18, 0, 4, 0, 32, 10, 14, 0, 33, 10,
+ 27, 0, 28, 10, 0, 0, 16, 3,114, 1, 15, 0, 27, 0, 28, 10, 2, 0, 34, 10, 2, 0, 18, 0, 2, 0, 35, 10, 2, 0, 36, 10,
+ 0, 0, 16, 3, 27, 0, 37, 10, 0, 0, 38, 10, 7, 0, 39, 10, 7, 0, 43, 2, 7, 0, 40, 10, 7, 0, 41, 10, 2, 0, 16, 0,
+ 2, 0, 87, 1, 7, 0, 94, 1,115, 1, 6, 0, 27, 0, 28, 10, 7, 0,201, 9, 2, 0, 42, 10, 2, 0, 43, 10, 2, 0, 18, 0,
+ 2, 0, 44, 10,116, 1, 6, 0, 27, 0, 28, 10, 4, 0, 45, 10, 4, 0, 46, 10, 4, 0, 91, 0, 4, 0, 27, 0, 0, 0, 16, 3,
+117, 1, 4, 0, 27, 0, 28, 10, 4, 0, 18, 0, 4, 0, 45, 10, 0, 0, 16, 3,118, 1, 4, 0, 27, 0, 28, 10, 4, 0, 18, 0,
+ 4, 0, 45, 10, 0, 0, 16, 3,119, 1, 4, 0, 27, 0, 28, 10, 4, 0, 18, 0, 4, 0, 45, 10, 0, 0, 16, 3,120, 1, 2, 0,
+ 4, 0, 18, 0, 7, 0, 89, 4,121, 1, 2, 0, 27, 0, 28, 10, 0, 0, 16, 3,122, 1, 10, 0, 27, 0, 28, 10, 4, 0, 47, 10,
+ 7, 0,127, 0, 4, 0, 18, 0, 2, 0, 10, 7, 2, 0, 48, 10, 2, 0, 66, 0, 2, 0, 30, 0, 7, 0, 49, 10, 0, 0, 16, 3,
+123, 1, 10, 0, 27, 0, 28, 10, 2, 0, 16, 0, 2, 0,139, 4, 4, 0, 89, 0, 4, 0, 90, 0, 7, 0,125, 9, 7, 0,126, 9,
+ 4, 0, 27, 0,177, 0, 95, 9, 0, 0, 16, 3,124, 1, 4, 0, 27, 0, 28, 10, 4, 0,215, 3, 4, 0, 50, 10, 0, 0, 16, 3,
+125, 1, 4, 0, 27, 0, 28, 10, 4, 0,215, 3, 4, 0, 27, 0, 0, 0, 16, 3,126, 1, 6, 0, 27, 0, 28, 10, 7, 0,127, 0,
+ 7, 0, 87, 3, 4, 0, 51, 10, 2, 0,215, 3, 2, 0,216, 3,127, 1, 6, 0, 27, 0, 28, 10, 4, 0, 52, 10, 4, 0, 53, 10,
+ 7, 0, 54, 10, 7, 0, 55, 10, 0, 0, 16, 3,128, 1, 16, 0, 27, 0, 28, 10, 27, 0,225, 9, 4, 0, 16, 0, 7, 0, 56, 10,
+ 7, 0, 57, 10, 7, 0, 58, 10, 7, 0, 59, 10, 7, 0, 60, 10, 7, 0, 61, 10, 7, 0, 62, 10, 7, 0, 63, 10, 7, 0, 64, 10,
+ 2, 0, 18, 0, 2, 0, 27, 0, 2, 0, 66, 0, 2, 0, 30, 0,129, 1, 3, 0, 27, 0, 28, 10, 4, 0, 18, 0, 4, 0, 35, 2,
+130, 1, 5, 0, 27, 0, 28, 10, 4, 0, 18, 0, 4, 0, 27, 0, 7, 0, 65, 10, 0, 0, 16, 3,131, 1, 10, 0, 27, 0, 28, 10,
+ 0, 0, 16, 3, 2, 0, 66, 10, 2, 0, 67, 10, 0, 0, 68, 10, 0, 0, 69, 10, 7, 0, 70, 10, 7, 0, 71, 10, 7, 0, 72, 10,
+ 7, 0, 73, 10,132, 1, 5, 0, 27, 0, 28, 10, 0, 0, 16, 3, 7, 0,225, 2, 2, 0, 74, 10, 2, 0, 18, 0,133, 1, 8, 0,
+ 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 75, 10, 7, 0, 76, 10, 2, 0, 18, 0, 2, 0, 35, 2,
+134, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 75, 10, 7, 0, 76, 10, 2, 0, 18, 0,
+ 2, 0, 35, 2,135, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 75, 10, 7, 0, 76, 10,
+ 2, 0, 18, 0, 2, 0, 35, 2,136, 1, 7, 0, 27, 0, 28, 10, 0, 0, 16, 3, 7, 0, 94, 1, 7, 0,103, 1, 2, 0, 18, 0,
+ 2, 0, 87, 1, 4, 0, 27, 0,137, 1, 5, 0, 27, 0, 75, 3, 7, 0, 94, 1, 2, 0, 79, 3, 0, 0, 81, 3, 0, 0, 77, 10,
+138, 1, 7, 0,230, 0,112, 6, 0, 0, 78, 10, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 79, 10, 27, 0,215, 5, 27, 0, 80, 10,
+139, 1, 3, 0,230, 0,112, 6, 4, 0, 18, 0, 4, 0, 27, 0,140, 1, 6, 0,230, 0,112, 6, 4, 0, 18, 0, 4, 0, 27, 0,
+ 0, 0, 79, 10, 7, 0, 65, 10, 27, 0,215, 5,141, 1, 10, 0,141, 1, 0, 0,141, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0,
+ 0, 0, 81, 10, 7, 0, 31, 1, 7, 0, 32, 1, 2, 0, 6, 10, 2, 0, 82, 10, 27, 0, 43, 0,142, 1, 22, 0,142, 1, 0, 0,
+142, 1, 1, 0, 2, 0, 18, 0, 2, 0, 87, 1, 2, 0, 83, 10, 2, 0, 84, 10, 31, 0, 79, 0,177, 0, 95, 9, 27, 0,167, 0,
+ 7, 0, 89, 0, 7, 0, 90, 0, 7, 0, 85, 10, 7, 0, 86, 10, 7, 0, 87, 10, 7, 0, 88, 10, 7, 0, 2, 3, 7, 0,153, 3,
+ 7, 0, 97, 9, 7, 0, 89, 10, 0, 0, 90, 10, 0, 0, 91, 10, 14, 0,193, 3,143, 1, 11, 0, 7, 0, 50, 2, 7, 0,125, 9,
+ 7, 0,126, 9, 11, 0, 2, 0, 2, 0, 92, 10, 2, 0, 93, 10, 2, 0, 94, 10, 2, 0, 95, 10, 2, 0, 96, 10, 2, 0, 97, 10,
+ 2, 0,186, 2,144, 1, 21, 0,144, 1, 0, 0,144, 1, 1, 0,144, 1, 98, 10, 0, 0, 19, 0, 11, 0, 99, 10, 2, 0, 16, 0,
+ 2, 0, 18, 0, 2, 0,100, 10, 2, 0, 66, 0, 7, 0,101, 10, 7, 0,102, 10, 11, 0,103, 10, 2, 0,104, 10, 2, 0,105, 10,
+ 4, 0, 30, 0, 11, 0,159, 9, 4, 0,106, 10, 4, 0,107, 10,144, 1,108, 10,145, 1,109, 10,143, 1,110, 10,146, 1, 4, 0,
+ 0, 0,111, 10, 2, 0,112, 10, 2, 0,113, 10, 4, 0, 27, 0,147, 1, 37, 0,147, 1, 0, 0,147, 1, 1, 0,147, 1,114, 10,
+ 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,206, 8, 2, 0,181, 2, 2, 0,115, 10, 2, 0, 15, 7, 2, 0,104, 10,
+ 2, 0, 49, 9, 14, 0, 90, 9, 14, 0,116, 10,147, 1, 37, 0, 22, 0, 48, 7, 11, 0, 99, 10, 7, 0,101, 10, 7, 0,102, 10,
+ 7, 0, 85, 2, 7, 0, 6, 3, 7, 0,117, 10, 4, 0,118, 10, 0, 0,119, 10, 2, 0,120, 10, 2, 0,121, 10, 7, 0,122, 10,
+ 7, 0,123, 10, 2, 0,124, 10, 2, 0,125, 10, 11, 0,126, 10, 19, 0,127, 10, 19, 0,128, 10, 19, 0,129, 10,146, 1,153, 0,
+148, 1,130, 10,149, 1,131, 10,145, 1, 8, 0,145, 1, 0, 0,145, 1, 1, 0,147, 1,132, 10,147, 1,133, 10,144, 1,134, 10,
+144, 1,135, 10, 4, 0, 18, 0, 4, 0, 27, 0, 57, 0, 20, 0, 22, 0, 32, 0, 34, 0, 74, 0,179, 0,187, 3, 14, 0,136, 10,
+ 14, 0,137, 10, 4, 0, 16, 0, 4, 0,138, 10, 4, 0,139, 10, 4, 0, 18, 0, 4, 0,118, 10, 4, 0,140, 10, 14, 0, 90, 9,
+ 14, 0,116, 10,150, 1,141, 10, 11, 0,142, 10, 11, 0,143, 10, 4, 0,144, 10, 11, 0,145, 10, 11, 0,146, 10, 11, 0,147, 10,
+151, 1, 4, 0, 4, 0, 17, 0, 4, 0,235, 2, 4, 0,125, 9, 4, 0,126, 9,152, 1, 4, 0, 4, 0, 17, 0, 7, 0,235, 2,
+ 7, 0,125, 9, 7, 0,126, 9,153, 1, 2, 0, 0, 0,235, 2, 0, 0, 86, 1,154, 1, 4, 0, 4, 0, 17, 0, 7, 0,148, 10,
+ 7, 0,125, 9, 7, 0,126, 9,155, 1, 1, 0, 7, 0,149, 10,156, 1, 6, 0, 4, 0,126, 0, 4, 0,128, 0, 4, 0, 49, 9,
+ 0, 0,150, 10, 0, 0,151, 10, 2, 0, 27, 0,157, 1, 3, 0, 4, 0,152, 10, 4, 0,153, 10, 4, 0,154, 10,158, 1, 16, 0,
+ 2, 0,149, 8, 2, 0,150, 8, 2, 0, 76, 5, 2, 0,155, 10, 2, 0,156, 10, 2, 0, 67, 0, 2, 0, 49, 7, 2, 0,157, 10,
+ 7, 0, 1, 3, 7, 0,158, 10, 7, 0,159, 10, 2, 0,110, 1, 0, 0,160, 10, 0, 0,161, 10, 4, 0,162, 10, 4, 0,163, 10,
+159, 1, 9, 0, 7, 0,164, 10, 7, 0,165, 10, 7, 0,158, 9, 7, 0, 99, 3, 7, 0,166, 10, 7, 0,224, 6, 2, 0, 97, 3,
+ 0, 0,167, 10, 0, 0, 27, 0,160, 1, 4, 0, 7, 0,168, 10, 7, 0,169, 10, 2, 0, 97, 3, 2, 0, 27, 0,161, 1, 3, 0,
+ 7, 0,170, 10, 7, 0,221, 8, 7, 0, 14, 0,162, 1, 4, 0, 0, 0, 35, 0,205, 0, 87, 5, 4, 0,128, 0, 4, 0,137, 4,
+163, 1, 6, 0, 0, 0,171, 10,205, 0,172, 10, 4, 0,128, 0, 4, 0,137, 4, 4, 0,173, 10, 4, 0, 27, 0,164, 1, 7, 0,
+ 2, 0,174, 10, 2, 0,175, 10, 4, 0, 66, 0, 0, 0, 82, 4,205, 0,172, 10, 0, 0,176, 10, 0, 0,177, 6,165, 1, 9, 0,
+ 7, 0,177, 10, 7, 0,178, 10, 7, 0,179, 10, 7, 0, 96, 2, 7, 0,180, 10, 7, 0,181, 10, 7, 0,182, 10, 2, 0,183, 10,
+ 2, 0,184, 10,166, 1, 8, 0, 2, 0,185, 10, 2, 0,186, 10, 2, 0,187, 10, 2, 0,188, 10, 7, 0,189, 10, 7, 0,190, 10,
+ 7, 0,191, 10, 7, 0,192, 10,167, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,168, 1, 2, 0, 0, 0,169, 0, 0, 0,193, 10,
+169, 1, 1, 0, 0, 0, 19, 0,170, 1, 12, 0, 0, 0,194, 10, 0, 0,195, 10, 0, 0,215, 6, 0, 0,196, 10, 2, 0, 76, 5,
+ 2, 0,197, 10, 7, 0,198, 10, 7, 0,199, 10, 7, 0,200, 10, 7, 0,153, 3, 7, 0,201, 10, 7, 0,202, 10,171, 1, 2, 0,
+ 11, 0,203, 10, 11, 0,204, 10,172, 1, 13, 0, 0, 0, 79, 5, 0, 0, 16, 0, 0, 0, 97, 3, 0, 0, 99, 3, 0, 0,195, 10,
+ 0, 0,107, 0, 0, 0,186, 2, 7, 0,205, 10, 7, 0,206, 10, 7, 0,152, 3, 7, 0,207, 10, 7, 0,208, 10, 7, 0,202, 10,
+173, 1, 8, 0, 7, 0, 56, 9, 7, 0,127, 0, 7, 0,161, 10, 7, 0,177, 2, 7, 0,209, 10, 7, 0,239, 0, 7, 0,210, 10,
+ 4, 0, 16, 0,174, 1, 4, 0, 2, 0,211, 10, 2, 0,212, 10, 2, 0,213, 10, 2, 0, 27, 0,175, 1, 8, 0, 7, 0,214, 10,
+ 7, 0,225, 2, 7, 0,215, 10, 7, 0,199, 8, 7, 0,200, 8, 7, 0,201, 8, 7, 0,216, 10, 7, 0,217, 10,176, 1, 6, 0,
+ 2, 0,218, 10, 2, 0,219, 10, 7, 0,220, 10, 7, 0,221, 10, 7, 0,222, 10, 7, 0,223, 10,177, 1, 2, 0, 58, 0,224, 10,
+ 59, 0,225, 10,178, 1, 3, 0,177, 1, 85, 6, 7, 0,226, 10, 7, 0,227, 10,179, 1, 3, 0,177, 1, 85, 6, 4, 0,228, 10,
+ 4, 0, 27, 0,180, 1, 1, 0,177, 1, 85, 6,181, 1, 3, 0,177, 1, 85, 6, 4, 0,228, 10, 4, 0,229, 10,182, 1, 3, 0,
+177, 1, 85, 6, 4, 0,230, 10, 4, 0, 27, 0,183, 1, 1, 0,177, 1, 85, 6,184, 1, 3, 0,177, 1, 85, 6, 4, 0,231, 10,
+ 4, 0, 27, 0,185, 1, 3, 0,177, 1, 85, 6, 4, 0,232, 10, 4, 0, 27, 0,186, 1, 3, 0,177, 1, 85, 6, 4, 0,233, 10,
+ 4, 0, 27, 0,187, 1, 3, 0,177, 1, 85, 6, 4, 0,250, 0, 4, 0, 27, 0,188, 1, 1, 0, 0, 0, 19, 0,189, 1, 1, 0,
+ 0, 0, 19, 0,190, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 18, 0, 2, 0,234, 10,191, 1, 10, 0, 2, 0, 67, 4,
+ 2, 0, 18, 0, 7, 0,222, 4, 7, 0,235, 10, 7, 0,236, 10, 7, 0,237, 10, 7, 0,238, 10,190, 1,239, 10,190, 1,240, 10,
+190, 1,241, 10, 54, 0, 11, 0, 4, 0, 18, 0, 4, 0, 62, 0, 4, 0,242, 10, 4, 0,243, 10, 19, 0,244, 10, 19, 0,245, 10,
+191, 1,246, 10, 7, 0,247, 10, 7, 0,248, 10, 7, 0,249, 10, 7, 0,250, 10, 1, 1, 10, 0, 4, 0, 6, 10, 4, 0,251, 10,
+ 7, 0,252, 10, 7, 0,253, 10, 7, 0,254, 10, 7, 0,255, 10, 7, 0, 9, 0, 7, 0, 11, 0, 4, 0, 87, 1, 4, 0, 6, 3,
+ 0, 1, 18, 0, 4, 0,131, 0, 4, 0, 0, 11, 4, 0, 1, 11, 7, 0, 2, 11, 4, 0, 3, 11, 7, 0, 4, 11, 7, 0, 5, 11,
+ 4, 0, 6, 11, 7, 0, 7, 11, 4, 0, 8, 11, 7, 0, 9, 11, 1, 1, 10, 11, 7, 0, 11, 11, 7, 0, 12, 11, 7, 0, 13, 11,
+ 7, 0, 14, 11, 4, 0, 15, 11, 4, 0, 27, 0,192, 1, 4, 0, 42, 0,249, 2, 7, 0, 16, 11, 7, 0,181, 1, 7, 0, 27, 0,
+214, 0, 36, 0, 22, 0, 32, 0,192, 1, 17, 11, 54, 0,239, 10, 46, 0, 18, 11,214, 0, 19, 11, 52, 0, 20, 11, 25, 0,153, 0,
+ 0, 0, 21, 11, 7, 0, 22, 11, 2, 0,115, 6, 2, 0, 23, 11, 7, 0, 43, 2, 4, 0,107, 0, 4, 0, 18, 0, 7, 0, 24, 11,
+ 4, 0, 93, 2, 4, 0, 25, 11, 7, 0, 26, 11, 7, 0, 27, 11, 7, 0, 28, 11, 7, 0,181, 1, 4, 0, 29, 11, 7, 0, 30, 11,
+ 0, 0, 31, 11, 0, 0, 32, 11, 0, 0, 33, 11, 0, 0, 34, 11, 7, 0, 35, 11, 7, 0, 36, 11, 7, 0, 37, 11, 7, 0, 6, 3,
+ 7, 0, 38, 11, 4, 0, 39, 11, 7, 0,247, 5, 7, 0, 40, 11, 7, 0, 41, 11,193, 1, 10, 0, 4, 0, 16, 0, 4, 0,127, 0,
+ 4, 0, 18, 0, 4, 0, 20, 4, 4, 0, 42, 11, 4, 0, 43, 11, 4, 0, 44, 11, 4, 0, 69, 0, 0, 0, 19, 0, 11, 0, 2, 0,
+194, 1, 1, 0, 0, 0, 78, 7, 95, 0, 8, 0,193, 1, 45, 11, 4, 0, 46, 11, 4, 0, 47, 11, 4, 0, 48, 11, 4, 0, 49, 11,
+ 4, 0, 30, 0, 11, 0, 50, 11,194, 1, 51, 11,195, 1, 5, 0, 7, 0,170, 2, 7, 0,245, 2, 7, 0, 43, 2, 2, 0,152, 2,
+ 2, 0, 27, 0,196, 1, 5, 0, 7, 0,170, 2, 7, 0,164, 4, 7, 0, 52, 11, 7, 0, 53, 11, 7, 0,245, 2,197, 1, 5, 0,
+ 27, 0, 54, 11,198, 1, 21, 0, 7, 0, 81, 6, 7, 0, 55, 11, 7, 0, 55, 0,199, 1, 3, 0, 7, 0, 56, 11, 4, 0, 57, 11,
+ 4, 0, 58, 11,200, 1, 7, 0, 4, 0, 59, 11, 4, 0, 60, 11, 4, 0, 61, 11, 7, 0, 62, 11, 7, 0, 63, 11, 7, 0, 64, 11,
+ 7, 0, 55, 0,201, 1, 8, 0,201, 1, 0, 0,201, 1, 1, 0, 27, 0, 43, 0, 4, 0, 3, 1, 2, 0, 18, 0, 2, 0, 87, 1,
+ 7, 0,245, 2, 7, 0, 64, 9,202, 1, 7, 0,202, 1, 0, 0,202, 1, 1, 0, 27, 0, 43, 0, 2, 0,230, 2, 2, 0, 18, 0,
+ 2, 0, 17, 2, 2, 0, 55, 0,203, 1, 17, 0,196, 1, 13, 4,196, 1, 65, 11,195, 1, 66, 11,196, 1, 47, 9,197, 1, 67, 11,
+ 4, 0, 81, 0, 7, 0,245, 2, 7, 0, 12, 3, 7, 0, 68, 11, 4, 0, 59, 11, 4, 0, 69, 11, 7, 0, 63, 11, 7, 0, 64, 11,
+ 7, 0,107, 0, 4, 0, 70, 11, 2, 0, 18, 0, 2, 0, 71, 11,204, 1, 15, 0, 7, 0,255, 0, 7, 0, 72, 11, 7, 0, 56, 11,
+ 7, 0, 73, 11, 7, 0, 74, 11, 7, 0, 75, 11, 7, 0, 76, 11, 7, 0, 77, 11, 7, 0, 78, 11, 7, 0, 79, 11, 7, 0, 80, 11,
+ 7, 0, 81, 11, 7, 0, 82, 11, 4, 0, 18, 0, 4, 0, 83, 11,205, 1,128, 0, 22, 0, 32, 0, 34, 0, 74, 0,206, 1, 84, 11,
+204, 1, 85, 11,188, 0,159, 4, 4, 0, 18, 0, 4, 0, 55, 0, 2, 0, 16, 0, 2, 0, 66, 10, 2, 0, 86, 11, 2, 0,124, 1,
+ 2, 0, 87, 11, 2, 0,237, 3, 2, 0, 88, 11, 2, 0, 89, 11, 2, 0, 90, 11, 2, 0, 91, 11, 2, 0, 92, 11, 2, 0, 93, 11,
+ 2, 0, 94, 11, 2, 0, 95, 11, 2, 0, 96, 11, 2, 0,231, 5, 2, 0, 97, 11, 2, 0, 98, 11, 2, 0, 99, 11, 2, 0,100, 11,
+ 2, 0,101, 11, 2, 0, 32, 2, 2, 0, 40, 9, 2, 0, 15, 9, 2, 0,102, 11, 2, 0,103, 11, 2, 0, 30, 4, 2, 0, 31, 4,
+ 2, 0,104, 11, 2, 0,105, 11, 2, 0,106, 11, 2, 0,107, 11, 7, 0,108, 11, 7, 0,109, 11, 7, 0,110, 11, 7, 0,111, 11,
+ 7, 0,112, 11, 7, 0,113, 11, 7, 0,114, 11, 2, 0,161, 5, 2, 0,115, 11, 7, 0,116, 11, 7, 0,117, 11, 7, 0,118, 11,
+ 7, 0, 22, 9, 7, 0, 90, 0, 7, 0, 12, 3, 7, 0, 28, 9, 7, 0,119, 11, 7, 0,120, 11, 7, 0,121, 11, 7, 0,122, 11,
+ 7, 0,123, 11, 7, 0,124, 11, 4, 0, 23, 9, 4, 0, 21, 9, 4, 0,125, 11, 4, 0,126, 11, 2, 0,127, 11, 2, 0,128, 11,
+ 7, 0, 24, 9, 7, 0, 25, 9, 7, 0, 26, 9, 7, 0,129, 11, 7, 0,130, 11, 7, 0,131, 11, 7, 0,132, 11, 7, 0,133, 11,
+ 7, 0,134, 11, 7, 0,135, 11, 7, 0,136, 11, 7, 0,137, 11, 7, 0,227, 3, 7, 0,107, 0, 7, 0,138, 11, 7, 0,139, 11,
+ 7, 0,140, 11, 7, 0,141, 11, 7, 0,213, 0, 7, 0,142, 11, 4, 0,143, 11, 4, 0,144, 11, 7, 0,145, 11, 7, 0,146, 11,
+ 7, 0,147, 11, 7, 0,148, 11, 7, 0,149, 11, 7, 0,212, 0, 7, 0,150, 11, 7, 0, 57, 4, 7, 0, 55, 4, 7, 0, 56, 4,
+ 7, 0,151, 11, 7, 0,152, 11, 7, 0,153, 11, 7, 0,154, 11, 7, 0,155, 11, 7, 0,156, 11, 7, 0,157, 11, 7, 0,158, 11,
+ 7, 0,159, 11, 7, 0,160, 11, 7, 0,161, 11, 7, 0,162, 11, 7, 0,163, 11, 7, 0,164, 11, 7, 0,165, 11, 7, 0,166, 11,
+ 7, 0,167, 11, 7, 0,168, 11, 4, 0,169, 11, 4, 0,170, 11, 46, 0,143, 1, 64, 0, 5, 4, 14, 0,171, 11, 64, 0,172, 11,
+ 27, 0,173, 11, 27, 0,174, 11, 31, 0, 79, 0,183, 0, 73, 1,183, 0,175, 11,151, 0, 52, 0,151, 0, 0, 0,151, 0, 1, 0,
+205, 1,176, 11,203, 1,177, 11,200, 1,225, 9,191, 0, 85, 4, 11, 0, 86, 4,207, 1,178, 11,207, 1,179, 11, 14, 0,180, 11,
+ 14, 0,181, 11,136, 0,182, 11,144, 0,183, 11,144, 0,184, 11, 27, 0,185, 11, 27, 0,186, 11, 27, 0, 37, 0, 14, 0, 33, 10,
+ 0, 0, 19, 0, 7, 0,244, 0, 7, 0, 41, 3, 7, 0,187, 11, 7, 0,188, 11, 4, 0,219, 2, 4, 0,189, 11, 4, 0, 18, 0,
+ 4, 0, 23, 9, 4, 0,190, 11, 4, 0,191, 11, 4, 0,192, 11, 4, 0,193, 11, 2, 0,251, 0, 2, 0,194, 11, 2, 0,195, 11,
+ 2, 0,196, 11, 0, 0,197, 11, 2, 0,198, 11, 2, 0,199, 11, 2, 0,200, 11, 11, 0,201, 11,140, 0,158, 4, 14, 0, 26, 3,
+ 14, 0,202, 11,199, 1,203, 11, 4, 0,204, 11, 4, 0,205, 11,208, 1,206, 11,142, 0, 38, 3,209, 1,207, 11, 7, 0,208, 11,
+ 7, 0,209, 11, 7, 0,210, 11,138, 0, 38, 0,210, 1,159, 9, 7, 0,128, 4, 7, 0,211, 11, 7, 0,212, 11, 7, 0, 81, 6,
+ 7, 0,241, 3, 7, 0,227, 3, 7, 0,213, 11, 7, 0, 95, 2, 7, 0,214, 11, 7, 0,215, 11, 7, 0,216, 11, 7, 0,217, 11,
+ 7, 0,218, 11, 7, 0,219, 11, 7, 0,129, 4, 7, 0,220, 11, 7, 0,221, 11, 7, 0,222, 11, 7, 0,130, 4, 7, 0,126, 4,
+ 7, 0,127, 4, 7, 0,223, 11, 7, 0,224, 11, 7, 0,225, 11, 4, 0,226, 11, 4, 0, 91, 0, 4, 0,227, 11, 4, 0,228, 11,
+ 2, 0,229, 11, 2, 0,230, 11, 2, 0,231, 11, 2, 0,232, 11, 2, 0,233, 11, 2, 0,234, 11, 2, 0,235, 11, 2, 0, 27, 0,
+188, 0,159, 4,139, 0, 11, 0,210, 1,236, 11, 7, 0,237, 11, 7, 0,238, 11, 7, 0,254, 1, 7, 0,239, 11, 7, 0,240, 11,
+ 7, 0,241, 11, 4, 0, 91, 0, 2, 0,242, 11, 2, 0,243, 11, 64, 0,253, 1,211, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0,
+ 7, 0, 7, 0, 7, 0,244, 11,212, 1, 6, 0,212, 1, 0, 0,212, 1, 1, 0,211, 1,201, 9, 4, 0, 1, 1, 2, 0,245, 11,
+ 2, 0, 18, 0,213, 1, 5, 0,213, 1, 0, 0,213, 1, 1, 0, 14, 0,246, 11, 4, 0,247, 11, 4, 0, 18, 0,214, 1, 9, 0,
+214, 1, 0, 0,214, 1, 1, 0, 14, 0,126, 0,213, 1,248, 11, 4, 0, 18, 0, 2, 0,245, 11, 2, 0,249, 11, 7, 0, 92, 0,
+ 0, 0,250, 11,179, 0, 6, 0, 22, 0, 32, 0, 14, 0,130, 5, 4, 0, 18, 0, 2, 0,251, 11, 2, 0,252, 11, 11, 0,253, 11,
+215, 1, 6, 0, 14, 0,254, 11, 4, 0,255, 11, 4, 0, 0, 12, 4, 0, 18, 0, 4, 0, 27, 0,238, 0, 1, 12,216, 1, 19, 0,
+ 22, 0, 32, 0,217, 1, 2, 12,217, 1, 3, 12, 14, 0, 4, 12, 4, 0, 5, 12, 2, 0, 6, 12, 2, 0, 7, 12, 14, 0, 8, 12,
+ 14, 0, 9, 12,215, 1, 10, 12, 14, 0, 11, 12, 14, 0, 12, 12, 14, 0, 13, 12, 14, 0, 14, 12,218, 1, 15, 12,218, 1, 16, 12,
+218, 1, 17, 12, 14, 0, 18, 12,238, 0, 19, 12,217, 1, 32, 0,217, 1, 0, 0,217, 1, 1, 0, 11, 0, 20, 12, 4, 0,127, 8,
+ 2, 0, 21, 12, 2, 0, 27, 0, 28, 1, 22, 12, 28, 1, 23, 12, 0, 0, 24, 12, 2, 0, 25, 12, 2, 0, 26, 12, 2, 0,149, 8,
+ 2, 0,150, 8, 2, 0, 27, 12, 2, 0, 28, 12, 2, 0, 20, 4, 2, 0, 59, 7, 2, 0, 29, 12, 2, 0, 30, 12, 2, 0, 31, 12,
+ 2, 0, 30, 0,219, 1, 32, 12,220, 1, 33, 12,221, 1, 34, 12, 4, 0, 35, 12, 4, 0, 36, 12, 11, 0, 37, 12, 14, 0, 9, 12,
+ 14, 0,169, 8, 14, 0, 38, 12, 14, 0, 39, 12, 14, 0, 40, 12,222, 1, 18, 0,222, 1, 0, 0,222, 1, 1, 0, 0, 0, 41, 12,
+ 21, 0, 31, 0, 0, 0, 42, 12, 2, 0, 43, 12, 2, 0, 16, 0, 2, 0, 14, 0, 2, 0, 44, 12, 2, 0, 45, 12, 2, 0, 46, 12,
+ 2, 0, 47, 12, 2, 0, 48, 12, 2, 0, 18, 0, 2, 0, 49, 12, 2, 0, 32, 0, 2, 0, 27, 0,223, 1, 50, 12,224, 1, 4, 0,
+224, 1, 0, 0,224, 1, 1, 0,222, 1, 51, 12,222, 1, 52, 12,225, 1, 11, 0,225, 1, 0, 0,225, 1, 1, 0, 14, 0, 53, 12,
+ 14, 0, 54, 12, 0, 0, 41, 12, 2, 0, 55, 12, 2, 0, 56, 12, 2, 0, 18, 0, 2, 0, 57, 12, 4, 0, 58, 12, 11, 0, 59, 12,
+218, 1, 7, 0,218, 1, 0, 0,218, 1, 1, 0, 0, 0, 41, 12, 0, 0, 60, 12, 14, 0, 67, 8, 4, 0, 61, 12, 4, 0, 18, 0,
+250, 0, 14, 0,250, 0, 0, 0,250, 0, 1, 0, 0, 0, 41, 12, 21, 0, 31, 0,226, 1,143, 8, 11, 0, 62, 12, 11, 0, 63, 12,
+223, 1, 50, 12,215, 1, 64, 12, 14, 0, 65, 12,250, 0, 66, 12, 33, 1,245, 6, 2, 0, 18, 0, 2, 0, 86, 1,227, 1, 12, 0,
+227, 1, 0, 0,227, 1, 1, 0, 11, 0, 2, 0, 11, 0, 67, 12, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0,147, 9,
+ 7, 0,128, 0, 7, 0,137, 4, 7, 0, 97, 9, 7, 0, 89, 10,228, 1, 5, 0, 7, 0, 68, 12, 4, 0, 69, 12, 4, 0, 70, 12,
+ 4, 0, 87, 1, 4, 0, 18, 0,229, 1, 6, 0, 7, 0, 71, 12, 7, 0, 72, 12, 7, 0, 73, 12, 7, 0, 74, 12, 4, 0, 16, 0,
+ 4, 0, 18, 0,230, 1, 5, 0, 7, 0,125, 9, 7, 0,126, 9, 7, 0,245, 2, 2, 0, 46, 2, 2, 0, 47, 2,231, 1, 5, 0,
+230, 1, 2, 0, 4, 0, 52, 0, 7, 0, 75, 12, 7, 0,125, 9, 7, 0,126, 9,232, 1, 4, 0, 2, 0, 76, 12, 2, 0, 77, 12,
+ 2, 0, 78, 12, 2, 0, 79, 12,233, 1, 2, 0, 37, 0, 43, 7, 21, 0,165, 9,234, 1, 3, 0, 19, 0, 80, 12, 4, 0, 18, 0,
+ 4, 0, 27, 0,235, 1, 6, 0, 7, 0,107, 0, 7, 0,214, 2, 7, 0, 81, 12, 7, 0, 27, 0, 2, 0,250, 0, 2, 0, 82, 12,
+236, 1, 5, 0, 7, 0, 83, 12, 7, 0,127, 0, 7, 0,202, 9, 7, 0,203, 9, 4, 0, 18, 0,237, 1, 6, 0, 22, 0, 48, 7,
+ 0, 0, 84, 12, 0, 0, 85, 12, 2, 0, 86, 12, 2, 0, 18, 0, 4, 0, 87, 12,238, 1, 7, 0,238, 1, 0, 0,238, 1, 1, 0,
+ 0, 0, 19, 0,237, 1, 88, 12, 2, 0, 89, 12, 2, 0, 16, 0, 7, 0, 59, 0,239, 1, 7, 0, 14, 0, 90, 12, 0, 0, 91, 12,
+ 11, 0, 92, 12, 7, 0, 59, 0, 7, 0,147, 9, 4, 0, 16, 0, 4, 0, 18, 0,240, 1, 3, 0, 7, 0, 93, 12, 4, 0, 18, 0,
+ 4, 0, 27, 0,241, 1, 15, 0,241, 1, 0, 0,241, 1, 1, 0,107, 1, 20, 10,239, 1, 60, 0, 14, 0,193, 3, 30, 0, 48, 0,
+240, 1, 94, 12, 4, 0, 52, 0, 7, 0, 59, 0, 2, 0, 18, 0, 2, 0, 22, 1, 4, 0, 95, 12, 0, 0, 84, 12, 4, 0, 96, 12,
+ 7, 0, 97, 12,242, 1, 2, 0, 0, 0, 98, 12, 0, 0, 99, 12,243, 1, 4, 0,243, 1, 0, 0,243, 1, 1, 0,177, 0, 75, 3,
+ 14, 0,100, 12,244, 1, 25, 0,244, 1, 0, 0,244, 1, 1, 0, 14, 0,101, 12,177, 0, 95, 9,243, 1,102, 12, 14, 0,103, 12,
+ 14, 0,193, 3, 0, 0, 19, 0, 7, 0,147, 9, 7, 0,104, 12, 7, 0, 89, 0, 7, 0, 90, 0, 7, 0, 85, 10, 7, 0, 86, 10,
+ 7, 0, 2, 3, 7, 0,153, 3, 7, 0, 97, 9, 7, 0, 89, 10, 2, 0,105, 12, 2, 0,106, 12, 2, 0, 66, 0, 2, 0, 16, 0,
+ 11, 0,107, 12, 4, 0, 18, 0, 4, 0, 30, 0,245, 1, 6, 0,245, 1, 0, 0,245, 1, 1, 0, 14, 0,101, 12, 4, 0, 18, 0,
+ 4, 0, 17, 2, 0, 0, 19, 0,246, 1, 11, 0,246, 1, 0, 0,246, 1, 1, 0, 22, 0, 48, 7, 0, 0,108, 12, 4, 0, 87, 12,
+ 2, 0,109, 12, 2, 0, 27, 0, 0, 0, 84, 12, 4, 0, 95, 12, 2, 0, 18, 0, 2, 0,110, 12,247, 1, 10, 0,247, 1, 0, 0,
+247, 1, 1, 0, 14, 0,111, 12, 0, 0, 41, 12, 0, 0, 19, 0, 0, 0,112, 12, 0, 0,113, 12, 2, 0, 18, 0, 2, 0,110, 12,
+ 4, 0,114, 12,248, 1, 5, 0,248, 1, 0, 0,248, 1, 1, 0, 0, 0, 84, 12, 4, 0, 95, 12, 7, 0,235, 2, 34, 0, 12, 0,
+177, 0,184, 3,177, 0,115, 12,243, 1,102, 12, 14, 0,116, 12,244, 1,117, 12, 14, 0,118, 12, 14, 0,119, 12, 4, 0, 18, 0,
+ 4, 0,251, 0, 2, 0,120, 12, 2, 0,121, 12, 7, 0,122, 12,249, 1, 2, 0, 22, 0, 32, 0, 34, 0, 74, 0,250, 1, 5, 0,
+250, 1, 0, 0,250, 1, 1, 0, 4, 0, 16, 0, 4, 0, 18, 0, 0, 0,179, 5,251, 1, 6, 0,250, 1,123, 12, 27, 0, 43, 0,
+ 4, 0,124, 12, 7, 0,125, 12, 4, 0,126, 12, 4, 0, 6, 10,252, 1, 3, 0,250, 1,123, 12, 4, 0,124, 12, 7, 0,127, 12,
+253, 1, 8, 0,250, 1,123, 12, 27, 0, 43, 0, 7, 0, 77, 1, 7, 0,128, 12, 7, 0, 41, 3, 7, 0,158, 9, 4, 0,124, 12,
+ 4, 0,129, 12,254, 1, 5, 0,250, 1,123, 12, 7, 0,130, 12, 7, 0,181, 2, 7, 0, 8, 3, 7, 0, 55, 0,255, 1, 3, 0,
+250, 1,123, 12, 7, 0,158, 9, 7, 0,131, 12,198, 1, 4, 0, 7, 0,132, 12, 7, 0,139, 11, 2, 0,133, 12, 2, 0, 87, 1,
+ 0, 2, 14, 0, 0, 2, 0, 0, 0, 2, 1, 0, 14, 0,134, 12, 14, 0,135, 12, 14, 0,136, 12, 0, 0,179, 5, 4, 0, 32, 0,
+ 4, 0, 18, 0, 4, 0,137, 12, 7, 0,138, 12, 4, 0,126, 12, 4, 0, 6, 10, 7, 0, 89, 4, 7, 0, 10, 3,206, 1, 23, 0,
+ 4, 0,124, 12, 4, 0,139, 12, 7, 0,140, 12, 7, 0, 6, 3, 7, 0,141, 12, 7, 0,238, 8, 7, 0,132, 12, 7, 0,142, 12,
+ 7, 0,214, 2, 7, 0, 2, 11, 7, 0,222, 4, 7, 0,143, 12, 7, 0,144, 12, 7, 0,145, 12, 7, 0,146, 12, 7, 0,147, 12,
+ 7, 0,148, 12, 7, 0,149, 12, 7, 0,150, 12, 7, 0,151, 12, 7, 0,152, 12, 7, 0,153, 12, 14, 0,154, 12,124, 0, 40, 0,
+123, 0,155, 12, 1, 2, 85, 11, 64, 0,156, 12, 64, 0,172, 11, 64, 0,157, 12, 2, 2,158, 12, 43, 0,168, 0, 43, 0,159, 12,
+ 43, 0,160, 12, 7, 0,161, 12, 7, 0,162, 12, 7, 0,163, 12, 7, 0,164, 12, 7, 0,165, 12, 7, 0,126, 8, 7, 0,166, 12,
+ 7, 0,181, 1, 7, 0,167, 12, 4, 0,168, 12, 4, 0,169, 12, 4, 0,170, 12, 4, 0, 91, 0, 4, 0, 27, 0, 4, 0,171, 12,
+ 2, 0,172, 12, 2, 0,173, 12, 4, 0,174, 12, 7, 0,214, 2, 4, 0,175, 12, 7, 0,176, 12, 4, 0,177, 12, 4, 0,178, 12,
+ 4, 0,179, 12,140, 0,180, 12, 14, 0,181, 12,188, 0,159, 4, 4, 0,182, 12, 7, 0,183, 12, 7, 0,184, 12, 4, 0, 30, 0,
+125, 0, 12, 0,123, 0,155, 12,151, 0, 61, 3, 7, 0,146, 1, 7, 0,126, 8, 7, 0,185, 12, 7, 0,186, 12, 7, 0,187, 12,
+ 2, 0,188, 12, 2, 0,189, 12, 2, 0,190, 12, 2, 0, 16, 0, 4, 0, 91, 0,126, 0, 15, 0,123, 0,155, 12,142, 0, 38, 3,
+ 7, 0,201, 9, 7, 0,191, 12, 7, 0,192, 12, 4, 0,193, 12, 7, 0, 79, 1, 7, 0,194, 12, 4, 0, 42, 10, 4, 0, 34, 3,
+ 4, 0,195, 12, 7, 0,164, 12, 2, 0, 16, 0, 2, 0, 27, 0, 4, 0, 30, 0, 3, 2, 15, 0, 22, 0, 32, 0, 34, 0, 74, 0,
+ 47, 1,236, 8, 7, 0,196, 12, 7, 0,197, 12, 7, 0,198, 12, 7, 0,199, 12, 7, 0,157, 9, 7, 0,200, 12, 7, 0,201, 12,
+ 7, 0,202, 12, 7, 0, 89, 4, 7, 0,238, 8, 2, 0, 18, 0, 2, 0,121, 9,232, 0, 3, 0, 4, 0,125, 0, 2, 0,221, 6,
+ 2, 0,203, 12, 4, 2, 5, 0, 0, 0,202, 8, 2, 0,203, 8, 2, 0, 79, 5, 2, 0,204, 12, 2, 0,205, 12,230, 0, 16, 0,
+ 22, 0, 32, 0, 34, 0, 74, 0, 0, 0, 35, 0, 4, 0,142, 0, 4, 0,143, 0, 4, 0,206, 12, 7, 0,161, 0, 7, 0,162, 0,
+ 44, 0,137, 0, 5, 2,159, 9,179, 0,187, 3, 6, 2,207, 12, 11, 0,208, 12, 4, 2,209, 12, 4, 0, 18, 0, 4, 0, 22, 0,
+ 14, 1, 10, 0, 4, 0,131, 0, 4, 0,210, 12, 52, 0,211, 12, 7, 0,212, 12, 2, 0,213, 12, 0, 0,186, 2, 4, 0,125, 0,
+ 7, 2,180, 3, 8, 2,214, 12, 7, 0,215, 12, 9, 2, 3, 0, 4, 0,125, 0, 7, 0,216, 12, 7, 0, 79, 1, 10, 2, 11, 0,
+ 11, 0,217, 12, 7, 0,218, 12, 7, 0,219, 12, 7, 0, 27, 0, 7, 0,220, 12, 2, 0,221, 12, 2, 0, 66, 0, 7, 0,222, 12,
+ 7, 0,223, 12, 7, 0,224, 12, 7, 0,225, 12, 8, 2, 3, 0, 7, 0,226, 12, 4, 0,125, 0, 4, 0, 18, 0, 7, 2, 24, 0,
+ 7, 2, 0, 0, 7, 2, 1, 0, 0, 0, 19, 0, 7, 0,227, 12, 7, 0,228, 12, 7, 0,229, 12, 7, 0,230, 12, 7, 0, 16, 11,
+ 4, 0,231, 12, 4, 0,232, 12, 8, 2,233, 12, 7, 0,234, 12, 7, 0,216, 12, 4, 0, 18, 0, 4, 0,235, 12, 4, 0,236, 12,
+ 7, 0, 97, 12, 2, 0,237, 12, 2, 0,232, 3, 2, 0,238, 12, 2, 0,239, 12, 2, 0,240, 12, 2, 0, 30, 0, 7, 0,241, 12,
+ 11, 2, 22, 0, 4, 0, 18, 0, 2, 0,242, 12, 2, 0,243, 12, 7, 0,244, 12, 2, 0,245, 12, 2, 0,246, 12, 2, 0,247, 12,
+ 2, 0,248, 12, 2, 0,249, 12, 2, 0,250, 12, 2, 0,251, 12, 2, 0, 8, 3, 4, 0,252, 12, 4, 0,253, 12, 2, 0,254, 12,
+ 2, 0, 30, 0, 7, 0, 94, 1, 4, 0,255, 12, 4, 0, 0, 13, 7, 0, 1, 13, 7, 0, 2, 13, 4, 0,250, 1, 12, 2, 12, 0,
+ 4, 0, 18, 0, 4, 0, 3, 13, 4, 0, 4, 13, 7, 0, 5, 13, 7, 2, 6, 13, 7, 0, 7, 13, 7, 0, 8, 13, 7, 0, 9, 13,
+ 4, 0,193, 1, 4, 0,131, 0, 7, 0,153, 3, 52, 0, 10, 13, 13, 2, 5, 0, 4, 0, 18, 0, 7, 0,216, 12, 4, 0, 11, 13,
+ 4, 0, 12, 13, 9, 2, 13, 13, 14, 2, 7, 0, 14, 2, 0, 0, 14, 2, 1, 0, 0, 0, 19, 0, 4, 0, 18, 0, 7, 0,153, 3,
+ 14, 0, 14, 13, 13, 2, 15, 13, 15, 2, 1, 0, 0, 0, 16, 13, 16, 2, 8, 0, 16, 2, 0, 0, 16, 2, 1, 0, 7, 2,180, 3,
+ 4, 0, 27, 0, 4, 0, 17, 13, 4, 0, 18, 13, 4, 0, 19, 13, 4, 0, 20, 13, 17, 2, 6, 0, 4, 0,131, 0, 4, 0, 27, 0,
+ 14, 0, 6, 10, 4, 0, 21, 13, 2, 0, 22, 13, 2, 0, 23, 13, 6, 2, 11, 0, 11, 2, 24, 13, 10, 2, 25, 13, 14, 0, 14, 13,
+ 13, 2, 15, 13, 12, 2, 26, 13, 7, 2, 27, 13, 14, 0, 28, 13, 4, 0, 29, 13, 4, 0, 30, 13, 15, 2, 96, 6, 17, 2, 31, 13,
+ 18, 2, 48, 0, 18, 2, 0, 0, 18, 2, 1, 0,170, 0,150, 3, 19, 2, 2, 0, 64, 0, 32, 13,188, 0,159, 4,140, 0,158, 4,
+ 14, 0, 26, 3, 4, 0, 33, 13, 0, 0, 19, 0, 2, 0,172, 10, 2, 0, 16, 0, 2, 0, 34, 13, 2, 0, 35, 13, 2, 0, 36, 13,
+ 2, 0, 37, 13, 2, 0, 38, 13, 2, 0, 39, 13, 4, 0, 91, 0, 4, 0,191, 3, 4, 0, 40, 13, 4, 0, 41, 13, 4, 0,202, 9,
+ 4, 0,203, 9, 4, 0, 27, 0, 7, 0, 42, 13, 47, 0, 43, 13, 0, 0, 44, 13, 4, 0, 45, 13, 4, 0,174, 12, 7, 0, 46, 13,
+ 7, 0, 47, 13, 7, 0, 48, 13, 7, 0, 49, 13, 7, 0, 50, 13, 7, 0, 51, 13, 7, 0, 52, 13, 7, 0, 53, 13, 7, 0, 54, 13,
+ 7, 0, 55, 13, 7, 0, 56, 13, 7, 0, 57, 13, 7, 0, 58, 13, 7, 0, 59, 13, 0, 0,207, 2, 0, 0, 60, 13, 0, 0, 61, 13,
+ 0, 0, 62, 13,170, 0, 7, 0,169, 0, 63, 13,144, 0, 40, 3, 14, 0, 64, 13, 2, 0, 65, 13, 2, 0, 91, 0, 4, 0, 27, 0,
+ 0, 0, 66, 13,171, 0, 24, 0,169, 0, 63, 13,144, 0, 40, 3,151, 0, 61, 3, 63, 0, 29, 2, 4, 0, 91, 0, 4, 0, 67, 13,
+ 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,181, 1, 7, 0, 68, 13, 7, 0, 69, 13, 7, 0, 70, 13, 7, 0, 71, 13,
+ 50, 0, 72, 13, 50, 0, 73, 13, 2, 0, 74, 13, 2, 0,233, 10, 2, 0, 75, 13, 2, 0, 27, 0, 7, 0, 76, 13, 7, 0, 77, 13,
+ 7, 0, 78, 13, 7, 0, 79, 13, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0};
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index b79c510efce..5c23aba9024 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -128,8 +128,8 @@ enum {
/* Runtime flags */
enum {
- GP_PAINTFLAG_FIRSTRUN = (1 << 0), /* operator just started */
- GP_PAINTFLAG_STROKEADDED = (1 << 1) /* stroke was already added during draw session */
+ GP_PAINTFLAG_FIRSTRUN = (1 << 0), /* operator just started */
+ GP_PAINTFLAG_STROKEADDED = (1 << 1)
};
/* ------ */
@@ -143,6 +143,17 @@ enum {
/* minimum length of new segment before new point can be added */
#define MIN_EUCLIDEAN_PX (U.gp_euclideandist)
+static int gp_stroke_added_check(tGPsdata *p)
+{
+ return (p->gpf && p->gpf->strokes.last && p->flags & GP_PAINTFLAG_STROKEADDED);
+}
+
+static void gp_stroke_added_enable(tGPsdata *p)
+{
+ BLI_assert(p->gpf->strokes.last != NULL);
+ p->flags |= GP_PAINTFLAG_STROKEADDED;
+}
+
/* ------ */
/* Forward defines for some functions... */
@@ -321,7 +332,7 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure)
{
bGPdata *gpd = p->gpd;
tGPspoint *pt;
-
+
/* check painting mode */
if (p->paintmode == GP_PAINTMODE_DRAW_STRAIGHT) {
/* straight lines only - i.e. only store start and end point in buffer */
@@ -390,7 +401,7 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure)
* to stroke. This allows to draw lines more interactively (see new segment
* during mouse slide, i.e.)
*/
- if (p->flags & GP_PAINTFLAG_STROKEADDED) {
+ if (gp_stroke_added_check(p)) {
bGPDstroke *gps = p->gpf->strokes.last;
bGPDspoint *pts;
@@ -578,8 +589,9 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
* coordinates are getting added to stroke immediately to allow more
* interactive behavior */
if (p->paintmode == GP_PAINTMODE_DRAW_POLY) {
- if (p->flags & GP_PAINTFLAG_STROKEADDED)
+ if (gp_stroke_added_check(p)) {
return;
+ }
}
/* allocate memory for a new stroke */
@@ -710,11 +722,10 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
if (depth_arr)
MEM_freeN(depth_arr);
}
-
- p->flags |= GP_PAINTFLAG_STROKEADDED;
/* add stroke to frame */
BLI_addtail(&p->gpf->strokes, gps);
+ gp_stroke_added_enable(p);
}
/* --- 'Eraser' for 'Paint' Tool ------ */
@@ -1800,7 +1811,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event)
//printf("\tGP - handle modal event...\n");
/* exit painting mode (and/or end current stroke) */
- if (ELEM4(event->type, RETKEY, PADENTER, ESCKEY, SPACEKEY)) {
+ if (ELEM5(event->type, RETKEY, PADENTER, ESCKEY, SPACEKEY, RIGHTMOUSE)) {
/* exit() ends the current stroke before cleaning up */
//printf("\t\tGP - end of paint op + end of stroke\n");
p->status = GP_STATUS_DONE;
@@ -1808,7 +1819,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event)
}
/* toggle painting mode upon mouse-button movement */
- if (ELEM(event->type, LEFTMOUSE, RIGHTMOUSE)) {
+ if (event->type == LEFTMOUSE) {
/* if painting, end stroke */
if (p->status == GP_STATUS_PAINTING) {
int sketch = 0;
diff --git a/source/blender/editors/include/BIF_gl.h b/source/blender/editors/include/BIF_gl.h
index e29e0af59b1..a5e5d7ce2e0 100644
--- a/source/blender/editors/include/BIF_gl.h
+++ b/source/blender/editors/include/BIF_gl.h
@@ -35,20 +35,20 @@
#include "GL/glew.h"
- /*
- * these should be phased out. cpack should be replaced in
- * code with calls to glColor3ub. - zr
- */
+/*
+ * these should be phased out. cpack should be replaced in
+ * code with calls to glColor3ub. - zr
+ */
/*
*
* This define converts a numerical value to the equivalent 24-bit
* color, while not being endian-sensitive. On little-endians, this
* is the same as doing a 'naive' indexing, on big-endian, it is not!
* */
-#define cpack(x) glColor3ub( ((x)&0xFF), (((x)>>8)&0xFF), (((x)>>16)&0xFF) )
+#define cpack(x) glColor3ub( ((x) & 0xFF), (((x) >> 8) & 0xFF), (((x) >> 16) & 0xFF) )
-#define glMultMatrixf(x) glMultMatrixf( (float *)(x))
-#define glLoadMatrixf(x) glLoadMatrixf( (float *)(x))
+#define glMultMatrixf(x) glMultMatrixf( (float *)(x))
+#define glLoadMatrixf(x) glLoadMatrixf( (float *)(x))
#endif /* #ifdef __BIF_GL_H__ */
diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h
index 2172aa82acf..b939ae47ead 100644
--- a/source/blender/editors/include/BIF_glutil.h
+++ b/source/blender/editors/include/BIF_glutil.h
@@ -56,138 +56,138 @@ extern unsigned char stipple_quarttone[128];
extern unsigned char stipple_diag_stripes_pos[128];
extern unsigned char stipple_diag_stripes_neg[128];
- /**
- * Draw a lined (non-looping) arc with the given
- * \a radius, starting at angle \a start and arcing
- * through \a angle. The arc is centered at the origin
- * and drawn in the XY plane.
- *
- * \param start The initial angle (in radians).
- * \param angle The length of the arc (in radians).
- * \param radius The arc radius.
- * \param nsegments The number of segments to use in drawing the arc.
- */
-void glutil_draw_lined_arc (float start, float angle, float radius, int nsegments);
-
- /**
- * Draw a filled arc with the given \a radius,
- * starting at angle \a start and arcing through
- * \a angle. The arc is centered at the origin
- * and drawn in the XY plane.
- *
- * \param start The initial angle (in radians).
- * \param angle The length of the arc (in radians).
- * \param radius The arc radius.
- * \param nsegments The number of segments to use in drawing the arc.
- */
-void glutil_draw_filled_arc (float start, float angle, float radius, int nsegments);
-
- /**
- * Routines an integer value as obtained by glGetIntegerv.
- * The param must cause only one value to be gotten from GL.
- */
-int glaGetOneInteger (int param);
-
- /**
- * Routines a float value as obtained by glGetIntegerv.
- * The param must cause only one value to be gotten from GL.
- */
-float glaGetOneFloat (int param);
-
- /**
- * Functions like glRasterPos2i, except ensures that the resulting
- * raster position is valid. \a known_good_x and \a known_good_y
- * should be coordinates of a point known to be within the current
- * view frustum.
- * \attention This routine should be used when the distance of \a x
- * and \a y away from the known good point is small (ie. for small icons
- * and for bitmap characters), when drawing large+zoomed images it is
- * possible for overflow to occur, the glaDrawPixelsSafe routine should
- * be used instead.
- */
-void glaRasterPosSafe2f (float x, float y, float known_good_x, float known_good_y);
-
- /**
- * Functions like a limited glDrawPixels, except ensures that
- * the image is displayed onscreen even if the \a x and \a y
- * coordinates for would be clipped. The routine respects the
- * glPixelZoom values, pixel unpacking parameters are _not_
- * respected.
- *
- * \attention This routine makes many assumptions: the rect data
- * is expected to be in RGBA unsigned byte format, the coordinate
- * (0.375, 0.375) is assumed to be within the view frustum, and the
- * modelview and projection matrices are assumed to define a
- * 1-to-1 mapping to screen space.
- * \attention Furthermore, in the case of zoomed or unpixel aligned
- * images extending outside the view frustum, but still within the
- * window, some portion of the image may be visible left and/or
- * below of the given \a x and \a y coordinates. It is recommended
- * to use the glScissor functionality if images are to be drawn
- * with an inset view matrix.
- */
-void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, int row_w, int format, int type, void *rect);
-
- /**
- * Functions like a limited glDrawPixels, but actually draws the
- * image using textures, which can be tremendously faster on low-end
- * cards, and also avoids problems with the raster position being
- * clipped when offscreen. The routine respects the glPixelZoom values,
- * pixel unpacking parameters are _not_ respected.
- *
- * \attention This routine makes many assumptions: the rect data
- * is expected to be in RGBA byte or float format, and the
- * modelview and projection matrices are assumed to define a
- * 1-to-1 mapping to screen space.
- */
-
-void glaDrawPixelsTex (float x, float y, int img_w, int img_h, int format, void *rect);
+/**
+ * Draw a lined (non-looping) arc with the given
+ * \a radius, starting at angle \a start and arcing
+ * through \a angle. The arc is centered at the origin
+ * and drawn in the XY plane.
+ *
+ * \param start The initial angle (in radians).
+ * \param angle The length of the arc (in radians).
+ * \param radius The arc radius.
+ * \param nsegments The number of segments to use in drawing the arc.
+ */
+void glutil_draw_lined_arc(float start, float angle, float radius, int nsegments);
+
+/**
+ * Draw a filled arc with the given \a radius,
+ * starting at angle \a start and arcing through
+ * \a angle. The arc is centered at the origin
+ * and drawn in the XY plane.
+ *
+ * \param start The initial angle (in radians).
+ * \param angle The length of the arc (in radians).
+ * \param radius The arc radius.
+ * \param nsegments The number of segments to use in drawing the arc.
+ */
+void glutil_draw_filled_arc(float start, float angle, float radius, int nsegments);
+
+/**
+ * Routines an integer value as obtained by glGetIntegerv.
+ * The param must cause only one value to be gotten from GL.
+ */
+int glaGetOneInteger(int param);
+
+/**
+ * Routines a float value as obtained by glGetIntegerv.
+ * The param must cause only one value to be gotten from GL.
+ */
+float glaGetOneFloat(int param);
+
+/**
+ * Functions like glRasterPos2i, except ensures that the resulting
+ * raster position is valid. \a known_good_x and \a known_good_y
+ * should be coordinates of a point known to be within the current
+ * view frustum.
+ * \attention This routine should be used when the distance of \a x
+ * and \a y away from the known good point is small (ie. for small icons
+ * and for bitmap characters), when drawing large+zoomed images it is
+ * possible for overflow to occur, the glaDrawPixelsSafe routine should
+ * be used instead.
+ */
+void glaRasterPosSafe2f(float x, float y, float known_good_x, float known_good_y);
+
+/**
+ * Functions like a limited glDrawPixels, except ensures that
+ * the image is displayed onscreen even if the \a x and \a y
+ * coordinates for would be clipped. The routine respects the
+ * glPixelZoom values, pixel unpacking parameters are _not_
+ * respected.
+ *
+ * \attention This routine makes many assumptions: the rect data
+ * is expected to be in RGBA unsigned byte format, the coordinate
+ * (0.375, 0.375) is assumed to be within the view frustum, and the
+ * modelview and projection matrices are assumed to define a
+ * 1-to-1 mapping to screen space.
+ * \attention Furthermore, in the case of zoomed or unpixel aligned
+ * images extending outside the view frustum, but still within the
+ * window, some portion of the image may be visible left and/or
+ * below of the given \a x and \a y coordinates. It is recommended
+ * to use the glScissor functionality if images are to be drawn
+ * with an inset view matrix.
+ */
+void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int format, int type, void *rect);
+
+/**
+ * Functions like a limited glDrawPixels, but actually draws the
+ * image using textures, which can be tremendously faster on low-end
+ * cards, and also avoids problems with the raster position being
+ * clipped when offscreen. The routine respects the glPixelZoom values,
+ * pixel unpacking parameters are _not_ respected.
+ *
+ * \attention This routine makes many assumptions: the rect data
+ * is expected to be in RGBA byte or float format, and the
+ * modelview and projection matrices are assumed to define a
+ * 1-to-1 mapping to screen space.
+ */
+
+void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *rect);
void glaDrawPixelsTexScaled(float x, float y, int img_w, int img_h, int format, void *rect, float scaleX, float scaleY);
- /* 2D Drawing Assistance */
-
- /** Define a 2D area (viewport, scissor, matrices) for OpenGL rendering.
- *
- * glwDefine2DArea and glaBegin2DDraw set up an OpenGL state appropriate
- * for drawing using both vertice (Vertex, etc) and raster (RasterPos, Rect)
- * commands. All coordinates should be at integer positions. There is little
- * to no reason to use glVertex2f etc. functions during 2D rendering, and
- * thus no reason to +-0.5 the coordinates or perform other silly
- * tricks.
- *
- * \param screen_rect The screen rectangle to be defined for 2D drawing.
- */
-void glaDefine2DArea (struct rcti *screen_rect);
+/* 2D Drawing Assistance */
+
+/** Define a 2D area (viewport, scissor, matrices) for OpenGL rendering.
+ *
+ * glwDefine2DArea and glaBegin2DDraw set up an OpenGL state appropriate
+ * for drawing using both vertice (Vertex, etc) and raster (RasterPos, Rect)
+ * commands. All coordinates should be at integer positions. There is little
+ * to no reason to use glVertex2f etc. functions during 2D rendering, and
+ * thus no reason to +-0.5 the coordinates or perform other silly
+ * tricks.
+ *
+ * \param screen_rect The screen rectangle to be defined for 2D drawing.
+ */
+void glaDefine2DArea(struct rcti *screen_rect);
typedef struct gla2DDrawInfo gla2DDrawInfo;
- /** Save the current OpenGL state and initialize OpenGL for 2D
- * rendering. glaEnd2DDraw should be called on the returned structure
- * to free it and to return OpenGL to its previous state. The
- * scissor rectangle is set to match the viewport.
- *
- * See glaDefine2DArea for an explanation of why this function uses integers.
- *
- * \param screen_rect The screen rectangle to be used for 2D drawing.
- * \param world_rect The world rectangle that the 2D area represented
- * by \a screen_rect is supposed to represent. If NULL it is assumed the
- * world has a 1 to 1 mapping to the screen.
- */
-gla2DDrawInfo* glaBegin2DDraw (struct rcti *screen_rect, struct rctf *world_rect);
-
- /** Translate the (\a wo_x, \a wo_y) point from world coordinates into screen space. */
-void gla2DDrawTranslatePt (gla2DDrawInfo *di, float wo_x, float wo_y, int *sc_x_r, int *sc_y_r);
-
- /** Translate the \a world point from world coordiantes into screen space. */
-void gla2DDrawTranslatePtv (gla2DDrawInfo *di, float world[2], int screen_r[2]);
-
- /* Restores the previous OpenGL state and free's the auxilary
- * gla data.
- */
-void glaEnd2DDraw (gla2DDrawInfo *di);
-
- /** Adjust the transformation mapping of a 2d area */
+/** Save the current OpenGL state and initialize OpenGL for 2D
+ * rendering. glaEnd2DDraw should be called on the returned structure
+ * to free it and to return OpenGL to its previous state. The
+ * scissor rectangle is set to match the viewport.
+ *
+ * See glaDefine2DArea for an explanation of why this function uses integers.
+ *
+ * \param screen_rect The screen rectangle to be used for 2D drawing.
+ * \param world_rect The world rectangle that the 2D area represented
+ * by \a screen_rect is supposed to represent. If NULL it is assumed the
+ * world has a 1 to 1 mapping to the screen.
+ */
+gla2DDrawInfo *glaBegin2DDraw(struct rcti *screen_rect, struct rctf *world_rect);
+
+/** Translate the (\a wo_x, \a wo_y) point from world coordinates into screen space. */
+void gla2DDrawTranslatePt(gla2DDrawInfo *di, float wo_x, float wo_y, int *sc_x_r, int *sc_y_r);
+
+/** Translate the \a world point from world coordiantes into screen space. */
+void gla2DDrawTranslatePtv(gla2DDrawInfo * di, float world[2], int screen_r[2]);
+
+/* Restores the previous OpenGL state and free's the auxilary
+ * gla data.
+ */
+void glaEnd2DDraw(gla2DDrawInfo *di);
+
+/** Adjust the transformation mapping of a 2d area */
void gla2DGetMap(gla2DDrawInfo *di, struct rctf *rect);
void gla2DSetMap(gla2DDrawInfo *di, struct rctf *rect);
diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h
index 6084b4921fb..e79c7ba040f 100644
--- a/source/blender/editors/include/ED_anim_api.h
+++ b/source/blender/editors/include/ED_anim_api.h
@@ -68,36 +68,36 @@ struct PropertyRNA;
* 'context' information
*/
typedef struct bAnimContext {
- void *data; /* data to be filtered for use in animation editor */
- short datatype; /* type of data eAnimCont_Types */
+ void *data; /* data to be filtered for use in animation editor */
+ short datatype; /* type of data eAnimCont_Types */
- short mode; /* editor->mode */
- short spacetype; /* sa->spacetype */
- short regiontype; /* active region -> type (channels or main) */
- struct ScrArea *sa; /* editor host */
- struct SpaceLink *sl; /* editor data */
- struct ARegion *ar; /* region within editor */
+ short mode; /* editor->mode */
+ short spacetype; /* sa->spacetype */
+ short regiontype; /* active region -> type (channels or main) */
+ struct ScrArea *sa; /* editor host */
+ struct SpaceLink *sl; /* editor data */
+ struct ARegion *ar; /* region within editor */
struct bDopeSheet *ads; /* dopesheet data for editor (or which is being used) */
- struct Scene *scene; /* active scene */
- struct Object *obact; /* active object */
- ListBase *markers; /* active set of markers */
+ struct Scene *scene; /* active scene */
+ struct Object *obact; /* active object */
+ ListBase *markers; /* active set of markers */
- struct ReportList *reports; /* pointer to current reports list */
+ struct ReportList *reports; /* pointer to current reports list */
} bAnimContext;
/* Main Data container types */
typedef enum eAnimCont_Types {
- ANIMCONT_NONE = 0, /* invalid or no data */
- ANIMCONT_ACTION, /* action (bAction) */
- ANIMCONT_SHAPEKEY, /* shapekey (Key) */
- ANIMCONT_GPENCIL, /* grease pencil (screen) */
- ANIMCONT_DOPESHEET, /* dopesheet (bDopesheet) */
- ANIMCONT_FCURVES, /* animation F-Curves (bDopesheet) */
- ANIMCONT_DRIVERS, /* drivers (bDopesheet) */
- ANIMCONT_NLA, /* nla (bDopesheet) */
- ANIMCONT_CHANNEL /* animation channel (bAnimListElem) */
+ ANIMCONT_NONE = 0, /* invalid or no data */
+ ANIMCONT_ACTION, /* action (bAction) */
+ ANIMCONT_SHAPEKEY, /* shapekey (Key) */
+ ANIMCONT_GPENCIL, /* grease pencil (screen) */
+ ANIMCONT_DOPESHEET, /* dopesheet (bDopesheet) */
+ ANIMCONT_FCURVES, /* animation F-Curves (bDopesheet) */
+ ANIMCONT_DRIVERS, /* drivers (bDopesheet) */
+ ANIMCONT_NLA, /* nla (bDopesheet) */
+ ANIMCONT_CHANNEL /* animation channel (bAnimListElem) */
} eAnimCont_Types;
/* --------------- Channels -------------------- */
@@ -108,26 +108,26 @@ typedef enum eAnimCont_Types {
typedef struct bAnimListElem {
struct bAnimListElem *next, *prev;
- void *data; /* source data this elem represents */
- int type; /* one of the ANIMTYPE_* values */
- int flag; /* copy of elem's flags for quick access */
- int index; /* for un-named data, the index of the data in it's collection */
+ void *data; /* source data this elem represents */
+ int type; /* one of the ANIMTYPE_* values */
+ int flag; /* copy of elem's flags for quick access */
+ int index; /* for un-named data, the index of the data in it's collection */
- short datatype; /* type of motion data to expect */
- void *key_data; /* motion data - mostly F-Curves, but can be other types too */
+ short datatype; /* type of motion data to expect */
+ void *key_data; /* motion data - mostly F-Curves, but can be other types too */
- struct ID *id; /* ID block that channel is attached to */
- struct AnimData *adt; /* source of the animation data attached to ID block (for convenience) */
+ struct ID *id; /* ID block that channel is attached to */
+ struct AnimData *adt; /* source of the animation data attached to ID block (for convenience) */
} bAnimListElem;
/* Some types for easier type-testing
* NOTE: need to keep the order of these synchronized with the channels define code
- * which is used for drawing and handling channel lists for
+ * which is used for drawing and handling channel lists for
*/
typedef enum eAnim_ChannelType {
- ANIMTYPE_NONE= 0,
+ ANIMTYPE_NONE = 0,
ANIMTYPE_ANIMDATA,
ANIMTYPE_SPECIALDATA,
@@ -165,22 +165,22 @@ typedef enum eAnim_ChannelType {
ANIMTYPE_NLATRACK,
ANIMTYPE_NLAACTION,
- /* always as last item, the total number of channel types... */
+ /* always as last item, the total number of channel types... */
ANIMTYPE_NUM_TYPES
} eAnim_ChannelType;
/* types of keyframe data in bAnimListElem */
typedef enum eAnim_KeyType {
- ALE_NONE = 0, /* no keyframe data */
- ALE_FCURVE, /* F-Curve */
- ALE_GPFRAME, /* Grease Pencil Frames */
- ALE_NLASTRIP, /* NLA Strips */
-
- ALE_ALL, /* All channels summary */
- ALE_SCE, /* Scene summary */
- ALE_OB, /* Object summary */
- ALE_ACT, /* Action summary */
- ALE_GROUP /* Action Group summary */
+ ALE_NONE = 0, /* no keyframe data */
+ ALE_FCURVE, /* F-Curve */
+ ALE_GPFRAME, /* Grease Pencil Frames */
+ ALE_NLASTRIP, /* NLA Strips */
+
+ ALE_ALL, /* All channels summary */
+ ALE_SCE, /* Scene summary */
+ ALE_OB, /* Object summary */
+ ALE_ACT, /* Action summary */
+ ALE_GROUP /* Action Group summary */
} eAnim_KeyType;
/* ----------------- Filtering -------------------- */
@@ -189,54 +189,54 @@ typedef enum eAnim_KeyType {
typedef enum eAnimFilter_Flags {
/* data which channel represents is fits the dopesheet filters (i.e. scene visibility criteria) */
// XXX: it's hard to think of any examples where this *ISN'T* the case... perhaps becomes implicit?
- ANIMFILTER_DATA_VISIBLE = (1<<0),
+ ANIMFILTER_DATA_VISIBLE = (1 << 0),
/* channel is visible within the channel-list hierarchy (i.e. F-Curves within Groups in ActEdit) */
- ANIMFILTER_LIST_VISIBLE = (1<<1),
+ ANIMFILTER_LIST_VISIBLE = (1 << 1),
/* channel has specifically been tagged as visible in Graph Editor (* Graph Editor Only) */
- ANIMFILTER_CURVE_VISIBLE = (1<<2),
+ ANIMFILTER_CURVE_VISIBLE = (1 << 2),
/* include summary channels and "expanders" (for drawing/mouse-selection in channel list) */
- ANIMFILTER_LIST_CHANNELS = (1<<3),
+ ANIMFILTER_LIST_CHANNELS = (1 << 3),
/* for its type, channel should be "active" one */
- ANIMFILTER_ACTIVE = (1<<4),
+ ANIMFILTER_ACTIVE = (1 << 4),
/* channel is a child of the active group (* Actions speciality) */
- ANIMFILTER_ACTGROUPED = (1<<5),
+ ANIMFILTER_ACTGROUPED = (1 << 5),
/* channel must be selected/not-selected, but both must not be set together */
- ANIMFILTER_SEL = (1<<6),
- ANIMFILTER_UNSEL = (1<<7),
+ ANIMFILTER_SEL = (1 << 6),
+ ANIMFILTER_UNSEL = (1 << 7),
/* editability status - must be editable to be included */
- ANIMFILTER_FOREDIT = (1<<8),
+ ANIMFILTER_FOREDIT = (1 << 8),
/* only selected animchannels should be considerable as editable - mainly for Graph Editor's option for keys on select curves only */
- ANIMFILTER_SELEDIT = (1<<9),
+ ANIMFILTER_SELEDIT = (1 << 9),
/* flags used to enforce certain data types */
// NOTE: the ones for curves and NLA tracks were redundant and have been removed for now...
- ANIMFILTER_ANIMDATA = (1<<10),
+ ANIMFILTER_ANIMDATA = (1 << 10),
/* duplicate entries for animation data attached to multi-user blocks must not occur */
- ANIMFILTER_NODUPLIS = (1<<11),
+ ANIMFILTER_NODUPLIS = (1 << 11),
/* for checking if we should keep some collapsed channel around (internal use only!) */
- ANIMFILTER_TMP_PEEK = (1<<30)
+ ANIMFILTER_TMP_PEEK = (1 << 30)
} eAnimFilter_Flags;
/* ---------- Flag Checking Macros ------------ */
// xxx check on all of these flags again...
/* Dopesheet only */
- /* 'Scene' channels */
+/* 'Scene' channels */
#define SEL_SCEC(sce) ((sce->flag & SCE_DS_SELECTED))
-#define EXPANDED_SCEC(sce) ((sce->flag & SCE_DS_COLLAPSED)==0)
- /* 'Sub-Scene' channels (flags stored in Data block) */
+#define EXPANDED_SCEC(sce) ((sce->flag & SCE_DS_COLLAPSED) == 0)
+/* 'Sub-Scene' channels (flags stored in Data block) */
#define FILTER_WOR_SCED(wo) ((wo->flag & WO_DS_EXPAND))
#define FILTER_LS_SCED(linestyle) ((linestyle->flag & LS_DS_EXPAND))
- /* 'Object' channels */
+/* 'Object' channels */
#define SEL_OBJC(base) ((base->flag & SELECT))
-#define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED)==0)
- /* 'Sub-object' channels (flags stored in Data block) */
+#define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED) == 0)
+/* 'Sub-object' channels (flags stored in Data block) */
#define FILTER_SKE_OBJD(key) ((key->flag & KEY_DS_EXPAND))
#define FILTER_MAT_OBJD(ma) ((ma->flag & MA_DS_EXPAND))
#define FILTER_LAM_OBJD(la) ((la->flag & LA_DS_EXPAND))
@@ -248,74 +248,74 @@ typedef enum eAnimFilter_Flags {
#define FILTER_MESH_OBJD(me) ((me->flag & ME_DS_EXPAND))
#define FILTER_LATTICE_OBJD(lt) ((lt->flag & LT_DS_EXPAND))
#define FILTER_SPK_OBJD(spk) ((spk->flag & SPK_DS_EXPAND))
- /* Variable use expanders */
+/* Variable use expanders */
#define FILTER_NTREE_DATA(ntree) ((ntree->flag & NTREE_DS_EXPAND))
#define FILTER_TEX_DATA(tex) ((tex->flag & TEX_DS_EXPAND))
- /* 'Sub-object/Action' channels (flags stored in Action) */
+/* 'Sub-object/Action' channels (flags stored in Action) */
#define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
-#define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED)==0)
- /* 'Sub-AnimData' channels */
-#define EXPANDED_DRVD(adt) ((adt->flag & ADT_DRIVERS_COLLAPSED)==0)
+#define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED) == 0)
+/* 'Sub-AnimData' channels */
+#define EXPANDED_DRVD(adt) ((adt->flag & ADT_DRIVERS_COLLAPSED) == 0)
/* Actions (also used for Dopesheet) */
- /* Action Channel Group */
-#define EDITABLE_AGRP(agrp) ((agrp->flag & AGRP_PROTECTED)==0)
+/* Action Channel Group */
+#define EDITABLE_AGRP(agrp) ((agrp->flag & AGRP_PROTECTED) == 0)
#define EXPANDED_AGRP(ac, agrp) \
( ((!(ac) || ((ac)->spacetype != SPACE_IPO)) && (agrp->flag & AGRP_EXPANDED)) || \
(( (ac) && ((ac)->spacetype == SPACE_IPO)) && (agrp->flag & AGRP_EXPANDED_G)) )
#define SEL_AGRP(agrp) ((agrp->flag & AGRP_SELECTED) || (agrp->flag & AGRP_ACTIVE))
- /* F-Curve Channels */
-#define EDITABLE_FCU(fcu) ((fcu->flag & FCURVE_PROTECTED)==0)
+/* F-Curve Channels */
+#define EDITABLE_FCU(fcu) ((fcu->flag & FCURVE_PROTECTED) == 0)
#define SEL_FCU(fcu) (fcu->flag & FCURVE_SELECTED)
/* ShapeKey mode only */
-#define EDITABLE_SHAPEKEY(kb) ((kb->flag & KEYBLOCK_LOCKED)==0)
+#define EDITABLE_SHAPEKEY(kb) ((kb->flag & KEYBLOCK_LOCKED) == 0)
#define SEL_SHAPEKEY(kb) (kb->flag & KEYBLOCK_SEL)
/* Grease Pencil only */
- /* Grease Pencil datablock settings */
+/* Grease Pencil datablock settings */
#define EXPANDED_GPD(gpd) (gpd->flag & GP_DATA_EXPAND)
- /* Grease Pencil Layer settings */
-#define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED)==0)
+/* Grease Pencil Layer settings */
+#define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED) == 0)
#define SEL_GPL(gpl) (gpl->flag & GP_LAYER_SELECT)
/* NLA only */
#define SEL_NLT(nlt) (nlt->flag & NLATRACK_SELECTED)
-#define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED)==0)
+#define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED) == 0)
/* -------------- Channel Defines -------------- */
/* channel heights */
-#define ACHANNEL_FIRST -16
-#define ACHANNEL_HEIGHT 16
-#define ACHANNEL_HEIGHT_HALF 8
-#define ACHANNEL_SKIP 2
-#define ACHANNEL_STEP (ACHANNEL_HEIGHT + ACHANNEL_SKIP)
+#define ACHANNEL_FIRST -16
+#define ACHANNEL_HEIGHT 16
+#define ACHANNEL_HEIGHT_HALF 8
+#define ACHANNEL_SKIP 2
+#define ACHANNEL_STEP (ACHANNEL_HEIGHT + ACHANNEL_SKIP)
/* channel widths */
-#define ACHANNEL_NAMEWIDTH 200
+#define ACHANNEL_NAMEWIDTH 200
/* channel toggle-buttons */
-#define ACHANNEL_BUTTON_WIDTH 16
+#define ACHANNEL_BUTTON_WIDTH 16
/* -------------- NLA Channel Defines -------------- */
/* NLA channel heights */
// XXX: NLACHANNEL_FIRST isn't used?
-#define NLACHANNEL_FIRST -16
-#define NLACHANNEL_HEIGHT(snla) ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? 16 : 24)
-#define NLACHANNEL_HEIGHT_HALF(snla) ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? 8 : 12)
-#define NLACHANNEL_SKIP 2
+#define NLACHANNEL_FIRST -16
+#define NLACHANNEL_HEIGHT(snla) ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? 16 : 24)
+#define NLACHANNEL_HEIGHT_HALF(snla) ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? 8 : 12)
+#define NLACHANNEL_SKIP 2
#define NLACHANNEL_STEP(snla) (NLACHANNEL_HEIGHT(snla) + NLACHANNEL_SKIP)
/* channel widths */
-#define NLACHANNEL_NAMEWIDTH 200
+#define NLACHANNEL_NAMEWIDTH 200
/* channel toggle-buttons */
-#define NLACHANNEL_BUTTON_WIDTH 16
+#define NLACHANNEL_BUTTON_WIDTH 16
/* ---------------- API -------------------- */
@@ -343,37 +343,37 @@ short ANIM_animdata_context_getdata(bAnimContext *ac);
/* flag-setting behavior */
typedef enum eAnimChannels_SetFlag {
- ACHANNEL_SETFLAG_CLEAR = 0, /* turn off */
- ACHANNEL_SETFLAG_ADD, /* turn on */
- ACHANNEL_SETFLAG_INVERT, /* on->off, off->on */
- ACHANNEL_SETFLAG_TOGGLE /* some on -> all off // all on */
+ ACHANNEL_SETFLAG_CLEAR = 0, /* turn off */
+ ACHANNEL_SETFLAG_ADD, /* turn on */
+ ACHANNEL_SETFLAG_INVERT, /* on->off, off->on */
+ ACHANNEL_SETFLAG_TOGGLE /* some on -> all off // all on */
} eAnimChannels_SetFlag;
/* types of settings for AnimChannels */
typedef enum eAnimChannel_Settings {
ACHANNEL_SETTING_SELECT = 0,
- ACHANNEL_SETTING_PROTECT, // warning: for drawing UI's, need to check if this is off (maybe inverse this later)
+ ACHANNEL_SETTING_PROTECT, // warning: for drawing UI's, need to check if this is off (maybe inverse this later)
ACHANNEL_SETTING_MUTE,
ACHANNEL_SETTING_EXPAND,
- ACHANNEL_SETTING_VISIBLE, /* only for Graph Editor */
- ACHANNEL_SETTING_SOLO /* only for NLA Tracks */
+ ACHANNEL_SETTING_VISIBLE, /* only for Graph Editor */
+ ACHANNEL_SETTING_SOLO /* only for NLA Tracks */
} eAnimChannel_Settings;
/* Drawing, mouse handling, and flag setting behavior... */
typedef struct bAnimChannelType {
/* type data */
- /* name of the channel type, for debugging */
+ /* name of the channel type, for debugging */
const char *channel_type_name;
/* drawing */
- /* get RGB color that is used to draw the majority of the backdrop */
+ /* get RGB color that is used to draw the majority of the backdrop */
void (*get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float r_color[3]);
- /* draw backdrop strip for channel */
+ /* 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) */
+ /* get depth of indention (relative to the depth channel is nested at) */
short (*get_indent_level)(bAnimContext *ac, bAnimListElem *ale);
- /* get offset in pixels for the start of the channel (in addition to the indent depth) */
+ /* get offset in pixels for the start of the channel (in addition to the indent depth) */
short (*get_offset)(bAnimContext *ac, bAnimListElem *ale);
/* get name (for channel lists) */
@@ -384,15 +384,15 @@ typedef struct bAnimChannelType {
int (*icon)(bAnimListElem *ale);
/* settings */
- /* check if the given setting is valid in the current context */
+ /* check if the given setting is valid in the current context */
short (*has_setting)(bAnimContext *ac, bAnimListElem *ale, int setting);
- /* get the flag used for this setting */
+ /* get the flag used for this setting */
int (*setting_flag)(bAnimContext *ac, int setting, short *neg);
- /* get the pointer to int/short where data is stored,
- * with type being sizeof(ptr_data) which should be fine for runtime use...
- * - assume that setting has been checked to be valid for current context
- */
- void *(*setting_ptr)(bAnimListElem *ale, int setting, short *type);
+ /* get the pointer to int/short where data is stored,
+ * with type being sizeof(ptr_data) which should be fine for runtime use...
+ * - assume that setting has been checked to be valid for current context
+ */
+ void *(*setting_ptr)(bAnimListElem * ale, int setting, short *type);
} bAnimChannelType;
/* ------------------------ Drawing API -------------------------- */
@@ -414,7 +414,7 @@ void ANIM_channel_draw_widgets(struct bContext *C, bAnimContext *ac, bAnimListEl
/* Check if some setting for a channel is enabled
* Returns: 1 = On, 0 = Off, -1 = Invalid
*
- * - setting: eAnimChannel_Settings
+ * - setting: eAnimChannel_Settings
*/
short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, int setting);
@@ -458,14 +458,14 @@ void ANIM_timecode_string_from_frame(char *str, struct Scene *scene, int power,
/* flags for Current Frame Drawing */
enum {
- /* plain time indicator with no special indicators */
- DRAWCFRA_PLAIN = 0,
- /* draw box indicating current frame number */
- DRAWCFRA_SHOW_NUMBOX = (1<<0),
- /* time indication in seconds or frames */
- DRAWCFRA_UNIT_SECONDS = (1<<1),
- /* draw indicator extra wide (for timeline) */
- DRAWCFRA_WIDE = (1<<2)
+ /* plain time indicator with no special indicators */
+ DRAWCFRA_PLAIN = 0,
+ /* draw box indicating current frame number */
+ DRAWCFRA_SHOW_NUMBOX = (1 << 0),
+ /* time indication in seconds or frames */
+ DRAWCFRA_UNIT_SECONDS = (1 << 1),
+ /* draw indicator extra wide (for timeline) */
+ DRAWCFRA_WIDE = (1 << 2)
} eAnimEditDraw_CurrentFrame;
/* main call to draw current-frame indicator in an Animation Editor */
@@ -533,14 +533,14 @@ void ED_nla_postop_refresh(bAnimContext *ac);
/* flags for conversion mapping */
typedef enum eAnimUnitConv_Flags {
- /* restore to original internal values */
- ANIM_UNITCONV_RESTORE = (1<<0),
- /* ignore handles (i.e. only touch main keyframes) */
- ANIM_UNITCONV_ONLYKEYS = (1<<1),
- /* only touch selected BezTriples */
- ANIM_UNITCONV_ONLYSEL = (1<<2),
- /* only touch selected vertices */
- ANIM_UNITCONV_SELVERTS = (1<<3)
+ /* restore to original internal values */
+ ANIM_UNITCONV_RESTORE = (1 << 0),
+ /* ignore handles (i.e. only touch main keyframes) */
+ ANIM_UNITCONV_ONLYKEYS = (1 << 1),
+ /* only touch selected BezTriples */
+ ANIM_UNITCONV_ONLYSEL = (1 << 2),
+ /* only touch selected vertices */
+ ANIM_UNITCONV_SELVERTS = (1 << 3)
} eAnimUnitConv_Flags;
/* Get unit conversion factor for given ID + F-Curve */
@@ -563,9 +563,9 @@ void ANIM_unit_mapping_apply_fcurve(struct Scene *scene, struct ID *id, struct F
*/
#define ACHANNEL_SET_FLAG(channel, smode, sflag) \
{ \
- if (smode == ACHANNEL_SETFLAG_INVERT) (channel)->flag ^= (sflag); \
- else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag |= (sflag); \
- else (channel)->flag &= ~(sflag); \
+ if (smode == ACHANNEL_SETFLAG_INVERT) (channel)->flag ^= (sflag); \
+ else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag |= (sflag); \
+ else (channel)->flag &= ~(sflag); \
}
/* set/clear/toggle macro, where the flag is negative
@@ -575,9 +575,9 @@ void ANIM_unit_mapping_apply_fcurve(struct Scene *scene, struct ID *id, struct F
*/
#define ACHANNEL_SET_FLAG_NEG(channel, smode, sflag) \
{ \
- if (smode == ACHANNEL_SETFLAG_INVERT) (channel)->flag ^= (sflag); \
- else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag &= ~(sflag); \
- else (channel)->flag |= (sflag); \
+ if (smode == ACHANNEL_SETFLAG_INVERT) (channel)->flag ^= (sflag); \
+ else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag &= ~(sflag); \
+ else (channel)->flag |= (sflag); \
}
@@ -592,17 +592,17 @@ void ANIM_sync_animchannels_to_data(const struct bContext *C);
/* ************************************************* */
/* OPERATORS */
- /* generic animation channels */
+/* generic animation channels */
void ED_operatortypes_animchannels(void);
void ED_keymap_animchannels(struct wmKeyConfig *keyconf);
- /* generic time editing */
+/* generic time editing */
void ED_operatortypes_anim(void);
void ED_keymap_anim(struct wmKeyConfig *keyconf);
- /* space_graph */
+/* space_graph */
void ED_operatormacros_graph(void);
- /* space_action */
+/* space_action */
void ED_operatormacros_action(void);
/* ************************************************ */
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 851bd09dd29..daf959b1f10 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -53,13 +53,12 @@ struct ViewContext;
struct wmKeyConfig;
struct wmOperator;
-typedef struct EditBone
-{
+typedef struct EditBone {
struct EditBone *next, *prev;
- struct IDProperty *prop;/* User-Defined Properties on this Bone */
- struct EditBone *parent;/* Editbones have a one-way link (i.e. children refer
- * to parents. This is converted to a two-way link for
- * normal bones when leaving editmode. */
+ struct IDProperty *prop; /* User-Defined Properties on this Bone */
+ struct EditBone *parent; /* Editbones have a one-way link (i.e. children refer
+ * to parents. This is converted to a two-way link for
+ * normal bones when leaving editmode. */
void *temp; /* Used to store temporary data */
char name[64]; /* MAX_NAME */
@@ -68,13 +67,13 @@ typedef struct EditBone
* is tail-head while roll provides the angle. Refer to Graphics
* Gems 1 p. 466 (section IX.6) if it's not already in here somewhere*/
- float head[3]; /* Orientation and length is implicit during editing */
- float tail[3];
- /* All joints are considered to have zero rotation with respect to
- * their parents. Therefore any rotations specified during the
- * animation are automatically relative to the bones' rest positions*/
- int flag;
- int layer;
+ float head[3]; /* Orientation and length is implicit during editing */
+ float tail[3];
+ /* All joints are considered to have zero rotation with respect to
+ * their parents. Therefore any rotations specified during the
+ * animation are automatically relative to the bones' rest positions*/
+ int flag;
+ int layer;
float dist, weight;
float xwidth, length, zwidth; /* put them in order! transform uses this as scale */
@@ -86,20 +85,20 @@ typedef struct EditBone
short segments;
} EditBone;
-#define BONESEL_ROOT (1<<28)
-#define BONESEL_TIP (1<<29)
-#define BONESEL_BONE (1<<30)
-#define BONESEL_ANY (BONESEL_TIP|BONESEL_ROOT|BONESEL_BONE)
+#define BONESEL_ROOT (1 << 28)
+#define BONESEL_TIP (1 << 29)
+#define BONESEL_BONE (1 << 30)
+#define BONESEL_ANY (BONESEL_TIP | BONESEL_ROOT | BONESEL_BONE)
-#define BONESEL_NOSEL (1<<31) /* Indicates a negative number */
+#define BONESEL_NOSEL (1 << 31) /* Indicates a negative number */
/* useful macros */
#define EBONE_VISIBLE(arm, ebone) (((arm)->layer & (ebone)->layer) && !((ebone)->flag & BONE_HIDDEN_A))
#define EBONE_EDITABLE(ebone) (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED))
/* used in bone_select_hierachy() */
-#define BONE_SELECT_PARENT 0
-#define BONE_SELECT_CHILD 1
+#define BONE_SELECT_PARENT 0
+#define BONE_SELECT_CHILD 1
/* armature_ops.c */
void ED_operatortypes_armature(void);
@@ -114,10 +113,10 @@ void ED_armature_deselect_all(struct Object *obedit, int toggle);
void ED_armature_deselect_all_visible(struct Object *obedit);
int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer,
- short hits, short extend);
+ short hits, short extend);
int mouse_armature(struct bContext *C, const int mval[2], int extend);
int join_armature_exec(struct bContext *C, struct wmOperator *op);
-struct Bone *get_indexed_bone (struct Object *ob, int index);
+struct Bone *get_indexed_bone(struct Object *ob, int index);
float ED_rollBoneToVector(EditBone *bone, const float new_up_axis[3], const short axis_only);
EditBone *ED_armature_bone_get_mirrored(struct ListBase *edbo, EditBone *ebo); // XXX this is needed for populating the context iterators
void ED_armature_sync_selection(struct ListBase *edbo);
@@ -128,13 +127,13 @@ struct EditBone *ED_armature_edit_bone_add(struct bArmature *arm, const char *na
void ED_armature_edit_bone_remove(struct bArmature *arm, EditBone *exBone);
void transform_armature_mirror_update(struct Object *obedit);
-void docenter_armature (struct Scene *scene, struct Object *ob, float cursor[3], int centermode, int around);
+void docenter_armature(struct Scene *scene, struct Object *ob, float cursor[3], int centermode, int around);
void ED_armature_apply_transform(struct Object *ob, float mat[4][4]);
-#define ARM_GROUPS_NAME 1
-#define ARM_GROUPS_ENVELOPE 2
-#define ARM_GROUPS_AUTO 3
+#define ARM_GROUPS_NAME 1
+#define ARM_GROUPS_ENVELOPE 2
+#define ARM_GROUPS_AUTO 3
void create_vgroups_from_armature(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct Object *par, int mode, int mirror);
@@ -166,15 +165,15 @@ int BIF_currentTemplate(const struct bContext *C);
void BIF_freeTemplates(struct bContext *C);
void BIF_setTemplate(struct bContext *C, int index);
int BIF_nbJointsTemplate(const struct bContext *C);
-const char * BIF_nameBoneTemplate(const struct bContext *C);
+const char *BIF_nameBoneTemplate(const struct bContext *C);
void BDR_drawSketch(const struct bContext *vc);
int BDR_drawSketchNames(struct ViewContext *vc);
/* meshlaplacian.c */
void mesh_deform_bind(struct Scene *scene,
- struct MeshDeformModifierData *mmd,
- float *vertexcos, int totvert, float cagemat[][4]);
+ struct MeshDeformModifierData *mmd,
+ float *vertexcos, int totvert, float cagemat[][4]);
#ifdef __cplusplus
}
diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h
index 302c2940fef..7943a17c377 100644
--- a/source/blender/editors/include/ED_clip.h
+++ b/source/blender/editors/include/ED_clip.h
@@ -61,8 +61,9 @@ struct ImBuf *ED_space_clip_get_stable_buffer(struct SpaceClip *sc, float loc[2]
void ED_clip_update_frame(const struct Main *mainp, int cfra);
int ED_clip_view_selection(struct SpaceClip *sc, struct ARegion *ar, int fit);
-void ED_clip_point_undistorted_pos(SpaceClip *sc, float co[2], float nco[2]);
+void ED_clip_point_undistorted_pos(SpaceClip * sc, float co[2], float nco[2]);
void ED_clip_point_stable_pos(struct bContext *C, float x, float y, float *xr, float *yr);
+void ED_clip_point_stable_pos__reverse(SpaceClip * sc, ARegion *ar, float co[2], float nco[2]);
void ED_clip_mouse_pos(struct bContext *C, struct wmEvent *event, float co[2]);
int ED_space_clip_texture_buffer_supported(struct SpaceClip *sc);
diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h
index 73ff8e9304d..b42a6e391ce 100644
--- a/source/blender/editors/include/ED_curve.h
+++ b/source/blender/editors/include/ED_curve.h
@@ -46,9 +46,9 @@ struct BezTriple;
struct BPoint;
/* curve_ops.c */
-void ED_operatortypes_curve(void);
-void ED_operatormacros_curve(void);
-void ED_keymap_curve (struct wmKeyConfig *keyconf);
+void ED_operatortypes_curve(void);
+void ED_operatormacros_curve(void);
+void ED_keymap_curve(struct wmKeyConfig *keyconf);
/* editcurve.c */
void CU_deselect_all(struct Object *obedit);
@@ -56,31 +56,31 @@ void CU_select_all(struct Object *obedit);
void CU_select_swap(struct Object *obedit);
-void undo_push_curve (struct bContext *C, const char *name);
+void undo_push_curve(struct bContext *C, const char *name);
ListBase *object_editcurve_get(struct Object *ob);
-void load_editNurb (struct Object *obedit);
-void make_editNurb (struct Object *obedit);
-void free_editNurb (struct Object *obedit);
+void load_editNurb(struct Object *obedit);
+void make_editNurb(struct Object *obedit);
+void free_editNurb(struct Object *obedit);
-void BKE_curve_editNurb_free (struct Curve *cu);
+void BKE_curve_editNurb_free(struct Curve *cu);
-int mouse_nurb (struct bContext *C, const int mval[2], int extend);
+int mouse_nurb(struct bContext *C, const int mval[2], int extend);
struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int type, int newob);
-int isNurbsel (struct Nurb *nu);
-void ED_nurb_set_spline_type(struct Nurb *nu, int type);
+int isNurbsel(struct Nurb *nu);
+void ED_nurb_set_spline_type(struct Nurb *nu, int type);
-int join_curve_exec (struct bContext *C, struct wmOperator *op);
+int join_curve_exec(struct bContext *C, struct wmOperator *op);
/* editfont.h */
-void undo_push_font (struct bContext *C, const char *name);
-void make_editText (struct Object *obedit);
-void load_editText (struct Object *obedit);
-void free_editText (struct Object *obedit);
+void undo_push_font(struct bContext *C, const char *name);
+void make_editText(struct Object *obedit);
+void load_editText(struct Object *obedit);
+void free_editText(struct Object *obedit);
-void ED_text_to_object(struct bContext *C, struct Text *text, int split_lines);
+void ED_text_to_object(struct bContext *C, struct Text *text, int split_lines);
int CU_select_nth(struct Object *obedit, int nth);
diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index 7cf750f5a9b..d45504b3325 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -52,8 +52,7 @@ typedef enum FileListColumns {
COLUMN_OWNER
} FileListColumns;
-typedef struct FileLayout
-{
+typedef struct FileLayout {
/* view settings - XXX - move into own struct */
int prv_w;
int prv_h;
@@ -80,7 +79,7 @@ typedef struct FileSelection {
struct rcti;
-struct FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile);
+struct FileSelectParams *ED_fileselect_get_params(struct SpaceFile *sfile);
short ED_fileselect_set_params(struct SpaceFile *sfile);
@@ -90,13 +89,13 @@ void ED_fileselect_reset_params(struct SpaceFile *sfile);
void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar);
-FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar);
+FileLayout *ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar);
-int ED_fileselect_layout_numfiles(FileLayout* layout, struct ARegion *ar);
-int ED_fileselect_layout_offset(FileLayout* layout, int x, int y);
-FileSelection ED_fileselect_layout_offset_rect(FileLayout* layout, const struct rcti* rect);
+int ED_fileselect_layout_numfiles(FileLayout *layout, struct ARegion *ar);
+int ED_fileselect_layout_offset(FileLayout *layout, int x, int y);
+FileSelection ED_fileselect_layout_offset_rect(FileLayout *layout, const struct rcti *rect);
-void ED_fileselect_layout_tilepos(FileLayout* layout, int tile, int *x, int *y);
+void ED_fileselect_layout_tilepos(FileLayout *layout, int tile, int *x, int *y);
void ED_operatormacros_file(void);
diff --git a/source/blender/editors/include/ED_fluidsim.h b/source/blender/editors/include/ED_fluidsim.h
index 1a0c90978e6..4790dc5e03d 100644
--- a/source/blender/editors/include/ED_fluidsim.h
+++ b/source/blender/editors/include/ED_fluidsim.h
@@ -37,12 +37,12 @@ struct FluidsimSettings;
/* allocates and initializes fluidsim data */
-struct FluidsimSettings* fluidsimSettingsNew(struct Object *srcob);
+struct FluidsimSettings *fluidsimSettingsNew(struct Object *srcob);
/* frees internal data itself */
-void fluidsimSettingsFree(struct FluidsimSettings* sb);
+void fluidsimSettingsFree(struct FluidsimSettings *sb);
/* duplicate internal data */
-struct FluidsimSettings* fluidsimSettingsCopy(struct FluidsimSettings* sb);
+struct FluidsimSettings *fluidsimSettingsCopy(struct FluidsimSettings *sb);
#endif /* __ED_FLUIDSIM_H__ */
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 213fbda5aa7..bd3e4371a79 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -54,8 +54,8 @@ struct wmKeyConfig;
* Used as part of the 'stroke cache' used during drawing of new strokes
*/
typedef struct tGPspoint {
- int x, y; /* x and y coordinates of cursor (in relative to area) */
- float pressure; /* pressure of tablet at this point */
+ int x, y; /* x and y coordinates of cursor (in relative to area) */
+ float pressure; /* pressure of tablet at this point */
} tGPspoint;
diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h
index 7f68325e5ee..cd64427de78 100644
--- a/source/blender/editors/include/ED_keyframes_draw.h
+++ b/source/blender/editors/include/ED_keyframes_draw.h
@@ -50,16 +50,16 @@ struct DLRBT_Tree;
/* Keyframe Column Struct */
typedef struct ActKeyColumn {
- /* ListBase linkage */
+ /* ListBase linkage */
struct ActKeyColumn *next, *prev;
- /* sorting-tree linkage */
- struct ActKeyColumn *left, *right; /* 'children' of this node, less than and greater than it (respectively) */
- struct ActKeyColumn *parent; /* parent of this node in the tree */
- char tree_col; /* DLRB_BLACK or DLRB_RED */
+ /* sorting-tree linkage */
+ struct ActKeyColumn *left, *right; /* 'children' of this node, less than and greater than it (respectively) */
+ struct ActKeyColumn *parent; /* parent of this node in the tree */
+ char tree_col; /* DLRB_BLACK or DLRB_RED */
- /* keyframe info */
- char key_type; /* eBezTripe_KeyframeType */
+ /* keyframe info */
+ char key_type; /* eBezTripe_KeyframeType */
short sel;
float cfra;
@@ -70,15 +70,15 @@ typedef struct ActKeyColumn {
/* 'Long Keyframe' Struct */
typedef struct ActKeyBlock {
- /* ListBase linkage */
+ /* ListBase linkage */
struct ActKeyBlock *next, *prev;
- /* sorting-tree linkage */
- struct ActKeyBlock *left, *right; /* 'children' of this node, less than and greater than it (respectively) */
- struct ActKeyBlock *parent; /* parent of this node in the tree */
- char tree_col; /* DLRB_BLACK or DLRB_RED */
+ /* sorting-tree linkage */
+ struct ActKeyBlock *left, *right; /* 'children' of this node, less than and greater than it (respectively) */
+ struct ActKeyBlock *parent; /* parent of this node in the tree */
+ char tree_col; /* DLRB_BLACK or DLRB_RED */
- /* key-block info */
+ /* key-block info */
char sel;
short handle_type;
float val;
@@ -93,11 +93,11 @@ typedef struct ActKeyBlock {
/* options for keyframe shape drawing */
typedef enum eKeyframeShapeDrawOpts {
- /* only the border */
- KEYFRAME_SHAPE_FRAME = 0,
- /* only the inside filling */
+ /* only the border */
+ KEYFRAME_SHAPE_FRAME = 0,
+ /* only the inside filling */
KEYFRAME_SHAPE_INSIDE,
- /* the whole thing */
+ /* the whole thing */
KEYFRAME_SHAPE_BOTH
} eKeyframeShapeDrawOpts;
diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h
index 7ba37b49f85..bdb70696742 100644
--- a/source/blender/editors/include/ED_keyframes_edit.h
+++ b/source/blender/editors/include/ED_keyframes_edit.h
@@ -43,15 +43,15 @@ struct Scene;
/* --------- BezTriple Selection ------------- */
-#define BEZ_SEL(bezt) { (bezt)->f1 |= SELECT; (bezt)->f2 |= SELECT; (bezt)->f3 |= SELECT; }
-#define BEZ_DESEL(bezt) { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; }
-#define BEZ_INVSEL(bezt) { (bezt)->f1 ^= SELECT; (bezt)->f2 ^= SELECT; (bezt)->f3 ^= SELECT; }
+#define BEZ_SEL(bezt) { (bezt)->f1 |= SELECT; (bezt)->f2 |= SELECT; (bezt)->f3 |= SELECT; }
+#define BEZ_DESEL(bezt) { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; }
+#define BEZ_INVSEL(bezt) { (bezt)->f1 ^= SELECT; (bezt)->f2 ^= SELECT; (bezt)->f3 ^= SELECT; }
/* --------- Tool Flags ------------ */
/* bezt validation */
typedef enum eEditKeyframes_Validate {
- BEZT_OK_FRAME = 1,
+ BEZT_OK_FRAME = 1,
BEZT_OK_FRAMERANGE,
BEZT_OK_SELECTED,
BEZT_OK_VALUE,
@@ -63,19 +63,19 @@ typedef enum eEditKeyframes_Validate {
/* select modes */
typedef enum eEditKeyframes_Select {
- /* SELECT_SUBTRACT for all, followed by SELECT_ADD for some */
- SELECT_REPLACE = (1<<0),
- /* add ok keyframes to selection */
- SELECT_ADD = (1<<1),
- /* remove ok keyframes from selection */
- SELECT_SUBTRACT = (1<<2),
- /* flip ok status of keyframes based on key status */
- SELECT_INVERT = (1<<3)
+ /* SELECT_SUBTRACT for all, followed by SELECT_ADD for some */
+ SELECT_REPLACE = (1 << 0),
+ /* add ok keyframes to selection */
+ SELECT_ADD = (1 << 1),
+ /* remove ok keyframes from selection */
+ SELECT_SUBTRACT = (1 << 2),
+ /* flip ok status of keyframes based on key status */
+ SELECT_INVERT = (1 << 3)
} eEditKeyframes_Select;
/* "selection map" building modes */
typedef enum eEditKeyframes_SelMap {
- SELMAP_MORE = 0,
+ SELMAP_MORE = 0,
SELMAP_LESS
} eEditKeyframes_SelMap;
@@ -104,92 +104,92 @@ typedef enum eEditKeyframes_Mirror {
/* --- Generic Properties for Keyframe Edit Tools ----- */
typedef struct KeyframeEditData {
- /* generic properties/data access */
- ListBase list; /* temp list for storing custom list of data to check */
- struct Scene *scene; /* pointer to current scene - many tools need access to cfra/etc. */
- void *data; /* pointer to custom data - usually 'Object' but also 'rectf', but could be other types too */
- float f1, f2; /* storage of times/values as 'decimals' */
- int i1, i2; /* storage of times/values/flags as 'whole' numbers */
-
- /* current iteration data */
- struct FCurve *fcu; /* F-Curve that is being iterated over */
- int curIndex; /* index of current keyframe being iterated over */
-
- /* flags */
- short curflags; /* current flags for the keyframe we're reached in the iteration process */
- short iterflags; /* settings for iteration process */ // XXX: unused...
+ /* generic properties/data access */
+ ListBase list; /* temp list for storing custom list of data to check */
+ struct Scene *scene; /* pointer to current scene - many tools need access to cfra/etc. */
+ void *data; /* pointer to custom data - usually 'Object' but also 'rectf', but could be other types too */
+ float f1, f2; /* storage of times/values as 'decimals' */
+ int i1, i2; /* storage of times/values/flags as 'whole' numbers */
+
+ /* current iteration data */
+ struct FCurve *fcu; /* F-Curve that is being iterated over */
+ int curIndex; /* index of current keyframe being iterated over */
+
+ /* flags */
+ short curflags; /* current flags for the keyframe we're reached in the iteration process */
+ short iterflags; /* settings for iteration process */ // XXX: unused...
} KeyframeEditData;
/* ------- Function Pointer Typedefs ---------------- */
- /* callback function that refreshes the F-Curve after use */
+/* callback function that refreshes the F-Curve after use */
typedef void (*FcuEditFunc)(struct FCurve *fcu);
- /* callback function that operates on the given BezTriple */
+/* callback function that operates on the given BezTriple */
typedef short (*KeyframeEditFunc)(KeyframeEditData *ked, struct BezTriple *bezt);
/* ---------- Defines for 'OK' polls ----------------- */
/* which verts of a keyframe is active (after polling) */
typedef enum eKeyframeVertOk {
- /* 'key' itself is ok */
- KEYFRAME_OK_KEY = (1<<0),
- /* 'handle 1' is ok */
- KEYFRAME_OK_H1 = (1<<1),
- /* 'handle 2' is ok */
- KEYFRAME_OK_H2 = (1<<2),
- /* all flags */
- KEYFRAME_OK_ALL = (KEYFRAME_OK_KEY|KEYFRAME_OK_H1|KEYFRAME_OK_H2)
+ /* 'key' itself is ok */
+ KEYFRAME_OK_KEY = (1 << 0),
+ /* 'handle 1' is ok */
+ KEYFRAME_OK_H1 = (1 << 1),
+ /* 'handle 2' is ok */
+ KEYFRAME_OK_H2 = (1 << 2),
+ /* all flags */
+ KEYFRAME_OK_ALL = (KEYFRAME_OK_KEY | KEYFRAME_OK_H1 | KEYFRAME_OK_H2)
} eKeyframeVertOk;
/* Flags for use during iteration */
typedef enum eKeyframeIterFlags {
- /* consider handles in addition to key itself */
- KEYFRAME_ITER_INCL_HANDLES = (1<<0),
+ /* consider handles in addition to key itself */
+ KEYFRAME_ITER_INCL_HANDLES = (1 << 0),
} eKeyframeIterFlags;
/* ------- Custom Data Type Defines ------------------ */
/* Custom data for remapping one range to another in a fixed way */
typedef struct KeyframeEditCD_Remap {
- float oldMin, oldMax; /* old range */
- float newMin, newMax; /* new range */
+ float oldMin, oldMax; /* old range */
+ float newMin, newMax; /* new range */
} KeyframeEditCD_Remap;
/* Paste options */
typedef enum eKeyPasteOffset {
- /* paste keys starting at current frame */
+ /* paste keys starting at current frame */
KEYFRAME_PASTE_OFFSET_CFRA_START,
- /* paste keys ending at current frame */
+ /* paste keys ending at current frame */
KEYFRAME_PASTE_OFFSET_CFRA_END,
- /* paste keys relative to the current frame when copying */
+ /* paste keys relative to the current frame when copying */
KEYFRAME_PASTE_OFFSET_CFRA_RELATIVE,
- /* paste keys from original time */
+ /* paste keys from original time */
KEYFRAME_PASTE_OFFSET_NONE
} eKeyPasteOffset;
typedef enum eKeyMergeMode {
- /* overlay existing with new keys */
+ /* overlay existing with new keys */
KEYFRAME_PASTE_MERGE_MIX,
- /* replace entire fcurve */
+ /* replace entire fcurve */
KEYFRAME_PASTE_MERGE_OVER,
- /* overwrite keys in pasted range */
+ /* overwrite keys in pasted range */
KEYFRAME_PASTE_MERGE_OVER_RANGE,
- /* overwrite keys in pasted range (use all keyframe start & end for range) */
+ /* overwrite keys in pasted range (use all keyframe start & end for range) */
KEYFRAME_PASTE_MERGE_OVER_RANGE_ALL
} eKeyMergeMode;
/* ---------------- Looping API --------------------- */
/* functions for looping over keyframes */
- /* function for working with F-Curve data only (i.e. when filters have been chosen to explicitly use this) */
+/* function for working with F-Curve data only (i.e. when filters have been chosen to explicitly use this) */
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, struct FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb);
- /* function for working with any type (i.e. one of the known types) of animation channel
- * - filterflag is bDopeSheet->flag (DOPESHEET_FILTERFLAG)
- */
+/* function for working with any type (i.e. one of the known types) of animation channel
+ * - filterflag is bDopeSheet->flag (DOPESHEET_FILTERFLAG)
+ */
short ANIM_animchannel_keyframes_loop(KeyframeEditData *ked, struct bDopeSheet *ads, struct bAnimListElem *ale, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb);
- /* same as above, except bAnimListElem wrapper is not needed...
- * - keytype is eAnim_KeyType
- */
+/* same as above, except bAnimListElem wrapper is not needed...
+ * - keytype is eAnim_KeyType
+ */
short ANIM_animchanneldata_keyframes_loop(KeyframeEditData *ked, struct bDopeSheet *ads, void *data, int keytype, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb);
/* functions for making sure all keyframes are in good order */
@@ -250,7 +250,7 @@ void sample_fcurve(struct FCurve *fcu);
void free_anim_copybuf(void);
short copy_animedit_keys(struct bAnimContext *ac, ListBase *anim_data);
short paste_animedit_keys(struct bAnimContext *ac, ListBase *anim_data,
- const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode);
+ const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode);
/* ************************************************ */
diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h
index 490a8830d3a..be5ad5b0c70 100644
--- a/source/blender/editors/include/ED_keyframing.h
+++ b/source/blender/editors/include/ED_keyframing.h
@@ -80,15 +80,15 @@ struct FCurve *verify_fcurve(struct bAction *act, const char group[], const char
/* -------- */
/* Lesser Keyframing API call:
- * Use this when validation of necessary animation data isn't necessary as it already
- * exists, and there is a beztriple that can be directly copied into the array.
+ * Use this when validation of necessary animation data isn't necessary as it already
+ * exists, and there is a beztriple that can be directly copied into the array.
*/
int insert_bezt_fcurve(struct FCurve *fcu, struct BezTriple *bezt, short flag);
/* Main Keyframing API call:
- * Use this when validation of necessary animation data isn't necessary as it
- * already exists. It will insert a keyframe using the current value being keyframed.
- * Returns the index at which a keyframe was added (or -1 if failed)
+ * Use this when validation of necessary animation data isn't necessary as it
+ * already exists. It will insert a keyframe using the current value being keyframed.
+ * Returns the index at which a keyframe was added (or -1 if failed)
*/
int insert_vert_fcurve(struct FCurve *fcu, float x, float y, short flag);
@@ -109,7 +109,7 @@ short insert_keyframe_direct(struct ReportList *reports, struct PointerRNA ptr,
short insert_keyframe(struct ReportList *reports, struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag);
/* Main Keyframing API call:
- * Use this to delete keyframe on current frame for relevant channel. Will perform checks just in case.
+ * Use this to delete keyframe on current frame for relevant channel. Will perform checks just in case.
*/
short delete_keyframe(struct ReportList *reports, struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag);
@@ -132,26 +132,26 @@ typedef struct KeyingSetInfo {
struct KeyingSetInfo *next, *prev;
/* info */
- /* identifier used for class name, which KeyingSet instances reference as "Typeinfo Name" */
+ /* identifier used for class name, which KeyingSet instances reference as "Typeinfo Name" */
char idname[64];
- /* identifier so that user can hook this up to a KeyingSet (used as label). */
+ /* identifier so that user can hook this up to a KeyingSet (used as label). */
char name[64];
- /* short help/description. */
+ /* short help/description. */
char description[240]; /* RNA_DYN_DESCR_MAX */
- /* keying settings */
+ /* keying settings */
short keyingflag;
/* polling callbacks */
- /* callback for polling the context for whether the right data is available */
+ /* callback for polling the context for whether the right data is available */
cbKeyingSet_Poll poll;
/* generate callbacks */
- /* iterator to use to go through collections of data in context
- * - this callback is separate from the 'adding' stage, allowing
- * BuiltIn KeyingSets to be manually specified to use
- */
+ /* iterator to use to go through collections of data in context
+ * - this callback is separate from the 'adding' stage, allowing
+ * BuiltIn KeyingSets to be manually specified to use
+ */
cbKeyingSet_Iterator iter;
- /* generator to use to add properties based on the data found by iterator */
+ /* generator to use to add properties based on the data found by iterator */
cbKeyingSet_Generate generate;
/* RNA integration */
@@ -172,9 +172,9 @@ typedef enum eModifyKey_Modes {
/* return codes for errors (with Relative KeyingSets) */
typedef enum eModifyKey_Returns {
- /* context info was invalid for using the Keying Set */
+ /* context info was invalid for using the Keying Set */
MODIFYKEY_INVALID_CONTEXT = -1,
- /* there isn't any typeinfo for generating paths from context */
+ /* there isn't any typeinfo for generating paths from context */
MODIFYKEY_MISSING_TYPEINFO = -2,
} eModifyKey_Returns;
@@ -220,7 +220,7 @@ short ANIM_keyingset_context_ok_poll(struct bContext *C, struct KeyingSet *ks);
/* Flags for use by driver creation calls */
typedef enum eCreateDriverFlags {
- CREATEDRIVER_WITH_DEFAULT_DVAR = (1<<0), /* create drivers with a default variable for nicer UI */
+ CREATEDRIVER_WITH_DEFAULT_DVAR = (1 << 0), /* create drivers with a default variable for nicer UI */
} eCreateDriverFlags;
/* -------- */
@@ -236,22 +236,22 @@ struct FCurve *verify_driver_fcurve(struct ID *id, const char rna_path[], const
short ANIM_driver_can_paste(void);
/* Main Driver Management API calls:
- * Add a new driver for the specified property on the given ID block
+ * Add a new driver for the specified property on the given ID block
*/
short ANIM_add_driver(struct ReportList *reports, struct ID *id, const char rna_path[], int array_index, short flag, int type);
/* Main Driver Management API calls:
- * Remove the driver for the specified property on the given ID block (if available)
+ * Remove the driver for the specified property on the given ID block (if available)
*/
short ANIM_remove_driver(struct ReportList *reports, struct ID *id, const char rna_path[], int array_index, short flag);
/* Main Driver Management API calls:
- * Make a copy of the driver for the specified property on the given ID block
+ * Make a copy of the driver for the specified property on the given ID block
*/
short ANIM_copy_driver(struct ReportList *reports, struct ID *id, const char rna_path[], int array_index, short flag);
/* Main Driver Management API calls:
- * Add a new driver for the specified property on the given ID block or replace an existing one
+ * Add a new driver for the specified property on the given ID block or replace an existing one
* with the driver + driver-curve data from the buffer
*/
short ANIM_paste_driver(struct ReportList *reports, struct ID *id, const char rna_path[], int array_index, short flag);
@@ -259,21 +259,21 @@ short ANIM_paste_driver(struct ReportList *reports, struct ID *id, const char rn
/* ************ Auto-Keyframing ********************** */
/* Notes:
* - All the defines for this (User-Pref settings and Per-Scene settings)
- * are defined in DNA_userdef_types.h
+ * are defined in DNA_userdef_types.h
* - Scene settings take presidence over those for userprefs, with old files
- * inheriting userpref settings for the scene settings
+ * inheriting userpref settings for the scene settings
* - "On/Off + Mode" are stored per Scene, but "settings" are currently stored
- * as userprefs
+ * as userprefs
*/
/* Auto-Keying macros for use by various tools */
- /* check if auto-keyframing is enabled (per scene takes presidence) */
-#define IS_AUTOKEY_ON(scene) ((scene) ? (scene->toolsettings->autokey_mode & AUTOKEY_ON) : (U.autokey_mode & AUTOKEY_ON))
- /* check the mode for auto-keyframing (per scene takes presidence) */
-#define IS_AUTOKEY_MODE(scene, mode) ((scene) ? (scene->toolsettings->autokey_mode == AUTOKEY_MODE_##mode) : (U.autokey_mode == AUTOKEY_MODE_##mode))
- /* check if a flag is set for auto-keyframing (per scene takes presidence) */
+/* check if auto-keyframing is enabled (per scene takes presidence) */
+#define IS_AUTOKEY_ON(scene) ((scene) ? (scene->toolsettings->autokey_mode & AUTOKEY_ON) : (U.autokey_mode & AUTOKEY_ON))
+/* check the mode for auto-keyframing (per scene takes presidence) */
+#define IS_AUTOKEY_MODE(scene, mode) ((scene) ? (scene->toolsettings->autokey_mode == AUTOKEY_MODE_##mode) : (U.autokey_mode == AUTOKEY_MODE_##mode))
+/* check if a flag is set for auto-keyframing (per scene takes presidence) */
#define IS_AUTOKEY_FLAG(scene, flag) \
- ((scene)? \
+ ((scene) ? \
((scene->toolsettings->autokey_flag & AUTOKEY_FLAG_##flag) || (U.autokey_flag & AUTOKEY_FLAG_##flag)) \
: \
(U.autokey_flag & AUTOKEY_FLAG_##flag))
@@ -291,7 +291,7 @@ short fcurve_frame_has_keyframe(struct FCurve *fcu, float frame, short filter);
/* Main Keyframe Checking API call:
* Checks whether a keyframe exists for the given ID-block one the given frame.
* - It is recommended to call this method over the other keyframe-checkers directly,
- * in case some detail of the implementation changes...
+ * in case some detail of the implementation changes...
* - frame: the value of this is quite often result of BKE_scene_frame_get()
*/
short id_frame_has_keyframe(struct ID *id, float frame, short filter);
@@ -302,14 +302,14 @@ short id_frame_has_keyframe(struct ID *id, float frame, short filter);
* (for v3d->keyflags)
*/
typedef enum eAnimFilterFlags {
- /* general */
- ANIMFILTER_KEYS_LOCAL = (1<<0), /* only include locally available anim data */
- ANIMFILTER_KEYS_MUTED = (1<<1), /* include muted elements */
- ANIMFILTER_KEYS_ACTIVE = (1<<2), /* only include active-subelements */
-
- /* object specific */
- ANIMFILTER_KEYS_NOMAT = (1<<9), /* don't include material keyframes */
- ANIMFILTER_KEYS_NOSKEY = (1<<10), /* don't include shape keys (for geometry) */
+ /* general */
+ ANIMFILTER_KEYS_LOCAL = (1 << 0), /* only include locally available anim data */
+ ANIMFILTER_KEYS_MUTED = (1 << 1), /* include muted elements */
+ ANIMFILTER_KEYS_ACTIVE = (1 << 2), /* only include active-subelements */
+
+ /* object specific */
+ ANIMFILTER_KEYS_NOMAT = (1 << 9), /* don't include material keyframes */
+ ANIMFILTER_KEYS_NOSKEY = (1 << 10), /* don't include shape keys (for geometry) */
} eAnimFilterFlags;
/* utility funcs for auto keyframe */
diff --git a/source/blender/editors/include/ED_markers.h b/source/blender/editors/include/ED_markers.h
index c0b5ba6ecf8..cb065646f0a 100644
--- a/source/blender/editors/include/ED_markers.h
+++ b/source/blender/editors/include/ED_markers.h
@@ -42,8 +42,8 @@ struct TimeMarker;
/* flags for drawing markers */
enum {
- DRAW_MARKERS_LINES = (1<<0),
- DRAW_MARKERS_LOCAL = (1<<1)
+ DRAW_MARKERS_LINES = (1 << 0),
+ DRAW_MARKERS_LOCAL = (1 << 1)
};
void draw_markers_time(const struct bContext *C, int flag);
@@ -78,4 +78,3 @@ void ED_marker_keymap_animedit_conflictfree(struct wmKeyMap *keymap);
void debug_markers_print_list(struct ListBase *markers);
#endif /* __ED_MARKERS_H__ */
-
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 71d37d5c6ea..7e84962b154 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -267,6 +267,18 @@ void ED_mesh_mirrtopo_init(struct Mesh *me, const int ob_mode, MirrTopoStore_t *
const short skip_em_vert_array_init);
void ED_mesh_mirrtopo_free(MirrTopoStore_t *mesh_topo_store);
+/* mesh backup */
+typedef struct BMBackup {
+ struct BMesh *bmcopy;
+} BMBackup;
+
+/* save a copy of the bmesh for restoring later */
+struct BMBackup EDBM_redo_state_store(struct BMEditMesh *em);
+/* restore a bmesh from backup */
+void EDBM_redo_state_restore(struct BMBackup, struct BMEditMesh *em, int recalctess);
+/* delete the backup, optionally flushing it to an editmesh */
+void EDBM_redo_state_free(struct BMBackup *, struct BMEditMesh *em, int recalctess);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/editors/include/ED_numinput.h b/source/blender/editors/include/ED_numinput.h
index d51ece58e92..411df88fb28 100644
--- a/source/blender/editors/include/ED_numinput.h
+++ b/source/blender/editors/include/ED_numinput.h
@@ -48,11 +48,11 @@ typedef struct NumInput {
} NumInput;
/* NUMINPUT FLAGS */
-#define NUM_NULL_ONE 2
-#define NUM_NO_NEGATIVE 4
-#define NUM_NO_ZERO 8
-#define NUM_NO_FRACTION 16
-#define NUM_AFFECT_ALL 32
+#define NUM_NULL_ONE 2
+#define NUM_NO_NEGATIVE 4
+#define NUM_NO_ZERO 8
+#define NUM_NO_FRACTION 16
+#define NUM_AFFECT_ALL 32
/*********************** NumInput ********************************/
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 85e68ba7ab4..429dcb88c78 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -90,21 +90,21 @@ void ED_object_parent_clear(struct bContext *C, int type);
/* generic editmode keys like pet
* do_pet
- * 0: No
- * 1: Object
- * 2: Edit
- * 3: Edit with connected
+ * 0: No
+ * 1: Object
+ * 2: Edit
+ * 3: Edit with connected
* */
void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int do_pet);
- /* send your own notifier for select! */
+/* send your own notifier for select! */
void ED_base_object_select(struct Base *base, short mode);
- /* includes notifier */
+/* includes notifier */
void ED_base_object_activate(struct bContext *C, struct Base *base);
void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base);
- /* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
+/* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct Base *base, int dupflag);
void ED_object_parent(struct Object *ob, struct Object *parent, int type, const char *substr);
@@ -112,11 +112,11 @@ void ED_object_parent(struct Object *ob, struct Object *parent, int type, const
void ED_object_toggle_modes(struct bContext *C, int mode);
/* bitflags for enter/exit editmode */
-#define EM_FREEDATA 1
-#define EM_FREEUNDO 2
-#define EM_WAITCURSOR 4
-#define EM_DO_UNDO 8
-#define EM_IGNORE_LAYER 16
+#define EM_FREEDATA 1
+#define EM_FREEUNDO 2
+#define EM_WAITCURSOR 4
+#define EM_DO_UNDO 8
+#define EM_IGNORE_LAYER 16
void ED_object_exit_editmode(struct bContext *C, int flag);
void ED_object_enter_editmode(struct bContext *C, int flag);
@@ -128,10 +128,10 @@ float ED_object_new_primitive_matrix(struct bContext *C, struct Object *editob,
void ED_object_add_generic_props(struct wmOperatorType *ot, int do_editmode);
int ED_object_add_generic_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op,
- float *loc, float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned);
+ float *loc, float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned);
struct Object *ED_object_add_type(struct bContext *C, int type, float *loc,
- float *rot, int enter_editmode, unsigned int layer);
+ float *rot, int enter_editmode, unsigned int layer);
void ED_object_single_users(struct Main *bmain, struct Scene *scene, int full);
void ED_object_single_user(struct Scene *scene, struct Object *ob);
@@ -161,7 +161,7 @@ void ED_setflagsLatt(struct Object *obedit, int flag);
/* object_modifier.c */
enum {
- MODIFIER_APPLY_DATA=1,
+ MODIFIER_APPLY_DATA = 1,
MODIFIER_APPLY_SHAPE
};
diff --git a/source/blender/editors/include/ED_render.h b/source/blender/editors/include/ED_render.h
index 5392ef86ba7..7891315be9f 100644
--- a/source/blender/editors/include/ED_render.h
+++ b/source/blender/editors/include/ED_render.h
@@ -57,16 +57,16 @@ typedef struct RenderInfo {
int pr_rectx;
int pr_recty;
short curtile, tottile, status;
- rcti disprect; /* storage for view3d preview rect */
- unsigned int* rect;
- struct Render *re; /* persistent render */
+ rcti disprect; /* storage for view3d preview rect */
+ unsigned int *rect;
+ struct Render *re; /* persistent render */
} RenderInfo;
/* ri->status */
-#define PR_DBASE 1
-#define PR_DISPRECT 2
-#define PR_PROJECTED 4
-#define PR_ROTATED 8
+#define PR_DBASE 1
+#define PR_DISPRECT 2
+#define PR_PROJECTED 4
+#define PR_ROTATED 8
/* Render the preview
*
@@ -76,9 +76,9 @@ typedef struct RenderInfo {
* - PR_NODE_RENDER: preview is rendered for node editor
*/
-#define PR_BUTS_RENDER 0
-#define PR_ICON_RENDER 1
-#define PR_NODE_RENDER 2
+#define PR_BUTS_RENDER 0
+#define PR_ICON_RENDER 1
+#define PR_NODE_RENDER 2
void ED_preview_init_dbase(void);
void ED_preview_free_dbase(void);
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index f62befdaa31..2fc72f7e8da 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -50,135 +50,135 @@ struct uiBlock;
struct rcti;
/* regions */
-void ED_region_do_listen(struct ARegion *ar, struct wmNotifier *note);
-void ED_region_do_draw(struct bContext *C, struct ARegion *ar);
-void ED_region_exit(struct bContext *C, struct ARegion *ar);
-void ED_region_pixelspace(struct ARegion *ar);
-void ED_region_set(const struct bContext *C, struct ARegion *ar);
-void ED_region_init(struct bContext *C, struct ARegion *ar);
-void ED_region_tag_redraw(struct ARegion *ar);
-void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
-void ED_region_tag_redraw_overlay(struct ARegion *ar);
-void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
-void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, const char *context, int contextnr);
-void ED_region_header_init(struct ARegion *ar);
-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);
+void ED_region_do_listen(struct ARegion *ar, struct wmNotifier *note);
+void ED_region_do_draw(struct bContext *C, struct ARegion *ar);
+void ED_region_exit(struct bContext *C, struct ARegion *ar);
+void ED_region_pixelspace(struct ARegion *ar);
+void ED_region_set(const struct bContext *C, struct ARegion *ar);
+void ED_region_init(struct bContext *C, struct ARegion *ar);
+void ED_region_tag_redraw(struct ARegion *ar);
+void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
+void ED_region_tag_redraw_overlay(struct ARegion *ar);
+void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
+void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, const char *context, int contextnr);
+void ED_region_header_init(struct ARegion *ar);
+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);
-void ED_spacetypes_keymap(struct wmKeyConfig *keyconf);
-int ED_area_header_switchbutton(const struct bContext *C, struct uiBlock *block, int yco);
-int ED_area_header_standardbuttons(const struct bContext *C, struct uiBlock *block, int yco);
-void ED_area_overdraw(struct bContext *C);
-void ED_area_overdraw_flush(struct ScrArea *sa, struct ARegion *ar);
+void ED_spacetypes_init(void);
+void ED_spacetypes_keymap(struct wmKeyConfig *keyconf);
+int ED_area_header_switchbutton(const struct bContext *C, struct uiBlock *block, int yco);
+int ED_area_header_standardbuttons(const struct bContext *C, struct uiBlock *block, int yco);
+void ED_area_overdraw(struct bContext *C);
+void ED_area_overdraw_flush(struct ScrArea *sa, struct ARegion *ar);
/* areas */
-void ED_area_initialize(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *sa);
-void ED_area_exit(struct bContext *C, struct ScrArea *sa);
-int ED_screen_area_active(const struct bContext *C);
-void ED_area_do_listen(ScrArea *sa, struct wmNotifier *note);
-void ED_area_tag_redraw(ScrArea *sa);
-void ED_area_tag_redraw_regiontype(ScrArea *sa, int type);
-void ED_area_tag_refresh(ScrArea *sa);
-void ED_area_do_refresh(struct bContext *C, ScrArea *sa);
-void ED_area_headerprint(ScrArea *sa, const char *str);
-void ED_area_newspace(struct bContext *C, ScrArea *sa, int type);
-void ED_area_prevspace(struct bContext *C, ScrArea *sa);
-void ED_area_swapspace(struct bContext *C, ScrArea *sa1, ScrArea *sa2);
-int ED_area_headersize(void);
+void ED_area_initialize(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *sa);
+void ED_area_exit(struct bContext *C, struct ScrArea *sa);
+int ED_screen_area_active(const struct bContext *C);
+void ED_area_do_listen(ScrArea *sa, struct wmNotifier *note);
+void ED_area_tag_redraw(ScrArea *sa);
+void ED_area_tag_redraw_regiontype(ScrArea *sa, int type);
+void ED_area_tag_refresh(ScrArea *sa);
+void ED_area_do_refresh(struct bContext *C, ScrArea *sa);
+void ED_area_headerprint(ScrArea *sa, const char *str);
+void ED_area_newspace(struct bContext *C, ScrArea *sa, int type);
+void ED_area_prevspace(struct bContext *C, ScrArea *sa);
+void ED_area_swapspace(struct bContext *C, ScrArea *sa1, ScrArea *sa2);
+int ED_area_headersize(void);
/* screens */
-void ED_screens_initialize(struct wmWindowManager *wm);
-void ED_screen_draw(struct wmWindow *win);
-void ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win);
-void ED_screen_do_listen(struct bContext *C, struct wmNotifier *note);
+void ED_screens_initialize(struct wmWindowManager *wm);
+void ED_screen_draw(struct wmWindow *win);
+void ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win);
+void ED_screen_do_listen(struct bContext *C, struct wmNotifier *note);
bScreen *ED_screen_duplicate(struct wmWindow *win, struct bScreen *sc);
bScreen *ED_screen_add(struct wmWindow *win, struct Scene *scene, const char *name);
-void ED_screen_set(struct bContext *C, struct bScreen *sc);
-void ED_screen_delete(struct bContext *C, struct bScreen *sc);
-void ED_screen_set_scene(struct bContext *C, struct bScreen *screen, struct Scene *scene);
-void ED_screen_delete_scene(struct bContext *C, struct Scene *scene);
-void ED_screen_set_subwinactive(struct bContext *C, struct wmEvent *event);
-void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
-void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
-void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh);
+void ED_screen_set(struct bContext *C, struct bScreen *sc);
+void ED_screen_delete(struct bContext *C, struct bScreen *sc);
+void ED_screen_set_scene(struct bContext *C, struct bScreen *screen, struct Scene *scene);
+void ED_screen_delete_scene(struct bContext *C, struct Scene *scene);
+void ED_screen_set_subwinactive(struct bContext *C, struct wmEvent *event);
+void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
+void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
+void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh);
ScrArea *ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
-void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
-void ED_screen_full_restore(struct bContext *C, ScrArea *sa);
+void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
+void ED_screen_full_restore(struct bContext *C, ScrArea *sa);
struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa);
/* anim */
-void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute);
+void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute);
-void ED_refresh_viewport_fps(struct bContext *C);
+void ED_refresh_viewport_fps(struct bContext *C);
int ED_screen_animation_play(struct bContext *C, int sync, int mode);
/* screen keymaps */
-void ED_operatortypes_screen(void);
-void ED_keymap_screen(struct wmKeyConfig *keyconf);
+void ED_operatortypes_screen(void);
+void ED_keymap_screen(struct wmKeyConfig *keyconf);
/* operators; context poll callbacks */
-int ED_operator_screenactive(struct bContext *C);
-int ED_operator_screen_mainwinactive(struct bContext *C);
-int ED_operator_areaactive(struct bContext *C);
-int ED_operator_regionactive(struct bContext *C);
-
-int ED_operator_scene_editable(struct bContext *C);
-int ED_operator_objectmode(struct bContext *C);
-
-int ED_operator_view3d_active(struct bContext *C);
-int ED_operator_region_view3d_active(struct bContext *C);
-int ED_operator_animview_active(struct bContext *C);
-int ED_operator_timeline_active(struct bContext *C);
-int ED_operator_outliner_active(struct bContext *C);
-int ED_operator_outliner_active_no_editobject(struct bContext *C);
-int ED_operator_file_active(struct bContext *C);
-int ED_operator_action_active(struct bContext *C);
-int ED_operator_buttons_active(struct bContext *C);
-int ED_operator_node_active(struct bContext *C);
-int ED_operator_graphedit_active(struct bContext *C);
-int ED_operator_sequencer_active(struct bContext *C);
-int ED_operator_image_active(struct bContext *C);
-int ED_operator_nla_active(struct bContext *C);
-int ED_operator_logic_active(struct bContext *C);
-int ED_operator_info_active(struct bContext *C);
-int ED_operator_console_active(struct bContext *C);
-
-
-int ED_operator_object_active(struct bContext *C);
-int ED_operator_object_active_editable(struct bContext *C);
-int ED_operator_object_active_editable_mesh(struct bContext *C);
-int ED_operator_object_active_editable_font(struct bContext *C);
-int ED_operator_editmesh(struct bContext *C);
-int ED_operator_editmesh_view3d(struct bContext *C);
-int ED_operator_editmesh_region_view3d(struct bContext *C);
-int ED_operator_editarmature(struct bContext *C);
-int ED_operator_editcurve(struct bContext *C);
-int ED_operator_editcurve_3d(struct bContext *C);
-int ED_operator_editsurf(struct bContext *C);
-int ED_operator_editsurfcurve(struct bContext *C);
-int ED_operator_editsurfcurve_region_view3d(struct bContext *C);
-int ED_operator_editfont(struct bContext *C);
-int ED_operator_editlattice(struct bContext *C);
-int ED_operator_editmball(struct bContext *C);
-int ED_operator_uvedit(struct bContext *C);
-int ED_operator_uvmap(struct bContext *C);
-int ED_operator_posemode(struct bContext *C);
+int ED_operator_screenactive(struct bContext *C);
+int ED_operator_screen_mainwinactive(struct bContext *C);
+int ED_operator_areaactive(struct bContext *C);
+int ED_operator_regionactive(struct bContext *C);
+
+int ED_operator_scene_editable(struct bContext *C);
+int ED_operator_objectmode(struct bContext *C);
+
+int ED_operator_view3d_active(struct bContext *C);
+int ED_operator_region_view3d_active(struct bContext *C);
+int ED_operator_animview_active(struct bContext *C);
+int ED_operator_timeline_active(struct bContext *C);
+int ED_operator_outliner_active(struct bContext *C);
+int ED_operator_outliner_active_no_editobject(struct bContext *C);
+int ED_operator_file_active(struct bContext *C);
+int ED_operator_action_active(struct bContext *C);
+int ED_operator_buttons_active(struct bContext *C);
+int ED_operator_node_active(struct bContext *C);
+int ED_operator_graphedit_active(struct bContext *C);
+int ED_operator_sequencer_active(struct bContext *C);
+int ED_operator_image_active(struct bContext *C);
+int ED_operator_nla_active(struct bContext *C);
+int ED_operator_logic_active(struct bContext *C);
+int ED_operator_info_active(struct bContext *C);
+int ED_operator_console_active(struct bContext *C);
+
+
+int ED_operator_object_active(struct bContext *C);
+int ED_operator_object_active_editable(struct bContext *C);
+int ED_operator_object_active_editable_mesh(struct bContext *C);
+int ED_operator_object_active_editable_font(struct bContext *C);
+int ED_operator_editmesh(struct bContext *C);
+int ED_operator_editmesh_view3d(struct bContext *C);
+int ED_operator_editmesh_region_view3d(struct bContext *C);
+int ED_operator_editarmature(struct bContext *C);
+int ED_operator_editcurve(struct bContext *C);
+int ED_operator_editcurve_3d(struct bContext *C);
+int ED_operator_editsurf(struct bContext *C);
+int ED_operator_editsurfcurve(struct bContext *C);
+int ED_operator_editsurfcurve_region_view3d(struct bContext *C);
+int ED_operator_editfont(struct bContext *C);
+int ED_operator_editlattice(struct bContext *C);
+int ED_operator_editmball(struct bContext *C);
+int ED_operator_uvedit(struct bContext *C);
+int ED_operator_uvmap(struct bContext *C);
+int ED_operator_posemode(struct bContext *C);
/* default keymaps, bitflags */
-#define ED_KEYMAP_UI 1
-#define ED_KEYMAP_VIEW2D 2
-#define ED_KEYMAP_MARKERS 4
-#define ED_KEYMAP_ANIMATION 8
-#define ED_KEYMAP_FRAMES 16
-#define ED_KEYMAP_GPENCIL 32
-#define ED_KEYMAP_HEADER 64
+#define ED_KEYMAP_UI 1
+#define ED_KEYMAP_VIEW2D 2
+#define ED_KEYMAP_MARKERS 4
+#define ED_KEYMAP_ANIMATION 8
+#define ED_KEYMAP_FRAMES 16
+#define ED_KEYMAP_GPENCIL 32
+#define ED_KEYMAP_HEADER 64
#endif /* __ED_SCREEN_H__ */
diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h
index 6f7d0c55b9a..c53dca47da9 100644
--- a/source/blender/editors/include/ED_screen_types.h
+++ b/source/blender/editors/include/ED_screen_types.h
@@ -35,27 +35,27 @@
/* for animplayer */
typedef struct ScreenAnimData {
- ARegion *ar; /* do not read from this, only for comparing if region exists */
+ ARegion *ar; /* do not read from this, only for comparing if region exists */
short redraws;
short refresh;
- short flag; /* flags for playback */
- int sfra; /* frame that playback was started from */
- int nextfra; /* next frame to go to (when ANIMPLAY_FLAG_USE_NEXT_FRAME is set) */
- double last_duration; /* used for frame dropping */
+ short flag; /* flags for playback */
+ int sfra; /* frame that playback was started from */
+ int nextfra; /* next frame to go to (when ANIMPLAY_FLAG_USE_NEXT_FRAME is set) */
+ double last_duration; /* used for frame dropping */
} ScreenAnimData;
/* for animplayer */
enum {
- /* user-setting - frame range is played backwards */
- ANIMPLAY_FLAG_REVERSE = (1<<0),
- /* temporary - playback just jumped to the start/end */
- ANIMPLAY_FLAG_JUMPED = (1<<1),
- /* drop frames as needed to maintain framerate */
- ANIMPLAY_FLAG_SYNC = (1<<2),
- /* don't drop frames (and ignore SCE_FRAME_DROP flag) */
- ANIMPLAY_FLAG_NO_SYNC = (1<<3),
- /* use nextfra at next timer update */
- ANIMPLAY_FLAG_USE_NEXT_FRAME = (1<<4)
+ /* user-setting - frame range is played backwards */
+ ANIMPLAY_FLAG_REVERSE = (1 << 0),
+ /* temporary - playback just jumped to the start/end */
+ ANIMPLAY_FLAG_JUMPED = (1 << 1),
+ /* drop frames as needed to maintain framerate */
+ ANIMPLAY_FLAG_SYNC = (1 << 2),
+ /* don't drop frames (and ignore SCE_FRAME_DROP flag) */
+ ANIMPLAY_FLAG_NO_SYNC = (1 << 3),
+ /* use nextfra at next timer update */
+ ANIMPLAY_FLAG_USE_NEXT_FRAME = (1 << 4)
};
/* ----------------------------------------------------- */
@@ -76,10 +76,10 @@ typedef struct ScreenFrameRateInfo {
/* Enum for Action Zone Edges. Which edge of area is action zone. */
typedef enum {
- AE_RIGHT_TO_TOPLEFT, /* Region located on the left, _right_ edge is action zone. Region minimised to the top left */
- AE_LEFT_TO_TOPRIGHT, /* Region located on the right, _left_ edge is action zone. Region minimised to the top right */
- AE_TOP_TO_BOTTOMRIGHT, /* Region located at the bottom, _top_ edge is action zone. Region minimised to the bottom right */
- AE_BOTTOM_TO_TOPLEFT /* Region located at the top, _bottom_edge is action zone. Region minimised to the top left */
+ AE_RIGHT_TO_TOPLEFT, /* Region located on the left, _right_ edge is action zone. Region minimised to the top left */
+ AE_LEFT_TO_TOPRIGHT, /* Region located on the right, _left_ edge is action zone. Region minimised to the top right */
+ AE_TOP_TO_BOTTOMRIGHT, /* Region located at the bottom, _top_ edge is action zone. Region minimised to the bottom right */
+ AE_BOTTOM_TO_TOPLEFT /* Region located at the top, _bottom_edge is action zone. Region minimised to the top left */
} AZEdge;
/* for editing areas/regions */
@@ -98,7 +98,7 @@ typedef struct AZone {
} AZone;
/* actionzone type */
-#define AZONE_AREA 1
-#define AZONE_REGION 2
+#define AZONE_AREA 1
+#define AZONE_REGION 2
#endif /* __ED_SCREEN_TYPES_H__ */
diff --git a/source/blender/editors/include/ED_sculpt.h b/source/blender/editors/include/ED_sculpt.h
index e8593e9b60d..e908868df75 100644
--- a/source/blender/editors/include/ED_sculpt.h
+++ b/source/blender/editors/include/ED_sculpt.h
@@ -44,7 +44,7 @@ void sculpt_get_redraw_planes(float planes[4][4], struct ARegion *ar,
struct RegionView3D *rv3d, struct Object *ob);
void ED_sculpt_force_update(struct bContext *C);
float *ED_sculpt_get_last_stroke(struct Object *ob);
-int ED_sculpt_minmax(struct bContext *C, float *min, float *max);
+int ED_sculpt_minmax(struct bContext *C, float min[3], float max[3]);
void ED_sculpt_mask_layers_ensure(struct Object *ob,
struct MultiresModifierData *mmd);
diff --git a/source/blender/editors/include/ED_sequencer.h b/source/blender/editors/include/ED_sequencer.h
index abeb00c301f..f20ebe81189 100644
--- a/source/blender/editors/include/ED_sequencer.h
+++ b/source/blender/editors/include/ED_sequencer.h
@@ -27,6 +27,6 @@
#ifndef __ED_SEQUENCER_H__
#define __ED_SEQUENCER_H__
-#define SEQ_ZOOM_FAC(szoom) ((szoom) > 0.0f)? (szoom) : ((szoom) == 0.0f)? (1.0f) : (-1.0f/(szoom))
+#define SEQ_ZOOM_FAC(szoom) ((szoom) > 0.0f) ? (szoom) : ((szoom) == 0.0f) ? (1.0f) : (-1.0f / (szoom))
#endif /* __ED_SEQUENCER_H__ */
diff --git a/source/blender/editors/include/ED_space_api.h b/source/blender/editors/include/ED_space_api.h
index 8023eef8370..c8521cb194a 100644
--- a/source/blender/editors/include/ED_space_api.h
+++ b/source/blender/editors/include/ED_space_api.h
@@ -62,13 +62,13 @@ void ED_spacetype_clip(void);
void ED_file_init(void);
void ED_file_exit(void);
-#define REGION_DRAW_POST_VIEW 0
-#define REGION_DRAW_POST_PIXEL 1
-#define REGION_DRAW_PRE_VIEW 2
+#define REGION_DRAW_POST_VIEW 0
+#define REGION_DRAW_POST_PIXEL 1
+#define REGION_DRAW_PRE_VIEW 2
void *ED_region_draw_cb_activate(struct ARegionType *,
- void (*draw)(const struct bContext *, struct ARegion *, void *),
- void *custumdata, int type);
+ void (*draw)(const struct bContext *, struct ARegion *, void *),
+ void *custumdata, int type);
void ED_region_draw_cb_draw(const struct bContext *, struct ARegion *, int);
void ED_region_draw_cb_exit(struct ARegionType *, void *);
void *ED_region_draw_cb_customdata(void *handle);
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index f6dee351c29..1cc82f19515 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -85,22 +85,22 @@ enum {
} TfmMode;
/* TRANSFORM CONTEXTS */
-#define CTX_NONE 0
-#define CTX_TEXTURE 1
-#define CTX_EDGE 2
-#define CTX_NO_PET 4
-#define CTX_TWEAK 8
-#define CTX_NO_MIRROR 16
-#define CTX_AUTOCONFIRM 32
-#define CTX_BMESH 64
-#define CTX_NDOF 128
-#define CTX_MOVIECLIP 256
+#define CTX_NONE 0
+#define CTX_TEXTURE 1
+#define CTX_EDGE 2
+#define CTX_NO_PET 4
+#define CTX_TWEAK 8
+#define CTX_NO_MIRROR 16
+#define CTX_AUTOCONFIRM 32
+#define CTX_BMESH 64
+#define CTX_NDOF 128
+#define CTX_MOVIECLIP 256
/* Standalone call to get the transformation center corresponding to the current situation
* returns 1 if successful, 0 otherwise (usually means there's no selection)
* (if 0 is returns, *vec is unmodified)
* */
-int calculateTransformCenter(struct bContext *C, int centerMode, float *vec);
+int calculateTransformCenter(struct bContext *C, int centerMode, float *cent3d, int *cent2d);
struct TransInfo;
struct ScrArea;
@@ -124,7 +124,7 @@ void BIF_selectTransformOrientationValue(struct bContext *C, int orientation);
void ED_getTransformOrientationMatrix(const struct bContext *C, float orientation_mat[][3], int activeOnly);
struct EnumPropertyItem *BIF_enumTransformOrientation(struct bContext *C);
-const char * BIF_menustringTransformOrientation(const struct bContext *C, const char *title); /* the returned value was allocated and needs to be freed after use */
+const char *BIF_menustringTransformOrientation(const struct bContext *C, const char *title); /* the returned value was allocated and needs to be freed after use */
int BIF_countTransformOrientation(const struct bContext *C);
void BIF_TransformSetUndo(const char *str);
@@ -133,15 +133,15 @@ void BIF_selectOrientation(void);
/* to be able to add operator properties to other operators */
-#define P_MIRROR (1 << 0)
-#define P_PROPORTIONAL (1 << 1)
-#define P_AXIS (1 << 2)
-#define P_SNAP (1 << 3)
-#define P_GEO_SNAP (P_SNAP|(1 << 4))
-#define P_ALIGN_SNAP (P_GEO_SNAP|(1 << 5))
-#define P_CONSTRAINT (1 << 6)
-#define P_OPTIONS (1 << 7)
-#define P_CORRECT_UV (1 << 8)
+#define P_MIRROR (1 << 0)
+#define P_PROPORTIONAL (1 << 1)
+#define P_AXIS (1 << 2)
+#define P_SNAP (1 << 3)
+#define P_GEO_SNAP (P_SNAP | (1 << 4))
+#define P_ALIGN_SNAP (P_GEO_SNAP | (1 << 5))
+#define P_CONSTRAINT (1 << 6)
+#define P_OPTIONS (1 << 7)
+#define P_CORRECT_UV (1 << 8)
void Transform_Properties(struct wmOperatorType *ot, int flags);
@@ -153,8 +153,7 @@ void BIF_draw_manipulator(const struct bContext *C);
/* Snapping */
-typedef struct DepthPeel
-{
+typedef struct DepthPeel {
struct DepthPeel *next, *prev;
float depth;
diff --git a/source/blender/editors/include/ED_types.h b/source/blender/editors/include/ED_types.h
index c4104472a82..5908dbf3a1d 100644
--- a/source/blender/editors/include/ED_types.h
+++ b/source/blender/editors/include/ED_types.h
@@ -35,8 +35,8 @@
/* old blender defines... should be depricated? */
#define DESELECT 0
-#define SELECT 1
-#define ACTIVE 2
+#define SELECT 1
+#define ACTIVE 2
/* proposal = put scene pointers on function calls? */
// #define BASACT (scene->basact)
@@ -45,4 +45,3 @@
#endif /* __ED_TYPES_H__ */
-
diff --git a/source/blender/editors/include/ED_util.h b/source/blender/editors/include/ED_util.h
index 9bde252e776..e10f049d0bc 100644
--- a/source/blender/editors/include/ED_util.h
+++ b/source/blender/editors/include/ED_util.h
@@ -43,39 +43,39 @@ struct Mesh;
/* ed_util.c */
-void ED_editors_init (struct bContext *C);
-void ED_editors_exit (struct bContext *C);
+void ED_editors_init(struct bContext *C);
+void ED_editors_exit(struct bContext *C);
/* ************** Undo ************************ */
/* undo.c */
-void ED_undo_push (struct bContext *C, const char *str);
-void ED_undo_push_op (struct bContext *C, struct wmOperator *op);
-void ED_undo_pop_op (struct bContext *C, struct wmOperator *op);
-void ED_undo_pop (struct bContext *C);
-void ED_undo_redo (struct bContext *C);
-void ED_OT_undo (struct wmOperatorType *ot);
-void ED_OT_undo_push (struct wmOperatorType *ot);
-void ED_OT_redo (struct wmOperatorType *ot);
-void ED_OT_undo_history (struct wmOperatorType *ot);
-
-int ED_undo_operator_repeat(struct bContext *C, struct wmOperator *op);
- /* convenience since UI callbacks use this mostly*/
-void ED_undo_operator_repeat_cb(struct bContext *C, void *arg_op, void *arg_unused);
-void ED_undo_operator_repeat_cb_evt(struct bContext *C, void *arg_op, int arg_unused);
-
-int ED_undo_valid (const struct bContext *C, const char *undoname);
+void ED_undo_push(struct bContext *C, const char *str);
+void ED_undo_push_op(struct bContext *C, struct wmOperator *op);
+void ED_undo_pop_op(struct bContext *C, struct wmOperator *op);
+void ED_undo_pop(struct bContext *C);
+void ED_undo_redo(struct bContext *C);
+void ED_OT_undo(struct wmOperatorType *ot);
+void ED_OT_undo_push(struct wmOperatorType *ot);
+void ED_OT_redo(struct wmOperatorType *ot);
+void ED_OT_undo_history(struct wmOperatorType *ot);
+
+int ED_undo_operator_repeat(struct bContext *C, struct wmOperator *op);
+/* convenience since UI callbacks use this mostly*/
+void ED_undo_operator_repeat_cb(struct bContext *C, void *arg_op, void *arg_unused);
+void ED_undo_operator_repeat_cb_evt(struct bContext *C, void *arg_op, int arg_unused);
+
+int ED_undo_valid(const struct bContext *C, const char *undoname);
/* undo_editmode.c */
void undo_editmode_push(struct bContext *C, const char *name,
- void * (*getdata)(struct bContext *C),
- void (*freedata)(void *),
- void (*to_editmode)(void *, void *, void *),
- void *(*from_editmode)(void *, void *),
- int (*validate_undo)(void *, void *));
-
-
-void undo_editmode_clear (void);
+ void * (*getdata)(struct bContext *C),
+ void (*freedata)(void *),
+ void (*to_editmode)(void *, void *, void *),
+ void *(*from_editmode)(void *, void *),
+ int (*validate_undo)(void *, void *));
+
+
+void undo_editmode_clear(void);
/* crazyspace.c */
float *crazyspace_get_mapped_editverts(struct Scene *scene, struct Object *obedit);
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index e3759ef5fde..f9f59c9bdd9 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -245,7 +245,7 @@ void drawcircball(int mode, const float cent[3], float rad, float tmat[][4]);
void view3d_validate_backbuf(struct ViewContext *vc);
struct ImBuf *view3d_read_backbuf(struct ViewContext *vc, short xmin, short ymin, short xmax, short ymax);
unsigned int view3d_sample_backbuf_rect(struct ViewContext *vc, const int mval[2], int size, unsigned int min, unsigned int max, int *dist, short strict,
- void *handle, unsigned int (*indextest)(void *handle, unsigned int index));
+ void *handle, unsigned int (*indextest)(void *handle, unsigned int index));
unsigned int view3d_sample_backbuf(struct ViewContext *vc, int x, int y);
/* draws and does a 4x4 sample */
@@ -282,7 +282,7 @@ int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
int ED_view3d_context_activate(struct bContext *C);
void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct ARegion *ar,
- int winx, int winy, float viewmat[][4], float winmat[][4], int draw_background);
+ int winx, int winy, float viewmat[][4], float winmat[][4], int draw_background);
struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag, int draw_background, char err_out[256]);
struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(struct Scene *scene, struct Object *camera, int width, int height, unsigned int flag, int drawtype, int draw_background, char err_out[256]);
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index d262c650e1c..c0f9d6dd5cd 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -80,96 +80,96 @@ typedef struct uiLayout uiLayout;
/* Defines */
/* names */
-#define UI_MAX_DRAW_STR 400
-#define UI_MAX_NAME_STR 128
+#define UI_MAX_DRAW_STR 400
+#define UI_MAX_NAME_STR 128
/* uiBlock->dt */
-#define UI_EMBOSS 0 /* use widget style for drawing */
-#define UI_EMBOSSN 1 /* Nothing, only icon and/or text */
-#define UI_EMBOSSP 2 /* Pulldown menu style */
-#define UI_EMBOSST 3 /* Table */
+#define UI_EMBOSS 0 /* use widget style for drawing */
+#define UI_EMBOSSN 1 /* Nothing, only icon and/or text */
+#define UI_EMBOSSP 2 /* Pulldown menu style */
+#define UI_EMBOSST 3 /* Table */
/* uiBlock->direction */
-#define UI_DIRECTION (UI_TOP|UI_DOWN|UI_LEFT|UI_RIGHT)
-#define UI_TOP 1
-#define UI_DOWN 2
-#define UI_LEFT 4
-#define UI_RIGHT 8
+#define UI_DIRECTION (UI_TOP | UI_DOWN | UI_LEFT | UI_RIGHT)
+#define UI_TOP 1
+#define UI_DOWN 2
+#define UI_LEFT 4
+#define UI_RIGHT 8
-#define UI_CENTER 16
-#define UI_SHIFT_FLIPPED 32
+#define UI_CENTER 16
+#define UI_SHIFT_FLIPPED 32
/* uiBlock->autofill (not yet used) */
// #define UI_BLOCK_COLLUMNS 1
// #define UI_BLOCK_ROWS 2
/* uiBlock->flag (controls) */
-#define UI_BLOCK_LOOP 1
-#define UI_BLOCK_REDRAW 2
-#define UI_BLOCK_RET_1 4 /* XXX 2.5 not implemented */
-#define UI_BLOCK_NUMSELECT 8
+#define UI_BLOCK_LOOP 1
+#define UI_BLOCK_REDRAW 2
+#define UI_BLOCK_RET_1 4 /* XXX 2.5 not implemented */
+#define UI_BLOCK_NUMSELECT 8
/*#define UI_BLOCK_ENTER_OK 16*/ /*UNUSED*/
-#define UI_BLOCK_CLIPBOTTOM 32
-#define UI_BLOCK_CLIPTOP 64
-#define UI_BLOCK_MOVEMOUSE_QUIT 128
-#define UI_BLOCK_KEEP_OPEN 256
-#define UI_BLOCK_POPUP 512
-#define UI_BLOCK_OUT_1 1024
-#define UI_BLOCK_NO_FLIP 2048
-#define UI_BLOCK_POPUP_MEMORY 4096
-#define UI_BLOCK_CLIP_EVENTS 8192 /* stop handling mouse events */
+#define UI_BLOCK_CLIPBOTTOM 32
+#define UI_BLOCK_CLIPTOP 64
+#define UI_BLOCK_MOVEMOUSE_QUIT 128
+#define UI_BLOCK_KEEP_OPEN 256
+#define UI_BLOCK_POPUP 512
+#define UI_BLOCK_OUT_1 1024
+#define UI_BLOCK_NO_FLIP 2048
+#define UI_BLOCK_POPUP_MEMORY 4096
+#define UI_BLOCK_CLIP_EVENTS 8192 /* stop handling mouse events */
/* uiPopupBlockHandle->menuretval */
-#define UI_RETURN_CANCEL 1 /* cancel all menus cascading */
+#define UI_RETURN_CANCEL 1 /* cancel all menus cascading */
#define UI_RETURN_OK 2 /* choice made */
#define UI_RETURN_OUT 4 /* left the menu */
#define UI_RETURN_UPDATE 8 /* update the button that opened */
#define UI_RETURN_POPUP_OK 16 /* popup is ok to be handled */
- /* block->flag bits 12-15 are identical to but->flag bits */
+/* block->flag bits 12-15 are identical to but->flag bits */
/* panel controls */
-#define UI_PNL_SOLID 2
-#define UI_PNL_CLOSE 32
-#define UI_PNL_SCALE 512
+#define UI_PNL_SOLID 2
+#define UI_PNL_CLOSE 32
+#define UI_PNL_SCALE 512
/* warning the first 6 flags are internal */
/* but->flag */
-#define UI_TEXT_LEFT 64
-#define UI_ICON_LEFT 128
-#define UI_ICON_SUBMENU 256
-#define UI_ICON_PREVIEW 512
-
-#define UI_TEXT_RIGHT 1024
-#define UI_BUT_NODE_LINK 2048
-#define UI_BUT_NODE_ACTIVE 4096
-#define UI_FLAG_UNUSED 8192
-
- /* button align flag, for drawing groups together */
-#define UI_BUT_ALIGN (UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT|UI_BUT_ALIGN_RIGHT|UI_BUT_ALIGN_DOWN)
-#define UI_BUT_ALIGN_TOP (1<<14)
-#define UI_BUT_ALIGN_LEFT (1<<15)
-#define UI_BUT_ALIGN_RIGHT (1<<16)
-#define UI_BUT_ALIGN_DOWN (1<<17)
-
-#define UI_BUT_DISABLED (1<<18)
-#define UI_BUT_COLOR_LOCK (1<<19)
-#define UI_BUT_ANIMATED (1<<20)
-#define UI_BUT_ANIMATED_KEY (1<<21)
-#define UI_BUT_DRIVEN (1<<22)
-#define UI_BUT_REDALERT (1<<23)
-#define UI_BUT_INACTIVE (1<<24)
-#define UI_BUT_LAST_ACTIVE (1<<25)
-#define UI_BUT_UNDO (1<<26)
-#define UI_BUT_IMMEDIATE (1<<27)
-#define UI_BUT_NO_TOOLTIP (1<<28)
-#define UI_BUT_NO_UTF8 (1<<29)
-
-#define UI_BUT_VEC_SIZE_LOCK (1<<30) /* used to flag if color hsv-circle should keep luminance */
-#define UI_BUT_COLOR_CUBIC (1<<31) /* cubic saturation for the color wheel */
-
-#define UI_PANEL_WIDTH 340
-#define UI_COMPACT_PANEL_WIDTH 160
+#define UI_TEXT_LEFT 64
+#define UI_ICON_LEFT 128
+#define UI_ICON_SUBMENU 256
+#define UI_ICON_PREVIEW 512
+
+#define UI_TEXT_RIGHT 1024
+#define UI_BUT_NODE_LINK 2048
+#define UI_BUT_NODE_ACTIVE 4096
+#define UI_FLAG_UNUSED 8192
+
+/* button align flag, for drawing groups together */
+#define UI_BUT_ALIGN (UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_RIGHT | UI_BUT_ALIGN_DOWN)
+#define UI_BUT_ALIGN_TOP (1 << 14)
+#define UI_BUT_ALIGN_LEFT (1 << 15)
+#define UI_BUT_ALIGN_RIGHT (1 << 16)
+#define UI_BUT_ALIGN_DOWN (1 << 17)
+
+#define UI_BUT_DISABLED (1 << 18)
+#define UI_BUT_COLOR_LOCK (1 << 19)
+#define UI_BUT_ANIMATED (1 << 20)
+#define UI_BUT_ANIMATED_KEY (1 << 21)
+#define UI_BUT_DRIVEN (1 << 22)
+#define UI_BUT_REDALERT (1 << 23)
+#define UI_BUT_INACTIVE (1 << 24)
+#define UI_BUT_LAST_ACTIVE (1 << 25)
+#define UI_BUT_UNDO (1 << 26)
+#define UI_BUT_IMMEDIATE (1 << 27)
+#define UI_BUT_NO_TOOLTIP (1 << 28)
+#define UI_BUT_NO_UTF8 (1 << 29)
+
+#define UI_BUT_VEC_SIZE_LOCK (1 << 30) /* used to flag if color hsv-circle should keep luminance */
+#define UI_BUT_COLOR_CUBIC (1 << 31) /* cubic saturation for the color wheel */
+
+#define UI_PANEL_WIDTH 340
+#define UI_COMPACT_PANEL_WIDTH 160
/* scale fixed button widths by this to account for DPI
* 8.4852 == sqrtf(72.0f)) */
@@ -185,79 +185,79 @@ typedef struct uiLayout uiLayout;
* - bit 9-15: button type (now 6 bits, 64 types)
* */
-#define CHA 32
-#define SHO 64
-#define INT 96
-#define FLO 128
+#define CHA 32
+#define SHO 64
+#define INT 96
+#define FLO 128
/*#define FUN 192*/ /*UNUSED*/
-#define BIT 256
-
-#define BUTPOIN (128+64+32)
-
-#define BUT (1<<9)
-#define ROW (2<<9)
-#define TOG (3<<9)
-#define SLI (4<<9)
-#define NUM (5<<9)
-#define TEX (6<<9)
-#define TOG3 (7<<9)
-#define TOGR (8<<9)
-#define TOGN (9<<9)
-#define LABEL (10<<9)
-#define MENU (11<<9)
-#define ICONROW (12<<9)
-#define ICONTOG (13<<9)
-#define NUMSLI (14<<9)
-#define COL (15<<9)
-#define IDPOIN (16<<9)
-#define HSVSLI (17<<9)
-#define SCROLL (18<<9)
-#define BLOCK (19<<9)
-#define BUTM (20<<9)
-#define SEPR (21<<9)
-#define LINK (22<<9)
-#define INLINK (23<<9)
-#define KEYEVT (24<<9)
-#define ICONTEXTROW (25<<9)
-#define HSVCUBE (26<<9)
-#define PULLDOWN (27<<9)
-#define ROUNDBOX (28<<9)
-#define CHARTAB (29<<9)
-#define BUT_COLORBAND (30<<9)
-#define BUT_NORMAL (31<<9)
-#define BUT_CURVE (32<<9)
-#define BUT_TOGDUAL (33<<9)
-#define ICONTOGN (34<<9)
-#define FTPREVIEW (35<<9)
-#define NUMABS (36<<9)
-#define TOGBUT (37<<9)
-#define OPTION (38<<9)
-#define OPTIONN (39<<9)
-#define TRACKPREVIEW (40<<9)
- /* buttons with value >= SEARCH_MENU don't get undo pushes */
-#define SEARCH_MENU (41<<9)
-#define BUT_EXTRA (42<<9)
-#define HSVCIRCLE (43<<9)
-#define LISTBOX (44<<9)
-#define LISTROW (45<<9)
-#define HOTKEYEVT (46<<9)
-#define BUT_IMAGE (47<<9)
-#define HISTOGRAM (48<<9)
-#define WAVEFORM (49<<9)
-#define VECTORSCOPE (50<<9)
-#define PROGRESSBAR (51<<9)
-
-#define BUTTYPE (63<<9)
+#define BIT 256
+
+#define BUTPOIN (128 + 64 + 32)
+
+#define BUT (1 << 9)
+#define ROW (2 << 9)
+#define TOG (3 << 9)
+#define SLI (4 << 9)
+#define NUM (5 << 9)
+#define TEX (6 << 9)
+#define TOG3 (7 << 9)
+#define TOGR (8 << 9)
+#define TOGN (9 << 9)
+#define LABEL (10 << 9)
+#define MENU (11 << 9)
+#define ICONROW (12 << 9)
+#define ICONTOG (13 << 9)
+#define NUMSLI (14 << 9)
+#define COL (15 << 9)
+#define IDPOIN (16 << 9)
+#define HSVSLI (17 << 9)
+#define SCROLL (18 << 9)
+#define BLOCK (19 << 9)
+#define BUTM (20 << 9)
+#define SEPR (21 << 9)
+#define LINK (22 << 9)
+#define INLINK (23 << 9)
+#define KEYEVT (24 << 9)
+#define ICONTEXTROW (25 << 9)
+#define HSVCUBE (26 << 9)
+#define PULLDOWN (27 << 9)
+#define ROUNDBOX (28 << 9)
+#define CHARTAB (29 << 9)
+#define BUT_COLORBAND (30 << 9)
+#define BUT_NORMAL (31 << 9)
+#define BUT_CURVE (32 << 9)
+#define BUT_TOGDUAL (33 << 9)
+#define ICONTOGN (34 << 9)
+#define FTPREVIEW (35 << 9)
+#define NUMABS (36 << 9)
+#define TOGBUT (37 << 9)
+#define OPTION (38 << 9)
+#define OPTIONN (39 << 9)
+#define TRACKPREVIEW (40 << 9)
+/* buttons with value >= SEARCH_MENU don't get undo pushes */
+#define SEARCH_MENU (41 << 9)
+#define BUT_EXTRA (42 << 9)
+#define HSVCIRCLE (43 << 9)
+#define LISTBOX (44 << 9)
+#define LISTROW (45 << 9)
+#define HOTKEYEVT (46 << 9)
+#define BUT_IMAGE (47 << 9)
+#define HISTOGRAM (48 << 9)
+#define WAVEFORM (49 << 9)
+#define VECTORSCOPE (50 << 9)
+#define PROGRESSBAR (51 << 9)
+
+#define BUTTYPE (63 << 9)
/* gradient types, for color picker HSVCUBE etc */
-#define UI_GRAD_SV 0
-#define UI_GRAD_HV 1
-#define UI_GRAD_HS 2
-#define UI_GRAD_H 3
-#define UI_GRAD_S 4
-#define UI_GRAD_V 5
+#define UI_GRAD_SV 0
+#define UI_GRAD_HV 1
+#define UI_GRAD_HS 2
+#define UI_GRAD_H 3
+#define UI_GRAD_S 4
+#define UI_GRAD_V 5
-#define UI_GRAD_V_ALT 9
+#define UI_GRAD_V_ALT 9
/* Drawing
*
@@ -275,9 +275,9 @@ void uiDrawBoxShade(int mode, float minx, float miny, float maxx, float maxy, fl
void uiDrawBoxVerticalShade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight);
/* state for scrolldrawing */
-#define UI_SCROLL_PRESSED 1
-#define UI_SCROLL_ARROWS 2
-#define UI_SCROLL_NO_OUTLINE 4
+#define UI_SCROLL_PRESSED 1
+#define UI_SCROLL_ARROWS 2
+#define UI_SCROLL_NO_OUTLINE 4
void uiWidgetScrollDraw(struct uiWidgetColors *wcol, struct rcti *rect, struct rcti *slider, int state);
/* Callbacks
@@ -324,18 +324,18 @@ struct uiLayout *uiPupMenuLayout(uiPopupMenu *head);
void uiPupMenuOkee(struct bContext *C, const char *opname, const char *str, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 3, 4)))
+__attribute__ ((format(printf, 3, 4)))
#endif
;
void uiPupMenuSaveOver(struct bContext *C, struct wmOperator *op, const char *filename);
void uiPupMenuNotice(struct bContext *C, const char *str, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 2, 3)))
+__attribute__ ((format(printf, 2, 3)))
#endif
;
void uiPupMenuError(struct bContext *C, const char *str, ...)
#ifdef __GNUC__
-__attribute__ ((format (printf, 2, 3)))
+__attribute__ ((format(printf, 2, 3)))
#endif
;
void uiPupMenuReports(struct bContext *C, struct ReportList *reports);
@@ -346,7 +346,7 @@ void uiPupMenuInvoke(struct bContext *C, const char *idname); /* popup registere
* Functions used to create popup blocks. These are like popup menus
* but allow using all button types and creating an own layout. */
-typedef uiBlock* (*uiBlockCreateFunc)(struct bContext *C, struct ARegion *ar, void *arg1);
+typedef uiBlock * (*uiBlockCreateFunc)(struct bContext *C, struct ARegion *ar, void *arg1);
typedef void (*uiBlockCancelFunc)(void *arg1);
void uiPupBlock(struct bContext *C, uiBlockCreateFunc func, void *arg);
@@ -391,7 +391,7 @@ void uiBlockEndAlign(uiBlock *block);
/* block bounds/position calculation */
enum {
- UI_BLOCK_BOUNDS=1,
+ UI_BLOCK_BOUNDS = 1,
UI_BLOCK_BOUNDS_TEXT,
UI_BLOCK_BOUNDS_POPUP_MOUSE,
UI_BLOCK_BOUNDS_POPUP_MENU,
@@ -405,30 +405,30 @@ void uiMenuPopupBoundsBlock(uiBlock *block, int addvall, int mx, int my);
void uiCenteredBoundsBlock(uiBlock *block, int addval);
void uiExplicitBoundsBlock(uiBlock *block, int minx, int miny, int maxx, int maxy);
-int uiBlocksGetYMin (struct ListBase *lb);
+int uiBlocksGetYMin(struct ListBase *lb);
-void uiBlockSetDirection (uiBlock *block, int direction);
-void uiBlockFlipOrder (uiBlock *block);
-void uiBlockSetFlag (uiBlock *block, int flag);
-void uiBlockClearFlag (uiBlock *block, int flag);
-void uiBlockSetXOfs (uiBlock *block, int xofs);
+void uiBlockSetDirection(uiBlock *block, int direction);
+void uiBlockFlipOrder(uiBlock *block);
+void uiBlockSetFlag(uiBlock *block, int flag);
+void uiBlockClearFlag(uiBlock *block, int flag);
+void uiBlockSetXOfs(uiBlock *block, int xofs);
-int uiButGetRetVal (uiBut *but);
+int uiButGetRetVal(uiBut *but);
-void uiButSetDragID(uiBut *but, struct ID *id);
-void uiButSetDragRNA(uiBut *but, struct PointerRNA *ptr);
-void uiButSetDragPath(uiBut *but, const char *path);
-void uiButSetDragName(uiBut *but, const char *name);
-void uiButSetDragValue(uiBut *but);
-void uiButSetDragImage(uiBut *but, const char *path, int icon, struct ImBuf *ima, float scale);
+void uiButSetDragID(uiBut *but, struct ID *id);
+void uiButSetDragRNA(uiBut *but, struct PointerRNA *ptr);
+void uiButSetDragPath(uiBut *but, const char *path);
+void uiButSetDragName(uiBut *but, const char *name);
+void uiButSetDragValue(uiBut *but);
+void uiButSetDragImage(uiBut *but, const char *path, int icon, struct ImBuf *ima, float scale);
-int UI_but_active_drop_name(struct bContext *C);
+int UI_but_active_drop_name(struct bContext *C);
-void uiButSetFlag (uiBut *but, int flag);
-void uiButClearFlag (uiBut *but, int flag);
+void uiButSetFlag(uiBut *but, int flag);
+void uiButClearFlag(uiBut *but, int flag);
/* special button case, only draw it when used actively, for outliner etc */
-int uiButActiveOnly (const struct bContext *C, uiBlock *block, uiBut *but);
+int uiButActiveOnly(const struct bContext *C, uiBlock *block, uiBut *but);
/* Buttons
@@ -442,12 +442,12 @@ int uiButActiveOnly (const struct bContext *C, uiBlock *block, uiBut *but);
* - O: operator */
uiBut *uiDefBut(uiBlock *block,
- int type, int retval, const char *str,
- int x1, int y1,
- short x2, short y2,
- void *poin,
- float min, float max,
- float a1, float a2, const char *tip);
+ int type, int retval, const char *str,
+ int x1, int y1,
+ short x2, short y2,
+ void *poin,
+ float min, float max,
+ float a1, float a2, const char *tip);
uiBut *uiDefButF(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefButBitF(uiBlock *block, int type, int bit, int retval, const char *str, int x1, int y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefButI(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, int *poin, float min, float max, float a1, float a2, const char *tip);
@@ -463,12 +463,12 @@ uiBut *uiDefButO_ptr(uiBlock *block, int type, struct wmOperatorType *ot, int op
uiBut *uiDefButTextO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconBut(uiBlock *block,
- int type, int retval, int icon,
- int x1, int y1,
- short x2, short y2,
- void *poin,
- float min, float max,
- float a1, float a2, const char *tip);
+ int type, int retval, int icon,
+ int x1, int y1,
+ short x2, short y2,
+ void *poin,
+ float min, float max,
+ float a1, float a2, const char *tip);
uiBut *uiDefIconButF(uiBlock *block, int type, int retval, int icon, int x1, int y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconButBitF(uiBlock *block, int type, int bit, int retval, int icon, int x1, int y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconButI(uiBlock *block, int type, int retval, int icon, int x1, int y1, short x2, short y2, int *poin, float min, float max, float a1, float a2, const char *tip);
@@ -483,12 +483,12 @@ uiBut *uiDefIconButO(uiBlock *block, int type, const char *opname, int opcontext
uiBut *uiDefIconButO_ptr(uiBlock *block, int type, struct wmOperatorType *ot, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip);
uiBut *uiDefIconTextBut(uiBlock *block,
- int type, int retval, int icon, const char *str,
- int x1, int y1,
- short x2, short y2,
- void *poin,
- float min, float max,
- float a1, float a2, const char *tip);
+ int type, int retval, int icon, const char *str,
+ int x1, int y1,
+ short x2, short y2,
+ void *poin,
+ float min, float max,
+ float a1, float a2, const char *tip);
uiBut *uiDefIconTextButF(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconTextButBitF(uiBlock *block, int type, int bit, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, float *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconTextButI(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, int *poin, float min, float max, float a1, float a2, const char *tip);
@@ -519,25 +519,25 @@ int uiButGetUnitType(uiBut *but);
* - PickerButtons: buttons like the color picker (for code sharing).
* - AutoButR: RNA property button with type automatically defined. */
-#define UI_ID_RENAME 1
-#define UI_ID_BROWSE 2
-#define UI_ID_ADD_NEW 4
-#define UI_ID_OPEN 8
-#define UI_ID_ALONE 16
-#define UI_ID_DELETE 32
-#define UI_ID_LOCAL 64
-#define UI_ID_AUTO_NAME 128
-#define UI_ID_FAKE_USER 256
-#define UI_ID_PIN 512
-#define UI_ID_BROWSE_RENDER 1024
-#define UI_ID_PREVIEWS 2048
-#define UI_ID_FULL (UI_ID_RENAME|UI_ID_BROWSE|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_ALONE|UI_ID_DELETE|UI_ID_LOCAL)
+#define UI_ID_RENAME 1
+#define UI_ID_BROWSE 2
+#define UI_ID_ADD_NEW 4
+#define UI_ID_OPEN 8
+#define UI_ID_ALONE 16
+#define UI_ID_DELETE 32
+#define UI_ID_LOCAL 64
+#define UI_ID_AUTO_NAME 128
+#define UI_ID_FAKE_USER 256
+#define UI_ID_PIN 512
+#define UI_ID_BROWSE_RENDER 1024
+#define UI_ID_PREVIEWS 2048
+#define UI_ID_FULL (UI_ID_RENAME | UI_ID_BROWSE | UI_ID_ADD_NEW | UI_ID_OPEN | UI_ID_ALONE | UI_ID_DELETE | UI_ID_LOCAL)
typedef void (*uiIDPoinFuncFP)(struct bContext *C, const char *str, struct ID **idpp);
typedef void (*uiIDPoinFunc)(struct bContext *C, struct ID *id, int event);
uiBut *uiDefIDPoinBut(uiBlock *block, uiIDPoinFuncFP func, short blocktype, int retval, const char *str,
- int x1, int y1, short x2, short y2, void *idpp, const char *tip);
+ int x1, int y1, short x2, short y2, void *idpp, const char *tip);
int uiIconFromID(struct ID *id);
@@ -570,27 +570,27 @@ void uiSetButLink(struct uiBut *but, void **poin, void ***ppoin, short *tot,
void uiComposeLinks(uiBlock *block);
uiBut *uiFindInlink(uiBlock *block, void *poin);
- /* use inside searchfunc to add items */
-int uiSearchItemAdd(uiSearchItems *items, const char *name, void *poin, int iconid);
- /* bfunc gets search item *poin as arg2, or if NULL the old string */
-void uiButSetSearchFunc (uiBut *but, uiButSearchFunc sfunc, void *arg1, uiButHandleFunc bfunc, void *active);
- /* height in pixels, it's using hardcoded values still */
-int uiSearchBoxhHeight(void);
+/* use inside searchfunc to add items */
+int uiSearchItemAdd(uiSearchItems *items, const char *name, void *poin, int iconid);
+/* bfunc gets search item *poin as arg2, or if NULL the old string */
+void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg1, uiButHandleFunc bfunc, void *active);
+/* height in pixels, it's using hardcoded values still */
+int uiSearchBoxhHeight(void);
-void uiBlockSetHandleFunc(uiBlock *block, uiBlockHandleFunc func, void *arg);
-void uiBlockSetButmFunc (uiBlock *block, uiMenuHandleFunc func, void *arg);
-void uiBlockSetFunc (uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2);
-void uiBlockSetNFunc (uiBlock *block, uiButHandleFunc func, void *argN, void *arg2);
+void uiBlockSetHandleFunc(uiBlock *block, uiBlockHandleFunc func, void *arg);
+void uiBlockSetButmFunc(uiBlock *block, uiMenuHandleFunc func, void *arg);
+void uiBlockSetFunc(uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2);
+void uiBlockSetNFunc(uiBlock *block, uiButHandleFunc func, void *argN, void *arg2);
-void uiButSetRenameFunc (uiBut *but, uiButHandleRenameFunc func, void *arg1);
-void uiButSetFunc (uiBut *but, uiButHandleFunc func, void *arg1, void *arg2);
-void uiButSetNFunc (uiBut *but, uiButHandleNFunc func, void *argN, void *arg2);
+void uiButSetRenameFunc(uiBut *but, uiButHandleRenameFunc func, void *arg1);
+void uiButSetFunc(uiBut *but, uiButHandleFunc func, void *arg1, void *arg2);
+void uiButSetNFunc(uiBut *but, uiButHandleNFunc func, void *argN, void *arg2);
-void uiButSetCompleteFunc(uiBut *but, uiButCompleteFunc func, void *arg);
+void uiButSetCompleteFunc(uiBut *but, uiButCompleteFunc func, void *arg);
-void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct bContext *C, void *, void *, void *, struct rcti *rect), void *arg1, void *arg2);
+void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct bContext *C, void *, void *, void *, struct rcti *rect), void *arg1, void *arg2);
-void uiButSetFocusOnEnter (struct wmWindow *win, uiBut *but);
+void uiButSetFocusOnEnter(struct wmWindow *win, uiBut *but);
/* Autocomplete
*
@@ -648,31 +648,31 @@ void UI_exit(void);
* uiBlockCurLayout. */
/* layout */
-#define UI_LAYOUT_HORIZONTAL 0
-#define UI_LAYOUT_VERTICAL 1
-
-#define UI_LAYOUT_PANEL 0
-#define UI_LAYOUT_HEADER 1
-#define UI_LAYOUT_MENU 2
-#define UI_LAYOUT_TOOLBAR 3
-
-#define UI_UNIT_X U.widget_unit
-#define UI_UNIT_Y U.widget_unit
-
-#define UI_LAYOUT_ALIGN_EXPAND 0
-#define UI_LAYOUT_ALIGN_LEFT 1
-#define UI_LAYOUT_ALIGN_CENTER 2
-#define UI_LAYOUT_ALIGN_RIGHT 3
-
-#define UI_ITEM_O_RETURN_PROPS 1
-#define UI_ITEM_R_EXPAND 2
-#define UI_ITEM_R_SLIDER 4
-#define UI_ITEM_R_TOGGLE 8
-#define UI_ITEM_R_ICON_ONLY 16
-#define UI_ITEM_R_EVENT 32
-#define UI_ITEM_R_FULL_EVENT 64
-#define UI_ITEM_R_NO_BG 128
-#define UI_ITEM_R_IMMEDIATE 256
+#define UI_LAYOUT_HORIZONTAL 0
+#define UI_LAYOUT_VERTICAL 1
+
+#define UI_LAYOUT_PANEL 0
+#define UI_LAYOUT_HEADER 1
+#define UI_LAYOUT_MENU 2
+#define UI_LAYOUT_TOOLBAR 3
+
+#define UI_UNIT_X U.widget_unit
+#define UI_UNIT_Y U.widget_unit
+
+#define UI_LAYOUT_ALIGN_EXPAND 0
+#define UI_LAYOUT_ALIGN_LEFT 1
+#define UI_LAYOUT_ALIGN_CENTER 2
+#define UI_LAYOUT_ALIGN_RIGHT 3
+
+#define UI_ITEM_O_RETURN_PROPS 1
+#define UI_ITEM_R_EXPAND 2
+#define UI_ITEM_R_SLIDER 4
+#define UI_ITEM_R_TOGGLE 8
+#define UI_ITEM_R_ICON_ONLY 16
+#define UI_ITEM_R_EVENT 32
+#define UI_ITEM_R_FULL_EVENT 64
+#define UI_ITEM_R_NO_BG 128
+#define UI_ITEM_R_IMMEDIATE 256
/* uiLayoutOperatorButs flags */
#define UI_LAYOUT_OP_SHOW_TITLE 1
@@ -685,13 +685,13 @@ void UI_exit(void);
* 8------4 */
enum {
- UI_CNR_TOP_LEFT= 1,
- UI_CNR_TOP_RIGHT= 2,
- UI_CNR_BOTTOM_RIGHT= 4,
- UI_CNR_BOTTOM_LEFT= 8,
+ UI_CNR_TOP_LEFT = 1,
+ UI_CNR_TOP_RIGHT = 2,
+ UI_CNR_BOTTOM_RIGHT = 4,
+ UI_CNR_BOTTOM_LEFT = 8,
/* just for convenience */
- UI_CNR_NONE= 0,
- UI_CNR_ALL= (UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT | UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT)
+ UI_CNR_NONE = 0,
+ UI_CNR_ALL = (UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT | UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT)
};
/* not apart of the corner flags but mixed in some functions */
@@ -735,7 +735,7 @@ uiLayout *uiLayoutColumn(uiLayout *layout, int align);
uiLayout *uiLayoutColumnFlow(uiLayout *layout, int number, int align);
uiLayout *uiLayoutBox(uiLayout *layout);
uiLayout *uiLayoutListBox(uiLayout *layout, struct PointerRNA *ptr, struct PropertyRNA *prop,
- struct PointerRNA *actptr, struct PropertyRNA *actprop);
+ struct PointerRNA *actptr, struct PropertyRNA *actprop);
uiLayout *uiLayoutAbsolute(uiLayout *layout, int align);
uiLayout *uiLayoutSplit(uiLayout *layout, float percentage, int align);
uiLayout *uiLayoutOverlap(uiLayout *layout);
@@ -746,15 +746,15 @@ uiBlock *uiLayoutAbsoluteBlock(uiLayout *layout);
void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus);
void uiTemplateDopeSheetFilter(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname,
- const char *newop, const char *openop, const char *unlinkop);
+ const char *newop, const char *openop, const char *unlinkop);
void uiTemplateIDBrowse(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname,
const char *newop, const char *openop, const char *unlinkop);
void uiTemplateIDPreview(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname,
- const char *newop, const char *openop, const char *unlinkop, int rows, int cols);
+ const char *newop, const char *openop, const char *unlinkop, int rows, int cols);
void uiTemplateAnyID(uiLayout *layout, struct PointerRNA *ptr, const char *propname,
- const char *proptypename, const char *text);
+ const char *proptypename, const char *text);
void uiTemplatePathBuilder(uiLayout *layout, struct PointerRNA *ptr, const char *propname,
- struct PointerRNA *root_ptr, const char *text);
+ struct PointerRNA *root_ptr, const char *text);
uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
void uiTemplatePreview(uiLayout *layout, struct ID *id, int show_buttons, struct ID *parent, struct MTex *slot);
@@ -835,14 +835,14 @@ void uiIDContextProperty(struct bContext *C, struct PointerRNA *ptr, struct Prop
/* Styled text draw */
void uiStyleFontSet(struct uiFontStyle *fs);
void uiStyleFontDrawExt(struct uiFontStyle *fs, struct rcti *rect, const char *str,
- float *r_xofs, float *r_yofs);
+ float *r_xofs, float *r_yofs);
void uiStyleFontDraw(struct uiFontStyle *fs, struct rcti *rect, const char *str);
void uiStyleFontDrawRotated(struct uiFontStyle *fs, struct rcti *rect, const char *str);
int UI_GetStringWidth(const char *str); // XXX temp
void UI_DrawString(float x, float y, const char *str); // XXX temp
void UI_DrawTriIcon(float x, float y, char dir);
-uiStyle* UI_GetStyle(void);
+uiStyle *UI_GetStyle(void);
/* linker workaround ack! */
void UI_template_fix_linking(void);
diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h
index 2f4c2549cf3..aa94bdec724 100644
--- a/source/blender/editors/include/UI_interface_icons.h
+++ b/source/blender/editors/include/UI_interface_icons.h
@@ -41,12 +41,12 @@ struct Material;
typedef struct IconFile {
struct IconFile *next, *prev;
- char filename[256]; // FILE_MAXFILE size
+ char filename[256]; /* FILE_MAXFILE size */
int index;
} IconFile;
#define ICON_DEFAULT_HEIGHT 16
-#define ICON_DEFAULT_WIDTH 16
+#define ICON_DEFAULT_WIDTH 16
#define ICON_DEFAULT_HEIGHT_SCALE ((int)(UI_UNIT_Y * 0.8f))
#define ICON_DEFAULT_WIDTH_SCALE ((int)(UI_UNIT_X * 0.8f))
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index cd037681eb5..a83797db432 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -43,7 +43,7 @@ typedef enum {
BIFICONID_LAST
} BIFIconID;
-#define BIFICONID_FIRST (ICON_NONE)
+#define BIFICONID_FIRST (ICON_NONE)
#undef DEF_ICON
#undef DEF_VICO
@@ -197,11 +197,11 @@ enum {
TH_STITCH_PREVIEW_UNSTITCHABLE,
TH_STITCH_PREVIEW_ACTIVE,
- TH_MATCH, /* highlight color for search matches */
- TH_SELECT_HIGHLIGHT, /* highlight color for selected outliner item */
-
TH_FREESTYLE_EDGE_MARK,
- TH_FREESTYLE_FACE_MARK
+ TH_FREESTYLE_FACE_MARK,
+
+ TH_MATCH, /* highlight color for search matches */
+ TH_SELECT_HIGHLIGHT /* highlight color for selected outliner item */
};
/* XXX WARNING: previous is saved in file, so do not change order! */
@@ -213,59 +213,59 @@ struct PointerRNA;
// THE CODERS API FOR THEMES:
// sets the color
-void UI_ThemeColor(int colorid);
+void UI_ThemeColor(int colorid);
// sets the color plus alpha
-void UI_ThemeColor4(int colorid);
+void UI_ThemeColor4(int colorid);
// sets color plus offset for shade
-void UI_ThemeColorShade(int colorid, int offset);
+void UI_ThemeColorShade(int colorid, int offset);
// sets color plus offset for alpha
-void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset);
+void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset);
// sets color, which is blend between two theme colors
-void UI_ThemeColorBlend(int colorid1, int colorid2, float fac);
+void UI_ThemeColorBlend(int colorid1, int colorid2, float fac);
// same, with shade offset
void UI_ThemeColorBlendShade(int colorid1, int colorid2, float fac, int offset);
-void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int offset, int alphaoffset);
+void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int offset, int alphaoffset);
// returns one value, not scaled
-float UI_GetThemeValuef(int colorid);
-int UI_GetThemeValue(int colorid);
+float UI_GetThemeValuef(int colorid);
+int UI_GetThemeValue(int colorid);
// get three color values, scaled to 0.0-1.0 range
-void UI_GetThemeColor3fv(int colorid, float *col);
+void UI_GetThemeColor3fv(int colorid, float *col);
// get the color, range 0.0-1.0, complete with shading offset
-void UI_GetThemeColorShade3fv(int colorid, int offset, float *col);
+void UI_GetThemeColorShade3fv(int colorid, int offset, float *col);
// get the 3 or 4 byte values
-void UI_GetThemeColor3ubv(int colorid, unsigned char col[3]);
-void UI_GetThemeColor4ubv(int colorid, unsigned char col[4]);
+void UI_GetThemeColor3ubv(int colorid, unsigned char col[3]);
+void UI_GetThemeColor4ubv(int colorid, unsigned char col[4]);
// get a theme color from specified space type
-void UI_GetThemeColorType4ubv(int colorid, int spacetype, char col[4]);
+void UI_GetThemeColorType4ubv(int colorid, int spacetype, char col[4]);
// blends and shades between two color pointers
-void UI_ColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char cp2[3], float fac, int offset);
+void UI_ColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char cp2[3], float fac, int offset);
// shade a 3 byte color (same as UI_GetColorPtrBlendShade3ubv with 0.0 factor)
-void UI_GetColorPtrShade3ubv(const unsigned char cp1[3], unsigned char col[3], int offset);
+void UI_GetColorPtrShade3ubv(const unsigned char cp1[3], unsigned char col[3], int offset);
// get a 3 byte color, blended and shaded between two other char color pointers
-void UI_GetColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char cp2[3], unsigned char col[3], float fac, int offset);
+void UI_GetColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char cp2[3], unsigned char col[3], float fac, int offset);
// clear the openGL ClearColor using the input colorid
-void UI_ThemeClearColor(int colorid);
+void UI_ThemeClearColor(int colorid);
// internal (blender) usage only, for init and set active
-void UI_SetTheme(int spacetype, int regionid);
+void UI_SetTheme(int spacetype, int regionid);
// get current theme
struct bTheme *UI_GetTheme(void);
/* only for buttons in theme editor! */
-const unsigned char *UI_ThemeGetColorPtr(struct bTheme *btheme, int spacetype, int colorid);
+const unsigned char *UI_ThemeGetColorPtr(struct bTheme *btheme, int spacetype, int colorid);
void UI_make_axis_color(const unsigned char *src_col, unsigned char *dst_col, const char axis);
diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h
index 436f268d1bf..469388219d6 100644
--- a/source/blender/editors/include/UI_view2d.h
+++ b/source/blender/editors/include/UI_view2d.h
@@ -35,12 +35,12 @@
#define __UI_VIEW2D_H__
/* ------------------------------------------ */
-/* Settings and Defines: */
+/* Settings and Defines: */
/* ---- General Defines ---- */
/* generic value to use when coordinate lies out of view when converting */
-#define V2D_IS_CLIPPED 12000
+#define V2D_IS_CLIPPED 12000
/* Common View2D view types
* NOTE: only define a type here if it completely sets all (+/- a few) of the relevant flags
@@ -48,24 +48,24 @@
* than one specific place
*/
enum {
- /* custom view type (region has defined all necessary flags already) */
+ /* custom view type (region has defined all necessary flags already) */
V2D_COMMONVIEW_CUSTOM = -1,
- /* standard (only use this when setting up a new view, as a sensible base for most settings) */
+ /* standard (only use this when setting up a new view, as a sensible base for most settings) */
V2D_COMMONVIEW_STANDARD,
- /* listview (i.e. Outliner) */
+ /* listview (i.e. Outliner) */
V2D_COMMONVIEW_LIST,
- /* stackview (this is basically a list where new items are added at the top) */
+ /* stackview (this is basically a list where new items are added at the top) */
V2D_COMMONVIEW_STACK,
- /* headers (this is basically the same as listview, but no y-panning) */
+ /* headers (this is basically the same as listview, but no y-panning) */
V2D_COMMONVIEW_HEADER,
- /* ui region containing panels */
+ /* ui region containing panels */
V2D_COMMONVIEW_PANELS_UI
} eView2D_CommonViewTypes;
/* ---- Defines for Scroller/Grid Arguments ----- */
/* 'dummy' argument to pass when argument is irrelevant */
-#define V2D_ARG_DUMMY -1
+#define V2D_ARG_DUMMY -1
/* Grid units */
enum {
@@ -89,31 +89,31 @@ enum {
/* flags for grid-lines to draw */
enum {
- V2D_HORIZONTAL_LINES = (1<<0),
- V2D_VERTICAL_LINES = (1<<1),
- V2D_HORIZONTAL_AXIS = (1<<2),
- V2D_VERTICAL_AXIS = (1<<3),
- V2D_HORIZONTAL_FINELINES = (1<<4),
+ V2D_HORIZONTAL_LINES = (1 << 0),
+ V2D_VERTICAL_LINES = (1 << 1),
+ V2D_HORIZONTAL_AXIS = (1 << 2),
+ V2D_VERTICAL_AXIS = (1 << 3),
+ V2D_HORIZONTAL_FINELINES = (1 << 4),
- V2D_GRIDLINES_MAJOR = (V2D_VERTICAL_LINES|V2D_VERTICAL_AXIS|V2D_HORIZONTAL_LINES|V2D_HORIZONTAL_AXIS),
- V2D_GRIDLINES_ALL = (V2D_GRIDLINES_MAJOR|V2D_HORIZONTAL_FINELINES),
+ V2D_GRIDLINES_MAJOR = (V2D_VERTICAL_LINES | V2D_VERTICAL_AXIS | V2D_HORIZONTAL_LINES | V2D_HORIZONTAL_AXIS),
+ V2D_GRIDLINES_ALL = (V2D_GRIDLINES_MAJOR | V2D_HORIZONTAL_FINELINES),
} eView2D_Gridlines;
/* ------ Defines for Scrollers ----- */
/* scroller area */
-#define V2D_SCROLL_HEIGHT 17
-#define V2D_SCROLL_WIDTH 17
+#define V2D_SCROLL_HEIGHT 17
+#define V2D_SCROLL_WIDTH 17
/* scroller 'handles' hotspot radius for mouse */
-#define V2D_SCROLLER_HANDLE_SIZE 12
+#define V2D_SCROLLER_HANDLE_SIZE 12
/* ------ Define for UI_view2d_sync ----- */
/* means copy it from another v2d */
-#define V2D_LOCK_SET 0
+#define V2D_LOCK_SET 0
/* means copy it to the other v2ds */
-#define V2D_LOCK_COPY 1
+#define V2D_LOCK_COPY 1
/* ------------------------------------------ */
@@ -124,7 +124,7 @@ enum {
#define IN_2D_HORIZ_SCROLL(v2d, co) (BLI_in_rcti(&v2d->hor, co[0], co[1]))
/* ------------------------------------------ */
-/* Type definitions: */
+/* Type definitions: */
struct View2D;
struct View2DGrid;
@@ -141,7 +141,7 @@ typedef struct View2DGrid View2DGrid;
typedef struct View2DScrollers View2DScrollers;
/* ----------------------------------------- */
-/* Prototypes: */
+/* Prototypes: */
/* refresh and validation (of view rects) */
void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy);
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 8c5913e23fb..2f9e763a7d0 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -252,7 +252,8 @@ void uiDrawBoxShade(int mode, float minx, float miny, float maxx, float maxy, fl
/* linear vertical shade within button or in outline */
/* view2d scrollers use it */
-void uiDrawBoxVerticalShade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight)
+void uiDrawBoxVerticalShade(int mode, float minx, float miny, float maxx, float maxy,
+ float rad, float shadeLeft, float shadeRight)
{
float vec[7][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
@@ -656,7 +657,8 @@ static void draw_scope_end(rctf *rect, GLint *scissor)
uiDrawBox(GL_LINE_LOOP, rect->xmin - 1, rect->ymin, rect->xmax + 1, rect->ymax + 1, 3.0f);
}
-static void histogram_draw_one(float r, float g, float b, float alpha, float x, float y, float w, float h, float *data, int res)
+static void histogram_draw_one(float r, float g, float b, float alpha,
+ float x, float y, float w, float h, float *data, int res)
{
int i;
@@ -716,7 +718,10 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
/* need scissor test, histogram can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
- glScissor(ar->winrct.xmin + (rect.xmin - 1), ar->winrct.ymin + (rect.ymin - 1), (rect.xmax + 1) - (rect.xmin - 1), (rect.ymax + 1) - (rect.ymin - 1));
+ glScissor(ar->winrct.xmin + (rect.xmin - 1),
+ ar->winrct.ymin + (rect.ymin - 1),
+ (rect.xmax + 1) - (rect.xmin - 1),
+ (rect.ymax + 1) - (rect.ymin - 1));
glColor4f(1.f, 1.f, 1.f, 0.08f);
/* draw grid lines here */
@@ -786,7 +791,10 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol),
/* need scissor test, waveform can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
- glScissor(ar->winrct.xmin + (rect.xmin - 1), ar->winrct.ymin + (rect.ymin - 1), (rect.xmax + 1) - (rect.xmin - 1), (rect.ymax + 1) - (rect.ymin - 1));
+ glScissor(ar->winrct.xmin + (rect.xmin - 1),
+ ar->winrct.ymin + (rect.ymin - 1),
+ (rect.xmax + 1) - (rect.xmin - 1),
+ (rect.ymax + 1) - (rect.ymin - 1));
glColor4f(1.f, 1.f, 1.f, 0.08f);
/* draw grid lines here */
@@ -851,7 +859,12 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol),
}
/* RGB / YCC (3 channels) */
- else if (ELEM4(scopes->wavefrm_mode, SCOPES_WAVEFRM_RGB, SCOPES_WAVEFRM_YCC_601, SCOPES_WAVEFRM_YCC_709, SCOPES_WAVEFRM_YCC_JPEG)) {
+ else if (ELEM4(scopes->wavefrm_mode,
+ SCOPES_WAVEFRM_RGB,
+ SCOPES_WAVEFRM_YCC_601,
+ SCOPES_WAVEFRM_YCC_709,
+ SCOPES_WAVEFRM_YCC_JPEG))
+ {
int rgb = (scopes->wavefrm_mode == SCOPES_WAVEFRM_RGB);
glBlendFunc(GL_ONE, GL_ONE);
@@ -996,7 +1009,10 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wco
/* need scissor test, hvectorscope can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
- glScissor(ar->winrct.xmin + (rect.xmin - 1), ar->winrct.ymin + (rect.ymin - 1), (rect.xmax + 1) - (rect.xmin - 1), (rect.ymax + 1) - (rect.ymin - 1));
+ glScissor(ar->winrct.xmin + (rect.xmin - 1),
+ ar->winrct.ymin + (rect.ymin - 1),
+ (rect.xmax + 1) - (rect.xmin - 1),
+ (rect.ymax + 1) - (rect.ymin - 1));
glColor4f(1.f, 1.f, 1.f, 0.08f);
/* draw grid elements */
@@ -1507,7 +1523,10 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wc
/* need scissor test, preview image can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
- glScissor(ar->winrct.xmin + (rect.xmin - 1), ar->winrct.ymin + (rect.ymin - 1), (rect.xmax + 1) - (rect.xmin - 1), (rect.ymax + 1) - (rect.ymin - 1));
+ glScissor(ar->winrct.xmin + (rect.xmin - 1),
+ ar->winrct.ymin + (rect.ymin - 1),
+ (rect.xmax + 1) - (rect.xmin - 1),
+ (rect.ymax + 1) - (rect.ymin - 1));
if (scopes->track_disabled) {
glColor4f(0.7f, 0.3f, 0.3f, 0.3f);
@@ -1550,7 +1569,10 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wc
/* draw cross for pizel position */
glTranslatef(off_x + rect.xmin + track_pos[0] * zoomx, off_y + rect.ymin + track_pos[1] * zoomy, 0.f);
- glScissor(ar->winrct.xmin + rect.xmin, ar->winrct.ymin + rect.ymin, rect.xmax - rect.xmin, rect.ymax - rect.ymin);
+ glScissor(ar->winrct.xmin + rect.xmin,
+ ar->winrct.ymin + rect.ymin,
+ rect.xmax - rect.xmin,
+ rect.ymax - rect.ymin);
for (a = 0; a < 2; a++) {
if (a == 1) {
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 94ebdb7c0b9..8b0c3ecfcf3 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -286,7 +286,9 @@ static void ui_apply_but_func(bContext *C, uiBut *but)
* handling is done, i.e. menus are closed, in order to avoid conflicts
* with these functions removing the buttons we are working with */
- if (but->func || but->funcN || block->handle_func || but->rename_func || (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop) {
+ if (but->func || but->funcN || block->handle_func || but->rename_func ||
+ (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop)
+ {
after = MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc");
if (but->func && ELEM(but, but->func_arg1, but->func_arg2)) {
@@ -4553,7 +4555,8 @@ static int ui_but_menu(bContext *C, uiBut *but)
PointerRNA ptr_props;
if (but->rnapoin.data && but->rnaprop) {
- BLI_snprintf(buf, sizeof(buf), "%s.%s", RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop));
+ BLI_snprintf(buf, sizeof(buf), "%s.%s",
+ RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop));
WM_operator_properties_create(&ptr_props, "WM_OT_doc_view");
RNA_string_set(&ptr_props, "doc_id", buf);
@@ -5128,8 +5131,10 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s
WM_event_add_ui_handler(C, &data->window->modalhandlers, ui_handler_region_menu, NULL, data);
}
else {
- if (button_modal_state(data->state))
- WM_event_remove_ui_handler(&data->window->modalhandlers, ui_handler_region_menu, NULL, data, 1); /* 1 = postpone free */
+ if (button_modal_state(data->state)) {
+ /* TRUE = postpone free */
+ WM_event_remove_ui_handler(&data->window->modalhandlers, ui_handler_region_menu, NULL, data, TRUE);
+ }
}
}
@@ -6548,7 +6553,7 @@ static void ui_handler_remove_popup(bContext *C, void *userdata)
void UI_add_region_handlers(ListBase *handlers)
{
- WM_event_remove_ui_handler(handlers, ui_handler_region, ui_handler_remove_region, NULL, 0);
+ WM_event_remove_ui_handler(handlers, ui_handler_region, ui_handler_remove_region, NULL, FALSE);
WM_event_add_ui_handler(NULL, handlers, ui_handler_region, ui_handler_remove_region, NULL);
}
@@ -6559,7 +6564,7 @@ void UI_add_popup_handlers(bContext *C, ListBase *handlers, uiPopupBlockHandle *
void UI_remove_popup_handlers(ListBase *handlers, uiPopupBlockHandle *popup)
{
- WM_event_remove_ui_handler(handlers, ui_handler_popup, ui_handler_remove_popup, popup, 0);
+ WM_event_remove_ui_handler(handlers, ui_handler_popup, ui_handler_remove_popup, popup, FALSE);
}
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index e9186aff666..385f74acbd2 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -533,7 +533,8 @@ static void init_internal_icons(void)
}
}
if (bbuf == NULL)
- bbuf = IMB_ibImageFromMemory((unsigned char *)datatoc_blender_icons_png, datatoc_blender_icons_png_size, IB_rect, "<blender icons>");
+ bbuf = IMB_ibImageFromMemory((unsigned char *)datatoc_blender_icons_png,
+ datatoc_blender_icons_png_size, IB_rect, "<blender icons>");
if (bbuf) {
/* free existing texture if any */
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 9e073055fc3..2c4ec9ac482 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -428,7 +428,8 @@ void ui_but_search_test(uiBut *but);
typedef uiBlock * (*uiBlockHandleCreateFunc)(struct bContext *C, struct uiPopupBlockHandle *handle, void *arg1);
uiPopupBlockHandle *ui_popup_block_create(struct bContext *C, struct ARegion *butregion, uiBut *but,
- uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func, void *arg);
+ uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func,
+ void *arg);
uiPopupBlockHandle *ui_popup_menu_create(struct bContext *C, struct ARegion *butregion, uiBut *but,
uiMenuCreateFunc create_func, void *arg, char *str);
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 6d2ac388374..f2a43580fd8 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -589,9 +589,7 @@ static void ui_editsource_active_but_set(uiBut *but)
ui_editsource_info = MEM_callocN(sizeof(uiEditSourceStore), __func__);
memcpy(&ui_editsource_info->but_orig, but, sizeof(uiBut));
- ui_editsource_info->hash = BLI_ghash_new(BLI_ghashutil_ptrhash,
- BLI_ghashutil_ptrcmp,
- __func__);
+ ui_editsource_info->hash = BLI_ghash_ptr_new(__func__);
}
static void ui_editsource_active_but_clear(void)
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 0be1761eaf5..dc2c3b4eea9 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -1253,7 +1253,8 @@ static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelStat
if (data && data->state != PANEL_STATE_ANIMATION) {
/* XXX:
* - the panel tabbing function call below (test_add_new_tabs()) has been commented out
- * "It is too easy to do by accident when reordering panels, is very hard to control and use, and has no real benefit." - BillRey
+ * "It is too easy to do by accident when reordering panels,
+ * is very hard to control and use, and has no real benefit." - BillRey
* Aligorith, 2009Sep
*/
//test_add_new_tabs(ar); // also copies locations of tabs in dragged panel
@@ -1274,7 +1275,7 @@ static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelStat
MEM_freeN(data);
pa->activedata = NULL;
- WM_event_remove_ui_handler(&win->modalhandlers, ui_handler_panel, ui_handler_remove_panel, pa, 0);
+ WM_event_remove_ui_handler(&win->modalhandlers, ui_handler_panel, ui_handler_remove_panel, pa, FALSE);
}
else {
if (!data) {
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index 9bcda7d86ed..a36b2dd2c45 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -429,7 +429,8 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
/* create tooltip data */
data = MEM_callocN(sizeof(uiTooltipData), "uiTooltipData");
- /* special case, enum rna buttons only have enum item description, use general enum description too before the specific one */
+ /* special case, enum rna buttons only have enum item description,
+ * use general enum description too before the specific one */
if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_ENUM) {
const char *descr = RNA_property_description(but->rnaprop);
if (descr && descr[0]) {
@@ -448,7 +449,8 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
for (i = 0; i < totitem; i++) {
if (item[i].identifier[0] && item[i].value == value) {
if (item[i].description && item[i].description[0]) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "%s: %s", item[i].name, item[i].description);
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "%s: %s",
+ item[i].name, item[i].description);
data->color_id[data->totline] = UI_TIP_LC_SUBMENU;
data->totline++;
}
@@ -496,7 +498,9 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
if (unit_type == PROP_UNIT_ROTATION) {
if (RNA_property_type(but->rnaprop) == PROP_FLOAT) {
- float value = RNA_property_array_check(but->rnaprop) ? RNA_property_float_get_index(&but->rnapoin, but->rnaprop, but->rnaindex) : RNA_property_float_get(&but->rnapoin, but->rnaprop);
+ float value = RNA_property_array_check(but->rnaprop) ?
+ RNA_property_float_get_index(&but->rnapoin, but->rnaprop, but->rnaindex) :
+ RNA_property_float_get(&but->rnapoin, but->rnaprop);
BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_("Radians: %f"), value);
data->color_id[data->totline] = UI_TIP_LC_NORMAL;
data->totline++;
@@ -514,7 +518,8 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
/* rna info */
if ((U.flag & USER_TOOLTIPS_PYTHON) == 0) {
- BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_("Python: %s.%s"), RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop));
+ BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), TIP_("Python: %s.%s"),
+ RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop));
data->color_id[data->totline] = UI_TIP_LC_PYTHON;
data->totline++;
}
@@ -1553,7 +1558,9 @@ void ui_popup_block_scrolltest(uiBlock *block)
}
}
-uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut *but, uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func, void *arg)
+uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut *but,
+ uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func,
+ void *arg)
{
wmWindow *window = CTX_wm_window(C);
static ARegionType type;
@@ -1881,7 +1888,8 @@ static void ui_update_block_buts_rgb(uiBlock *block, const float rgb[3])
if (rgb_gamma[1] > 1.0f) rgb_gamma[1] = modf(rgb_gamma[1], &intpart);
if (rgb_gamma[2] > 1.0f) rgb_gamma[2] = modf(rgb_gamma[2], &intpart);
- BLI_snprintf(col, sizeof(col), "%02X%02X%02X", FTOCHAR(rgb_gamma[0]), FTOCHAR(rgb_gamma[1]), FTOCHAR(rgb_gamma[2]));
+ BLI_snprintf(col, sizeof(col), "%02X%02X%02X",
+ FTOCHAR(rgb_gamma[0]), FTOCHAR(rgb_gamma[1]), FTOCHAR(rgb_gamma[2]));
strcpy(bt->poin, col);
}
@@ -2382,7 +2390,8 @@ static uiBlock *ui_block_func_POPUP(bContext *C, uiPopupBlockHandle *handle, voi
return pup->block;
}
-uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg, char *str)
+uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut *but,
+ uiMenuCreateFunc menu_func, void *arg, char *str)
{
wmWindow *window = CTX_wm_window(C);
uiStyle *style = UI_GetStyle();
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index 5f6384d6b24..63704f5b8e6 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -427,7 +427,7 @@ int paintface_minmax(Object *ob, float r_min[3], float r_max[3])
copy_v3_v3(vec, (mvert[ml->v].co));
mul_m3_v3(bmat, vec);
add_v3_v3v3(vec, vec, ob->obmat[3]);
- DO_MINMAX(vec, r_min, r_max);
+ minmax_v3v3_v3(r_min, r_max, vec);
}
ok = TRUE;
diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c
index 6d740812f27..16948a2372d 100644
--- a/source/blender/editors/mesh/editmesh_bvh.c
+++ b/source/blender/editors/mesh/editmesh_bvh.c
@@ -201,12 +201,13 @@ void BMBVH_FreeBVH(BMBVHTree *tree)
}
/* taken from bvhutils.c */
-static float ray_tri_intersection(const BVHTreeRay *ray, const float UNUSED(m_dist), float *v0,
- float *v1, float *v2, float *uv, float UNUSED(e))
+static float ray_tri_intersection(const BVHTreeRay *ray, const float UNUSED(m_dist),
+ const float v0[3], const float v1[3], const float v2[3],
+ float r_uv[2], float UNUSED(e))
{
float dist;
- if (isect_ray_tri_v3((float *)ray->origin, (float *)ray->direction, v0, v1, v2, &dist, uv)) {
+ if (isect_ray_tri_v3((float *)ray->origin, (float *)ray->direction, v0, v1, v2, &dist, r_uv)) {
return dist;
}
@@ -343,7 +344,7 @@ BMVert *BMBVH_FindClosestVert(BMBVHTree *tree, float *co, float maxdist)
/* UNUSED */
#if 0
-static short winding(float *v1, float *v2, float *v3)
+static short winding(const float v1[3], const float v2[3], const float v3[3])
/* is v3 to the right of (v1 - v2) ? With exception: v3 == v1 || v3 == v2 */
{
double inp;
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index 5a99ddb9332..a9ec893adb7 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -1866,8 +1866,8 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd)
for (i = 0; i < totface; i++) {
SmallHash *hash = &shash;
- ScanFillFace *efa;
- ScanFillVert *eve, *lasteve;
+ ScanFillFace *sf_tri;
+ ScanFillVert *sf_vert, *sf_vert_last;
int j;
float rndscale = FLT_EPSILON * 25;
@@ -1881,55 +1881,55 @@ static void knifenet_fill_faces(KnifeTool_OpData *kcd)
for (entry = face_nets[i].first; entry; entry = entry->next) {
if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v1)) {
- eve = BLI_scanfill_vert_add(&sf_ctx, entry->kfe->v1->v->co);
- eve->poly_nr = 0;
- rnd_offset_co(eve->co, rndscale);
- eve->tmp.p = entry->kfe->v1->v;
- BLI_smallhash_insert(hash, (intptr_t)entry->kfe->v1, eve);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, entry->kfe->v1->v->co);
+ sf_vert->poly_nr = 0;
+ rnd_offset_co(sf_vert->co, rndscale);
+ sf_vert->tmp.p = entry->kfe->v1->v;
+ BLI_smallhash_insert(hash, (intptr_t)entry->kfe->v1, sf_vert);
}
if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v2)) {
- eve = BLI_scanfill_vert_add(&sf_ctx, entry->kfe->v2->v->co);
- eve->poly_nr = 0;
- rnd_offset_co(eve->co, rndscale);
- eve->tmp.p = entry->kfe->v2->v;
- BLI_smallhash_insert(hash, (intptr_t)entry->kfe->v2, eve);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, entry->kfe->v2->v->co);
+ sf_vert->poly_nr = 0;
+ rnd_offset_co(sf_vert->co, rndscale);
+ sf_vert->tmp.p = entry->kfe->v2->v;
+ BLI_smallhash_insert(hash, (intptr_t)entry->kfe->v2, sf_vert);
}
}
for (j = 0, entry = face_nets[i].first; entry; entry = entry->next, j++) {
- lasteve = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v1);
- eve = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v2);
+ sf_vert_last = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v1);
+ sf_vert = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v2);
- eve->poly_nr++;
- lasteve->poly_nr++;
+ sf_vert->poly_nr++;
+ sf_vert_last->poly_nr++;
}
for (j = 0, entry = face_nets[i].first; entry; entry = entry->next, j++) {
- lasteve = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v1);
- eve = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v2);
+ sf_vert_last = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v1);
+ sf_vert = BLI_smallhash_lookup(hash, (intptr_t)entry->kfe->v2);
- if (eve->poly_nr > 1 && lasteve->poly_nr > 1) {
- ScanFillEdge *eed;
- eed = BLI_scanfill_edge_add(&sf_ctx, lasteve, eve);
+ if (sf_vert->poly_nr > 1 && sf_vert_last->poly_nr > 1) {
+ ScanFillEdge *sf_edge;
+ sf_edge = BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert);
if (entry->kfe->oe)
- eed->f = SF_EDGE_BOUNDARY; /* mark as original boundary edge */
+ sf_edge->f = SF_EDGE_BOUNDARY; /* mark as original boundary edge */
BMO_elem_flag_disable(bm, entry->kfe->e->v1, DEL);
BMO_elem_flag_disable(bm, entry->kfe->e->v2, DEL);
}
else {
- if (lasteve->poly_nr < 2)
- BLI_remlink(&sf_ctx.fillvertbase, lasteve);
- if (eve->poly_nr < 2)
- BLI_remlink(&sf_ctx.fillvertbase, eve);
+ if (sf_vert_last->poly_nr < 2)
+ BLI_remlink(&sf_ctx.fillvertbase, sf_vert_last);
+ if (sf_vert->poly_nr < 2)
+ BLI_remlink(&sf_ctx.fillvertbase, sf_vert);
}
}
BLI_scanfill_calc(&sf_ctx, FALSE);
- for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) {
- BMVert *v1 = efa->v3->tmp.p, *v2 = efa->v2->tmp.p, *v3 = efa->v1->tmp.p;
+ for (sf_tri = sf_ctx.fillfacebase.first; sf_tri; sf_tri = sf_tri->next) {
+ BMVert *v1 = sf_tri->v3->tmp.p, *v2 = sf_tri->v2->tmp.p, *v3 = sf_tri->v1->tmp.p;
BMFace *f2;
BMLoop *l_iter;
BMVert *verts[3] = {v1, v2, v3};
@@ -2829,9 +2829,9 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut))
kcd->kverts = BLI_mempool_create(sizeof(KnifeVert), 1, 512, BLI_MEMPOOL_ALLOW_ITER);
kcd->kedges = BLI_mempool_create(sizeof(KnifeEdge), 1, 512, BLI_MEMPOOL_ALLOW_ITER);
- kcd->origedgemap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife origedgemap");
- kcd->origvertmap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife origvertmap");
- kcd->kedgefacemap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife origvertmap");
+ kcd->origedgemap = BLI_ghash_ptr_new("knife origedgemap");
+ kcd->origvertmap = BLI_ghash_ptr_new("knife origvertmap");
+ kcd->kedgefacemap = BLI_ghash_ptr_new("knife origvertmap");
/* cut all the way through the mesh if use_occlude_geometry button not pushed */
kcd->cut_through = !RNA_boolean_get(op->ptr, "use_occlude_geometry");
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index 538087b8e46..c002a49d410 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -682,6 +682,7 @@ static EnumPropertyItem prop_similar_types[] = {
{SIMEDGE_FACE, "FACE", 0, "Amount of Faces Around an Edge", ""},
{SIMEDGE_FACE_ANGLE, "FACE_ANGLE", 0, "Face Angles", ""},
{SIMEDGE_CREASE, "CREASE", 0, "Crease", ""},
+ {SIMEDGE_BEVEL, "BEVEL", 0, "Bevel", ""},
{SIMEDGE_SEAM, "SEAM", 0, "Seam", ""},
{SIMEDGE_SHARP, "SHARP", 0, "Sharpness", ""},
{SIMEDGE_FREESTYLE, "FREESTYLE_EDGE", 0, "Freestyle Edge Marks", ""},
@@ -835,7 +836,12 @@ static int edbm_select_similar_exec(bContext *C, wmOperator *op)
static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop),
int *free)
{
- Object *obedit = CTX_data_edit_object(C);
+ Object *obedit;
+
+ if (!C) /* needed for docs and i18n tools */
+ return prop_similar_types;
+
+ obedit = CTX_data_edit_object(C);
if (obedit && obedit->type == OB_MESH) {
EnumPropertyItem *item = NULL;
@@ -863,7 +869,7 @@ static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *UNUS
return item;
}
-
+
return NULL;
}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 645b2d9cb68..24f5678584a 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -734,7 +734,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent
BM_ITER_MESH (v1, &iter, vc.em->bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(v1, BM_ELEM_SELECT)) {
- DO_MINMAX(v1->co, min, max);
+ minmax_v3v3_v3(min, max, v1->co);
done = 1;
}
}
@@ -1344,7 +1344,8 @@ void MESH_OT_flip_normals(wmOperatorType *ot)
static const EnumPropertyItem direction_items[] = {
{DIRECTION_CW, "CW", 0, "Clockwise", ""},
{DIRECTION_CCW, "CCW", 0, "Counter Clockwise", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
/* only accepts 1 selected edge, or 2 selected faces */
static int edbm_edge_rotate_selected_exec(bContext *C, wmOperator *op)
@@ -1957,7 +1958,8 @@ static EnumPropertyItem merge_type_items[] = {
{3, "CENTER", 0, "At Center", ""},
{4, "CURSOR", 0, "At Cursor", ""},
{5, "COLLAPSE", 0, "Collapse", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free)
{
@@ -2377,13 +2379,15 @@ void MESH_OT_select_axis(wmOperatorType *ot)
{0, "POSITIVE", 0, "Positive Axis", ""},
{1, "NEGATIVE", 0, "Negative Axis", ""},
{-1, "ALIGNED", 0, "Aligned Axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem axis_items_xyz[] = {
{0, "X_AXIS", 0, "X Axis", ""},
{1, "Y_AXIS", 0, "Y Axis", ""},
{2, "Z_AXIS", 0, "Z Axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* identifiers */
ot->name = "Select Axis";
@@ -2685,7 +2689,7 @@ static int edbm_knife_cut_exec(bContext *C, wmOperator *op)
}
/* get the cut curve */
- RNA_BEGIN (op->ptr, itemptr, "path")
+ RNA_BEGIN(op->ptr, itemptr, "path")
{
RNA_float_get_array(&itemptr, "loc", (float *)&curve[len]);
len++;
@@ -2700,7 +2704,7 @@ static int edbm_knife_cut_exec(bContext *C, wmOperator *op)
}
/* the floating point coordinates of verts in screen space will be stored in a hash table according to the vertices pointer */
- gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife cut exec");
+ gh = BLI_ghash_ptr_new("knife cut exec");
for (bv = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); bv; bv = BM_iter_step(&iter)) {
scr = MEM_mallocN(sizeof(float) * 2, "Vertex Screen Coordinates");
copy_v3_v3(co, bv->co);
@@ -3566,7 +3570,8 @@ void MESH_OT_select_by_number_vertices(wmOperatorType *ot)
{1, "EQUAL", 0, "Equal To", ""},
{2, "GREATER", 0, "Greater Than", ""},
{3, "NOTEQUAL", 0, "Not Equal To", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* identifiers */
ot->name = "Select by Number of Vertices";
@@ -3889,12 +3894,12 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const
mp = map[0] = MEM_callocN(sizeof(int) * totelem[0], "sort_bmelem vert map");
BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) {
- if (BM_elem_flag_test(ve, flag)) {
- mp[affected[0]++] = i;
- }
- else {
- *tb = i;
- tb++;
+ if (BM_elem_flag_test(ve, flag)) {
+ mp[affected[0]++] = i;
+ }
+ else {
+ *tb = i;
+ tb++;
}
}
}
@@ -3904,12 +3909,12 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const
mp = map[1] = MEM_callocN(sizeof(int) * totelem[1], "sort_bmelem edge map");
BM_ITER_MESH_INDEX (ed, &iter, em->bm, BM_EDGES_OF_MESH, i) {
- if (BM_elem_flag_test(ed, flag)) {
- mp[affected[1]++] = i;
- }
- else {
- *tb = i;
- tb++;
+ if (BM_elem_flag_test(ed, flag)) {
+ mp[affected[1]++] = i;
+ }
+ else {
+ *tb = i;
+ tb++;
}
}
}
@@ -3919,17 +3924,17 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const
mp = map[2] = MEM_callocN(sizeof(int) * totelem[2], "sort_bmelem face map");
BM_ITER_MESH_INDEX (fa, &iter, em->bm, BM_FACES_OF_MESH, i) {
- if (BM_elem_flag_test(fa, flag)) {
- mp[affected[2]++] = i;
- }
- else {
- *tb = i;
- tb++;
+ if (BM_elem_flag_test(fa, flag)) {
+ mp[affected[2]++] = i;
+ }
+ else {
+ *tb = i;
+ tb++;
}
}
}
- for (j = 3; j--;) {
+ for (j = 3; j--; ) {
int tot = totelem[j];
int aff = affected[j];
tb = tbuf[j];
@@ -4069,7 +4074,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const
/* printf("%d edges: %d to be affected…\n", totelem[1], affected[1]);*/
/* printf("%d faces: %d to be affected…\n", totelem[2], affected[2]);*/
if (affected[0] == 0 && affected[1] == 0 && affected[2] == 0) {
- for (j = 3; j--;) {
+ for (j = 3; j--; ) {
if (pblock[j])
MEM_freeN(pblock[j]);
if (sblock[j])
@@ -4081,7 +4086,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const
}
/* Sort affected elements, and populate mapping arrays, if needed. */
- for (j = 3; j--;) {
+ for (j = 3; j--; ) {
pb = pblock[j];
sb = sblock[j];
if (pb && sb && !map[j]) {
@@ -4114,7 +4119,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const
BM_mesh_remap(em->bm, map[0], map[1], map[2]);
/* DAG_id_tag_update(ob->data, 0);*/
- for (j = 3; j--;) {
+ for (j = 3; j--; ) {
if (map[j])
MEM_freeN(map[j]);
}
@@ -4303,21 +4308,79 @@ void MESH_OT_noise(wmOperatorType *ot)
RNA_def_float(ot->srna, "factor", 0.1f, -FLT_MAX, FLT_MAX, "Factor", "", 0.0f, 1.0f);
}
-/* bevel! yay!!*/
-static int edbm_bevel_exec(bContext *C, wmOperator *op)
+typedef struct {
+ BMEditMesh *em;
+ BMBackup mesh_backup;
+ float *weights;
+ int li;
+ int mcenter[2];
+ float initial_length;
+ int is_modal;
+} BevelData;
+
+#define HEADER_LENGTH 180
+
+static void edbm_bevel_update_header(wmOperator *op, bContext *C)
+{
+ static char str[] = "Confirm: Enter/LClick, Cancel: (Esc/RClick), factor: %f, , Use Dist (D): %s: Use Even (E): %s";
+
+ char msg[HEADER_LENGTH];
+ ScrArea *sa = CTX_wm_area(C);
+
+ if (sa) {
+ BLI_snprintf(msg, HEADER_LENGTH, str,
+ RNA_float_get(op->ptr, "percent"),
+ RNA_boolean_get(op->ptr, "use_dist") ? "On" : "Off",
+ RNA_boolean_get(op->ptr, "use_even") ? "On" : "Off"
+ );
+
+ ED_area_headerprint(sa, msg);
+ }
+}
+
+static void edbm_bevel_recalc_weights(wmOperator *op)
+{
+ float df, s, ftot;
+ int i;
+ int recursion = 1; /* RNA_int_get(op->ptr, "recursion"); */ /* temp removed, see comment below */
+ BevelData *opdata = op->customdata;
+
+ if (opdata->weights) {
+ /* TODO should change to free only when new recursion is greater than old */
+ MEM_freeN(opdata->weights);
+ }
+ opdata->weights = MEM_mallocN(sizeof(float) * recursion, "bevel weights");
+
+ /* ugh, stupid math depends somewhat on angles!*/
+ /* dfac = 1.0/(float)(recursion + 1); */ /* UNUSED */
+ df = 1.0;
+ for (i = 0, ftot = 0.0f; i < recursion; i++) {
+ s = powf(df, 1.25f);
+
+ opdata->weights[i] = s;
+ ftot += s;
+
+ df *= 2.0f;
+ }
+
+ mul_vn_fl(opdata->weights, recursion, 1.0f / (float)ftot);
+}
+
+static int edbm_bevel_init(bContext *C, wmOperator *op, int is_modal)
{
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BMEdit_FromObject(obedit);
BMIter iter;
BMEdge *eed;
- BMOperator bmop;
- float factor = RNA_float_get(op->ptr, "percent") /*, dfac */ /* UNUSED */, df, s;
- int i, recursion = 1; /* RNA_int_get(op->ptr, "recursion"); */ /* temp removed, see comment below */
- const int use_even = RNA_boolean_get(op->ptr, "use_even");
- const int use_dist = RNA_boolean_get(op->ptr, "use_dist");
- float *w = NULL, ftot;
+ BevelData *opdata;
int li;
+ if (em == NULL) {
+ return 0;
+ }
+
+ op->customdata = opdata = MEM_mallocN(sizeof(BevelData), "beveldata_mesh_operator");
+
BM_data_layer_add(em->bm, &em->bm->edata, CD_PROP_FLT);
li = CustomData_number_of_layers(&em->bm->edata, CD_PROP_FLT) - 1;
@@ -4328,52 +4391,201 @@ static int edbm_bevel_exec(bContext *C, wmOperator *op)
*dv = d;
}
- if (em == NULL) {
- return OPERATOR_CANCELLED;
- }
+ opdata->em = em;
+ opdata->li = li;
+ opdata->weights = NULL;
+ opdata->is_modal = is_modal;
- w = MEM_mallocN(sizeof(float) * recursion, "bevel weights");
+ /* avoid the cost of allocating a bm copy */
+ if (is_modal)
+ opdata->mesh_backup = EDBM_redo_state_store(em);
+ edbm_bevel_recalc_weights(op);
- /* ugh, stupid math depends somewhat on angles!*/
- /* dfac = 1.0/(float)(recursion + 1); */ /* UNUSED */
- df = 1.0;
- for (i = 0, ftot = 0.0f; i < recursion; i++) {
- s = powf(df, 1.25f);
+ return 1;
+}
- w[i] = s;
- ftot += s;
+static int edbm_bevel_calc(bContext *C, wmOperator *op)
+{
+ BevelData *opdata = op->customdata;
+ BMEditMesh *em = opdata->em;
+ BMOperator bmop;
+ int i;
- df *= 2.0f;
- }
+ float factor = RNA_float_get(op->ptr, "percent") /*, dfac */ /* UNUSED */;
+ int recursion = 1; /* RNA_int_get(op->ptr, "recursion"); */ /* temp removed, see comment below */
+ const int use_even = RNA_boolean_get(op->ptr, "use_even");
+ const int use_dist = RNA_boolean_get(op->ptr, "use_dist");
- mul_vn_fl(w, recursion, 1.0f / (float)ftot);
+ /* revert to original mesh */
+ if (opdata->is_modal) {
+ EDBM_redo_state_restore(opdata->mesh_backup, em, FALSE);
+ }
for (i = 0; i < recursion; i++) {
- float fac = w[recursion - i - 1] * factor;
+ float fac = opdata->weights[recursion - i - 1] * factor;
+
if (!EDBM_op_init(em, &bmop, op,
"bevel geom=%hev percent=%f lengthlayer=%i use_lengths=%b use_even=%b use_dist=%b",
- BM_ELEM_SELECT, fac, li, TRUE, use_even, use_dist))
+ BM_ELEM_SELECT, fac, opdata->li, TRUE, use_even, use_dist))
{
- return OPERATOR_CANCELLED;
+ return 0;
}
BMO_op_exec(em->bm, &bmop);
if (!EDBM_op_finish(em, &bmop, op, TRUE))
- return OPERATOR_CANCELLED;
+ return 0;
}
- BM_data_layer_free_n(em->bm, &em->bm->edata, CD_PROP_FLT, li);
+ EDBM_mesh_normals_update(opdata->em);
- MEM_freeN(w);
+ EDBM_update_generic(C, opdata->em, TRUE);
- EDBM_mesh_normals_update(em);
+ return 1;
+}
- EDBM_update_generic(C, em, TRUE);
+static void edbm_bevel_exit(bContext *C, wmOperator *op)
+{
+ BevelData *opdata = op->customdata;
+
+ ScrArea *sa = CTX_wm_area(C);
+
+ if (sa) {
+ ED_area_headerprint(sa, NULL);
+ }
+ BM_data_layer_free_n(opdata->em->bm, &opdata->em->bm->edata, CD_PROP_FLT, opdata->li);
+
+ if (opdata->weights)
+ MEM_freeN(opdata->weights);
+ if (opdata->is_modal) {
+ EDBM_redo_state_free(&opdata->mesh_backup, NULL, FALSE);
+ }
+ MEM_freeN(opdata);
+ op->customdata = NULL;
+}
+
+static int edbm_bevel_cancel(bContext *C, wmOperator *op)
+{
+ BevelData *opdata = op->customdata;
+ if (opdata->is_modal) {
+ EDBM_redo_state_free(&opdata->mesh_backup, opdata->em, TRUE);
+ EDBM_update_generic(C, opdata->em, FALSE);
+ }
+
+ edbm_bevel_exit(C, op);
+
+ /* need to force redisplay or we may still view the modified result */
+ ED_region_tag_redraw(CTX_wm_region(C));
+ return OPERATOR_CANCELLED;
+}
+
+/* bevel! yay!!*/
+static int edbm_bevel_exec(bContext *C, wmOperator *op)
+{
+ if (!edbm_bevel_init(C, op, FALSE)) {
+ edbm_bevel_exit(C, op);
+ return OPERATOR_CANCELLED;
+ }
+
+ if (!edbm_bevel_calc(C, op)) {
+ edbm_bevel_cancel(C, op);
+ return OPERATOR_CANCELLED;
+ }
+
+ edbm_bevel_exit(C, op);
return OPERATOR_FINISHED;
}
+static int edbm_bevel_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ /* TODO make modal keymap (see fly mode) */
+ BevelData *opdata;
+ float mlen[2];
+
+ if (!edbm_bevel_init(C, op, TRUE))
+ return OPERATOR_CANCELLED;
+
+ /* initialize mouse values */
+ opdata = op->customdata;
+
+ calculateTransformCenter(C, V3D_CENTROID, NULL, opdata->mcenter);
+ mlen[0] = opdata->mcenter[0] - event->mval[0];
+ mlen[1] = opdata->mcenter[1] - event->mval[1];
+ opdata->initial_length = len_v2(mlen);
+
+ edbm_bevel_update_header(op, C);
+
+ if (!edbm_bevel_calc(C, op)) {
+ edbm_bevel_cancel(C, op);
+ return OPERATOR_CANCELLED;
+ }
+
+ WM_event_add_modal_handler(C, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int edbm_bevel_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+ BevelData *opdata = op->customdata;
+// Scene *scene = CTX_data_scene(C);
+
+ switch (event->type) {
+ case ESCKEY:
+ case RIGHTMOUSE:
+ edbm_bevel_cancel(C, op);
+ return OPERATOR_CANCELLED;
+
+ case MOUSEMOVE:
+ {
+ float factor;
+ float mdiff[2];
+
+ mdiff[0] = opdata->mcenter[0] - event->mval[0];
+ mdiff[1] = opdata->mcenter[1] - event->mval[1];
+
+ factor = len_v2(mdiff) / opdata->initial_length;
+ factor = MAX2(1.0 - factor, 0.0);
+
+ RNA_float_set(op->ptr, "percent", factor);
+
+ edbm_bevel_calc(C, op);
+ edbm_bevel_update_header(op, C);
+ return OPERATOR_RUNNING_MODAL;
+ }
+
+ case LEFTMOUSE:
+ case PADENTER:
+ case RETKEY:
+ edbm_bevel_calc(C, op);
+ edbm_bevel_exit(C, op);
+ return OPERATOR_FINISHED;
+
+ case EKEY:
+ if (event->val == KM_PRESS) {
+ int use_even = RNA_boolean_get(op->ptr, "use_even");
+ RNA_boolean_set(op->ptr, "use_even", !use_even);
+
+ edbm_bevel_calc(C, op);
+ edbm_bevel_update_header(op, C);
+ }
+ return OPERATOR_RUNNING_MODAL;
+
+ case DKEY:
+ if (event->val == KM_PRESS) {
+ int use_dist = RNA_boolean_get(op->ptr, "use_dist");
+ RNA_boolean_set(op->ptr, "use_dist", !use_dist);
+
+ edbm_bevel_calc(C, op);
+ edbm_bevel_update_header(op, C);
+ }
+ return OPERATOR_RUNNING_MODAL;
+ }
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
void MESH_OT_bevel(wmOperatorType *ot)
{
/* identifiers */
@@ -4383,12 +4595,15 @@ void MESH_OT_bevel(wmOperatorType *ot)
/* api callbacks */
ot->exec = edbm_bevel_exec;
+ ot->invoke = edbm_bevel_invoke;
+ ot->modal = edbm_bevel_modal;
+ ot->cancel = edbm_bevel_cancel;
ot->poll = ED_operator_editmesh;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- RNA_def_float(ot->srna, "percent", 0.5f, -FLT_MAX, FLT_MAX, "Percentage", "", 0.0f, 1.0f);
+ RNA_def_float(ot->srna, "percent", 0.0f, -FLT_MAX, FLT_MAX, "Percentage", "", 0.0f, 1.0f);
// XXX, disabled for 2.63 release, needs to work much better without overlap before we can give to users.
// RNA_def_int(ot->srna, "recursion", 1, 1, 50, "Recursion Level", "Recursion Level", 1, 8);
@@ -4427,20 +4642,112 @@ void MESH_OT_bridge_edge_loops(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "inside", 0, "Inside", "");
}
+typedef struct {
+ float old_thickness;
+ float old_depth;
+ int mcenter[2];
+ int modify_depth;
+ int is_modal;
+ float initial_length;
+ BMBackup backup;
+ BMEditMesh *em;
+} InsetData;
+static void edbm_inset_update_header(wmOperator *op, bContext *C)
+{
+ InsetData *opdata = op->customdata;
-static int edbm_inset_exec(bContext *C, wmOperator *op)
+ static char str[] = "Confirm: Enter/LClick, Cancel: (Esc/RClick), thickness: %f, depth (Ctrl to tweak): %f (%s), Outset (O): (%s)";
+
+ char msg[HEADER_LENGTH];
+ ScrArea *sa = CTX_wm_area(C);
+
+ if (sa) {
+ BLI_snprintf(msg, HEADER_LENGTH, str,
+ RNA_float_get(op->ptr, "thickness"),
+ RNA_float_get(op->ptr, "depth"),
+ opdata->modify_depth ? "On" : "Off",
+ RNA_boolean_get(op->ptr, "use_outset") ? "On" : "Off"
+ );
+
+ ED_area_headerprint(sa, msg);
+ }
+}
+
+
+static int edbm_inset_init(bContext *C, wmOperator *op, int is_modal)
{
+ InsetData *opdata;
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BMEdit_FromObject(obedit);
+
+ op->customdata = opdata = MEM_mallocN(sizeof(InsetData), "inset_operator_data");
+
+ opdata->old_thickness = 0.01;
+ opdata->old_depth = 0.0;
+ opdata->modify_depth = FALSE;
+ opdata->is_modal = is_modal;
+ opdata->em = em;
+
+ if (is_modal)
+ opdata->backup = EDBM_redo_state_store(em);
+
+ return 1;
+}
+
+static void edbm_inset_exit(bContext *C, wmOperator *op)
+{
+ InsetData *opdata;
+ ScrArea *sa = CTX_wm_area(C);
+
+ opdata = op->customdata;
+
+ if (opdata->is_modal)
+ EDBM_redo_state_free(&opdata->backup, NULL, FALSE);
+
+ if (sa) {
+ ED_area_headerprint(sa, NULL);
+ }
+ MEM_freeN(op->customdata);
+}
+
+static int edbm_inset_cancel(bContext *C, wmOperator *op)
+{
+ InsetData *opdata;
+
+ opdata = op->customdata;
+ if (opdata->is_modal) {
+ EDBM_redo_state_free(&opdata->backup, opdata->em, TRUE);
+ EDBM_update_generic(C, opdata->em, FALSE);
+ }
+
+ edbm_inset_exit(C, op);
+
+ /* need to force redisplay or we may still view the modified result */
+ ED_region_tag_redraw(CTX_wm_region(C));
+ return OPERATOR_CANCELLED;
+}
+
+static int edbm_inset_calc(bContext *C, wmOperator *op)
+{
+ InsetData *opdata;
+ BMEditMesh *em;
BMOperator bmop;
- const int use_boundary = RNA_boolean_get(op->ptr, "use_boundary");
- const int use_even_offset = RNA_boolean_get(op->ptr, "use_even_offset");
- const int use_relative_offset = RNA_boolean_get(op->ptr, "use_relative_offset");
- const float thickness = RNA_float_get(op->ptr, "thickness");
- const float depth = RNA_float_get(op->ptr, "depth");
- const int use_outset = RNA_boolean_get(op->ptr, "use_outset");
- const int use_select_inset = RNA_boolean_get(op->ptr, "use_select_inset"); /* not passed onto the BMO */
+
+ int use_boundary = RNA_boolean_get(op->ptr, "use_boundary");
+ int use_even_offset = RNA_boolean_get(op->ptr, "use_even_offset");
+ int use_relative_offset = RNA_boolean_get(op->ptr, "use_relative_offset");
+ float thickness = RNA_float_get(op->ptr, "thickness");
+ float depth = RNA_float_get(op->ptr, "depth");
+ int use_outset = RNA_boolean_get(op->ptr, "use_outset");
+ int use_select_inset = RNA_boolean_get(op->ptr, "use_select_inset"); /* not passed onto the BMO */
+
+ opdata = op->customdata;
+ em = opdata->em;
+
+ if (opdata->is_modal) {
+ EDBM_redo_state_restore(opdata->backup, em, FALSE);
+ }
EDBM_op_init(em, &bmop, op,
"inset faces=%hf use_boundary=%b use_even_offset=%b use_relative_offset=%b "
@@ -4463,14 +4770,142 @@ static int edbm_inset_exec(bContext *C, wmOperator *op)
}
if (!EDBM_op_finish(em, &bmop, op, TRUE)) {
- return OPERATOR_CANCELLED;
+ return 0;
}
else {
EDBM_update_generic(C, em, TRUE);
- return OPERATOR_FINISHED;
+ return 1;
+ }
+}
+
+static int edbm_inset_exec(bContext *C, wmOperator *op)
+{
+ edbm_inset_init(C, op, FALSE);
+
+ if (!edbm_inset_calc(C, op)) {
+ edbm_inset_exit(C, op);
+ return OPERATOR_CANCELLED;
}
+
+ edbm_inset_exit(C, op);
+ return OPERATOR_FINISHED;
}
+static int edbm_inset_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ InsetData *opdata;
+ float mlen[2];
+
+ edbm_inset_init(C, op, TRUE);
+
+ opdata = op->customdata;
+
+ calculateTransformCenter(C, V3D_CENTROID, NULL, opdata->mcenter);
+ /* initialize mouse values */
+ mlen[0] = opdata->mcenter[0] - event->mval[0];
+ mlen[1] = opdata->mcenter[1] - event->mval[1];
+ opdata->initial_length = len_v2(mlen);
+
+ edbm_inset_calc(C, op);
+
+ edbm_inset_update_header(op, C);
+
+ WM_event_add_modal_handler(C, op);
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int edbm_inset_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+ InsetData *opdata;
+
+ opdata = op->customdata;
+
+ switch (event->type) {
+ case ESCKEY:
+ case RIGHTMOUSE:
+ edbm_inset_cancel(C, op);
+ return OPERATOR_CANCELLED;
+
+ case MOUSEMOVE:
+ {
+ float mdiff[2];
+ float amount;
+
+ mdiff[0] = opdata->mcenter[0] - event->mval[0];
+ mdiff[1] = opdata->mcenter[1] - event->mval[1];
+
+ if (opdata->modify_depth) {
+ amount = opdata->old_depth + (len_v2(mdiff)
+ - opdata->initial_length) / opdata->initial_length;
+ RNA_float_set(op->ptr, "depth", amount);
+ }
+ else {
+ amount = opdata->old_thickness - (len_v2(mdiff)
+ - opdata->initial_length) / opdata->initial_length;
+ amount = MAX2(amount, 0.0);
+
+ RNA_float_set(op->ptr, "thickness", amount);
+ }
+
+ if (edbm_inset_calc(C, op)) {
+ edbm_inset_update_header(op, C);
+ return OPERATOR_RUNNING_MODAL;
+ }
+ else {
+ edbm_inset_cancel(C, op);
+ return OPERATOR_CANCELLED;
+ }
+ }
+
+ case LEFTMOUSE:
+ case PADENTER:
+ case RETKEY:
+ edbm_inset_calc(C, op);
+ edbm_inset_exit(C, op);
+ return OPERATOR_FINISHED;
+
+
+ case LEFTCTRLKEY:
+ case RIGHTCTRLKEY:
+ {
+ float mlen[2];
+
+ mlen[0] = opdata->mcenter[0] - event->mval[0];
+ mlen[1] = opdata->mcenter[1] - event->mval[1];
+
+ if (event->val == KM_PRESS) {
+ opdata->old_thickness = RNA_float_get(op->ptr, "thickness");
+ opdata->modify_depth = TRUE;
+ }
+ else {
+ opdata->old_depth = RNA_float_get(op->ptr, "depth");
+ opdata->modify_depth = FALSE;
+ }
+ opdata->initial_length = len_v2(mlen);
+
+ edbm_inset_update_header(op, C);
+ return OPERATOR_RUNNING_MODAL;
+ }
+
+ case OKEY:
+ if (event->val == KM_PRESS) {
+ int use_outset = RNA_boolean_get(op->ptr, "use_outset");
+ RNA_boolean_set(op->ptr, "use_outset", !use_outset);
+ if (edbm_inset_calc(C, op)) {
+ edbm_inset_update_header(op, C);
+ return OPERATOR_RUNNING_MODAL;
+ }
+ else {
+ edbm_inset_cancel(C, op);
+ return OPERATOR_CANCELLED;
+ }
+ }
+ }
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+
void MESH_OT_inset(wmOperatorType *ot)
{
PropertyRNA *prop;
@@ -4481,7 +4916,10 @@ void MESH_OT_inset(wmOperatorType *ot)
ot->description = "Inset new faces into selected faces";
/* api callbacks */
+ ot->invoke = edbm_inset_invoke;
+ ot->modal = edbm_inset_modal;
ot->exec = edbm_inset_exec;
+ ot->cancel = edbm_inset_cancel;
ot->poll = ED_operator_editmesh;
/* flags */
@@ -4578,9 +5016,9 @@ static int edbm_convex_hull_exec(bContext *C, wmOperator *op)
BMOperator bmop;
EDBM_op_init(em, &bmop, op, "convex_hull input=%hvef "
- "use_existing_faces=%b",
- BM_ELEM_SELECT,
- RNA_boolean_get(op->ptr, "use_existing_faces"));
+ "use_existing_faces=%b",
+ BM_ELEM_SELECT,
+ RNA_boolean_get(op->ptr, "use_existing_faces"));
BMO_op_exec(em->bm, &bmop);
/* Hull fails if input is coplanar */
@@ -4647,20 +5085,20 @@ void MESH_OT_convex_hull(wmOperatorType *ot)
/* props */
RNA_def_boolean(ot->srna, "delete_unused", TRUE,
- "Delete Unused",
- "Delete selected elements that are not used by the hull");
+ "Delete Unused",
+ "Delete selected elements that are not used by the hull");
RNA_def_boolean(ot->srna, "use_existing_faces", TRUE,
- "Use Existing Faces",
- "Skip hull triangles that are covered by a pre-existing face");
+ "Use Existing Faces",
+ "Skip hull triangles that are covered by a pre-existing face");
RNA_def_boolean(ot->srna, "make_holes", FALSE,
- "Make Holes",
- "Delete selected faces that are used by the hull");
+ "Make Holes",
+ "Delete selected faces that are used by the hull");
RNA_def_boolean(ot->srna, "join_triangles", TRUE,
- "Join Triangles",
- "Merge adjacent triangles into quads");
+ "Join Triangles",
+ "Merge adjacent triangles into quads");
join_triangle_props(ot);
}
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index 533ead1ff29..c3fbb2e8c16 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -58,6 +58,52 @@
#include "mesh_intern.h"
+/* mesh backup implementation. This would greatly benefit from some sort of binary diffing
+ * just as the undo stack would. So leaving this as an interface for further work */
+
+BMBackup EDBM_redo_state_store(BMEditMesh *em)
+{
+ BMBackup backup;
+ backup.bmcopy = BM_mesh_copy(em->bm);
+ return backup;
+}
+
+void EDBM_redo_state_restore(BMBackup backup, BMEditMesh *em, int recalctess)
+{
+ BMesh *tmpbm;
+ if (!em || !backup.bmcopy)
+ return;
+
+ BM_mesh_data_free(em->bm);
+ tmpbm = BM_mesh_copy(backup.bmcopy);
+ *em->bm = *tmpbm;
+ MEM_freeN(tmpbm);
+ tmpbm = NULL;
+
+ if (recalctess)
+ BMEdit_RecalcTessellation(em);
+}
+
+void EDBM_redo_state_free(BMBackup *backup, BMEditMesh *em, int recalctess)
+{
+ if (em && backup->bmcopy) {
+ BM_mesh_data_free(em->bm);
+ *em->bm = *backup->bmcopy;
+ }
+ else if (backup->bmcopy) {
+ BM_mesh_data_free(backup->bmcopy);
+ }
+
+ if (backup->bmcopy)
+ MEM_freeN(backup->bmcopy);
+ backup->bmcopy = NULL;
+
+ if (recalctess && em)
+ BMEdit_RecalcTessellation(em);
+}
+
+
+
void EDBM_mesh_normals_update(BMEditMesh *em)
{
BM_mesh_normals_update(em->bm, TRUE);
diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c
index dc0d576d701..fd60a6d1820 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -257,6 +257,8 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
keymap->poll = ED_operator_editmesh;
WM_keymap_add_item(keymap, "MESH_OT_loopcut_slide", RKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_bevel", BKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_inset", IKEY, KM_PRESS, 0, 0);
/* selecting */
/* standard mouse selection goes via space_view3d */
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index aa89eaa0c6d..989f1a36f99 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -806,7 +806,7 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, const float co[3], char m
BMVert *eve;
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
- DO_MINMAX(eve->co, min, max);
+ minmax_v3v3_v3(min, max, eve->co);
}
}
else {
@@ -814,19 +814,17 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, const float co[3], char m
int a;
for (a = 0, mvert = me->mvert; a < me->totvert; a++, mvert++)
- DO_MINMAX(mvert->co, min, max);
+ minmax_v3v3_v3(min, max, mvert->co);
}
/* for quick unit coordinate calculus */
copy_v3_v3(MeshOctree.offs, min);
- MeshOctree.offs[0] -= MOC_THRESH; /* we offset it 1 threshold unit extra */
- MeshOctree.offs[1] -= MOC_THRESH;
- MeshOctree.offs[2] -= MOC_THRESH;
+ /* we offset it 1 threshold unit extra */
+ add_v3_fl(MeshOctree.offs, -MOC_THRESH);
sub_v3_v3v3(MeshOctree.div, max, min);
- MeshOctree.div[0] += 2 * MOC_THRESH; /* and divide with 2 threshold unit more extra (try 8x8 unit grid on paint) */
- MeshOctree.div[1] += 2 * MOC_THRESH;
- MeshOctree.div[2] += 2 * MOC_THRESH;
+ /* and divide with 2 threshold unit more extra (try 8x8 unit grid on paint) */
+ add_v3_fl(MeshOctree.div, 2.0f * MOC_THRESH);
mul_v3_fl(MeshOctree.div, 1.0f / MOC_RES);
if (MeshOctree.div[0] == 0.0f) MeshOctree.div[0] = 1.0f;
diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c
index ed51f53eb03..701a3517535 100644
--- a/source/blender/editors/metaball/mball_edit.c
+++ b/source/blender/editors/metaball/mball_edit.c
@@ -275,7 +275,7 @@ void MBALL_OT_duplicate_metaelems(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Duplicate Metaelements";
- ot->description = "Delete selected metaelement(s)";
+ ot->description = "Duplicate selected metaelement(s)";
ot->idname = "MBALL_OT_duplicate_metaelems";
/* callback functions */
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 466338a736f..69aae5c4f06 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -1067,8 +1067,8 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
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_ptr_new("make_object_duplilist_real dupli_gh");
+ parent_gh = BLI_ghash_pair_new("make_object_duplilist_real parent_gh");
}
for (dob = lb->first; dob; dob = dob->next) {
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index d73b53deecc..7cc11fa0209 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -356,8 +356,15 @@ static void test_constraints(Object *owner, bPoseChannel *pchan)
bActionConstraint *data = curcon->data;
/* validate action */
- if (data->act == NULL)
+ if (data->act == NULL) {
+ /* must have action */
curcon->flag |= CONSTRAINT_DISABLE;
+ }
+ else if (data->act->idroot != ID_OB) {
+ /* only object-rooted actions can be used */
+ data->act = NULL;
+ curcon->flag |= CONSTRAINT_DISABLE;
+ }
}
else if (curcon->type == CONSTRAINT_TYPE_FOLLOWPATH) {
bFollowPathConstraint *data = curcon->data;
@@ -409,12 +416,12 @@ static void test_constraints(Object *owner, bPoseChannel *pchan)
if (data->clip != NULL && data->track[0]) {
MovieTracking *tracking = &data->clip->tracking;
MovieTrackingObject *tracking_object;
-
+
if (data->object[0])
tracking_object = BKE_tracking_named_object(tracking, data->object);
else
tracking_object = BKE_tracking_get_camera_object(tracking);
-
+
if (!tracking_object) {
curcon->flag |= CONSTRAINT_DISABLE;
}
@@ -428,14 +435,14 @@ 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;
}
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index 86823be09a4..3a932b58fd9 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 */
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 34395163ad3..2e21fe9cdfe 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -361,7 +361,7 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot)
/*************************** 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 */
+ * 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;
@@ -653,7 +653,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
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];
+ float cursor[3], cent[3], cent_neg[3], centn[3];
int centermode = RNA_enum_get(op->ptr, "type");
int around = RNA_enum_get(op->ptr, "center"); /* initialized from v3d->around */
@@ -675,14 +675,11 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
zero_v3(cent);
if (obedit) {
- INIT_MINMAX(min, max);
-
if (obedit->type == OB_MESH) {
Mesh *me = obedit->data;
BMEditMesh *em = me->edit_btmesh;
BMVert *eve;
BMIter iter;
- int total = 0;
if (centermode == ORIGIN_TO_CURSOR) {
copy_v3_v3(cent, cursor);
@@ -690,16 +687,19 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
mul_m4_v3(obedit->imat, cent);
}
else {
- BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
- if (around == V3D_CENTROID) {
- total++;
- add_v3_v3(cent, eve->co);
- mul_v3_fl(cent, 1.0f / (float)total);
+ if (around == V3D_CENTROID) {
+ const float total_div = 1.0f / (float)em->bm->totvert;
+ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
+ madd_v3_v3fl(cent, eve->co, total_div);
}
- else {
- DO_MINMAX(eve->co, min, max);
- mid_v3_v3v3(cent, min, max);
+ }
+ else {
+ float min[3], max[3];
+ INIT_MINMAX(min, max);
+ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
+ minmax_v3v3_v3(min, max, eve->co);
}
+ mid_v3_v3v3(cent, min, max);
}
}
@@ -746,8 +746,11 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
tot_lib_error++;
}
else {
- if (centermode == ORIGIN_TO_CURSOR) { /* done */ }
+ if (centermode == ORIGIN_TO_CURSOR) {
+ /* done */
+ }
else {
+ float min[3], max[3];
/* only bounds support */
INIT_MINMAX(min, max);
BKE_object_minmax_dupli(scene, ob, min, max);
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index 64f4ffe4881..9f5e700616e 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -3100,8 +3100,8 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm,
if (pa_minmax==0) {
INIT_MINMAX(p_min, p_max);
- DO_MINMAX(co1, p_min, p_max);
- DO_MINMAX(co2, p_min, p_max);
+ minmax_v3v3_v3(p_min, p_max, co1);
+ minmax_v3v3_v3(p_min, p_max, co2);
}
else {
copy_v3_v3(p_min, pa_minmax);
diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c
index 48c35873304..08ccf37265b 100644
--- a/source/blender/editors/render/render_update.c
+++ b/source/blender/editors/render/render_update.c
@@ -127,7 +127,7 @@ void ED_render_engine_area_exit(ScrArea *sa)
for (ar = sa->regionbase.first; ar; ar = ar->next) {
RegionView3D *rv3d;
- if (ar->regiontype != RGN_TYPE_WINDOW)
+ if (ar->regiontype != RGN_TYPE_WINDOW || !(ar->regiondata))
continue;
rv3d = ar->regiondata;
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 52e1f90606f..0d5aceb9870 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -2301,7 +2301,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
}
else {
/* we are back in the area previously selected for keeping
- * we swap the areas if possible to allow user to choose */
+ * we swap the areas if possible to allow user to choose */
if (jd->sa2 != NULL) {
if (jd->sa1) jd->sa1->flag &= ~AREA_FLAG_DRAWJOINFROM;
if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO;
diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c
index c681f8ddb75..ebc255f4e43 100644
--- a/source/blender/editors/sculpt_paint/paint_cursor.c
+++ b/source/blender/editors/sculpt_paint/paint_cursor.c
@@ -86,7 +86,7 @@ static int same_snap(Snapshot *snap, Brush *brush, ViewContext *vc)
mtex->rot == snap->rot) &&
/* make brush smaller shouldn't cause a resample */
- ((mtex->brush_map_mode == MTEX_MAP_MODE_FIXED &&
+ ((mtex->brush_map_mode == MTEX_MAP_MODE_VIEW &&
(BKE_brush_size_get(vc->scene, brush) <= snap->BKE_brush_size_get)) ||
(BKE_brush_size_get(vc->scene, brush) == snap->BKE_brush_size_get)) &&
@@ -154,7 +154,7 @@ static int load_tex(Sculpt *sd, Brush *br, ViewContext *vc)
make_snap(&snap, br, vc);
- if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) {
+ if (br->mtex.brush_map_mode == MTEX_MAP_MODE_VIEW) {
int s = BKE_brush_size_get(vc->scene, br);
int r = 1;
@@ -239,7 +239,7 @@ static int load_tex(Sculpt *sd, Brush *br, ViewContext *vc)
avg += br->texture_sample_bias;
- if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED)
+ if (br->mtex.brush_map_mode == MTEX_MAP_MODE_VIEW)
avg *= BKE_brush_curve_strength(br, len, 1); /* Falloff curve */
buffer[index] = 255 - (GLubyte)(255 * avg);
@@ -278,7 +278,7 @@ static int load_tex(Sculpt *sd, Brush *br, ViewContext *vc)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) {
+ if (br->mtex.brush_map_mode == MTEX_MAP_MODE_VIEW) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
}
@@ -376,7 +376,7 @@ 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)))
+ !(ELEM(brush->mtex.brush_map_mode, MTEX_MAP_MODE_VIEW, MTEX_MAP_MODE_TILED)))
{
return;
}
@@ -405,7 +405,7 @@ static void paint_draw_alpha_overlay(Sculpt *sd, Brush *brush,
glPushMatrix();
glLoadIdentity();
- if (brush->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) {
+ if (brush->mtex.brush_map_mode == MTEX_MAP_MODE_VIEW) {
/* brush rotation */
glTranslatef(0.5, 0.5, 0);
glRotatef((double)RAD2DEGF((brush->flag & BRUSH_RAKE) ?
diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c
index 87bc89f810c..cd8b9164862 100644
--- a/source/blender/editors/sculpt_paint/paint_hide.c
+++ b/source/blender/editors/sculpt_paint/paint_hide.c
@@ -90,7 +90,7 @@ static int is_effected(PartialVisArea area,
if (area == PARTIALVIS_ALL)
return 1;
else if (area == PARTIALVIS_MASKED) {
- return mask > 0.5;
+ return mask > 0.5f;
}
else {
int inside = planes_contain_v3(planes, 4, co);
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index c46c153aa70..9effba5b433 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -114,24 +114,24 @@
(c)[0]= FTOCHAR((f)[0]); \
(c)[1]= FTOCHAR((f)[1]); \
(c)[2]= FTOCHAR((f)[2]); \
-}
+} (void)0
#define IMAPAINT_FLOAT_RGBA_TO_CHAR(c, f) { \
(c)[0]= FTOCHAR((f)[0]); \
(c)[1]= FTOCHAR((f)[1]); \
(c)[2]= FTOCHAR((f)[2]); \
(c)[3]= FTOCHAR((f)[3]); \
-}
+} (void)0
#define IMAPAINT_CHAR_RGB_TO_FLOAT(f, c) { \
(f)[0]= IMAPAINT_CHAR_TO_FLOAT((c)[0]); \
(f)[1]= IMAPAINT_CHAR_TO_FLOAT((c)[1]); \
(f)[2]= IMAPAINT_CHAR_TO_FLOAT((c)[2]); \
-}
+} (void)0
#define IMAPAINT_CHAR_RGBA_TO_FLOAT(f, c) { \
(f)[0]= IMAPAINT_CHAR_TO_FLOAT((c)[0]); \
(f)[1]= IMAPAINT_CHAR_TO_FLOAT((c)[1]); \
(f)[2]= IMAPAINT_CHAR_TO_FLOAT((c)[2]); \
(f)[3]= IMAPAINT_CHAR_TO_FLOAT((c)[3]); \
-}
+} (void)0
#define IMAPAINT_FLOAT_RGB_COPY(a, b) copy_v3_v3(a, b)
@@ -1547,7 +1547,7 @@ static ProjPixel *project_paint_uvpixel_init(
if (ibuf_other->rect_float) { /* float to char */
float rgba[4];
project_face_pixel(tf_other, ibuf_other, w, side, NULL, rgba);
- IMAPAINT_FLOAT_RGBA_TO_CHAR(((ProjPixelClone *)projPixel)->clonepx.ch, rgba)
+ IMAPAINT_FLOAT_RGBA_TO_CHAR(((ProjPixelClone *)projPixel)->clonepx.ch, rgba);
}
else { /* char to char */
project_face_pixel(tf_other, ibuf_other, w, side, ((ProjPixelClone *)projPixel)->clonepx.ch, NULL);
@@ -3769,7 +3769,7 @@ static void do_projectpaint_smear_f(ProjPaintState *ps, ProjPixel *projPixel, fl
BLI_linklist_prepend_arena(smearPixels_f, (void *)projPixel, smearArena);
}
-static void do_projectpaint_draw(ProjPaintState *ps, ProjPixel *projPixel, float *rgba, float alpha, float mask)
+static void do_projectpaint_draw(ProjPaintState *ps, ProjPixel *projPixel, const float rgba[4], float alpha, float mask)
{
unsigned char rgba_ub[4];
@@ -3793,7 +3793,7 @@ static void do_projectpaint_draw(ProjPaintState *ps, ProjPixel *projPixel, float
}
}
-static void do_projectpaint_draw_f(ProjPaintState *ps, ProjPixel *projPixel, float *rgba, float alpha, float mask, int use_color_correction)
+static void do_projectpaint_draw_f(ProjPaintState *ps, ProjPixel *projPixel, float rgba[4], float alpha, float mask, int use_color_correction)
{
if (ps->is_texbrush) {
/* rgba already holds a texture result here from higher level function */
@@ -4190,9 +4190,10 @@ static void imapaint_image_update(SpaceImage *sima, Image *image, ImBuf *ibuf, s
/* Image Paint Operations */
-static void imapaint_ibuf_get_set_rgb(ImBuf *ibuf, int x, int y, short torus, short set, float *rgb)
+/* keep these functions in sync */
+static void imapaint_ibuf_rgb_get(ImBuf *ibuf, int x, int y, const short is_torus, float r_rgb[3])
{
- if (torus) {
+ if (is_torus) {
x %= ibuf->x;
if (x < 0) x += ibuf->x;
y %= ibuf->y;
@@ -4201,23 +4202,29 @@ static void imapaint_ibuf_get_set_rgb(ImBuf *ibuf, int x, int y, short torus, sh
if (ibuf->rect_float) {
float *rrgbf = ibuf->rect_float + (ibuf->x * y + x) * 4;
-
- if (set) {
- IMAPAINT_FLOAT_RGB_COPY(rrgbf, rgb);
- }
- else {
- IMAPAINT_FLOAT_RGB_COPY(rgb, rrgbf);
- }
+ IMAPAINT_FLOAT_RGB_COPY(r_rgb, rrgbf);
}
else {
char *rrgb = (char *)ibuf->rect + (ibuf->x * y + x) * 4;
+ IMAPAINT_CHAR_RGB_TO_FLOAT(r_rgb, rrgb);
+ }
+}
+static void imapaint_ibuf_rgb_set(ImBuf *ibuf, int x, int y, const short is_torus, const float rgb[3])
+{
+ if (is_torus) {
+ x %= ibuf->x;
+ if (x < 0) x += ibuf->x;
+ y %= ibuf->y;
+ if (y < 0) y += ibuf->y;
+ }
- if (set) {
- IMAPAINT_FLOAT_RGB_TO_CHAR(rrgb, rgb)
- }
- else {
- IMAPAINT_CHAR_RGB_TO_FLOAT(rgb, rrgb)
- }
+ if (ibuf->rect_float) {
+ float *rrgbf = ibuf->rect_float + (ibuf->x * y + x) * 4;
+ IMAPAINT_FLOAT_RGB_COPY(rrgbf, rgb);
+ }
+ else {
+ char *rrgb = (char *)ibuf->rect + (ibuf->x * y + x) * 4;
+ IMAPAINT_FLOAT_RGB_TO_CHAR(rrgb, rgb);
}
}
@@ -4227,10 +4234,12 @@ static int imapaint_ibuf_add_if(ImBuf *ibuf, unsigned int x, unsigned int y, flo
// XXX: signed unsigned mismatch
if ((x >= (unsigned int)(ibuf->x)) || (y >= (unsigned int)(ibuf->y))) {
- if (torus) imapaint_ibuf_get_set_rgb(ibuf, x, y, 1, 0, inrgb);
+ if (torus) imapaint_ibuf_rgb_get(ibuf, x, y, 1, inrgb);
else return 0;
}
- else imapaint_ibuf_get_set_rgb(ibuf, x, y, 0, 0, inrgb);
+ else {
+ imapaint_ibuf_rgb_get(ibuf, x, y, 0, inrgb);
+ }
outrgb[0] += inrgb[0];
outrgb[1] += inrgb[1];
@@ -4239,7 +4248,7 @@ static int imapaint_ibuf_add_if(ImBuf *ibuf, unsigned int x, unsigned int y, flo
return 1;
}
-static void imapaint_lift_soften(ImBuf *ibuf, ImBuf *ibufb, int *pos, short torus)
+static void imapaint_lift_soften(ImBuf *ibuf, ImBuf *ibufb, int *pos, const short is_torus)
{
int x, y, count, xi, yi, xo, yo;
int out_off[2], in_off[2], dim[2];
@@ -4251,7 +4260,7 @@ static void imapaint_lift_soften(ImBuf *ibuf, ImBuf *ibufb, int *pos, short toru
in_off[1] = pos[1];
out_off[0] = out_off[1] = 0;
- if (!torus) {
+ if (!is_torus) {
IMB_rectclip(ibuf, ibufb, &in_off[0], &in_off[1], &out_off[0],
&out_off[1], &dim[0], &dim[1]);
@@ -4266,27 +4275,25 @@ static void imapaint_lift_soften(ImBuf *ibuf, ImBuf *ibufb, int *pos, short toru
yi = in_off[1] + y;
count = 1;
- imapaint_ibuf_get_set_rgb(ibuf, xi, yi, torus, 0, outrgb);
+ imapaint_ibuf_rgb_get(ibuf, xi, yi, is_torus, outrgb);
- count += imapaint_ibuf_add_if(ibuf, xi - 1, yi - 1, outrgb, torus);
- count += imapaint_ibuf_add_if(ibuf, xi - 1, yi, outrgb, torus);
- count += imapaint_ibuf_add_if(ibuf, xi - 1, yi + 1, outrgb, torus);
+ count += imapaint_ibuf_add_if(ibuf, xi - 1, yi - 1, outrgb, is_torus);
+ count += imapaint_ibuf_add_if(ibuf, xi - 1, yi, outrgb, is_torus);
+ count += imapaint_ibuf_add_if(ibuf, xi - 1, yi + 1, outrgb, is_torus);
- count += imapaint_ibuf_add_if(ibuf, xi, yi - 1, outrgb, torus);
- count += imapaint_ibuf_add_if(ibuf, xi, yi + 1, outrgb, torus);
+ count += imapaint_ibuf_add_if(ibuf, xi, yi - 1, outrgb, is_torus);
+ count += imapaint_ibuf_add_if(ibuf, xi, yi + 1, outrgb, is_torus);
- count += imapaint_ibuf_add_if(ibuf, xi + 1, yi - 1, outrgb, torus);
- count += imapaint_ibuf_add_if(ibuf, xi + 1, yi, outrgb, torus);
- count += imapaint_ibuf_add_if(ibuf, xi + 1, yi + 1, outrgb, torus);
+ count += imapaint_ibuf_add_if(ibuf, xi + 1, yi - 1, outrgb, is_torus);
+ count += imapaint_ibuf_add_if(ibuf, xi + 1, yi, outrgb, is_torus);
+ count += imapaint_ibuf_add_if(ibuf, xi + 1, yi + 1, outrgb, is_torus);
- outrgb[0] /= count;
- outrgb[1] /= count;
- outrgb[2] /= count;
+ mul_v3_fl(outrgb, 1.0f / (float)count);
/* write into brush buffer */
xo = out_off[0] + x;
yo = out_off[1] + y;
- imapaint_ibuf_get_set_rgb(ibufb, xo, yo, 0, 1, outrgb);
+ imapaint_ibuf_rgb_set(ibufb, xo, yo, 0, outrgb);
}
}
}
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index f8ed20430e7..368729723eb 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -238,7 +238,7 @@ static Brush *brush_tool_toggle(Main *bmain, Brush *brush_orig, const int tool,
if (!brush_orig || brush_tool(brush_orig, tool_offset) != tool) {
Brush *br;
/* if the current brush is not using the desired tool, look
- for one that is */
+ * for one that is */
br = brush_tool_cycle(bmain, brush_orig, tool, tool_offset, ob_mode);
/* store the previously-selected brush */
if (br)
@@ -250,8 +250,8 @@ static Brush *brush_tool_toggle(Main *bmain, Brush *brush_orig, const int tool,
BLI_findindex(bmain->brush.first, brush_orig->toggle_brush) != -1)
{
/* if current brush is using the desired tool, try to toggle
- back to the previously selected brush (if it was set, and
- if it still exists) */
+ * back to the previously selected brush (if it was set, and
+ * if it still exists) */
return brush_orig->toggle_brush;
}
else
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index c01da3a816f..d544183ced8 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -844,7 +844,7 @@ static int sample_backbuf_area(ViewContext *vc, int *indexar, int totface, int x
}
/* whats _dl mean? */
-static float calc_vp_strength_dl(VPaint *vp, ViewContext *vc, const float *vert_nor,
+static float calc_vp_strength_dl(VPaint *vp, ViewContext *vc, const float vert_nor[3],
const float mval[2], const float brush_size_pressure)
{
Brush *brush = paint_brush(&vp->paint);
@@ -2079,7 +2079,7 @@ static char *wpaint_make_validmap(Object *ob)
return NULL;
}
- gh = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "wpaint_make_validmap gh");
+ gh = BLI_ghash_str_new("wpaint_make_validmap gh");
/* add all names to a hash table */
for (dg = ob->defbase.first; dg; dg = dg->next) {
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 2d3a7680963..7e766ea3388 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -107,7 +107,7 @@ float *ED_sculpt_get_last_stroke(struct Object *ob)
return (ob && ob->sculpt && ob->sculpt->last_stroke_valid) ? ob->sculpt->last_stroke : NULL;
}
-int ED_sculpt_minmax(bContext *C, float *min, float *max)
+int ED_sculpt_minmax(bContext *C, float min[3], float max[3])
{
Object *ob = CTX_data_active_object(C);
@@ -247,7 +247,17 @@ typedef struct StrokeCache {
int mirror_symmetry_pass; /* the symmetry pass we are currently on between 0 and 7*/
float true_view_normal[3];
float view_normal[3];
- float last_area_normal[3];
+
+ /* sculpt_normal gets calculated by calc_sculpt_normal(), then the
+ * sculpt_normal_symm gets updated quickly with the usual symmetry
+ * transforms */
+ float sculpt_normal[3];
+ float sculpt_normal_symm[3];
+
+ /* Used for wrap texture mode, local_mat gets calculated by
+ * calc_brush_local_mat() and used in tex_strength(). */
+ float brush_local_mat[4][4];
+
float last_center[3];
int radial_symmetry_pass;
float symm_rot_mat[4][4];
@@ -537,7 +547,7 @@ static float integrate_overlap(Brush *br)
}
/* Uses symm to selectively flip any axis of a coordinate. */
-static void flip_coord(float out[3], float in[3], const char symm)
+static void flip_v3_v3(float out[3], const float in[3], const char symm)
{
if (symm & SCULPT_SYMM_X)
out[0] = -in[0];
@@ -553,13 +563,18 @@ static void flip_coord(float out[3], float in[3], const char symm)
out[2] = in[2];
}
+static void flip_v3(float v[3], const char symm)
+{
+ flip_v3_v3(v, v, symm);
+}
+
static float calc_overlap(StrokeCache *cache, const char symm, const char axis, const float angle)
{
float mirror[3];
float distsq;
- /* flip_coord(mirror, cache->traced_location, symm); */
- flip_coord(mirror, cache->true_location, symm);
+ /* flip_v3_v3(mirror, cache->traced_location, symm); */
+ flip_v3_v3(mirror, cache->true_location, symm);
if (axis != 0) {
float mat[4][4] = MAT4_UNITY;
@@ -745,15 +760,16 @@ static float tex_strength(SculptSession *ss, Brush *br, float point[3],
* position in order to project it. This insures that the
* brush texture will be oriented correctly. */
- flip_coord(symm_point, point, ss->cache->mirror_symmetry_pass);
+ flip_v3_v3(symm_point, point, ss->cache->mirror_symmetry_pass);
if (ss->cache->radial_symmetry_pass)
mul_m4_v3(ss->cache->symm_rot_mat_inv, symm_point);
ED_view3d_project_float_v2(ss->cache->vc->ar, symm_point, point_2d, ss->cache->projection_mat);
- /* if fixed mode, keep coordinates relative to mouse */
- if (mtex->brush_map_mode == MTEX_MAP_MODE_FIXED) {
+ if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW) {
+ /* keep coordinates relative to mouse */
+
rotation += ss->cache->special_rotation;
point_2d[0] -= ss->cache->tex_mouse[0];
@@ -765,8 +781,8 @@ static float tex_strength(SculptSession *ss, Brush *br, float point[3],
x = point_2d[0] + ss->cache->vc->ar->winrct.xmin;
y = point_2d[1] + ss->cache->vc->ar->winrct.ymin;
}
- else { /* else (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) */
- /* leave the coordinates relative to the screen */
+ else if (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) {
+ /* leave the coordinates relative to the screen */
/* use unadjusted size for tiled mode */
radius = BKE_brush_size_get(ss->cache->vc->scene, br);
@@ -774,17 +790,31 @@ static float tex_strength(SculptSession *ss, Brush *br, float point[3],
x = point_2d[0];
y = point_2d[1];
}
+ else if (mtex->brush_map_mode == MTEX_MAP_MODE_AREA) {
+ /* Similar to fixed mode, but projects from brush angle
+ * rather than view direction */
+
+ /* Rotation is handled by the brush_local_mat */
+ rotation = 0;
- x /= ss->cache->vc->ar->winx;
- y /= ss->cache->vc->ar->winy;
+ mul_m4_v3(ss->cache->brush_local_mat, symm_point);
- if (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) {
- x -= 0.5f;
- y -= 0.5f;
+ x = symm_point[0];
+ y = symm_point[1];
}
+
+ if (mtex->brush_map_mode != MTEX_MAP_MODE_AREA) {
+ x /= ss->cache->vc->ar->winx;
+ y /= ss->cache->vc->ar->winy;
+
+ if (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) {
+ x -= 0.5f;
+ y -= 0.5f;
+ }
- x *= ss->cache->vc->ar->winx / radius;
- y *= ss->cache->vc->ar->winy / radius;
+ x *= ss->cache->vc->ar->winx / radius;
+ y *= ss->cache->vc->ar->winy / radius;
+ }
/* it is probably worth optimizing for those cases where
* the texture is not rotated by skipping the calls to
@@ -882,9 +912,13 @@ static void add_norm_if(float view_vec[3], float out[3], float out_flip[3], floa
static void calc_area_normal(Sculpt *sd, Object *ob, float an[3], PBVHNode **nodes, int totnode)
{
SculptSession *ss = ob->sculpt;
- int n;
-
float out_flip[3] = {0.0f, 0.0f, 0.0f};
+ int n, original;
+
+ /* Grab brush requires to test on original data (see r33888 and
+ * bug #25371) */
+ original = (paint_brush(&sd->paint)->sculpt_tool == SCULPT_TOOL_GRAB ?
+ TRUE : ss->cache->original);
(void)sd; /* unused w/o openmp */
@@ -901,7 +935,7 @@ static void calc_area_normal(Sculpt *sd, Object *ob, float an[3], PBVHNode **nod
unode = sculpt_undo_push_node(ob, nodes[n], SCULPT_UNDO_COORDS);
sculpt_brush_test_init(ss, &test);
- if (ss->cache->original) {
+ if (original) {
BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE)
{
if (sculpt_brush_test_fast(&test, unode->co[vd.i])) {
@@ -944,56 +978,161 @@ static void calc_area_normal(Sculpt *sd, Object *ob, float an[3], PBVHNode **nod
normalize_v3(an);
}
-/* This initializes the faces to be moved for this sculpt for draw/layer/flatten; then it
- * finds average normal for all active vertices - note that this is called once for each mirroring direction */
-static void calc_sculpt_normal(Sculpt *sd, Object *ob, float an[3], PBVHNode **nodes, int totnode)
+/* Calculate primary direction of movement for many brushes */
+static void calc_sculpt_normal(Sculpt *sd, Object *ob,
+ PBVHNode **nodes, int totnode,
+ float an[3])
{
- SculptSession *ss = ob->sculpt;
- Brush *brush = paint_brush(&sd->paint);
-
- if (ss->cache->mirror_symmetry_pass == 0 &&
- ss->cache->radial_symmetry_pass == 0 &&
- (ss->cache->first_time || !(brush->flag & BRUSH_ORIGINAL_NORMAL)))
- {
- switch (brush->sculpt_plane) {
- case SCULPT_DISP_DIR_VIEW:
- ED_view3d_global_to_vector(ss->cache->vc->rv3d, ss->cache->vc->rv3d->twmat[3], an);
- break;
+ const Brush *brush = paint_brush(&sd->paint);
+ const SculptSession *ss = ob->sculpt;
+
+ switch (brush->sculpt_plane) {
+ case SCULPT_DISP_DIR_VIEW:
+ ED_view3d_global_to_vector(ss->cache->vc->rv3d,
+ ss->cache->vc->rv3d->twmat[3],
+ an);
+ break;
- case SCULPT_DISP_DIR_X:
- an[1] = 0.0;
- an[2] = 0.0;
- an[0] = 1.0;
- break;
+ case SCULPT_DISP_DIR_X:
+ an[1] = 0.0;
+ an[2] = 0.0;
+ an[0] = 1.0;
+ break;
- case SCULPT_DISP_DIR_Y:
- an[0] = 0.0;
- an[2] = 0.0;
- an[1] = 1.0;
- break;
+ case SCULPT_DISP_DIR_Y:
+ an[0] = 0.0;
+ an[2] = 0.0;
+ an[1] = 1.0;
+ break;
- case SCULPT_DISP_DIR_Z:
- an[0] = 0.0;
- an[1] = 0.0;
- an[2] = 1.0;
- break;
+ case SCULPT_DISP_DIR_Z:
+ an[0] = 0.0;
+ an[1] = 0.0;
+ an[2] = 1.0;
+ break;
- case SCULPT_DISP_DIR_AREA:
- calc_area_normal(sd, ob, an, nodes, totnode);
+ case SCULPT_DISP_DIR_AREA:
+ calc_area_normal(sd, ob, an, nodes, totnode);
- default:
- break;
- }
+ default:
+ break;
+ }
+}
- copy_v3_v3(ss->cache->last_area_normal, an);
+static void update_sculpt_normal(Sculpt *sd, Object *ob,
+ PBVHNode **nodes, int totnode)
+{
+ const Brush *brush = paint_brush(&sd->paint);
+ StrokeCache *cache = ob->sculpt->cache;
+
+ if (cache->mirror_symmetry_pass == 0 &&
+ cache->radial_symmetry_pass == 0 &&
+ (cache->first_time || !(brush->flag & BRUSH_ORIGINAL_NORMAL)))
+ {
+ calc_sculpt_normal(sd, ob, nodes, totnode, cache->sculpt_normal);
+ copy_v3_v3(cache->sculpt_normal_symm, cache->sculpt_normal);
}
else {
- copy_v3_v3(an, ss->cache->last_area_normal);
- flip_coord(an, an, ss->cache->mirror_symmetry_pass);
- mul_m4_v3(ss->cache->symm_rot_mat, an);
+ copy_v3_v3(cache->sculpt_normal_symm, cache->sculpt_normal);
+ flip_v3(cache->sculpt_normal_symm, cache->mirror_symmetry_pass);
+ mul_m4_v3(cache->symm_rot_mat, cache->sculpt_normal_symm);
+ }
+}
+
+static void calc_local_y(ViewContext *vc, const float center[3], float y[3])
+{
+ Object *ob = vc->obact;
+ float loc[3], mval_f[2] = {0.0f, 1.0f};
+
+ mul_v3_m4v3(loc, ob->imat, center);
+ initgrabz(vc->rv3d, loc[0], loc[1], loc[2]);
+
+ ED_view3d_win_to_delta(vc->ar, mval_f, y);
+ normalize_v3(y);
+
+ add_v3_v3(y, ob->loc);
+ mul_m4_v3(ob->imat, y);
+}
+
+static void calc_brush_local_mat(const Brush *brush, Object *ob,
+ float local_mat[4][4])
+{
+ const StrokeCache *cache = ob->sculpt->cache;
+ float tmat[4][4];
+ float mat[4][4];
+ float scale[4][4];
+ float angle, v[3];
+ float up[3];
+
+ /* Ensure ob->imat is up to date */
+ invert_m4_m4(ob->imat, ob->obmat);
+
+ /* Initialize last column of matrix */
+ mat[0][3] = 0;
+ mat[1][3] = 0;
+ mat[2][3] = 0;
+ mat[3][3] = 1;
+
+ /* Get view's up vector in object-space */
+ calc_local_y(cache->vc, cache->location, up);
+
+ /* Calculate the X axis of the local matrix */
+ cross_v3_v3v3(v, up, cache->sculpt_normal);
+ /* Apply rotation (user angle, rake, etc.) to X axis */
+ angle = brush->mtex.rot - cache->special_rotation;
+ rotate_v3_v3v3fl(mat[0], v, cache->sculpt_normal, angle);
+
+ /* Get other axes */
+ cross_v3_v3v3(mat[1], cache->sculpt_normal, mat[0]);
+ copy_v3_v3(mat[2], cache->sculpt_normal);
+
+ /* Set location */
+ copy_v3_v3(mat[3], cache->location);
+
+ /* Scale by brush radius */
+ normalize_m4(mat);
+ scale_m4_fl(scale, cache->radius);
+ mult_m4_m4m4(tmat, mat, scale);
+
+ /* Return inverse (for converting from modelspace coords to local
+ * area coords) */
+ invert_m4_m4(local_mat, tmat);
+}
+
+static void update_brush_local_mat(Sculpt *sd, Object *ob)
+{
+ StrokeCache *cache = ob->sculpt->cache;
+
+ if (cache->mirror_symmetry_pass == 0 &&
+ cache->radial_symmetry_pass == 0)
+ {
+ calc_brush_local_mat(paint_brush(&sd->paint), ob,
+ cache->brush_local_mat);
}
}
+/* Test whether the StrokeCache.sculpt_normal needs update in
+ * do_brush_action() */
+static int brush_needs_sculpt_normal(const Brush *brush)
+{
+ return ((ELEM(brush->sculpt_tool,
+ SCULPT_TOOL_GRAB,
+ SCULPT_TOOL_SNAKE_HOOK) &&
+ ((brush->normal_weight > 0) ||
+ (brush->flag & BRUSH_FRONTFACE))) ||
+
+ ELEM7(brush->sculpt_tool,
+ SCULPT_TOOL_BLOB,
+ SCULPT_TOOL_CREASE,
+ SCULPT_TOOL_DRAW,
+ SCULPT_TOOL_LAYER,
+ SCULPT_TOOL_NUDGE,
+ SCULPT_TOOL_ROTATE,
+ SCULPT_TOOL_THUMB) ||
+
+ (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA));
+}
+
/* For the smooth brush, uses the neighboring vertices around vert to calculate
* a smoothed location for vert. Skips corner vertices (used by only one
* polygon.) */
@@ -1037,8 +1176,8 @@ static void neighbor_average(SculptSession *ss, float avg[3], unsigned vert)
}
/* Similar to neighbor_average(), but returns an averaged mask value
- instead of coordinate. Also does not restrict based on border or
- corner vertices. */
+ * instead of coordinate. Also does not restrict based on border or
+ * corner vertices. */
static float neighbor_average_mask(SculptSession *ss, unsigned vert)
{
const float *vmask = ss->vmask;
@@ -1356,14 +1495,12 @@ static void do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
{
SculptSession *ss = ob->sculpt;
Brush *brush = paint_brush(&sd->paint);
- float offset[3], area_normal[3];
+ float offset[3];
float bstrength = ss->cache->bstrength;
int n;
- calc_sculpt_normal(sd, ob, area_normal, nodes, totnode);
-
/* offset with as much as possible factored in already */
- mul_v3_v3fl(offset, area_normal, ss->cache->radius);
+ mul_v3_v3fl(offset, ss->cache->sculpt_normal_symm, ss->cache->radius);
mul_v3_v3(offset, ss->cache->scale);
mul_v3_fl(offset, bstrength);
@@ -1383,7 +1520,8 @@ static void do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
if (sculpt_brush_test(&test, vd.co)) {
/* offset vertex */
float fade = tex_strength(ss, brush, vd.co, test.dist,
- area_normal, vd.no, vd.fno, *vd.mask);
+ ss->cache->sculpt_normal_symm, vd.no,
+ vd.fno, *vd.mask);
mul_v3_v3fl(proxy[vd.i], offset, fade);
@@ -1400,16 +1538,14 @@ static void do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
SculptSession *ss = ob->sculpt;
const Scene *scene = ss->cache->vc->scene;
Brush *brush = paint_brush(&sd->paint);
- float offset[3], area_normal[3];
+ float offset[3];
float bstrength = ss->cache->bstrength;
float flippedbstrength, crease_correction;
float brush_alpha;
int n;
- calc_sculpt_normal(sd, ob, area_normal, nodes, totnode);
-
/* offset with as much as possible factored in already */
- mul_v3_v3fl(offset, area_normal, ss->cache->radius);
+ mul_v3_v3fl(offset, ss->cache->sculpt_normal_symm, ss->cache->radius);
mul_v3_v3(offset, ss->cache->scale);
mul_v3_fl(offset, bstrength);
@@ -1440,7 +1576,8 @@ static void do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
if (sculpt_brush_test(&test, vd.co)) {
/* offset vertex */
const float fade = tex_strength(ss, brush, vd.co, test.dist,
- area_normal, vd.no, vd.fno, *vd.mask);
+ ss->cache->sculpt_normal_symm,
+ vd.no, vd.fno, *vd.mask);
float val1[3];
float val2[3];
@@ -1502,26 +1639,18 @@ static void do_grab_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
SculptSession *ss = ob->sculpt;
Brush *brush = paint_brush(&sd->paint);
float bstrength = ss->cache->bstrength;
- float grab_delta[3], an[3];
+ float grab_delta[3];
int n;
float len;
- if (brush->normal_weight > 0 || brush->flag & BRUSH_FRONTFACE) {
- int cache = 1;
- /* grab brush requires to test on original data */
- SWAP(int, ss->cache->original, cache);
- calc_sculpt_normal(sd, ob, an, nodes, totnode);
- SWAP(int, ss->cache->original, cache);
- }
-
copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry);
len = len_v3(grab_delta);
if (brush->normal_weight > 0) {
- mul_v3_fl(an, len * brush->normal_weight);
+ mul_v3_fl(ss->cache->sculpt_normal_symm, len * brush->normal_weight);
mul_v3_fl(grab_delta, 1.0f - brush->normal_weight);
- add_v3_v3(grab_delta, an);
+ add_v3_v3(grab_delta, ss->cache->sculpt_normal_symm);
}
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
@@ -1545,7 +1674,7 @@ static void do_grab_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
{
if (sculpt_brush_test(&test, origco[vd.i])) {
const float fade = bstrength * tex_strength(ss, brush, origco[vd.i], test.dist,
- an, origno[vd.i], NULL, *vd.mask);
+ ss->cache->sculpt_normal_symm, origno[vd.i], NULL, *vd.mask);
mul_v3_v3fl(proxy[vd.i], grab_delta, fade);
@@ -1563,16 +1692,13 @@ static void do_nudge_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
Brush *brush = paint_brush(&sd->paint);
float bstrength = ss->cache->bstrength;
float grab_delta[3];
- int n;
- float an[3];
float tmp[3], cono[3];
+ int n;
copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry);
- calc_sculpt_normal(sd, ob, an, nodes, totnode);
-
- cross_v3_v3v3(tmp, an, grab_delta);
- cross_v3_v3v3(cono, tmp, an);
+ cross_v3_v3v3(tmp, ss->cache->sculpt_normal_symm, grab_delta);
+ cross_v3_v3v3(cono, tmp, ss->cache->sculpt_normal_symm);
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
for (n = 0; n < totnode; n++) {
@@ -1588,7 +1714,8 @@ static void do_nudge_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
{
if (sculpt_brush_test(&test, vd.co)) {
const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist,
- an, vd.no, vd.fno, *vd.mask);
+ ss->cache->sculpt_normal_symm,
+ vd.no, vd.fno, *vd.mask);
mul_v3_v3fl(proxy[vd.i], cono, fade);
@@ -1605,13 +1732,10 @@ static void do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int to
SculptSession *ss = ob->sculpt;
Brush *brush = paint_brush(&sd->paint);
float bstrength = ss->cache->bstrength;
- float grab_delta[3], an[3];
+ float grab_delta[3];
int n;
float len;
- if (brush->normal_weight > 0 || brush->flag & BRUSH_FRONTFACE)
- calc_sculpt_normal(sd, ob, an, nodes, totnode);
-
copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry);
len = len_v3(grab_delta);
@@ -1620,9 +1744,9 @@ static void do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int to
negate_v3(grab_delta);
if (brush->normal_weight > 0) {
- mul_v3_fl(an, len * brush->normal_weight);
+ mul_v3_fl(ss->cache->sculpt_normal_symm, len * brush->normal_weight);
mul_v3_fl(grab_delta, 1.0f - brush->normal_weight);
- add_v3_v3(grab_delta, an);
+ add_v3_v3(grab_delta, ss->cache->sculpt_normal_symm);
}
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
@@ -1639,7 +1763,8 @@ static void do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int to
{
if (sculpt_brush_test(&test, vd.co)) {
const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist,
- an, vd.no, vd.fno, *vd.mask);
+ ss->cache->sculpt_normal_symm,
+ vd.no, vd.fno, *vd.mask);
mul_v3_v3fl(proxy[vd.i], grab_delta, fade);
@@ -1657,16 +1782,13 @@ static void do_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
Brush *brush = paint_brush(&sd->paint);
float bstrength = ss->cache->bstrength;
float grab_delta[3];
- int n;
- float an[3];
float tmp[3], cono[3];
+ int n;
copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry);
- calc_sculpt_normal(sd, ob, an, nodes, totnode);
-
- cross_v3_v3v3(tmp, an, grab_delta);
- cross_v3_v3v3(cono, tmp, an);
+ cross_v3_v3v3(tmp, ss->cache->sculpt_normal_symm, grab_delta);
+ cross_v3_v3v3(cono, tmp, ss->cache->sculpt_normal_symm);
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
for (n = 0; n < totnode; n++) {
@@ -1689,7 +1811,8 @@ static void do_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
{
if (sculpt_brush_test(&test, origco[vd.i])) {
const float fade = bstrength * tex_strength(ss, brush, origco[vd.i], test.dist,
- an, origno[vd.i], NULL, *vd.mask);
+ ss->cache->sculpt_normal_symm,
+ origno[vd.i], NULL, *vd.mask);
mul_v3_v3fl(proxy[vd.i], cono, fade);
@@ -1706,20 +1829,17 @@ static void do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
SculptSession *ss = ob->sculpt;
Brush *brush = paint_brush(&sd->paint);
float bstrength = ss->cache->bstrength;
- float an[3];
int n;
float m[4][4], rot[4][4], lmat[4][4], ilmat[4][4];
static const int flip[8] = { 1, -1, -1, 1, -1, 1, 1, -1 };
float angle = ss->cache->vertex_rotation * flip[ss->cache->mirror_symmetry_pass];
- calc_sculpt_normal(sd, ob, an, nodes, totnode);
-
unit_m4(m);
unit_m4(lmat);
copy_v3_v3(lmat[3], ss->cache->location);
invert_m4_m4(ilmat, lmat);
- axis_angle_to_mat4(rot, an, angle);
+ axis_angle_to_mat4(rot, ss->cache->sculpt_normal_symm, angle);
mul_serie_m4(m, lmat, rot, ilmat, NULL, NULL, NULL, NULL, NULL);
@@ -1744,7 +1864,8 @@ static void do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
{
if (sculpt_brush_test(&test, origco[vd.i])) {
const float fade = bstrength * tex_strength(ss, brush, origco[vd.i], test.dist,
- an, origno[vd.i], NULL, *vd.mask);
+ ss->cache->sculpt_normal_symm,
+ origno[vd.i], NULL, *vd.mask);
mul_v3_m4v3(proxy[vd.i], m, origco[vd.i]);
sub_v3_v3(proxy[vd.i], origco[vd.i]);
@@ -1770,8 +1891,6 @@ static void do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
if (bstrength < 0)
lim = -lim;
- calc_sculpt_normal(sd, ob, area_normal, nodes, totnode);
-
mul_v3_v3v3(offset, ss->cache->scale, area_normal);
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
@@ -2069,23 +2188,23 @@ static void calc_sculpt_plane(Sculpt *sd, Object *ob, PBVHNode **nodes, int totn
calc_flatten_center(sd, ob, nodes, totnode, fc);
/* for area normal */
- copy_v3_v3(ss->cache->last_area_normal, an);
+ copy_v3_v3(ss->cache->sculpt_normal, an);
/* for flatten center */
copy_v3_v3(ss->cache->last_center, fc);
}
else {
/* for area normal */
- copy_v3_v3(an, ss->cache->last_area_normal);
+ copy_v3_v3(an, ss->cache->sculpt_normal);
/* for flatten center */
copy_v3_v3(fc, ss->cache->last_center);
/* for area normal */
- flip_coord(an, an, ss->cache->mirror_symmetry_pass);
+ flip_v3(an, ss->cache->mirror_symmetry_pass);
/* for flatten center */
- flip_coord(fc, fc, ss->cache->mirror_symmetry_pass);
+ flip_v3(fc, ss->cache->mirror_symmetry_pass);
/* for area normal */
mul_m4_v3(ss->cache->symm_rot_mat, an);
@@ -2591,6 +2710,12 @@ static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush)
BLI_pbvh_node_mark_update(nodes[n]);
}
+ if (brush_needs_sculpt_normal(brush))
+ update_sculpt_normal(sd, ob, nodes, totnode);
+
+ if (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA)
+ update_brush_local_mat(sd, ob);
+
/* Apply one type of brush action */
switch (brush->sculpt_tool) {
case SCULPT_TOOL_DRAW:
@@ -2816,9 +2941,9 @@ static void calc_brushdata_symm(Sculpt *sd, StrokeCache *cache, const char symm,
{
(void)sd; /* unused */
- flip_coord(cache->location, cache->true_location, symm);
- flip_coord(cache->grab_delta_symmetry, cache->grab_delta, symm);
- flip_coord(cache->view_normal, cache->true_view_normal, symm);
+ flip_v3_v3(cache->location, cache->true_location, symm);
+ flip_v3_v3(cache->grab_delta_symmetry, cache->grab_delta, symm);
+ flip_v3_v3(cache->view_normal, cache->true_view_normal, symm);
/* XXX This reduces the length of the grab delta if it approaches the line of symmetry
* XXX However, a different approach appears to be needed */
@@ -3364,7 +3489,7 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob,
{
copy_v2_v2(cache->tex_mouse, cache->mouse);
- if ((brush->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) &&
+ if ((brush->mtex.brush_map_mode == MTEX_MAP_MODE_VIEW) &&
(brush->flag & BRUSH_RANDOM_ROTATION) &&
!(brush->flag & BRUSH_RAKE))
{
@@ -3909,7 +4034,7 @@ void ED_sculpt_mask_layers_ensure(Object *ob, MultiresModifierData *mmd)
paint_mask = CustomData_get_layer(&me->vdata, CD_PAINT_MASK);
/* if multires is active, create a grid paint mask layer if there
- isn't one already */
+ * isn't one already */
if (mmd && !CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK)) {
GridPaintMask *gmask;
int level = MAX2(1, mmd->sculptlvl);
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index 31243184961..956aee84fd3 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -70,7 +70,7 @@ void ED_spacetypes_init(void)
SpaceType *type;
/* UI_UNIT_X is now a variable, is used in some spacetype inits? */
- U.widget_unit= 20;
+ U.widget_unit = 20;
/* create space types */
ED_spacetype_outliner();
@@ -117,7 +117,7 @@ void ED_spacetypes_init(void)
/* register operators */
spacetypes = BKE_spacetypes_list();
- for (type=spacetypes->first; type; type=type->next) {
+ for (type = spacetypes->first; type; type = type->next) {
if (type->operatortypes)
type->operatortypes();
}
@@ -136,7 +136,7 @@ void ED_spacetypes_init(void)
/* register dropboxes (can use macros) */
spacetypes = BKE_spacetypes_list();
- for (type=spacetypes->first; type; type=type->next) {
+ for (type = spacetypes->first; type; type = type->next) {
if (type->dropboxes)
type->dropboxes();
}
@@ -169,10 +169,10 @@ void ED_spacetypes_keymap(wmKeyConfig *keyconf)
UI_view2d_keymap(keyconf);
spacetypes = BKE_spacetypes_list();
- for (stype=spacetypes->first; stype; stype=stype->next) {
+ for (stype = spacetypes->first; stype; stype = stype->next) {
if (stype->keymap)
stype->keymap(keyconf);
- for (atype=stype->regiontypes.first; atype; atype=atype->next) {
+ for (atype = stype->regiontypes.first; atype; atype = atype->next) {
if (atype->keymap)
atype->keymap(keyconf);
}
@@ -192,15 +192,15 @@ typedef struct RegionDrawCB {
} RegionDrawCB;
void *ED_region_draw_cb_activate(ARegionType *art,
- void (*draw)(const struct bContext *, struct ARegion *, void *),
- void *customdata, int type)
+ void (*draw)(const struct bContext *, struct ARegion *, void *),
+ void *customdata, int type)
{
- RegionDrawCB *rdc= MEM_callocN(sizeof(RegionDrawCB), "RegionDrawCB");
+ RegionDrawCB *rdc = MEM_callocN(sizeof(RegionDrawCB), "RegionDrawCB");
BLI_addtail(&art->drawcalls, rdc);
- rdc->draw= draw;
- rdc->customdata= customdata;
- rdc->type= type;
+ rdc->draw = draw;
+ rdc->customdata = customdata;
+ rdc->type = type;
return rdc;
}
@@ -209,8 +209,8 @@ void ED_region_draw_cb_exit(ARegionType *art, void *handle)
{
RegionDrawCB *rdc;
- for (rdc= art->drawcalls.first; rdc; rdc= rdc->next) {
- if (rdc==(RegionDrawCB *)handle) {
+ for (rdc = art->drawcalls.first; rdc; rdc = rdc->next) {
+ if (rdc == (RegionDrawCB *)handle) {
BLI_remlink(&art->drawcalls, rdc);
MEM_freeN(rdc);
return;
@@ -227,8 +227,8 @@ void ED_region_draw_cb_draw(const bContext *C, ARegion *ar, int type)
{
RegionDrawCB *rdc;
- for (rdc= ar->type->drawcalls.first; rdc; rdc= rdc->next) {
- if (rdc->type==type)
+ for (rdc = ar->type->drawcalls.first; rdc; rdc = rdc->next) {
+ if (rdc->type == type)
rdc->draw(C, ar, rdc->customdata);
}
}
@@ -283,14 +283,14 @@ void ED_spacetype_xxx(void)
{
static SpaceType st;
- st.spaceid= SPACE_VIEW3D;
+ st.spaceid = SPACE_VIEW3D;
- st.new= xxx_new;
- st.free= xxx_free;
- st.init= xxx_init;
- st.duplicate= xxx_duplicate;
- st.operatortypes= xxx_operatortypes;
- st.keymap= xxx_keymap;
+ st.new = xxx_new;
+ st.free = xxx_free;
+ st.init = xxx_init;
+ st.duplicate = xxx_duplicate;
+ st.operatortypes = xxx_operatortypes;
+ st.keymap = xxx_keymap;
BKE_spacetype_register(&st);
}
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index b3ac535ab9d..a477a7435fd 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -142,7 +142,7 @@ void ED_space_clip_set(bContext *C, bScreen *screen, SpaceClip *sc, MovieClip *c
if (sc->clip && sc->clip->id.us == 0)
sc->clip->id.us = 1;
- if (screen) {
+ if (screen && sc->view == SC_VIEW_CLIP) {
ScrArea *area;
SpaceLink *sl;
@@ -151,7 +151,7 @@ void ED_space_clip_set(bContext *C, bScreen *screen, SpaceClip *sc, MovieClip *c
if (sl->spacetype == SPACE_CLIP) {
SpaceClip *cur_sc = (SpaceClip *) sl;
- if (cur_sc != sc) {
+ if (cur_sc != sc && cur_sc->view != SC_VIEW_CLIP) {
if (cur_sc->clip == old_clip || cur_sc->clip == NULL) {
cur_sc->clip = clip;
}
@@ -400,6 +400,30 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y
}
}
+/**
+ * \brief the reverse of ED_clip_point_stable_pos(), gets the marker region coords.
+ * better name here? view_to_track / track_to_view or so?
+ */
+void ED_clip_point_stable_pos__reverse(SpaceClip *sc, ARegion *ar, float co[2], float nco[2])
+{
+ float zoomx, zoomy;
+ float pos[3];
+ int width, height;
+ int sx, sy;
+
+ UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &sx, &sy);
+ ED_space_clip_size(sc, &width, &height);
+ ED_space_clip_zoom(sc, ar, &zoomx, &zoomy);
+
+ ED_clip_point_undistorted_pos(sc, co, pos);
+
+ /* untested */
+ mul_v3_m4v3(pos, sc->stabmat, pos);
+
+ nco[0] = (pos[0] * width * zoomx) + (float)sx;
+ nco[1] = (pos[1] * height * zoomy) + (float)sy;
+}
+
void ED_clip_mouse_pos(bContext *C, wmEvent *event, float co[2])
{
ED_clip_point_stable_pos(C, event->mval[0], event->mval[1], &co[0], &co[1]);
diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h
index f32cb1651a1..00105fb8561 100644
--- a/source/blender/editors/space_clip/clip_intern.h
+++ b/source/blender/editors/space_clip/clip_intern.h
@@ -134,6 +134,7 @@ void clip_draw_sfra_efra(struct View2D *v2d, struct Scene *scene);
void CLIP_OT_select(struct wmOperatorType *ot);
void CLIP_OT_select_all(struct wmOperatorType *ot);
void CLIP_OT_select_border(struct wmOperatorType *ot);
+void CLIP_OT_select_lasso(struct wmOperatorType *ot);
void CLIP_OT_select_circle(struct wmOperatorType *ot);
void CLIP_OT_select_grouped(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index a3e17d420b3..a6fda200ff4 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -416,6 +416,7 @@ static void clip_operatortypes(void)
WM_operatortype_append(CLIP_OT_select);
WM_operatortype_append(CLIP_OT_select_all);
WM_operatortype_append(CLIP_OT_select_border);
+ WM_operatortype_append(CLIP_OT_select_lasso);
WM_operatortype_append(CLIP_OT_select_circle);
WM_operatortype_append(CLIP_OT_select_grouped);
@@ -589,6 +590,11 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "CLIP_OT_select_circle", CKEY, KM_PRESS, 0, 0);
WM_keymap_add_menu(keymap, "CLIP_MT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0);
+ kmi = WM_keymap_add_item(keymap, "CLIP_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "deselect", FALSE);
+ kmi = WM_keymap_add_item(keymap, "CLIP_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_SHIFT | KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "deselect", TRUE);
+
/* marker */
WM_keymap_add_item(keymap, "CLIP_OT_add_marker_slide", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index fc93bcc0409..3d1ff26d586 100644
--- a/source/blender/editors/space_clip/tracking_ops.c
+++ b/source/blender/editors/space_clip/tracking_ops.c
@@ -42,6 +42,7 @@
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_rect.h"
+#include "BLI_lasso.h"
#include "BLI_blenlib.h"
#include "BKE_main.h"
@@ -943,6 +944,96 @@ void CLIP_OT_select_border(wmOperatorType *ot)
WM_operator_properties_gesture_border(ot, TRUE);
}
+
+static int do_lasso_select_marker(bContext *C, int mcords[][2], short moves, short select)
+{
+ ARegion *ar = CTX_wm_region(C);
+ SpaceClip *sc = CTX_wm_space_clip(C);
+ MovieClip *clip = ED_space_clip(sc);
+ MovieTracking *tracking = &clip->tracking;
+ MovieTrackingTrack *track;
+ ListBase *tracksbase = BKE_tracking_get_tracks(tracking);
+ rcti rect;
+ int change = FALSE;
+
+ /* get rectangle from operator */
+ BLI_lasso_boundbox(&rect, mcords, moves);
+
+ /* do actual selection */
+ track = tracksbase->first;
+ while (track) {
+ if ((track->flag & TRACK_HIDDEN) == 0) {
+ MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr);
+
+ if (MARKER_VISIBLE(sc, track, marker)) {
+ float screen_co[2];
+
+ /* marker in screen coords */
+ ED_clip_point_stable_pos__reverse(sc, ar, marker->pos, screen_co);
+
+ if (BLI_in_rcti(&rect, screen_co[0], screen_co[1]) &&
+ BLI_lasso_is_point_inside(mcords, moves, screen_co[0], screen_co[1], V2D_IS_CLIPPED))
+ {
+ BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, !select);
+ }
+
+ change = TRUE;
+ }
+ }
+
+ track = track->next;
+ }
+
+ if (change) {
+ BKE_tracking_dopesheet_tag_update(tracking);
+
+ WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL);
+ }
+
+ return change;
+}
+
+static int clip_lasso_select_exec(bContext *C, wmOperator *op)
+{
+ int mcords_tot;
+ int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
+
+ if (mcords) {
+ short select;
+
+ select = !RNA_boolean_get(op->ptr, "deselect");
+ do_lasso_select_marker(C, mcords, mcords_tot, select);
+
+ MEM_freeN(mcords);
+
+ return OPERATOR_FINISHED;
+ }
+ return OPERATOR_PASS_THROUGH;
+}
+
+void CLIP_OT_select_lasso(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Lasso Select";
+ ot->description = "Select markers using lasso selection";
+ ot->idname = "CLIP_OT_select_lasso";
+
+ /* api callbacks */
+ ot->invoke = WM_gesture_lasso_invoke;
+ ot->modal = WM_gesture_lasso_modal;
+ ot->exec = clip_lasso_select_exec;
+ ot->poll = ED_space_clip_tracking_poll;
+ ot->cancel = WM_gesture_lasso_cancel;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+
+ /* properties */
+ 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");
+}
+
/********************** circle select operator *********************/
static int marker_inside_ellipse(MovieTrackingMarker *marker, float offset[2], float ellipse[2])
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index f340c53f528..9629fd7da0c 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -820,9 +820,13 @@ void FILE_OT_parent(struct wmOperatorType *ot)
static int file_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
{
SpaceFile *sfile= CTX_wm_space_file(C);
+ struct FSMenu* fsmenu = fsmenu_get();
ED_fileselect_clear(C, sfile);
+ /* refresh system directory menu */
+ fsmenu_refresh_system_category(fsmenu);
+
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
return OPERATOR_FINISHED;
@@ -1099,7 +1103,11 @@ static void file_expand_directory(bContext *C)
SpaceFile *sfile= CTX_wm_space_file(C);
if (sfile->params) {
- if ( sfile->params->dir[0] == '~' ) {
+ /* TODO, what about // when relbase isn't valid? */
+ if (G.relbase_valid && strncmp(sfile->params->dir, "//", 2) == 0) {
+ BLI_path_abs(sfile->params->dir, G.main->name);
+ }
+ else if (sfile->params->dir[0] == '~') {
char tmpstr[sizeof(sfile->params->dir)-1];
BLI_strncpy(tmpstr, sfile->params->dir+1, sizeof(tmpstr));
BLI_join_dirfile(sfile->params->dir, sizeof(sfile->params->dir), BLI_getDefaultDocumentFolder(), tmpstr);
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 28ac674f079..ac3cc15fe88 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -39,6 +39,7 @@
#include "DNA_space_types.h" /* FILE_MAX */
+#include "BLI_utildefines.h"
#include "BLI_blenlib.h"
#include "BLI_linklist.h"
#include "BLI_dynstr.h"
@@ -54,7 +55,7 @@
#endif
#ifdef __APPLE__
- /* XXX BIG WARNING: carbon.h can not be included in blender code, it conflicts with struct ID */
+/* XXX BIG WARNING: carbon.h can not be included in blender code, it conflicts with struct ID */
# define ID ID_
# include <CoreServices/CoreServices.h>
#endif /* __APPLE__ */
@@ -68,7 +69,7 @@
/* FSMENU HANDLING */
- /* FSMenuEntry's without paths indicate seperators */
+/* FSMenuEntry's without paths indicate seperators */
typedef struct _FSMenuEntry FSMenuEntry;
struct _FSMenuEntry {
FSMenuEntry *next;
@@ -77,8 +78,7 @@ struct _FSMenuEntry {
short save;
};
-typedef struct FSMenu
-{
+typedef struct FSMenu {
FSMenuEntry *fsmenu_system;
FSMenuEntry *fsmenu_bookmarks;
FSMenuEntry *fsmenu_recent;
@@ -87,15 +87,15 @@ typedef struct FSMenu
static FSMenu *g_fsmenu = NULL;
-struct FSMenu* fsmenu_get(void)
+FSMenu *fsmenu_get(void)
{
if (!g_fsmenu) {
- g_fsmenu=MEM_callocN(sizeof(struct FSMenu), "fsmenu");
+ g_fsmenu = MEM_callocN(sizeof(struct FSMenu), "fsmenu");
}
return g_fsmenu;
}
-static FSMenuEntry *fsmenu_get_category(struct FSMenu* fsmenu, FSMenuCategory category)
+static FSMenuEntry *fsmenu_get_category(struct FSMenu *fsmenu, FSMenuCategory category)
{
FSMenuEntry *fsms = NULL;
@@ -113,7 +113,7 @@ static FSMenuEntry *fsmenu_get_category(struct FSMenu* fsmenu, FSMenuCategory ca
return fsms;
}
-static void fsmenu_set_category(struct FSMenu* fsmenu, FSMenuCategory category, FSMenuEntry *fsms)
+static void fsmenu_set_category(struct FSMenu *fsmenu, FSMenuCategory category, FSMenuEntry *fsms)
{
switch (category) {
case FS_CATEGORY_SYSTEM:
@@ -128,49 +128,49 @@ static void fsmenu_set_category(struct FSMenu* fsmenu, FSMenuCategory category,
}
}
-int fsmenu_get_nentries(struct FSMenu* fsmenu, FSMenuCategory category)
+int fsmenu_get_nentries(struct FSMenu *fsmenu, FSMenuCategory category)
{
FSMenuEntry *fsme;
- int count= 0;
+ int count = 0;
- for (fsme= fsmenu_get_category(fsmenu, category); fsme; fsme= fsme->next)
+ for (fsme = fsmenu_get_category(fsmenu, category); fsme; fsme = fsme->next)
count++;
return count;
}
-char *fsmenu_get_entry(struct FSMenu* fsmenu, FSMenuCategory category, int idx)
+char *fsmenu_get_entry(struct FSMenu *fsmenu, FSMenuCategory category, int idx)
{
FSMenuEntry *fsme;
- for (fsme= fsmenu_get_category(fsmenu, category); fsme && idx; fsme= fsme->next)
+ for (fsme = fsmenu_get_category(fsmenu, category); fsme && idx; fsme = fsme->next)
idx--;
- return fsme?fsme->path:NULL;
+ return fsme ? fsme->path : NULL;
}
-short fsmenu_can_save (struct FSMenu* fsmenu, FSMenuCategory category, int idx)
+short fsmenu_can_save(struct FSMenu *fsmenu, FSMenuCategory category, int idx)
{
FSMenuEntry *fsme;
- for (fsme= fsmenu_get_category(fsmenu, category); fsme && idx; fsme= fsme->next)
+ for (fsme = fsmenu_get_category(fsmenu, category); fsme && idx; fsme = fsme->next)
idx--;
- return fsme?fsme->save:0;
+ return fsme ? fsme->save : 0;
}
-void fsmenu_insert_entry(struct FSMenu* fsmenu, FSMenuCategory category, const char *path, int sorted, short save)
+void fsmenu_insert_entry(struct FSMenu *fsmenu, FSMenuCategory category, const char *path, int sorted, short save)
{
FSMenuEntry *prev;
FSMenuEntry *fsme;
FSMenuEntry *fsms;
fsms = fsmenu_get_category(fsmenu, category);
- prev= fsme= fsms;
+ prev = fsme = fsms;
- for (; fsme; prev= fsme, fsme= fsme->next) {
+ for (; fsme; prev = fsme, fsme = fsme->next) {
if (fsme->path) {
- const int cmp_ret= BLI_path_cmp(path, fsme->path);
+ const int cmp_ret = BLI_path_cmp(path, fsme->path);
if (cmp_ret == 0) {
return;
}
@@ -188,26 +188,26 @@ void fsmenu_insert_entry(struct FSMenu* fsmenu, FSMenuCategory category, const c
}
}
- fsme= MEM_mallocN(sizeof(*fsme), "fsme");
- fsme->path= BLI_strdup(path);
+ fsme = MEM_mallocN(sizeof(*fsme), "fsme");
+ fsme->path = BLI_strdup(path);
fsme->save = save;
if (prev) {
- fsme->next= prev->next;
- prev->next= fsme;
+ fsme->next = prev->next;
+ prev->next = fsme;
}
else {
- fsme->next= fsms;
+ fsme->next = fsms;
fsmenu_set_category(fsmenu, category, fsme);
}
}
-void fsmenu_remove_entry(struct FSMenu* fsmenu, FSMenuCategory category, int idx)
+void fsmenu_remove_entry(struct FSMenu *fsmenu, FSMenuCategory category, int idx)
{
- FSMenuEntry *prev= NULL, *fsme= NULL;
+ FSMenuEntry *prev = NULL, *fsme = NULL;
FSMenuEntry *fsms = fsmenu_get_category(fsmenu, category);
- for (fsme= fsms; fsme && idx; prev= fsme, fsme= fsme->next)
+ for (fsme = fsms; fsme && idx; prev = fsme, fsme = fsme->next)
idx--;
if (fsme) {
@@ -218,10 +218,10 @@ void fsmenu_remove_entry(struct FSMenu* fsmenu, FSMenuCategory category, int idx
/* remove fsme from list */
if (prev) {
- prev->next= fsme->next;
+ prev->next = fsme->next;
}
else {
- fsms= fsme->next;
+ fsms = fsme->next;
fsmenu_set_category(fsmenu, category, fsms);
}
/* free entry */
@@ -231,16 +231,16 @@ void fsmenu_remove_entry(struct FSMenu* fsmenu, FSMenuCategory category, int idx
}
}
-void fsmenu_write_file(struct FSMenu* fsmenu, const char *filename)
+void fsmenu_write_file(struct FSMenu *fsmenu, const char *filename)
{
- FSMenuEntry *fsme= NULL;
- int nskip= 0;
+ FSMenuEntry *fsme = NULL;
+ int nskip = 0;
FILE *fp = BLI_fopen(filename, "w");
if (!fp) return;
fprintf(fp, "[Bookmarks]\n");
- for (fsme= fsmenu_get_category(fsmenu, FS_CATEGORY_BOOKMARKS); fsme; fsme= fsme->next) {
+ for (fsme = fsmenu_get_category(fsmenu, FS_CATEGORY_BOOKMARKS); fsme; fsme = fsme->next) {
if (fsme->path && fsme->save) {
fprintf(fp, "%s\n", fsme->path);
}
@@ -248,10 +248,10 @@ void fsmenu_write_file(struct FSMenu* fsmenu, const char *filename)
fprintf(fp, "[Recent]\n");
nskip = fsmenu_get_nentries(fsmenu, FS_CATEGORY_RECENT) - FSMENU_RECENT_MAX;
// skip first entries if list too long
- for (fsme= fsmenu_get_category(fsmenu, FS_CATEGORY_RECENT); fsme && (nskip>0); fsme= fsme->next, --nskip) {
+ for (fsme = fsmenu_get_category(fsmenu, FS_CATEGORY_RECENT); fsme && (nskip > 0); fsme = fsme->next, --nskip) {
/* pass */
}
- for (; fsme; fsme= fsme->next) {
+ for (; fsme; fsme = fsme->next) {
if (fsme->path && fsme->save) {
fprintf(fp, "%s\n", fsme->path);
}
@@ -259,7 +259,7 @@ void fsmenu_write_file(struct FSMenu* fsmenu, const char *filename)
fclose(fp);
}
-void fsmenu_read_bookmarks(struct FSMenu* fsmenu, const char *filename)
+void fsmenu_read_bookmarks(struct FSMenu *fsmenu, const char *filename)
{
char line[256];
FSMenuCategory category = FS_CATEGORY_BOOKMARKS;
@@ -268,20 +268,26 @@ 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 */
- if (strncmp(line, "[Bookmarks]", 11)==0) {
+ while (fgets(line, 256, fp) != NULL) { /* read a line */
+ if (strncmp(line, "[Bookmarks]", 11) == 0) {
category = FS_CATEGORY_BOOKMARKS;
}
- else if (strncmp(line, "[Recent]", 8)==0) {
+ else if (strncmp(line, "[Recent]", 8) == 0) {
category = FS_CATEGORY_RECENT;
}
else {
int len = strlen(line);
- if (len>0) {
- if (line[len-1] == '\n') {
- line[len-1] = '\0';
+ if (len > 0) {
+ if (line[len - 1] == '\n') {
+ line[len - 1] = '\0';
}
- if (BLI_exists(line)) {
+ /* don't do this because it can be slow on network drives,
+ * having a bookmark from a drive thats ejected or so isn't
+ * all _that_ bad */
+#if 0
+ if (BLI_exists(line))
+#endif
+ {
fsmenu_insert_entry(fsmenu, category, line, 0, 1);
}
}
@@ -290,7 +296,7 @@ void fsmenu_read_bookmarks(struct FSMenu* fsmenu, const char *filename)
fclose(fp);
}
-void fsmenu_read_system(struct FSMenu* fsmenu)
+void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
{
char line[256];
#ifdef WIN32
@@ -300,30 +306,32 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
char tmps[4];
int i;
- tmp= GetLogicalDrives();
+ tmp = GetLogicalDrives();
- for (i=0; i < 26; i++) {
- if ((tmp>>i) & 1) {
- tmps[0]='A'+i;
- tmps[1]=':';
- tmps[2]='\\';
- tmps[3]=0;
+ for (i = 0; i < 26; i++) {
+ if ((tmp >> i) & 1) {
+ tmps[0] = 'A' + i;
+ tmps[1] = ':';
+ tmps[2] = '\\';
+ tmps[3] = 0;
fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, tmps, 1, 0);
}
}
/* Adding Desktop and My Documents */
- SHGetSpecialFolderPath(0, line, CSIDL_PERSONAL, 0);
- fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
- SHGetSpecialFolderPath(0, line, CSIDL_DESKTOPDIRECTORY, 0);
- fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
+ if (read_bookmarks) {
+ SHGetSpecialFolderPath(0, line, CSIDL_PERSONAL, 0);
+ fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
+ SHGetSpecialFolderPath(0, line, CSIDL_DESKTOPDIRECTORY, 0);
+ fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
+ }
}
#else
#ifdef __APPLE__
{
#if (MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4)
- OSErr err=noErr;
+ OSErr err = noErr;
int i;
const char *home;
@@ -337,7 +345,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
continue;
FSRefMakePath(&dir, path, FILE_MAX);
- if (strcmp((char*)path, "/home") && strcmp((char*)path, "/net")) {
+ if (strcmp((char *)path, "/home") && strcmp((char *)path, "/net")) {
/* /net and /home are meaningless on OSX, home folders are stored in /Users */
fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)path, 1, 0);
}
@@ -347,7 +355,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
* assume they are the standard ones
* TODO : replace hardcoded paths with proper BLI_get_folder calls */
home = getenv("HOME");
- if (home) {
+ if (read_bookmarks && home) {
BLI_snprintf(line, 256, "%s/", home);
fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
BLI_snprintf(line, 256, "%s/Desktop/", home);
@@ -387,13 +395,13 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
pathesArray = LSSharedFileListCopySnapshot(list, &seed);
pathesCount = CFArrayGetCount(pathesArray);
- for (i=0; i<pathesCount; i++) {
+ for (i = 0; i < pathesCount; i++) {
itemRef = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(pathesArray, i);
err = LSSharedFileListItemResolve(itemRef,
- kLSSharedFileListNoUserInteraction |
+ kLSSharedFileListNoUserInteraction |
kLSSharedFileListDoNotMountVolumes,
- &cfURL, NULL);
+ &cfURL, NULL);
if (err != noErr)
continue;
@@ -412,7 +420,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
/* Then get network volumes */
err = noErr;
- for (i=1; err!=nsvErr; i++) {
+ for (i = 1; err != nsvErr; i++) {
FSRef dir;
FSVolumeRefNum volRefNum;
struct GetVolParmsInfoBuffer volParmsBuffer;
@@ -432,40 +440,42 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
}
/* Finally get user favorite places */
- list = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL);
- pathesArray = LSSharedFileListCopySnapshot(list, &seed);
- pathesCount = CFArrayGetCount(pathesArray);
-
- for (i=0; i<pathesCount; i++) {
- itemRef = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(pathesArray, i);
+ if(read_bookmarks) {
+ list = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL);
+ pathesArray = LSSharedFileListCopySnapshot(list, &seed);
+ pathesCount = CFArrayGetCount(pathesArray);
- err = LSSharedFileListItemResolve(itemRef,
- kLSSharedFileListNoUserInteraction |
- kLSSharedFileListDoNotMountVolumes,
- &cfURL, NULL);
- if (err != noErr)
- continue;
-
- pathString = CFURLCopyFileSystemPath(cfURL, kCFURLPOSIXPathStyle);
-
- if (!CFStringGetCString(pathString, line, 256, kCFStringEncodingASCII))
- continue;
- fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
+ for (i = 0; i < pathesCount; i++) {
+ itemRef = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(pathesArray, i);
+
+ err = LSSharedFileListItemResolve(itemRef,
+ kLSSharedFileListNoUserInteraction |
+ kLSSharedFileListDoNotMountVolumes,
+ &cfURL, NULL);
+ if (err != noErr)
+ continue;
+
+ pathString = CFURLCopyFileSystemPath(cfURL, kCFURLPOSIXPathStyle);
+
+ if (!CFStringGetCString(pathString, line, 256, kCFStringEncodingASCII))
+ continue;
+ fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
+
+ CFRelease(pathString);
+ CFRelease(cfURL);
+ }
- CFRelease(pathString);
- CFRelease(cfURL);
+ CFRelease(pathesArray);
+ CFRelease(list);
}
-
- CFRelease(pathesArray);
- CFRelease(list);
#endif /* OSX 10.5+ */
}
#else
/* unix */
{
- const char *home= getenv("HOME");
+ const char *home = getenv("HOME");
- if (home) {
+ if (read_bookmarks && home) {
BLI_snprintf(line, FILE_MAXDIR, "%s/", home);
fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
BLI_snprintf(line, FILE_MAXDIR, "%s/Desktop/", home);
@@ -475,34 +485,34 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
}
{
- int found= 0;
+ int found = 0;
#ifdef __linux__
/* loop over mount points */
struct mntent *mnt;
int len;
FILE *fp;
- fp = setmntent (MOUNTED, "r");
+ fp = setmntent(MOUNTED, "r");
if (fp == NULL) {
fprintf(stderr, "could not get a list of mounted filesystemts\n");
}
else {
- while ((mnt = getmntent (fp))) {
+ while ((mnt = getmntent(fp))) {
/* not sure if this is right, but seems to give the relevant mnts */
if (strncmp(mnt->mnt_fsname, "/dev", 4))
continue;
- len= strlen(mnt->mnt_dir);
- if (len && mnt->mnt_dir[len-1] != '/') {
+ len = strlen(mnt->mnt_dir);
+ if (len && mnt->mnt_dir[len - 1] != '/') {
BLI_snprintf(line, FILE_MAXDIR, "%s/", mnt->mnt_dir);
fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, line, 1, 0);
}
else
fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, mnt->mnt_dir, 1, 0);
- found= 1;
+ found = 1;
}
- if (endmntent (fp) == 0) {
+ if (endmntent(fp) == 0) {
fprintf(stderr, "could not close the list of mounted filesystemts\n");
}
}
@@ -518,25 +528,33 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
}
-static void fsmenu_free_category(struct FSMenu* fsmenu, FSMenuCategory category)
+static void fsmenu_free_category(struct FSMenu *fsmenu, FSMenuCategory category)
{
- FSMenuEntry *fsme= fsmenu_get_category(fsmenu, category);
+ FSMenuEntry *fsme = fsmenu_get_category(fsmenu, category);
while (fsme) {
- FSMenuEntry *n= fsme->next;
+ FSMenuEntry *n = fsme->next;
if (fsme->path) MEM_freeN(fsme->path);
MEM_freeN(fsme);
- fsme= n;
+ fsme = n;
}
}
-void fsmenu_free(struct FSMenu* fsmenu)
+void fsmenu_refresh_system_category(struct FSMenu *fsmenu)
+{
+ fsmenu_free_category(fsmenu, FS_CATEGORY_SYSTEM);
+ fsmenu_set_category(fsmenu, FS_CATEGORY_SYSTEM, NULL);
+
+ /* Add all entries to system category */
+ fsmenu_read_system(fsmenu, FALSE);
+}
+
+void fsmenu_free(struct FSMenu *fsmenu)
{
fsmenu_free_category(fsmenu, FS_CATEGORY_SYSTEM);
fsmenu_free_category(fsmenu, FS_CATEGORY_BOOKMARKS);
fsmenu_free_category(fsmenu, FS_CATEGORY_RECENT);
MEM_freeN(fsmenu);
}
-
diff --git a/source/blender/editors/space_file/fsmenu.h b/source/blender/editors/space_file/fsmenu.h
index c926a4f382c..e5b3d54ac9f 100644
--- a/source/blender/editors/space_file/fsmenu.h
+++ b/source/blender/editors/space_file/fsmenu.h
@@ -74,10 +74,13 @@ void fsmenu_write_file (struct FSMenu* fsmenu, const char *filename);
void fsmenu_read_bookmarks (struct FSMenu* fsmenu, const char *filename);
/** adds system specific directories */
-void fsmenu_read_system (struct FSMenu* fsmenu);
+void fsmenu_read_system (struct FSMenu* fsmenu, int read_bookmarks);
/** Free's all the memory associated with the fsmenu */
void fsmenu_free (struct FSMenu* fsmenu);
+ /** Refresh system directory menu */
+void fsmenu_refresh_system_category (struct FSMenu* fsmenu);
+
#endif
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index dac5d1e1347..a90daa7e1e9 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -151,6 +151,9 @@ static void file_init(struct wmWindowManager *UNUSED(wm), ScrArea *sa)
SpaceFile *sfile= (SpaceFile*)sa->spacedata.first;
//printf("file_init\n");
+ /* refresh system directory list */
+ fsmenu_refresh_system_category(fsmenu_get());
+
if (sfile->layout) sfile->layout->dirty= TRUE;
}
@@ -613,7 +616,7 @@ void ED_file_init(void)
{
char *cfgdir = BLI_get_folder(BLENDER_USER_CONFIG, NULL);
- fsmenu_read_system(fsmenu_get());
+ fsmenu_read_system(fsmenu_get(), TRUE);
if (cfgdir) {
char name[FILE_MAX];
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 58fbceb999d..e2ab5ea64e4 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -2210,7 +2210,7 @@ static int image_record_composite_apply(bContext *C, wmOperator *op)
BKE_image_all_free_anim_ibufs(scene->r.cfra);
ntreeCompositTagAnimated(scene->nodetree);
- ntreeCompositExecTree(scene->nodetree, &scene->r, scene->r.cfra != rcd->old_cfra); /* 1 is no previews */
+ ntreeCompositExecTree(scene->nodetree, &scene->r, 0, scene->r.cfra != rcd->old_cfra); /* 1 is no previews */
ED_area_tag_redraw(CTX_wm_area(C));
diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c
index 71aef18666b..1595889f596 100644
--- a/source/blender/editors/space_logic/logic_buttons.c
+++ b/source/blender/editors/space_logic/logic_buttons.c
@@ -109,8 +109,9 @@ static int cut_links_exec(bContext *C, wmOperator *op)
float loc[2];
RNA_float_get_array(&itemptr, "loc", loc);
- UI_view2d_region_to_view(&ar->v2d, (short)loc[0], (short)loc[1],
- &mcoords[i][0], &mcoords[i][1]);
+ UI_view2d_region_to_view(&ar->v2d,
+ (int)loc[0], (int)loc[1],
+ &mcoords[i][0], &mcoords[i][1]);
i++;
if (i>= 256) break;
}
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 205202a0658..ac12f2ffd31 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -1262,6 +1262,9 @@ static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *
}
col= uiLayoutColumn(layout, 0);
+
+ if (RNA_enum_get(&imaptr, "type")== IMA_TYPE_MULTILAYER)
+ uiItemR(col, ptr, "layer", 0, NULL, ICON_NONE);
}
static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -1967,6 +1970,256 @@ static void node_composit_buts_moviedistortion(uiLayout *layout, bContext *C, Po
uiItemR(layout, ptr, "distortion_type", 0, "", 0);
}
+static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiLayout *row;
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "red", 0, NULL, ICON_NONE);
+ uiItemR(row, ptr, "green", 0, NULL, ICON_NONE);
+ uiItemR(row, ptr, "blue", 0, NULL, ICON_NONE);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "midtones_start", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_end", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "master_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "master_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "master_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "master_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "master_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemL(row, "Saturation", 0);
+ uiItemL(row, "Contrast", 0);
+ uiItemL(row, "Gamma", 0);
+ uiItemL(row, "Gain", 0);
+ uiItemL(row, "Lift", 0);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "highlights_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "midtones_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "shadows_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+}
+static void node_composit_buts_colorcorrection_but(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) {
+ uiLayout *row;
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "red", 0, NULL, ICON_NONE);
+ uiItemR(row, ptr, "green", 0, NULL, ICON_NONE);
+ uiItemR(row, ptr, "blue", 0, NULL, ICON_NONE);
+ row = layout;
+ uiItemL(row, "Saturation", 0);
+ uiItemR(row, ptr, "master_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ uiItemL(row, "Contrast", 0);
+ uiItemR(row, ptr, "master_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ uiItemL(row, "Gamma", 0);
+ uiItemR(row, ptr, "master_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ uiItemL(row, "Gain", 0);
+ uiItemR(row, ptr, "master_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ uiItemL(row, "Lift", 0);
+ uiItemR(row, ptr, "master_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "highlights_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "shadows_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ row = uiLayoutRow(layout, 0);
+ uiItemR(row, ptr, "midtones_start", 0, NULL, ICON_NONE);
+ uiItemR(row, ptr, "midtones_end", 0, NULL, ICON_NONE);
+}
+
+static void node_composit_buts_switch(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiItemR(layout, ptr, "check", 0, NULL, ICON_NONE);
+}
+
+static void node_composit_buts_boxmask(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiLayout *row;
+
+ row= uiLayoutRow(layout, 1);
+ uiItemR(row, ptr, "x", 0, "X", ICON_NONE);
+ uiItemR(row, ptr, "y", 0, "Y", ICON_NONE);
+
+ row= uiLayoutRow(layout, 1);
+ uiItemR(row, ptr, "width", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "height", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ uiItemR(layout, ptr, "rotation", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "mask_type", 0, NULL, ICON_NONE);
+}
+
+static void node_composit_buts_bokehimage(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiItemR(layout, ptr, "flaps", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "angle", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "rounding", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "catadioptric", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "shift", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+}
+
+void node_composit_backdrop_viewer(SpaceNode* snode, ImBuf* backdrop, bNode* node, int x, int y)
+{
+// node_composit_backdrop_canvas(snode, backdrop, node, x, y);
+ if (node->custom1 == 0) { /// @todo: why did we need this one?
+ const float backdropWidth = backdrop->x;
+ const float backdropHeight = backdrop->y;
+ const float cx = x+snode->zoom*backdropWidth*node->custom3;
+ const float cy = y+snode->zoom*backdropHeight*node->custom4;
+
+ glColor3f(1.0, 1.0, 1.0);
+
+ glBegin(GL_LINES);
+ glVertex2f(cx-25, cy-25);
+ glVertex2f(cx+25, cy+25);
+ glVertex2f(cx+25, cy-25);
+ glVertex2f(cx-25, cy+25);
+ glEnd();
+ }
+}
+
+void node_composit_backdrop_boxmask(SpaceNode* snode, ImBuf* backdrop, bNode* node, int x, int y)
+{
+ NodeBoxMask * boxmask = node->storage;
+ const float backdropWidth = backdrop->x;
+ const float backdropHeight = backdrop->y;
+ const float aspect = backdropWidth/backdropHeight;
+ const float rad = DEG2RAD(-boxmask->rotation);
+ const float cosine = cos(rad);
+ const float sine = sin(rad);
+ const float halveBoxWidth = backdropWidth*(boxmask->width/2.0f);
+ const float halveBoxHeight = backdropHeight*(boxmask->height/2.0f)*aspect;
+
+ float cx, cy, x1, x2, x3, x4;
+ float y1, y2, y3, y4;
+
+
+ /* keep this, saves us from a version patch */
+ if(snode->zoom==0.0f) snode->zoom= 1.0f;
+
+ glColor3f(1.0, 1.0, 1.0);
+
+ cx = x+snode->zoom*backdropWidth*boxmask->x;
+ cy = y+snode->zoom*backdropHeight*boxmask->y;
+
+ x1 = cx - (cosine*halveBoxWidth+sine*halveBoxHeight)*snode->zoom;
+ x2 = cx - (cosine*-halveBoxWidth+sine*halveBoxHeight)*snode->zoom;
+ x3 = cx - (cosine*-halveBoxWidth+sine*-halveBoxHeight)*snode->zoom;
+ x4 = cx - (cosine*halveBoxWidth+sine*-halveBoxHeight)*snode->zoom;
+ y1 = cy - (-sine*halveBoxWidth + cosine*halveBoxHeight)*snode->zoom;
+ y2 = cy - (-sine*-halveBoxWidth + cosine*halveBoxHeight)*snode->zoom;
+ y3 = cy - (-sine*-halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom;
+ y4 = cy - (-sine*halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom;
+
+ glBegin(GL_LINE_LOOP);
+ glVertex2f(x1, y1);
+ glVertex2f(x2, y2);
+ glVertex2f(x3, y3);
+ glVertex2f(x4, y4);
+ glEnd();
+}
+
+void node_composit_backdrop_ellipsemask(SpaceNode* snode, ImBuf* backdrop, bNode* node, int x, int y)
+{
+ NodeEllipseMask * ellipsemask = node->storage;
+ const float backdropWidth = backdrop->x;
+ const float backdropHeight = backdrop->y;
+ const float aspect = backdropWidth/backdropHeight;
+ const float rad = DEG2RAD(-ellipsemask->rotation);
+ const float cosine = cos(rad);
+ const float sine = sin(rad);
+ const float halveBoxWidth = backdropWidth*(ellipsemask->width/2.0f);
+ const float halveBoxHeight = backdropHeight*(ellipsemask->height/2.0f)*aspect;
+
+ float cx, cy, x1, x2, x3, x4;
+ float y1, y2, y3, y4;
+
+
+ /* keep this, saves us from a version patch */
+ if(snode->zoom==0.0f) snode->zoom= 1.0f;
+
+ glColor3f(1.0, 1.0, 1.0);
+
+ cx = x+snode->zoom*backdropWidth*ellipsemask->x;
+ cy = y+snode->zoom*backdropHeight*ellipsemask->y;
+
+ x1 = cx - (cosine*halveBoxWidth+sine*halveBoxHeight)*snode->zoom;
+ x2 = cx - (cosine*-halveBoxWidth+sine*halveBoxHeight)*snode->zoom;
+ x3 = cx - (cosine*-halveBoxWidth+sine*-halveBoxHeight)*snode->zoom;
+ x4 = cx - (cosine*halveBoxWidth+sine*-halveBoxHeight)*snode->zoom;
+ y1 = cy - (-sine*halveBoxWidth + cosine*halveBoxHeight)*snode->zoom;
+ y2 = cy - (-sine*-halveBoxWidth + cosine*halveBoxHeight)*snode->zoom;
+ y3 = cy - (-sine*-halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom;
+ y4 = cy - (-sine*halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom;
+
+ glBegin(GL_LINE_LOOP);
+
+ glVertex2f(x1, y1);
+ glVertex2f(x2, y2);
+ glVertex2f(x3, y3);
+ glVertex2f(x4, y4);
+ glEnd();
+}
+
+static void node_composit_buts_ellipsemask(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiLayout *row;
+ row= uiLayoutRow(layout, 1);
+ uiItemR(row, ptr, "x", 0, "X", ICON_NONE);
+ uiItemR(row, ptr, "y", 0, "Y", ICON_NONE);
+ row= uiLayoutRow(layout, 1);
+ uiItemR(row, ptr, "width", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+ uiItemR(row, ptr, "height", UI_ITEM_R_SLIDER, NULL, ICON_NONE);
+
+ uiItemR(layout, ptr, "rotation", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "mask_type", 0, NULL, ICON_NONE);
+}
+
+static void node_composit_buts_viewer_but(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiLayout *col;
+
+ uiItemR(layout, ptr, "tile_order", 0, NULL, ICON_NONE);
+ if (RNA_enum_get(ptr, "tile_order")==0) {
+ col= uiLayoutColumn(layout, 1);
+ uiItemR(col, ptr, "center_x", 0, NULL, ICON_NONE);
+ uiItemR(col, ptr, "center_y", 0, NULL, ICON_NONE);
+ }
+}
+
/* only once called */
static void node_composit_set_butfunc(bNodeType *ntype)
{
@@ -2134,6 +2387,30 @@ static void node_composit_set_butfunc(bNodeType *ntype)
case CMP_NODE_MOVIEDISTORTION:
ntype->uifunc= node_composit_buts_moviedistortion;
break;
+ case CMP_NODE_COLORCORRECTION:
+ ntype->uifunc=node_composit_buts_colorcorrection;
+ ntype->uifuncbut=node_composit_buts_colorcorrection_but;
+ break;
+ case CMP_NODE_SWITCH:
+ ntype->uifunc= node_composit_buts_switch;
+ break;
+ case CMP_NODE_MASK_BOX:
+ ntype->uifunc= node_composit_buts_boxmask;
+ ntype->uibackdropfunc = node_composit_backdrop_boxmask;
+ break;
+ case CMP_NODE_MASK_ELLIPSE:
+ ntype->uifunc= node_composit_buts_ellipsemask;
+ ntype->uibackdropfunc = node_composit_backdrop_ellipsemask;
+ break;
+ case CMP_NODE_BOKEHIMAGE:
+ ntype->uifunc= node_composit_buts_bokehimage;
+ break;
+ case CMP_NODE_VIEWER:
+ ntype->uifunc = NULL;
+ ntype->uifuncbut= node_composit_buts_viewer_but;
+ ntype->uibackdropfunc = node_composit_backdrop_viewer;
+ break;
+
default:
ntype->uifunc= NULL;
}
@@ -2432,6 +2709,19 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage)
glPixelZoom(1.0f, 1.0f);
}
}
+
+ /// @note draw selected info on backdrop
+ if (snode->edittree) {
+ bNode *node = snode->edittree->nodes.first;
+ while (node) {
+ if (node->flag & NODE_SELECT) {
+ if (node->typeinfo->uibackdropfunc) {
+ node->typeinfo->uibackdropfunc(snode, ibuf, node, x, y);
+ }
+ }
+ node = node->next;
+ }
+ }
glMatrixMode(GL_PROJECTION);
glPopMatrix();
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 3a920e16f8a..d93b1b1fcc8 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -914,6 +914,7 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d)
Scene *scene= CTX_data_scene(C);
int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT;
bNodeLinkDrag *nldrag;
+ LinkData *linkdata;
UI_ThemeClearColor(TH_BACK);
glClear(GL_COLOR_BUFFER_BIT);
@@ -965,8 +966,10 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d)
/* temporary links */
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- for (nldrag= snode->linkdrag.first; nldrag; nldrag= nldrag->next)
- node_draw_link(&ar->v2d, snode, nldrag->link);
+ for (nldrag= snode->linkdrag.first; nldrag; nldrag= nldrag->next) {
+ for (linkdata=nldrag->links.first; linkdata; linkdata=linkdata->next)
+ node_draw_link(&ar->v2d, snode, (bNodeLink *)linkdata->data);
+ }
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 9e59b3372cb..f71ce3f960c 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -185,8 +185,8 @@ static void compo_startjob(void *cjv, short *stop, short *do_update, float *prog
// XXX BIF_store_spare();
- ntreeCompositExecTree(ntree, &cj->scene->r, 1); /* 1 is do_previews */
-
+ ntreeCompositExecTree(ntree, &cj->scene->r, 0, 1); /* 1 is do_previews */
+
ntree->test_break= NULL;
ntree->stats_draw= NULL;
ntree->progress= NULL;
@@ -405,6 +405,10 @@ void ED_node_composit_default(Scene *sce)
}
sce->nodetree= ntreeAddTree("Compositing Nodetree", NTREE_COMPOSIT, 0);
+
+ sce->nodetree->chunksize = 256;
+ sce->nodetree->edit_quality = NTREE_QUALITY_HIGH;
+ sce->nodetree->render_quality = NTREE_QUALITY_HIGH;
ntemp.type = CMP_NODE_COMPOSITE;
out= nodeAddNode(sce->nodetree, &ntemp);
@@ -2324,15 +2328,13 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event)
SpaceNode *snode= CTX_wm_space_node(C);
ARegion *ar= CTX_wm_region(C);
bNodeLinkDrag *nldrag= op->customdata;
- bNode *tnode, *node;
- bNodeSocket *tsock= NULL, *sock;
+ bNode *tnode;
+ bNodeSocket *tsock= NULL;
bNodeLink *link;
+ LinkData *linkdata;
int in_out;
- in_out= nldrag->in_out;
- node= nldrag->node;
- sock= nldrag->sock;
- link= nldrag->link;
+ in_out = nldrag->in_out;
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1],
&snode->mx, &snode->my);
@@ -2342,57 +2344,86 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event)
if (in_out==SOCK_OUT) {
if (node_find_indicated_socket(snode, &tnode, &tsock, SOCK_IN)) {
- if (nodeFindLink(snode->edittree, sock, tsock)==NULL) {
- if ( link->tosock!= tsock && (!tnode || (tnode!=node && link->tonode!=tnode)) ) {
- link->tonode= tnode;
- link->tosock= tsock;
- if (link->prev==NULL && link->next==NULL) {
- BLI_addtail(&snode->edittree->links, link);
- }
-
- snode->edittree->update |= NTREE_UPDATE_LINKS;
- ntreeUpdateTree(snode->edittree);
- }
+ for (linkdata=nldrag->links.first; linkdata; linkdata=linkdata->next) {
+ link = linkdata->data;
+
+ /* skip if this is already the target socket */
+ if (link->tosock == tsock)
+ continue;
+ /* skip if socket is on the same node as the fromsock */
+ if (tnode && link->fromnode == tnode)
+ continue;
+
+ /* attach links to the socket */
+ link->tonode = tnode;
+ link->tosock = tsock;
+ /* add it to the node tree temporarily */
+ if (link->prev==NULL && link->next==NULL)
+ BLI_addtail(&snode->edittree->links, link);
+
+ snode->edittree->update |= NTREE_UPDATE_LINKS;
}
+ ntreeUpdateTree(snode->edittree);
}
else {
- if (link->tonode || link->tosock) {
- BLI_remlink(&snode->edittree->links, link);
- link->prev = link->next = NULL;
- link->tonode= NULL;
- link->tosock= NULL;
+ int do_update = 0;
+ for (linkdata=nldrag->links.first; linkdata; linkdata=linkdata->next) {
+ link = linkdata->data;
- snode->edittree->update |= NTREE_UPDATE_LINKS;
- ntreeUpdateTree(snode->edittree);
+ if (link->tonode || link->tosock) {
+ BLI_remlink(&snode->edittree->links, link);
+ link->prev = link->next = NULL;
+ link->tonode= NULL;
+ link->tosock= NULL;
+
+ snode->edittree->update |= NTREE_UPDATE_LINKS;
+ do_update = 1;
+ }
}
+ if (do_update)
+ ntreeUpdateTree(snode->edittree);
}
}
else {
if (node_find_indicated_socket(snode, &tnode, &tsock, SOCK_OUT)) {
- if (nodeFindLink(snode->edittree, sock, tsock)==NULL) {
- if (nodeCountSocketLinks(snode->edittree, tsock) < tsock->limit) {
- if ( link->fromsock!= tsock && (!tnode || (tnode!=node && link->fromnode!=tnode)) ) {
- link->fromnode= tnode;
- link->fromsock= tsock;
- if (link->prev==NULL && link->next==NULL) {
- BLI_addtail(&snode->edittree->links, link);
- }
-
- snode->edittree->update |= NTREE_UPDATE_LINKS;
- ntreeUpdateTree(snode->edittree);
- }
- }
+ for (linkdata=nldrag->links.first; linkdata; linkdata=linkdata->next) {
+ link = linkdata->data;
+
+ /* skip if this is already the target socket */
+ if (link->fromsock == tsock)
+ continue;
+ /* skip if socket is on the same node as the fromsock */
+ if (tnode && link->tonode == tnode)
+ continue;
+
+ /* attach links to the socket */
+ link->fromnode = tnode;
+ link->fromsock = tsock;
+ /* add it to the node tree temporarily */
+ if (link->prev==NULL && link->next==NULL)
+ BLI_addtail(&snode->edittree->links, link);
+
+ snode->edittree->update |= NTREE_UPDATE_LINKS;
}
+ ntreeUpdateTree(snode->edittree);
}
else {
- if (link->tonode || link->tosock) {
- BLI_remlink(&snode->edittree->links, link);
- link->prev = link->next = NULL;
- link->fromnode= NULL;
- link->fromsock= NULL;
- snode->edittree->update |= NTREE_UPDATE_LINKS;
- ntreeUpdateTree(snode->edittree);
+ int do_update = 0;
+ for (linkdata=nldrag->links.first; linkdata; linkdata=linkdata->next) {
+ link = linkdata->data;
+
+ if (link->fromnode || link->fromsock) {
+ BLI_remlink(&snode->edittree->links, link);
+ link->prev = link->next = NULL;
+ link->fromnode= NULL;
+ link->fromsock= NULL;
+
+ snode->edittree->update |= NTREE_UPDATE_LINKS;
+ do_update = 1;
+ }
}
+ if (do_update)
+ ntreeUpdateTree(snode->edittree);
}
}
@@ -2401,139 +2432,161 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event)
case LEFTMOUSE:
case RIGHTMOUSE:
- case MIDDLEMOUSE:
- if (link->tosock && link->fromsock) {
- /* send changed events for original tonode and new */
- snode_update(snode, link->tonode);
+ case MIDDLEMOUSE: {
+ for (linkdata=nldrag->links.first; linkdata; linkdata=linkdata->next) {
+ link = linkdata->data;
- /* we might need to remove a link */
- if (in_out==SOCK_OUT)
- node_remove_extra_links(snode, link->tosock, link);
-
- /* when linking to group outputs, update the socket type */
- /* XXX this should all be part of a generic update system */
- if (!link->tonode) {
- if(link->tosock->type != link->fromsock->type)
- nodeSocketSetType(link->tosock, link->fromsock->type);
- }
- }
- else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) {
- /* automatically add new group socket */
- if (link->tonode && link->tosock) {
- link->fromsock = node_group_expose_socket(snode->edittree, link->tosock, SOCK_IN);
- link->fromnode = NULL;
- if (link->prev==NULL && link->next==NULL) {
- BLI_addtail(&snode->edittree->links, link);
+ if (link->tosock && link->fromsock) {
+ /* send changed events for original tonode and new */
+ if (link->tonode)
+ snode_update(snode, link->tonode);
+
+ /* we might need to remove a link */
+ if (in_out==SOCK_OUT)
+ node_remove_extra_links(snode, link->tosock, link);
+
+ /* when linking to group outputs, update the socket type */
+ /* XXX this should all be part of a generic update system */
+ if (!link->tonode) {
+ if(link->tosock->type != link->fromsock->type)
+ nodeSocketSetType(link->tosock, link->fromsock->type);
}
- snode->edittree->update |= NTREE_UPDATE_GROUP_IN | NTREE_UPDATE_LINKS;
}
- else if (link->fromnode && link->fromsock) {
- link->tosock = node_group_expose_socket(snode->edittree, link->fromsock, SOCK_OUT);
- link->tonode = NULL;
- if (link->prev==NULL && link->next==NULL) {
- BLI_addtail(&snode->edittree->links, link);
+ else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) {
+ /* automatically add new group socket */
+ if (link->tonode && link->tosock) {
+ link->fromsock = node_group_expose_socket(snode->edittree, link->tosock, SOCK_IN);
+ link->fromnode = NULL;
+ if (link->prev==NULL && link->next==NULL)
+ BLI_addtail(&snode->edittree->links, link);
+
+ snode->edittree->update |= NTREE_UPDATE_GROUP_IN | NTREE_UPDATE_LINKS;
+ }
+ else if (link->fromnode && link->fromsock) {
+ link->tosock = node_group_expose_socket(snode->edittree, link->fromsock, SOCK_OUT);
+ link->tonode = NULL;
+ if (link->prev==NULL && link->next==NULL)
+ BLI_addtail(&snode->edittree->links, link);
+
+ snode->edittree->update |= NTREE_UPDATE_GROUP_OUT | NTREE_UPDATE_LINKS;
}
- snode->edittree->update |= NTREE_UPDATE_GROUP_OUT | NTREE_UPDATE_LINKS;
}
+ else
+ nodeRemLink(snode->edittree, link);
}
- else
- nodeRemLink(snode->edittree, link);
ntreeUpdateTree(snode->edittree);
snode_notify(C, snode);
snode_dag_update(C, snode);
BLI_remlink(&snode->linkdrag, nldrag);
+ /* links->data pointers are either held by the tree or freed already */
+ BLI_freelistN(&nldrag->links);
MEM_freeN(nldrag);
return OPERATOR_FINISHED;
+ }
}
return OPERATOR_RUNNING_MODAL;
}
/* return 1 when socket clicked */
-static int node_link_init(SpaceNode *snode, bNodeLinkDrag *nldrag)
+static bNodeLinkDrag *node_link_init(SpaceNode *snode, int detach)
{
- bNodeLink *link;
- int in_out = 0;
-
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link, *link_next, *oplink;
+ bNodeLinkDrag *nldrag = NULL;
+ LinkData *linkdata;
+ int num_links;
+
/* output indicated? */
- if (node_find_indicated_socket(snode, &nldrag->node, &nldrag->sock, SOCK_OUT)) {
- if (nodeCountSocketLinks(snode->edittree, nldrag->sock) < nldrag->sock->limit)
- in_out = SOCK_OUT;
- else {
- /* find if we break a link */
- for (link= snode->edittree->links.first; link; link= link->next) {
- if (link->fromsock==nldrag->sock)
- break;
- }
- if (link) {
- nldrag->node= link->tonode;
- nldrag->sock= link->tosock;
- nodeRemLink(snode->edittree, link);
- in_out = SOCK_IN;
+ if (node_find_indicated_socket(snode, &node, &sock, SOCK_OUT)) {
+ nldrag= MEM_callocN(sizeof(bNodeLinkDrag), "drag link op customdata");
+
+ num_links = nodeCountSocketLinks(snode->edittree, sock);
+ if (num_links > 0 && (num_links >= sock->limit || detach)) {
+ /* dragged links are fixed on input side */
+ nldrag->in_out = SOCK_IN;
+ /* detach current links and store them in the operator data */
+ for (link= snode->edittree->links.first; link; link= link_next) {
+ link_next = link->next;
+ if (link->fromsock==sock) {
+ linkdata = MEM_callocN(sizeof(LinkData), "drag link op link data");
+ linkdata->data = oplink = MEM_callocN(sizeof(bNodeLink), "drag link op link");
+ *oplink = *link;
+ BLI_addtail(&nldrag->links, linkdata);
+ nodeRemLink(snode->edittree, link);
+ }
}
}
+ else {
+ /* dragged links are fixed on output side */
+ nldrag->in_out = SOCK_OUT;
+ /* create a new link */
+ linkdata = MEM_callocN(sizeof(LinkData), "drag link op link data");
+ linkdata->data = oplink = MEM_callocN(sizeof(bNodeLink), "drag link op link");
+ oplink->fromnode = node;
+ oplink->fromsock = sock;
+ BLI_addtail(&nldrag->links, linkdata);
+ }
}
/* or an input? */
- else if (node_find_indicated_socket(snode, &nldrag->node, &nldrag->sock, SOCK_IN)) {
- if (nodeCountSocketLinks(snode->edittree, nldrag->sock) < nldrag->sock->limit)
- in_out = SOCK_IN;
- else {
- /* find if we break a link */
- for (link= snode->edittree->links.first; link; link= link->next) {
- if (link->tosock==nldrag->sock)
- break;
- }
- if (link) {
- /* send changed event to original tonode */
- if (link->tonode)
- snode_update(snode, link->tonode);
-
- nldrag->node= link->fromnode;
- nldrag->sock= link->fromsock;
- nodeRemLink(snode->edittree, link);
- in_out = SOCK_OUT;
+ else if (node_find_indicated_socket(snode, &node, &sock, SOCK_IN)) {
+ nldrag= MEM_callocN(sizeof(bNodeLinkDrag), "drag link op customdata");
+
+ num_links = nodeCountSocketLinks(snode->edittree, sock);
+ if (num_links > 0 && (num_links >= sock->limit || detach)) {
+ /* dragged links are fixed on output side */
+ nldrag->in_out = SOCK_OUT;
+ /* detach current links and store them in the operator data */
+ for (link= snode->edittree->links.first; link; link= link_next) {
+ link_next = link->next;
+ if (link->tosock==sock) {
+ linkdata = MEM_callocN(sizeof(LinkData), "drag link op link data");
+ linkdata->data = oplink = MEM_callocN(sizeof(bNodeLink), "drag link op link");
+ *oplink = *link;
+ BLI_addtail(&nldrag->links, linkdata);
+ nodeRemLink(snode->edittree, link);
+
+ /* send changed event to original link->tonode */
+ if (node)
+ snode_update(snode, node);
+ }
}
}
+ else {
+ /* dragged links are fixed on input side */
+ nldrag->in_out = SOCK_IN;
+ /* create a new link */
+ linkdata = MEM_callocN(sizeof(LinkData), "drag link op link data");
+ linkdata->data = oplink = MEM_callocN(sizeof(bNodeLink), "drag link op link");
+ oplink->tonode = node;
+ oplink->tosock = sock;
+ BLI_addtail(&nldrag->links, linkdata);
+ }
}
- return in_out;
+ return nldrag;
}
static int node_link_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceNode *snode= CTX_wm_space_node(C);
ARegion *ar= CTX_wm_region(C);
- bNodeLinkDrag *nldrag= MEM_callocN(sizeof(bNodeLinkDrag), "drag link op customdata");
-
+ bNodeLinkDrag *nldrag;
+ int detach = RNA_boolean_get(op->ptr, "detach");
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1],
&snode->mx, &snode->my);
ED_preview_kill_jobs(C);
- nldrag->in_out= node_link_init(snode, nldrag);
+ nldrag = node_link_init(snode, detach);
- if (nldrag->in_out) {
+ if (nldrag) {
op->customdata= nldrag;
-
- /* we make a temporal link */
- if (nldrag->in_out==SOCK_OUT) {
- nldrag->link= MEM_callocN(sizeof(bNodeLink), "link");
- nldrag->link->fromnode= nldrag->node;
- nldrag->link->fromsock= nldrag->sock;
- nldrag->link->tonode= NULL;
- nldrag->link->tosock= NULL;
- }
- else {
- nldrag->link= MEM_callocN(sizeof(bNodeLink), "link");
- nldrag->link->fromnode= NULL;
- nldrag->link->fromsock= NULL;
- nldrag->link->tonode= nldrag->node;
- nldrag->link->tosock= nldrag->sock;
- }
BLI_addtail(&snode->linkdrag, nldrag);
/* add modal handler */
@@ -2541,21 +2594,20 @@ static int node_link_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
- else {
- MEM_freeN(nldrag);
+ else
return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH;
- }
}
static int node_link_cancel(bContext *C, wmOperator *op)
{
SpaceNode *snode= CTX_wm_space_node(C);
bNodeLinkDrag *nldrag= op->customdata;
-
- nodeRemLink(snode->edittree, nldrag->link);
+
BLI_remlink(&snode->linkdrag, nldrag);
+
+ BLI_freelistN(&nldrag->links);
MEM_freeN(nldrag);
-
+
return OPERATOR_CANCELLED;
}
@@ -2575,6 +2627,8 @@ void NODE_OT_link(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
+
+ RNA_def_boolean(ot->srna, "detach", FALSE, "Detach", "Detach and redirect existing links");
}
/* ********************** Make Link operator ***************** */
@@ -2647,7 +2701,7 @@ static int cut_links_exec(bContext *C, wmOperator *op)
float loc[2];
RNA_float_get_array(&itemptr, "loc", loc);
- UI_view2d_region_to_view(&ar->v2d, (short)loc[0], (short)loc[1],
+ UI_view2d_region_to_view(&ar->v2d, (int)loc[0], (int)loc[1],
&mcoords[i][0], &mcoords[i][1]);
i++;
if (i>= 256) break;
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 17078443987..802c471c7aa 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -52,9 +52,11 @@ typedef struct bNodeLinkDrag
{
struct bNodeLinkDrag *next, *prev;
- struct bNode *node;
- struct bNodeSocket *sock;
- struct bNodeLink *link;
+ /* List of links dragged by the operator.
+ * Note: This is a list of LinkData structs on top of the actual bNodeLinks.
+ * This way the links can be added to the node tree while being stored in this list.
+ */
+ ListBase links;
int in_out;
} bNodeLinkDrag;
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index 7d9d7d736f6..5d586f08eb0 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -171,6 +171,8 @@ void node_keymap(struct wmKeyConfig *keyconf)
/* each of these falls through if not handled... */
WM_keymap_add_item(keymap, "NODE_OT_link", LEFTMOUSE, KM_PRESS, 0, 0);
+ kmi = WM_keymap_add_item(keymap, "NODE_OT_link", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
+ RNA_boolean_set(kmi->ptr, "detach", TRUE);
WM_keymap_add_item(keymap, "NODE_OT_resize", LEFTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 3d6fbb53e37..1590d08b4a1 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1323,7 +1323,7 @@ void SEQUENCER_OT_reload(struct wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER; /* no undo, the data changed is stored outside 'main' */
prop = RNA_def_boolean(ot->srna, "adjust_length", 0, "Adjust Length",
- "Adjust lenght of strips to their data lenght");
+ "Adjust length of strips to their data length");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 29e6b77e0d4..ef1521ab8ca 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -3003,7 +3003,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS
interp_v3_v3v3(fvec, vmid, v2, 0.8f);
}
else {
- angle = angle_v3v3v3(loop->prev->v->co, loop->v->co, loop->v->co);
+ angle = angle_v3v3v3(loop->prev->v->co, loop->v->co, loop->next->v->co);
interp_v3_v3v3(fvec, vmid, loop->v->co, 0.8f);
}
@@ -3616,7 +3616,7 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
else {
/* ob->bb was set by derived mesh system, do NULL check just to be sure */
- if (me->totpoly <= 4 || (ob->bb && ED_view3d_boundbox_clip(rv3d, ob->obmat, ob->bb))) {
+ if (me->totpoly <= 4 || (!ob->bb || ED_view3d_boundbox_clip(rv3d, ob->obmat, ob->bb))) {
glsl = draw_glsl_material(scene, ob, v3d, dt);
check_alpha = check_alpha_pass(base);
@@ -3633,19 +3633,21 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
}
- /* GPU_begin_object_materials checked if this is needed */
- if (do_alpha_after) {
- if (ob->dtx & OB_DRAWXRAY) {
- add_view3d_after(&v3d->afterdraw_xraytransp, base, flag);
- }
- else {
- add_view3d_after(&v3d->afterdraw_transp, base, flag);
+ if ((flag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) {
+ /* GPU_begin_object_materials checked if this is needed */
+ if (do_alpha_after) {
+ if (ob->dtx & OB_DRAWXRAY) {
+ add_view3d_after(&v3d->afterdraw_xraytransp, base, flag);
+ }
+ else {
+ add_view3d_after(&v3d->afterdraw_transp, base, flag);
+ }
}
- }
- else if (ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) {
- /* special case xray+transp when alpha is 1.0, without this the object vanishes */
- if (v3d->xray == 0 && v3d->transp == 0) {
- add_view3d_after(&v3d->afterdraw_xray, base, flag);
+ else if (ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) {
+ /* special case xray+transp when alpha is 1.0, without this the object vanishes */
+ if (v3d->xray == 0 && v3d->transp == 0) {
+ add_view3d_after(&v3d->afterdraw_xray, base, flag);
+ }
}
}
diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c
index 2bb08a4b9b4..10ae96d87bf 100644
--- a/source/blender/editors/space_view3d/drawvolume.c
+++ b/source/blender/editors/space_view3d/drawvolume.c
@@ -156,7 +156,7 @@ static int convex(float *p0, float *up, float *a, float *b)
return dot_v3v3(up, tmp) >= 0;
}
-void draw_volume(ARegion *ar, GPUTexture *tex, float *min, float *max, int res[3], float dx, GPUTexture *tex_shadow)
+void draw_volume(ARegion *ar, GPUTexture *tex, float min[3], float max[3], int res[3], float dx, GPUTexture *tex_shadow)
{
RegionView3D *rv3d = ar->regiondata;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 682d8950440..d9126b3809a 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1715,6 +1715,7 @@ typedef struct View3DAfter {
void add_view3d_after(ListBase *lb, Base *base, int flag)
{
View3DAfter *v3da = MEM_callocN(sizeof(View3DAfter), "View 3d after");
+ BLI_assert((base->flag & OB_FROMDUPLI) == 0);
BLI_addtail(lb, v3da);
v3da->base = base;
v3da->flag = flag;
@@ -1815,7 +1816,7 @@ static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Bas
RegionView3D *rv3d = ar->regiondata;
ListBase *lb;
DupliObject *dob_prev = NULL, *dob, *dob_next = NULL;
- Base tbase;
+ Base tbase = {NULL};
BoundBox bb, *bb_tmp; /* use a copy because draw_object, calls clear_mesh_caches */
GLuint displist = 0;
short transflag, use_displist = -1; /* -1 is initialize */
@@ -2433,7 +2434,9 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar,
ar->winrct.ymin = 0;
ar->winrct.xmax = winx;
ar->winrct.ymax = winy;
-
+
+ /* set theme */
+ UI_SetTheme(SPACE_VIEW3D, RGN_TYPE_WINDOW);
/* set flags */
G.f |= G_RENDER_OGL;
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 60a0d3bf12b..4bfb6dd9fd6 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -431,7 +431,7 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event)
if (vod->use_dyn_ofs) {
/* If there's no selection, lastofs is unmodified and last value since static */
- calculateTransformCenter(C, V3D_CENTROID, lastofs);
+ calculateTransformCenter(C, V3D_CENTROID, lastofs, NULL);
negate_v3_v3(vod->dyn_ofs, lastofs);
}
else if (U.uiflag & USER_ORBIT_ZBUF) {
@@ -1423,7 +1423,8 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf)
{VIEWROT_MODAL_SWITCH_ROTATE, "SWITCH_TO_ROTATE", 0, "Switch to Rotate"},
{VIEWROT_MODAL_SWITCH_MOVE, "SWITCH_TO_MOVE", 0, "Switch to Move"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "View3D Zoom Modal");
@@ -2175,7 +2176,7 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op))
if (obedit) {
- ok = minmax_verts(obedit, min, max); /* only selected */
+ ok = ED_view3d_minmax_verts(obedit, min, max); /* only selected */
}
else if (ob && (ob->mode & OB_MODE_POSE)) {
if (ob->pose) {
@@ -2189,9 +2190,9 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op))
bPoseChannel *pchan_tx = pchan->custom_tx ? pchan->custom_tx : pchan;
ok = 1;
mul_v3_m4v3(vec, ob->obmat, pchan_tx->pose_head);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
mul_v3_m4v3(vec, ob->obmat, pchan_tx->pose_tail);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
}
}
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index f387e1dd844..29edc0158d6 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -186,7 +186,7 @@ void view3d_toolshelf_register(struct ARegionType *art);
void view3d_tool_props_register(struct ARegionType *art);
/* view3d_snap.c */
-int minmax_verts(struct Object *obedit, float *min, float *max);
+int ED_view3d_minmax_verts(struct Object *obedit, float min[3], float max[3]);
void VIEW3D_OT_snap_selected_to_grid(struct wmOperatorType *ot);
void VIEW3D_OT_snap_selected_to_cursor(struct wmOperatorType *ot);
@@ -202,7 +202,7 @@ ARegion *view3d_has_tools_region(ScrArea *sa);
extern const char *view3d_context_dir[]; /* doc access */
/* draw_volume.c */
-void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float *min, float *max, int res[3], float dx, struct GPUTexture *tex_shadow);
+void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float min[3], float max[3], int res[3], float dx, struct GPUTexture *tex_shadow);
/* workaround for trivial but noticeable camera bug caused by imprecision
* between view border calculation in 2D/3D space, workaround for bug [#28037].
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index d7b03447d5b..583736716c6 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -827,22 +827,10 @@ static void view3d_lasso_select(bContext *C, ViewContext *vc, int mcords[][2], s
static int view3d_lasso_select_exec(bContext *C, wmOperator *op)
{
ViewContext vc;
- 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;
+ int mcords_tot;
+ int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
- if (i > 1) {
+ if (mcords) {
short extend, select;
view3d_operator_needs_opengl(C);
@@ -851,8 +839,10 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op)
extend = RNA_boolean_get(op->ptr, "extend");
select = !RNA_boolean_get(op->ptr, "deselect");
- view3d_lasso_select(C, &vc, mcords, i, extend, select);
+ view3d_lasso_select(C, &vc, mcords, mcords_tot, extend, select);
+ MEM_freeN(mcords);
+
return OPERATOR_FINISHED;
}
return OPERATOR_PASS_THROUGH;
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c
index 367b36db583..5af1829af5a 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -211,7 +211,7 @@ static void set_mapped_co(void *vuserdata, int index, const float co[3],
/* mode flags: */
#define TM_ALL_JOINTS 1 /* all joints (for bones only) */
#define TM_SKIP_HANDLES 2 /* skip handles when control point is selected (for curves only) */
-static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
+static void make_trans_verts(Object *obedit, float min[3], float max[3], int mode)
{
Nurb *nu;
BezTriple *bezt;
@@ -501,7 +501,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
if (tv->flag & SELECT) {
add_v3_v3(centroid, tv->oldloc);
total += 1.0f;
- DO_MINMAX(tv->oldloc, min, max);
+ minmax_v3v3_v3(min, max, tv->oldloc);
}
}
if (total != 0.0f) {
@@ -856,7 +856,7 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3])
if ((track->flag & TRACK_HAS_BUNDLE) && TRACK_SELECTED(track)) {
ok = 1;
mul_v3_m4v3(pos, obmat, track->bundle_pos);
- DO_MINMAX(pos, min, max);
+ minmax_v3v3_v3(min, max, pos);
}
track = track->next;
@@ -898,7 +898,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
mul_m3_v3(bmat, vec);
add_v3_v3(vec, obedit->obmat[3]);
add_v3_v3(centroid, vec);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
}
if (v3d->around == V3D_CENTROID) {
@@ -923,7 +923,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
copy_v3_v3(vec, pchan->pose_head);
mul_m4_v3(obact->obmat, vec);
add_v3_v3(centroid, vec);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
count++;
}
}
@@ -943,7 +943,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
}
add_v3_v3(centroid, vec);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
count++;
}
CTX_DATA_END;
@@ -1062,7 +1062,7 @@ void VIEW3D_OT_snap_cursor_to_center(wmOperatorType *ot)
/* **************************************************** */
-int minmax_verts(Object *obedit, float *min, float *max)
+int ED_view3d_minmax_verts(Object *obedit, float min[3], float max[3])
{
TransVert *tv;
float centroid[3], vec[3], bmat[3][3];
@@ -1082,7 +1082,7 @@ int minmax_verts(Object *obedit, float *min, float *max)
mul_m3_v3(bmat, vec);
add_v3_v3(vec, obedit->obmat[3]);
add_v3_v3(centroid, vec);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
}
MEM_freeN(transvmain);
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 03b197dc4c6..ae383fcd6b2 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -260,7 +260,7 @@ void projectFloatView(TransInfo *t, const float vec[3], float adr[2])
zero_v2(adr);
}
-void applyAspectRatio(TransInfo *t, float *vec)
+void applyAspectRatio(TransInfo *t, float vec[2])
{
if ((t->spacetype==SPACE_IMAGE) && (t->mode==TFM_TRANSLATION)) {
SpaceImage *sima= t->sa->spacedata.first;
@@ -293,7 +293,7 @@ void applyAspectRatio(TransInfo *t, float *vec)
}
}
-void removeAspectRatio(TransInfo *t, float *vec)
+void removeAspectRatio(TransInfo *t, float vec[2])
{
if ((t->spacetype==SPACE_IMAGE) && (t->mode==TFM_TRANSLATION)) {
SpaceImage *sima= t->sa->spacedata.first;
@@ -606,6 +606,72 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
return keymap;
}
+static void transform_event_xyz_constraint(TransInfo *t, short key_type, char cmode)
+{
+ if (!(t->flag & T_NO_CONSTRAINT)) {
+ int constraint_axis, constraint_plane;
+ int edit_2d = (t->flag & T_2D_EDIT);
+ char msg1[] = "along _";
+ char msg2[] = "along %s _";
+ char msg3[] = "locking %s _";
+ char axis;
+
+ /* Initialize */
+ switch(key_type) {
+ case XKEY:
+ axis = 'X';
+ constraint_axis = CON_AXIS0;
+ break;
+ case YKEY:
+ axis = 'Y';
+ constraint_axis = CON_AXIS1;
+ break;
+ case ZKEY:
+ axis = 'Z';
+ constraint_axis = CON_AXIS2;
+ break;
+ default:
+ /* Invalid key */
+ return;
+ }
+ msg1[sizeof(msg1) - 2] = axis;
+ msg2[sizeof(msg2) - 2] = axis;
+ msg3[sizeof(msg3) - 2] = axis;
+ constraint_plane = ((CON_AXIS0 | CON_AXIS1 | CON_AXIS2) &
+ (~constraint_axis));
+
+ if (edit_2d && (key_type != ZKEY)) {
+ if (cmode == axis) {
+ stopConstraint(t);
+ }
+ else {
+ setUserConstraint(t, V3D_MANIP_GLOBAL, constraint_axis, msg1);
+ }
+ }
+ else if (!edit_2d) {
+ if (cmode == axis) {
+ if (t->con.orientation != V3D_MANIP_GLOBAL) {
+ stopConstraint(t);
+ }
+ else {
+ short orientation = (t->current_orientation != V3D_MANIP_GLOBAL ?
+ t->current_orientation : V3D_MANIP_LOCAL);
+ if (!(t->modifiers & MOD_CONSTRAINT_PLANE))
+ setUserConstraint(t, orientation, constraint_axis, msg2);
+ else if (t->modifiers & MOD_CONSTRAINT_PLANE)
+ setUserConstraint(t, orientation, constraint_plane, msg3);
+ }
+ }
+ else {
+ if (!(t->modifiers & MOD_CONSTRAINT_PLANE))
+ setUserConstraint(t, V3D_MANIP_GLOBAL, constraint_axis, msg2);
+ else if (t->modifiers & MOD_CONSTRAINT_PLANE)
+ setUserConstraint(t, V3D_MANIP_GLOBAL, constraint_plane, msg3);
+ }
+ }
+ t->redraw |= TREDRAW_HARD;
+ }
+}
int transformEvent(TransInfo *t, wmEvent *event)
{
@@ -947,93 +1013,9 @@ int transformEvent(TransInfo *t, wmEvent *event)
}
break;
case XKEY:
- if ((t->flag & T_NO_CONSTRAINT)==0) {
- if (t->flag & T_2D_EDIT) {
- if (cmode == 'X') {
- stopConstraint(t);
- }
- else {
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along X");
- }
- }
- else {
- if (cmode == 'X') {
- if (t->con.orientation != V3D_MANIP_GLOBAL) {
- stopConstraint(t);
- }
- else {
- short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL;
- if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setUserConstraint(t, orientation, (CON_AXIS0), "along %s X");
- else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setUserConstraint(t, orientation, (CON_AXIS1|CON_AXIS2), "locking %s X");
- }
- }
- else {
- if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along %s X");
- else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1|CON_AXIS2), "locking %s X");
- }
- }
- t->redraw |= TREDRAW_HARD;
- }
- break;
case YKEY:
- if ((t->flag & T_NO_CONSTRAINT)==0) {
- if (t->flag & T_2D_EDIT) {
- if (cmode == 'Y') {
- stopConstraint(t);
- }
- else {
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along Y");
- }
- }
- else {
- if (cmode == 'Y') {
- if (t->con.orientation != V3D_MANIP_GLOBAL) {
- stopConstraint(t);
- }
- else {
- short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL;
- if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setUserConstraint(t, orientation, (CON_AXIS1), "along %s Y");
- else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setUserConstraint(t, orientation, (CON_AXIS0|CON_AXIS2), "locking %s Y");
- }
- }
- else {
- if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along %s Y");
- else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS2), "locking %s Y");
- }
- }
- t->redraw |= TREDRAW_HARD;
- }
- break;
case ZKEY:
- if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))==0) {
- if (cmode == 'Z') {
- if (t->con.orientation != V3D_MANIP_GLOBAL) {
- stopConstraint(t);
- }
- else {
- short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL;
- if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setUserConstraint(t, orientation, (CON_AXIS2), "along %s Z");
- else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setUserConstraint(t, orientation, (CON_AXIS0|CON_AXIS1), "locking %s Z");
- }
- }
- else {
- if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS2), "along %s Z");
- else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS1), "locking %s Z");
- }
- t->redraw |= TREDRAW_HARD;
- }
+ transform_event_xyz_constraint(t, event->type, cmode);
break;
case OKEY:
if (t->flag & T_PROP_EDIT && event->shift) {
@@ -1131,7 +1113,7 @@ int transformEvent(TransInfo *t, wmEvent *event)
return OPERATOR_PASS_THROUGH;
}
-int calculateTransformCenter(bContext *C, int centerMode, float *vec)
+int calculateTransformCenter(bContext *C, int centerMode, float *cent3d, int *cent2d)
{
TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data");
int success = 1;
@@ -1156,8 +1138,12 @@ int calculateTransformCenter(bContext *C, int centerMode, float *vec)
calculateCenter(t);
- // Copy center from constraint center. Transform center can be local
- copy_v3_v3(vec, t->con.center);
+ if(cent2d)
+ copy_v2_v2_int(cent2d, t->center2d);
+ if(cent3d) {
+ // Copy center from constraint center. Transform center can be local
+ copy_v3_v3(cent3d, t->con.center);
+ }
}
@@ -3035,12 +3021,16 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
}
/* rotation */
- if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't rotate objects itself
+ /* MORE HACK: as in some cases the matrix to apply location and rot/scale is not the same,
+ * and ElementRotation() might be called in Translation context (with align snapping),
+ * we need to be sure to actually use the *rotation* matrix here...
+ * So no other way than storing it in some dedicated members of td->ext! */
+ if ((t->flag & T_V3D_ALIGN)==0) { /* align mode doesn't rotate objects itself */
/* euler or quaternion/axis-angle? */
if (td->ext->rotOrder == ROT_MODE_QUAT) {
- mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL);
+ mul_serie_m3(fmat, td->ext->r_mtx, mat, td->ext->r_smtx, NULL, NULL, NULL, NULL, NULL);
- mat3_to_quat(quat, fmat); // Actual transform
+ mat3_to_quat(quat, fmat); /* Actual transform */
mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat);
/* this function works on end result */
@@ -3053,8 +3043,8 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
axis_angle_to_quat(iquat, td->ext->irotAxis, td->ext->irotAngle);
- mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL);
- mat3_to_quat(quat, fmat); // Actual transform
+ mul_serie_m3(fmat, td->ext->r_mtx, mat, td->ext->r_smtx, NULL, NULL, NULL, NULL, NULL);
+ mat3_to_quat(quat, fmat); /* Actual transform */
mul_qt_qtqt(tquat, quat, iquat);
quat_to_axis_angle(td->ext->rotAxis, td->ext->rotAngle, tquat);
@@ -3065,8 +3055,8 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
else {
float eulmat[3][3];
- mul_m3_m3m3(totmat, mat, td->mtx);
- mul_m3_m3m3(smat, td->smtx, totmat);
+ mul_m3_m3m3(totmat, mat, td->ext->r_mtx);
+ mul_m3_m3m3(smat, td->ext->r_smtx, totmat);
/* calculate the total rotatation in eulers */
copy_v3_v3(eul, td->ext->irot);
@@ -3472,12 +3462,18 @@ static void applyTranslation(TransInfo *t, float vec[3])
/* handle snapping rotation before doing the translation */
if (usingSnappingNormal(t)) {
if (validSnappingNormal(t)) {
- float *original_normal = td->axismtx[2];
+ float *original_normal;
float axis[3];
float quat[4];
float mat[3][3];
float angle;
+ /* In pose mode, we want to align normals with Y axis of bones... */
+ if (t->flag & T_POSE)
+ original_normal = td->axismtx[1];
+ else
+ original_normal = td->axismtx[2];
+
cross_v3_v3v3(axis, original_normal, t->tsnap.snapNormal);
angle = saacos(dot_v3v3(original_normal, t->tsnap.snapNormal));
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 69af8cf2489..f902659a5c5 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -137,6 +137,10 @@ typedef struct TransDataExtension {
float isize[3]; /* Initial size */
float obmat[4][4]; /* Object matrix */
float l_smtx[3][3]; /* use instead of td->smtx, It is the same but without the 'bone->bone_mat', see TD_PBONE_LOCAL_MTX_C */
+ float r_mtx[3][3]; /* The rotscale matrix of pose bone, to allow using snap-align in translation mode,
+ * when td->mtx is the loc pose bone matrix (and hence can't be used to apply rotation in some cases,
+ * namely when a bone is in "NoLocal" or "Hinge" mode)... */
+ float r_smtx[3][3]; /* Invers of previous one. */
int rotOrder; /* rotation mode, as defined in eRotationModes (DNA_action_types.h) */
} TransDataExtension;
@@ -435,8 +439,6 @@ typedef struct TransInfo {
#define POINT_INIT 4
#define MULTI_POINTS 8
-void TRANSFORM_OT_transform(struct wmOperatorType *ot);
-
int initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event, int mode);
void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
int transformEvent(TransInfo *t, struct wmEvent *event);
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index b457d22a712..c9eb975cb77 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -538,6 +538,7 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr
/* New code, using "generic" BKE_pchan_to_pose_mat(). */
{
float rotscale_mat[4][4], loc_mat[4][4];
+ float rpmat[3][3];
BKE_pchan_to_pose_mat(pchan, rotscale_mat, loc_mat);
if (t->mode == TFM_TRANSLATION)
@@ -545,13 +546,23 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr
else
copy_m3_m4(pmat, rotscale_mat);
+ /* Grrr! Exceptional case: When translating pose bones that are either Hinge or NoLocal,
+ * and want align snapping, we just need both loc_mat and rotscale_mat.
+ * So simply always store rotscale mat in td->ext, and always use it to apply rotations...
+ * Ugly to need such hacks! :/ */
+ copy_m3_m4(rpmat, rotscale_mat);
+
if (constraints_list_needinv(t, &pchan->constraints)) {
copy_m3_m4(tmat, pchan->constinv);
invert_m3_m3(cmat, tmat);
mul_serie_m3(td->mtx, pmat, omat, cmat, NULL, NULL, NULL, NULL, NULL);
+ mul_serie_m3(td->ext->r_mtx, rpmat, omat, cmat, NULL,NULL,NULL,NULL,NULL);
}
- else
- mul_serie_m3(td->mtx, pmat, omat, NULL, NULL, NULL, NULL, NULL, NULL);
+ else {
+ mul_serie_m3(td->mtx, pmat, omat, NULL, NULL,NULL,NULL,NULL,NULL);
+ mul_serie_m3(td->ext->r_mtx, rpmat, omat, NULL, NULL,NULL,NULL,NULL,NULL);
+ }
+ invert_m3_m3(td->ext->r_smtx, td->ext->r_mtx);
}
invert_m3_m3(td->smtx, td->mtx);
@@ -4043,7 +4054,47 @@ static void freeSeqData(TransInfo *t)
}
}
+#if 1 /* (mango hack! - for Ian) this is truely bad - should _never_ be in a release :| */
+ if (CTX_wm_window(t->context)->eventstate->alt) {
+ int minframe = MAXFRAME;
+ td= t->data;
+ seq_prev= NULL;
+ for (a=0; a<t->total; a++, td++) {
+ seq= ((TransDataSeq *)td->extra)->seq;
+ if ((seq != seq_prev)) {
+ minframe = MIN2(minframe, seq->startdisp);
+ }
+ }
+
+
+ for (seq= seqbasep->first; seq; seq= seq->next) {
+ if (!(seq->flag & SELECT)) {
+ if (seq->startdisp >= minframe) {
+ seq->machine += MAXSEQ * 2;
+ }
+ }
+ }
+
+ shuffle_seq_time(seqbasep, t->scene);
+
+ for (seq= seqbasep->first; seq; seq= seq->next) {
+ if (seq->machine >= MAXSEQ * 2) {
+ seq->machine -= MAXSEQ * 2;
+ seq->tmp= (void*)1;
+ }
+ else {
+ seq->tmp= NULL;
+ }
+ }
+
+ shuffle_seq_time(seqbasep, t->scene);
+ }
+ else {
+ shuffle_seq_time(seqbasep, t->scene);
+ }
+#else
shuffle_seq_time(seqbasep, t->scene);
+#endif
if (has_effect) {
/* update effects strips based on strips just moved in time */
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index b986bda4c13..a9179f95d4e 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1016,7 +1016,7 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
}
/* Crease needs edge flag */
- if (t->mode == TFM_CREASE) {
+ if (ELEM(t->mode, TFM_CREASE, TFM_BWEIGHT)) {
t->options |= CTX_EDGE;
}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 94f6640ca5b..a869af56537 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -114,7 +114,7 @@ static void calc_tw_center(Scene *scene, float *co)
float *min= scene->twmin;
float *max= scene->twmax;
- DO_MINMAX(co, min, max);
+ minmax_v3v3_v3(min, max, co);
add_v3_v3(twcent, co);
}
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index ccd794d0101..164112f206b 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -72,22 +72,24 @@ static char OP_TRACKBALL[] = "TRANSFORM_OT_trackball";
static char OP_MIRROR[] = "TRANSFORM_OT_mirror";
static char OP_EDGE_SLIDE[] = "TRANSFORM_OT_edge_slide";
static char OP_EDGE_CREASE[] = "TRANSFORM_OT_edge_crease";
+static char OP_EDGE_BWEIGHT[] = "TRANSFORM_OT_edge_bevelweight";
static char OP_SEQ_SLIDE[] = "TRANSFORM_OT_seq_slide";
-void TRANSFORM_OT_translate(struct wmOperatorType *ot);
-void TRANSFORM_OT_rotate(struct wmOperatorType *ot);
-void TRANSFORM_OT_tosphere(struct wmOperatorType *ot);
-void TRANSFORM_OT_resize(struct wmOperatorType *ot);
-void TRANSFORM_OT_shear(struct wmOperatorType *ot);
-void TRANSFORM_OT_warp(struct wmOperatorType *ot);
-void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot);
-void TRANSFORM_OT_push_pull(struct wmOperatorType *ot);
-void TRANSFORM_OT_tilt(struct wmOperatorType *ot);
-void TRANSFORM_OT_trackball(struct wmOperatorType *ot);
-void TRANSFORM_OT_mirror(struct wmOperatorType *ot);
-void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot);
-void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot);
-void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot);
+static void TRANSFORM_OT_translate(struct wmOperatorType *ot);
+static void TRANSFORM_OT_rotate(struct wmOperatorType *ot);
+static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot);
+static void TRANSFORM_OT_resize(struct wmOperatorType *ot);
+static void TRANSFORM_OT_shear(struct wmOperatorType *ot);
+static void TRANSFORM_OT_warp(struct wmOperatorType *ot);
+static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot);
+static void TRANSFORM_OT_push_pull(struct wmOperatorType *ot);
+static void TRANSFORM_OT_tilt(struct wmOperatorType *ot);
+static void TRANSFORM_OT_trackball(struct wmOperatorType *ot);
+static void TRANSFORM_OT_mirror(struct wmOperatorType *ot);
+static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot);
+static void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot);
+static void TRANSFORM_OT_edge_bevelweight(struct wmOperatorType *ot);
+static void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot);
static TransformModeItem transform_modes[] =
{
@@ -104,6 +106,7 @@ static TransformModeItem transform_modes[] =
{OP_MIRROR, TFM_MIRROR, TRANSFORM_OT_mirror},
{OP_EDGE_SLIDE, TFM_EDGE_SLIDE, TRANSFORM_OT_edge_slide},
{OP_EDGE_CREASE, TFM_CREASE, TRANSFORM_OT_edge_crease},
+ {OP_EDGE_BWEIGHT, TFM_BWEIGHT, TRANSFORM_OT_edge_bevelweight},
{OP_SEQ_SLIDE, TFM_SEQ_SLIDE, TRANSFORM_OT_seq_slide},
{NULL, 0}
};
@@ -499,7 +502,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
//RNA_def_property_flag(prop, PROP_HIDDEN);
}
-void TRANSFORM_OT_translate(struct wmOperatorType *ot)
+static void TRANSFORM_OT_translate(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Translate";
@@ -519,7 +522,7 @@ void TRANSFORM_OT_translate(struct wmOperatorType *ot)
Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_ALIGN_SNAP|P_OPTIONS);
}
-void TRANSFORM_OT_resize(struct wmOperatorType *ot)
+static void TRANSFORM_OT_resize(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Resize";
@@ -540,7 +543,7 @@ void TRANSFORM_OT_resize(struct wmOperatorType *ot)
}
-void TRANSFORM_OT_trackball(struct wmOperatorType *ot)
+static void TRANSFORM_OT_trackball(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Trackball";
@@ -560,7 +563,7 @@ void TRANSFORM_OT_trackball(struct wmOperatorType *ot)
Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP);
}
-void TRANSFORM_OT_rotate(struct wmOperatorType *ot)
+static void TRANSFORM_OT_rotate(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Rotate";
@@ -580,7 +583,7 @@ void TRANSFORM_OT_rotate(struct wmOperatorType *ot)
Transform_Properties(ot, P_AXIS|P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP);
}
-void TRANSFORM_OT_tilt(struct wmOperatorType *ot)
+static void TRANSFORM_OT_tilt(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Tilt";
@@ -603,7 +606,7 @@ void TRANSFORM_OT_tilt(struct wmOperatorType *ot)
Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_SNAP);
}
-void TRANSFORM_OT_warp(struct wmOperatorType *ot)
+static void TRANSFORM_OT_warp(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Warp";
@@ -624,7 +627,7 @@ void TRANSFORM_OT_warp(struct wmOperatorType *ot)
// XXX Warp axis?
}
-void TRANSFORM_OT_shear(struct wmOperatorType *ot)
+static void TRANSFORM_OT_shear(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Shear";
@@ -645,7 +648,7 @@ void TRANSFORM_OT_shear(struct wmOperatorType *ot)
// XXX Shear axis?
}
-void TRANSFORM_OT_push_pull(struct wmOperatorType *ot)
+static void TRANSFORM_OT_push_pull(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Push/Pull";
@@ -665,7 +668,7 @@ void TRANSFORM_OT_push_pull(struct wmOperatorType *ot)
Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP);
}
-void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot)
+static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Shrink/Fatten";
@@ -685,7 +688,7 @@ void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot)
Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP);
}
-void TRANSFORM_OT_tosphere(struct wmOperatorType *ot)
+static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "To Sphere";
@@ -706,7 +709,7 @@ void TRANSFORM_OT_tosphere(struct wmOperatorType *ot)
Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP);
}
-void TRANSFORM_OT_mirror(struct wmOperatorType *ot)
+static void TRANSFORM_OT_mirror(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Mirror";
@@ -724,7 +727,7 @@ void TRANSFORM_OT_mirror(struct wmOperatorType *ot)
Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL);
}
-void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot)
+static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Edge Slide";
@@ -744,7 +747,7 @@ void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot)
Transform_Properties(ot, P_MIRROR|P_SNAP|P_CORRECT_UV);
}
-void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot)
+static void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Edge Crease";
@@ -764,7 +767,27 @@ void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot)
Transform_Properties(ot, P_SNAP);
}
-void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
+static void TRANSFORM_OT_edge_bevelweight(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Edge Bevel Weight";
+ ot->description = "Change the bevel weight of edges";
+ ot->idname = OP_EDGE_BWEIGHT;
+ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
+
+ /* api callbacks */
+ ot->invoke = transform_invoke;
+ ot->exec = transform_exec;
+ ot->modal = transform_modal;
+ ot->cancel = transform_cancel;
+ ot->poll = ED_operator_editmesh;
+
+ RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f);
+
+ Transform_Properties(ot, P_SNAP);
+}
+
+static void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Sequence Slide";
@@ -784,7 +807,7 @@ void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
Transform_Properties(ot, P_SNAP);
}
-void TRANSFORM_OT_transform(struct wmOperatorType *ot)
+static void TRANSFORM_OT_transform(struct wmOperatorType *ot)
{
PropertyRNA *prop;
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 53bf19c04cc..a4227d92e27 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -2636,7 +2636,7 @@ static void UV_OT_circle_select(wmOperatorType *ot)
/* ******************** lasso select operator **************** */
-static void do_lasso_select_mesh_uv(bContext *C, int mcords[][2], short moves, short select)
+static int 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);
@@ -2695,6 +2695,7 @@ static void do_lasso_select_mesh_uv(bContext *C, int mcords[][2], short moves, s
}
}
}
+
if (change) {
uv_select_sync_flush(scene->toolsettings, em, select);
@@ -2702,33 +2703,27 @@ static void do_lasso_select_mesh_uv(bContext *C, int mcords[][2], short moves, s
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
}
}
+
+ return change;
}
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;
+ int mcords_tot;
+ int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
- if (i > 1) {
+ if (mcords) {
short select;
+ short change;
select = !RNA_boolean_get(op->ptr, "deselect");
- do_lasso_select_mesh_uv(C, mcords, i, select);
+ change = do_lasso_select_mesh_uv(C, mcords, mcords_tot, select);
- return OPERATOR_FINISHED;
+ MEM_freeN(mcords);
+
+ return change ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
+
return OPERATOR_PASS_THROUGH;
}
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 2b93246e797..4a6de737e7a 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -47,10 +47,6 @@
#include "BLO_sys_types.h" // for intptr_t support
-#if defined(_WIN32)
-#define M_PI 3.14159265358979323846
-#endif
-
/* Utils */
#if 0
@@ -448,7 +444,7 @@ static float p_edge_uv_length(PEdge *e)
return sqrt(d[0] * d[0] + d[1] * d[1]);
}
-static void p_chart_uv_bbox(PChart *chart, float *minv, float *maxv)
+static void p_chart_uv_bbox(PChart *chart, float minv[2], float maxv[2])
{
PVert *v;
@@ -4461,6 +4457,9 @@ void param_average(ParamHandle *handle)
for (i = 0; i < phandle->ncharts; i++) {
PFace *f;
chart = phandle->charts[i];
+
+ if (chart->flag & PCHART_NOPACK)
+ continue;
chart->u.pack.area = 0.0f; /* 3d area */
chart->u.pack.rescale = 0.0f; /* UV area, abusing rescale for tmp storage, oh well :/ */
@@ -4483,6 +4482,10 @@ void param_average(ParamHandle *handle)
for (i = 0; i < phandle->ncharts; i++) {
chart = phandle->charts[i];
+
+ if (chart->flag & PCHART_NOPACK)
+ continue;
+
if (chart->u.pack.area != 0.0f && chart->u.pack.rescale != 0.0f) {
fac = chart->u.pack.area / chart->u.pack.rescale;
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 7c05d08a774..c8dbee65f6a 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -216,8 +216,8 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em,
BLI_srand(0);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- ScanFillVert *v, *lastv, *firstv;
- ScanFillFace *sefa;
+ ScanFillVert *sf_vert, *sf_vert_last, *sf_vert_first;
+ ScanFillFace *sf_tri;
ParamKey key, vkeys[4];
ParamBool pin[4], select[4];
BMLoop *ls[3];
@@ -264,35 +264,35 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em,
/* ngon - scanfill time! */
BLI_scanfill_begin(&sf_ctx);
- firstv = lastv = NULL;
+ sf_vert_first = sf_vert_last = NULL;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
int i;
- v = BLI_scanfill_vert_add(&sf_ctx, l->v->co);
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, l->v->co);
/* add small random offset */
for (i = 0; i < 3; i++) {
- v->co[i] += (BLI_frand() - 0.5f) * FLT_EPSILON * 50;
+ sf_vert->co[i] += (BLI_frand() - 0.5f) * FLT_EPSILON * 50;
}
- v->tmp.p = l;
+ sf_vert->tmp.p = l;
- if (lastv) {
- BLI_scanfill_edge_add(&sf_ctx, lastv, v);
+ if (sf_vert_last) {
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert);
}
- lastv = v;
- if (!firstv)
- firstv = v;
+ sf_vert_last = sf_vert;
+ if (!sf_vert_first)
+ sf_vert_first = sf_vert;
}
- BLI_scanfill_edge_add(&sf_ctx, firstv, v);
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_first, sf_vert);
BLI_scanfill_calc_ex(&sf_ctx, TRUE, efa->no);
- for (sefa = sf_ctx.fillfacebase.first; sefa; sefa = sefa->next) {
- ls[0] = sefa->v1->tmp.p;
- ls[1] = sefa->v2->tmp.p;
- ls[2] = sefa->v3->tmp.p;
+ for (sf_tri = sf_ctx.fillfacebase.first; sf_tri; sf_tri = sf_tri->next) {
+ ls[0] = sf_tri->v1->tmp.p;
+ ls[1] = sf_tri->v2->tmp.p;
+ ls[2] = sf_tri->v3->tmp.p;
for (i = 0; i < 3; i++) {
MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, ls[i]->head.data, CD_MLOOPUV);
@@ -870,13 +870,12 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result,
switch (around) {
case V3D_CENTER: /* bounding box center */
- min[0] = min[1] = min[2] = 1e20f;
- max[0] = max[1] = max[2] = -1e20f;
+ INIT_MINMAX(min, max);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
- DO_MINMAX(l->v->co, min, max);
+ minmax_v3v3_v3(min, max, l->v->co);
}
}
}
@@ -886,9 +885,7 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result,
case V3D_CURSOR: /*cursor center*/
cursx = give_cursor(scene, v3d);
/* shift to objects world */
- result[0] = cursx[0] - ob->obmat[3][0];
- result[1] = cursx[1] - ob->obmat[3][1];
- result[2] = cursx[2] - ob->obmat[3][2];
+ sub_v3_v3v3(result, cursx, ob->obmat[3]);
break;
case V3D_LOCAL: /*object center*/
@@ -1184,7 +1181,9 @@ static int unwrap_exec(bContext *C, wmOperator *op)
/* remember last method for live unwrap */
if (RNA_struct_property_is_set(op->ptr, "method"))
scene->toolsettings->unwrapper = method;
-
+ else
+ RNA_enum_set(op->ptr, "method", scene->toolsettings->unwrapper);
+
scene->toolsettings->uv_subsurf_level = subsurf_level;
if (fill_holes) scene->toolsettings->uvcalc_flag |= UVCALC_FILLHOLES;
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 1e1043f1ee7..833aefc20aa 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -1269,8 +1269,8 @@ typedef struct {
short no[3];
/* inserting this to align the 'color' field to a four-byte
- boundary; drastically increases viewport performance on my
- drivers (Gallium/Radeon) --nicholasbishop */
+ * boundary; drastically increases viewport performance on my
+ * drivers (Gallium/Radeon) --nicholasbishop */
char pad[2];
unsigned char color[3];
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index 4f7fc3639f4..6a2c3eee7a5 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -232,7 +232,7 @@ static char *gpu_generate_function_prototyps(GHash *hash)
GPUFunction *GPU_lookup_function(const char *name)
{
if (!FUNCTION_HASH) {
- FUNCTION_HASH = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "GPU_lookup_function gh");
+ FUNCTION_HASH = BLI_ghash_str_new("GPU_lookup_function gh");
gpu_parse_functions_string(FUNCTION_HASH, glsl_material_library);
/*FUNCTION_PROTOTYPES = gpu_generate_function_prototyps(FUNCTION_HASH);
FUNCTION_LIB = GPU_shader_create_lib(datatoc_gpu_shader_material_glsl);*/
@@ -375,8 +375,8 @@ static void codegen_set_unique_ids(ListBase *nodes)
GPUOutput *output;
int id = 1, texid = 0;
- bindhash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "codegen_set_unique_ids1 gh");
- definehash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "codegen_set_unique_ids2 gh");
+ bindhash= BLI_ghash_ptr_new("codegen_set_unique_ids1 gh");
+ definehash= BLI_ghash_ptr_new("codegen_set_unique_ids2 gh");
for (node=nodes->first; node; node=node->next) {
for (input=node->inputs.first; input; input=input->next) {
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index 32e4ff8d81c..f4d5812ffb7 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -894,7 +894,7 @@ void GPU_framebuffer_blur(GPUFrameBuffer *fb, GPUTexture *tex, GPUFrameBuffer *b
/* Blurring horizontally */
/* We do the bind ourselves rather than using GPU_framebuffer_texture_bind() to avoid
- pushing unnecessary matrices onto the OpenGL stack. */
+ * pushing unnecessary matrices onto the OpenGL stack. */
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, blurfb->object);
GPU_shader_bind(blur_shader);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 9498bf92446..7e4312e21e0 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2127,12 +2127,23 @@ void node_tex_environment(vec3 co, sampler2D ima, out vec4 color)
color = texture2D(ima, vec2(u, v));
}
+void node_tex_environment_empty(vec3 co, out vec4 color)
+{
+ color = vec4(0.0);
+}
+
void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha)
{
color = texture2D(ima, co.xy);
alpha = color.a;
}
+void node_tex_image_empty(vec3 co, out vec4 color, out float alpha)
+{
+ color = vec4(0.0);
+ alpha = 0.0;
+}
+
void node_tex_magic(vec3 p, float scale, float distortion, out vec4 color, out float fac)
{
color = vec4(1.0);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl.c b/source/blender/gpu/shaders/gpu_shader_material.glsl.c
index 6d08d4c8cec..91b2b13ea1a 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl.c
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl.c
@@ -1,6 +1,6 @@
/* DataToC output of file <gpu_shader_material_glsl> */
-int datatoc_gpu_shader_material_glsl_size = 50823;
+int datatoc_gpu_shader_material_glsl_size = 51015;
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,
@@ -1539,11 +1539,17 @@ char datatoc_gpu_shader_material_glsl[] = {
41, 47, 40, 50, 46, 48, 42, 77, 95, 80, 73, 41, 59, 10, 9,102,108,111, 97,116, 32,118, 32, 61, 32, 97,116, 97,110, 40, 99,111,
46,122, 44, 32,104,121,112,111,116, 40, 99,111, 46,120, 44, 32, 99,111, 46,121, 41, 41, 47, 77, 95, 80, 73, 32, 43, 32, 48, 46,
53, 59, 10, 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,118,101, 99, 50,
- 40,117, 44, 32,118, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,105,109, 97,103,101, 40,
-118,101, 99, 51, 32, 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, 52,
- 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 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, 99,111, 46,120,121, 41, 59, 10, 32, 32, 32, 32, 97,
-108,112,104, 97, 32, 61, 32, 99,111,108,111,114, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120,
+ 40,117, 44, 32,118, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,101,110,118,105,114,111,
+110,109,101,110,116, 95,101,109,112,116,121, 40,118,101, 99, 51, 32, 99,111, 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,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,
+105,100, 32,110,111,100,101, 95,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32, 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, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,
+111, 97,116, 32, 97,108,112,104, 97, 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, 99,111, 46,120,121, 41, 59, 10, 32, 32, 32, 32, 97,108,112,104, 97, 32, 61, 32, 99,111,108,111,114, 46, 97,
+ 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95,105,109, 97,103,101, 95,101,109,112,116,121, 40,118,
+101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10, 32,
+ 32, 32, 32, 97,108,112,104, 97, 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,109, 97,103,105, 99, 40,118,101, 99, 51, 32,112, 44, 32,102,108,111, 97,116, 32,115, 99, 97,108,101, 44, 32,102,108,111, 97,
116, 32,100,105,115,116,111,114,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,
116, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48,
diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp
index d94529b6104..3be096b8935 100644
--- a/source/blender/ikplugin/intern/itasc_plugin.cpp
+++ b/source/blender/ikplugin/intern/itasc_plugin.cpp
@@ -996,7 +996,7 @@ static void convert_pose(IK_Scene *ikscene)
// assume uniform scaling and take Y scale as general scale for the armature
scale = len_v3(ikscene->blArmature->obmat[1]);
- rot = &ikscene->jointArray(0);
+ rot = (ikscene->jointArray.rows() > 0) ? &ikscene->jointArray(0) : NULL;
for (joint=a=0, ikchan = ikscene->channels; a<ikscene->numchan && joint<ikscene->numjoint; ++a, ++ikchan) {
pchan= ikchan->pchan;
bone= pchan->bone;
@@ -1037,7 +1037,7 @@ static void BKE_pose_rest(IK_Scene *ikscene)
// rest pose is 0
SetToZero(ikscene->jointArray);
// except for transY joints
- rot = &ikscene->jointArray(0);
+ rot = (ikscene->jointArray.rows() > 0) ? &ikscene->jointArray(0) : NULL;
for (joint=a=0, ikchan = ikscene->channels; a<ikscene->numchan && joint<ikscene->numjoint; ++a, ++ikchan) {
pchan= ikchan->pchan;
bone= pchan->bone;
@@ -1135,7 +1135,7 @@ static IK_Scene* convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan)
// in Blender, the rest pose is always 0 for joints
BKE_pose_rest(ikscene);
}
- rot = &ikscene->jointArray(0);
+ rot = (ikscene->jointArray.rows() > 0) ? &ikscene->jointArray(0) : NULL;
for (a=0, ikchan = ikscene->channels; a<tree->totchannel; ++a, ++ikchan) {
pchan= ikchan->pchan;
bone= pchan->bone;
diff --git a/source/blender/imbuf/intern/IMB_anim.h b/source/blender/imbuf/intern/IMB_anim.h
index 6920d49ff51..7f4abd29890 100644
--- a/source/blender/imbuf/intern/IMB_anim.h
+++ b/source/blender/imbuf/intern/IMB_anim.h
@@ -107,15 +107,15 @@
#endif
/* anim.curtype, runtime only */
-#define ANIM_NONE 0
-#define ANIM_SEQUENCE (1 << 0)
-#define ANIM_MOVIE (1 << 4)
-#define ANIM_AVI (1 << 6)
-#define ANIM_QTIME (1 << 7)
+#define ANIM_NONE 0
+#define ANIM_SEQUENCE (1 << 0)
+#define ANIM_MOVIE (1 << 4)
+#define ANIM_AVI (1 << 6)
+#define ANIM_QTIME (1 << 7)
#define ANIM_FFMPEG (1 << 8)
#define ANIM_REDCODE (1 << 9)
-#define MAXNUMSTREAMS 50
+#define MAXNUMSTREAMS 50
struct _AviMovie;
struct anim_index;
@@ -123,18 +123,18 @@ struct anim_index;
struct anim {
int ib_flags;
int curtype;
- int curposition; /* index 0 = 1e, 1 = 2e, enz. */
+ int curposition; /* index 0 = 1e, 1 = 2e, enz. */
int duration;
short frs_sec;
float frs_sec_base;
int x, y;
- /* voor op nummer */
+ /* voor op nummer */
char name[1024];
- /* voor sequence */
+ /* voor sequence */
char first[1024];
- /* movie */
+ /* movie */
void *movie;
void *track;
void *params;
@@ -144,21 +144,21 @@ struct anim {
int preseek;
int streamindex;
- /* avi */
+ /* avi */
struct _AviMovie *avi;
#if defined(_WIN32) && !defined(FREE_WINDOWS)
- /* windows avi */
+ /* windows avi */
int avistreams;
int firstvideo;
int pfileopen;
- PAVIFILE pfile;
- PAVISTREAM pavi[MAXNUMSTREAMS]; // the current streams
- PGETFRAME pgf;
+ PAVIFILE pfile;
+ PAVISTREAM pavi[MAXNUMSTREAMS]; // the current streams
+ PGETFRAME pgf;
#endif
#ifdef WITH_QUICKTIME
- /* quicktime */
+ /* quicktime */
struct _QuicktimeMovie *qtime;
#endif /* WITH_QUICKTIME */
@@ -173,14 +173,14 @@ struct anim {
struct SwsContext *img_convert_ctx;
int videoStream;
- struct ImBuf * last_frame;
+ struct ImBuf *last_frame;
int64_t last_pts;
int64_t next_pts;
AVPacket next_packet;
#endif
#ifdef WITH_REDCODE
- struct redcode_handle * redcodeCtx;
+ struct redcode_handle *redcodeCtx;
#endif
char index_dir[768];
@@ -188,10 +188,9 @@ struct anim {
int proxies_tried;
int indices_tried;
- struct anim * proxy_anim[IMB_PROXY_MAX_SLOT];
- struct anim_index * curr_idx[IMB_TC_MAX_SLOT];
+ struct anim *proxy_anim[IMB_PROXY_MAX_SLOT];
+ struct anim_index *curr_idx[IMB_TC_MAX_SLOT];
};
#endif
-
diff --git a/source/blender/imbuf/intern/IMB_metadata.h b/source/blender/imbuf/intern/IMB_metadata.h
index 336a5f95082..4f512e04ef8 100644
--- a/source/blender/imbuf/intern/IMB_metadata.h
+++ b/source/blender/imbuf/intern/IMB_metadata.h
@@ -37,8 +37,8 @@ struct ImBuf;
typedef struct ImMetaData {
struct ImMetaData *next, *prev;
- char* key;
- char* value;
+ char *key;
+ char *value;
int len;
} ImMetaData;
@@ -52,7 +52,7 @@ typedef struct ImMetaData {
/* free blender ImMetaData struct */
-void IMB_metadata_free(struct ImBuf* img);
+void IMB_metadata_free(struct ImBuf *img);
/** read the field from the image info into the field
* \param img - the ImBuf that contains the image data
@@ -62,7 +62,7 @@ void IMB_metadata_free(struct ImBuf* img);
* \param len - length of value buffer allocated by user.
* \return - 1 (true) if ImageInfo present and value for the key found, 0 (false) otherwise
*/
-int IMB_metadata_get_field(struct ImBuf* img, const char* key, char* value, int len);
+int IMB_metadata_get_field(struct ImBuf *img, const char *key, char *value, int len);
/** set user data in the ImMetaData struct, which has to be allocated with IMB_metadata_create
* before calling this function.
@@ -71,7 +71,7 @@ int IMB_metadata_get_field(struct ImBuf* img, const char* key, char* value, int
* \param value - the data to be written to the field. zero terminated string
* \return - 1 (true) if ImageInfo present, 0 (false) otherwise
*/
-int IMB_metadata_add_field(struct ImBuf* img, const char* key, const char* value);
+int IMB_metadata_add_field(struct ImBuf *img, const char *key, const char *value);
/** delete the key/field par in the ImMetaData struct.
* \param img - the ImBuf that contains the image data
diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c
index 2cfdd7bc324..319e3f27bd8 100644
--- a/source/blender/imbuf/intern/allocimbuf.c
+++ b/source/blender/imbuf/intern/allocimbuf.c
@@ -51,39 +51,39 @@ void imb_freemipmapImBuf(ImBuf *ibuf)
{
int a;
- for (a=1; a<ibuf->miptot; a++) {
- if (ibuf->mipmap[a-1])
- IMB_freeImBuf(ibuf->mipmap[a-1]);
- ibuf->mipmap[a-1]= NULL;
+ for (a = 1; a < ibuf->miptot; a++) {
+ if (ibuf->mipmap[a - 1])
+ IMB_freeImBuf(ibuf->mipmap[a - 1]);
+ ibuf->mipmap[a - 1] = NULL;
}
- ibuf->miptot= 0;
+ ibuf->miptot = 0;
}
/* any free rect frees mipmaps to be sure, creation is in render on first request */
void imb_freerectfloatImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return;
+ if (ibuf == NULL) return;
if (ibuf->rect_float && (ibuf->mall & IB_rectfloat)) {
MEM_freeN(ibuf->rect_float);
- ibuf->rect_float=NULL;
+ ibuf->rect_float = NULL;
}
imb_freemipmapImBuf(ibuf);
- ibuf->rect_float= NULL;
+ ibuf->rect_float = NULL;
ibuf->mall &= ~IB_rectfloat;
}
/* any free rect frees mipmaps to be sure, creation is in render on first request */
void imb_freerectImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return;
+ if (ibuf == NULL) return;
if (ibuf->rect && (ibuf->mall & IB_rect))
MEM_freeN(ibuf->rect);
- ibuf->rect= NULL;
+ ibuf->rect = NULL;
imb_freemipmapImBuf(ibuf);
@@ -94,14 +94,14 @@ void imb_freetilesImBuf(ImBuf *ibuf)
{
int tx, ty;
- if (ibuf==NULL) return;
+ if (ibuf == NULL) return;
if (ibuf->tiles && (ibuf->mall & IB_tiles)) {
- for (ty=0; ty<ibuf->ytiles; ty++) {
- for (tx=0; tx<ibuf->xtiles; tx++) {
- if (ibuf->tiles[ibuf->xtiles*ty + tx]) {
+ for (ty = 0; ty < ibuf->ytiles; ty++) {
+ for (tx = 0; tx < ibuf->xtiles; tx++) {
+ if (ibuf->tiles[ibuf->xtiles * ty + tx]) {
imb_tile_cache_tile_free(ibuf, tx, ty);
- MEM_freeN(ibuf->tiles[ibuf->xtiles*ty + tx]);
+ MEM_freeN(ibuf->tiles[ibuf->xtiles * ty + tx]);
}
}
}
@@ -109,13 +109,13 @@ void imb_freetilesImBuf(ImBuf *ibuf)
MEM_freeN(ibuf->tiles);
}
- ibuf->tiles= NULL;
+ ibuf->tiles = NULL;
ibuf->mall &= ~IB_tiles;
}
static void freeencodedbufferImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return;
+ if (ibuf == NULL) return;
if (ibuf->encodedbuffer && (ibuf->mall & IB_mem))
MEM_freeN(ibuf->encodedbuffer);
@@ -128,23 +128,23 @@ static void freeencodedbufferImBuf(ImBuf *ibuf)
void IMB_freezbufImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return;
+ if (ibuf == NULL) return;
if (ibuf->zbuf && (ibuf->mall & IB_zbuf))
MEM_freeN(ibuf->zbuf);
- ibuf->zbuf= NULL;
+ ibuf->zbuf = NULL;
ibuf->mall &= ~IB_zbuf;
}
void IMB_freezbuffloatImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return;
+ if (ibuf == NULL) return;
if (ibuf->zbuf_float && (ibuf->mall & IB_zbuffloat))
MEM_freeN(ibuf->zbuf_float);
- ibuf->zbuf_float= NULL;
+ ibuf->zbuf_float = NULL;
ibuf->mall &= ~IB_zbuffloat;
}
@@ -172,9 +172,9 @@ void IMB_refImBuf(ImBuf *ibuf)
ibuf->refcounter++;
}
-ImBuf * IMB_makeSingleUser(ImBuf *ibuf)
+ImBuf *IMB_makeSingleUser(ImBuf *ibuf)
{
- ImBuf * rval;
+ ImBuf *rval;
if (!ibuf || ibuf->refcounter == 0) { return ibuf; }
@@ -189,11 +189,11 @@ short addzbufImBuf(ImBuf *ibuf)
{
int size;
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
IMB_freezbufImBuf(ibuf);
- size = ibuf->x *ibuf->y *sizeof(unsigned int);
+ size = ibuf->x * ibuf->y * sizeof(unsigned int);
if ((ibuf->zbuf = MEM_mapallocN(size, "addzbufImBuf"))) {
ibuf->mall |= IB_zbuf;
ibuf->flags |= IB_zbuf;
@@ -207,11 +207,11 @@ short addzbuffloatImBuf(ImBuf *ibuf)
{
int size;
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
IMB_freezbuffloatImBuf(ibuf);
- size = ibuf->x *ibuf->y *sizeof(float);
+ size = ibuf->x * ibuf->y * sizeof(float);
if ((ibuf->zbuf_float = MEM_mapallocN(size, "addzbuffloatImBuf"))) {
ibuf->mall |= IB_zbuffloat;
ibuf->flags |= IB_zbuffloat;
@@ -224,7 +224,7 @@ short addzbuffloatImBuf(ImBuf *ibuf)
short imb_addencodedbufferImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
freeencodedbufferImBuf(ibuf);
@@ -248,14 +248,14 @@ short imb_enlargeencodedbufferImBuf(ImBuf *ibuf)
unsigned int newsize, encodedsize;
void *newbuffer;
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
if (ibuf->encodedbuffersize < ibuf->encodedsize) {
printf("imb_enlargeencodedbufferImBuf: error in parameters\n");
return FALSE;
}
- newsize = 2 *ibuf->encodedbuffersize;
+ newsize = 2 * ibuf->encodedbuffersize;
if (newsize < 10000) newsize = 10000;
newbuffer = MEM_mallocN(newsize, "enlargeencodedbufferImBuf");
@@ -285,14 +285,14 @@ short imb_addrectfloatImBuf(ImBuf *ibuf)
{
int size;
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
if (ibuf->rect_float)
- imb_freerectfloatImBuf(ibuf); /* frees mipmap too, hrm */
+ imb_freerectfloatImBuf(ibuf); /* frees mipmap too, hrm */
- size = ibuf->x *ibuf->y;
- size = size *4 *sizeof(float);
- ibuf->channels= 4;
+ size = ibuf->x * ibuf->y;
+ size = size * 4 * sizeof(float);
+ ibuf->channels = 4;
if ((ibuf->rect_float = MEM_mapallocN(size, "imb_addrectfloatImBuf"))) {
ibuf->mall |= IB_rectfloat;
@@ -308,15 +308,15 @@ short imb_addrectImBuf(ImBuf *ibuf)
{
int size;
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
/* don't call imb_freerectImBuf, it frees mipmaps, this call is used only too give float buffers display */
if (ibuf->rect && (ibuf->mall & IB_rect))
MEM_freeN(ibuf->rect);
- ibuf->rect= NULL;
+ ibuf->rect = NULL;
- size = ibuf->x*ibuf->y;
- size = size*sizeof(unsigned int);
+ size = ibuf->x * ibuf->y;
+ size = size * sizeof(unsigned int);
if ((ibuf->rect = MEM_mapallocN(size, "imb_addrectImBuf"))) {
ibuf->mall |= IB_rect;
@@ -330,10 +330,10 @@ short imb_addrectImBuf(ImBuf *ibuf)
short imb_addtilesImBuf(ImBuf *ibuf)
{
- if (ibuf==NULL) return FALSE;
+ if (ibuf == NULL) return FALSE;
if (!ibuf->tiles)
- if ((ibuf->tiles = MEM_callocN(sizeof(unsigned int*)*ibuf->xtiles*ibuf->ytiles, "imb_tiles")))
+ if ((ibuf->tiles = MEM_callocN(sizeof(unsigned int *) * ibuf->xtiles * ibuf->ytiles, "imb_tiles")))
ibuf->mall |= IB_tiles;
return (ibuf->tiles != NULL);
@@ -346,36 +346,36 @@ ImBuf *IMB_allocImBuf(unsigned int x, unsigned int y, uchar planes, unsigned int
ibuf = MEM_callocN(sizeof(ImBuf), "ImBuf_struct");
if (ibuf) {
- ibuf->x= x;
- ibuf->y= y;
- ibuf->planes= planes;
- ibuf->ftype= TGA;
- ibuf->channels= 4; /* float option, is set to other values when buffers get assigned */
- ibuf->ppm[0]= ibuf->ppm[1]= 150.0 / 0.0254; /* 150dpi -> pixels-per-meter */
+ ibuf->x = x;
+ ibuf->y = y;
+ ibuf->planes = planes;
+ ibuf->ftype = TGA;
+ ibuf->channels = 4; /* float option, is set to other values when buffers get assigned */
+ ibuf->ppm[0] = ibuf->ppm[1] = 150.0 / 0.0254; /* 150dpi -> pixels-per-meter */
if (flags & IB_rect) {
- if (imb_addrectImBuf(ibuf)==FALSE) {
+ if (imb_addrectImBuf(ibuf) == FALSE) {
IMB_freeImBuf(ibuf);
return NULL;
}
}
if (flags & IB_rectfloat) {
- if (imb_addrectfloatImBuf(ibuf)==FALSE) {
+ if (imb_addrectfloatImBuf(ibuf) == FALSE) {
IMB_freeImBuf(ibuf);
return NULL;
}
}
if (flags & IB_zbuf) {
- if (addzbufImBuf(ibuf)==FALSE) {
+ if (addzbufImBuf(ibuf) == FALSE) {
IMB_freeImBuf(ibuf);
return NULL;
}
}
if (flags & IB_zbuffloat) {
- if (addzbuffloatImBuf(ibuf)==FALSE) {
+ if (addzbuffloatImBuf(ibuf) == FALSE) {
IMB_freeImBuf(ibuf);
return NULL;
}
@@ -404,10 +404,10 @@ ImBuf *IMB_dupImBuf(ImBuf *ibuf1)
if (ibuf2 == NULL) return NULL;
if (flags & IB_rect)
- memcpy(ibuf2->rect, ibuf1->rect, x *y *sizeof(int));
+ memcpy(ibuf2->rect, ibuf1->rect, x * y * sizeof(int));
if (flags & IB_rectfloat)
- memcpy(ibuf2->rect_float, ibuf1->rect_float, ibuf1->channels *x *y *sizeof(float));
+ memcpy(ibuf2->rect_float, ibuf1->rect_float, ibuf1->channels * x * y * sizeof(float));
if (ibuf1->encodedbuffer) {
ibuf2->encodedbuffersize = ibuf1->encodedbuffersize;
@@ -423,16 +423,16 @@ ImBuf *IMB_dupImBuf(ImBuf *ibuf1)
tbuf = *ibuf1;
// fix pointers
- tbuf.rect = ibuf2->rect;
- tbuf.rect_float = ibuf2->rect_float;
+ tbuf.rect = ibuf2->rect;
+ tbuf.rect_float = ibuf2->rect_float;
tbuf.encodedbuffer = ibuf2->encodedbuffer;
- tbuf.zbuf= NULL;
- tbuf.zbuf_float= NULL;
- for (a=0; a<IB_MIPMAP_LEVELS; a++)
- tbuf.mipmap[a]= NULL;
+ tbuf.zbuf = NULL;
+ tbuf.zbuf_float = NULL;
+ for (a = 0; a < IB_MIPMAP_LEVELS; a++)
+ tbuf.mipmap[a] = NULL;
// set malloc flag
- tbuf.mall = ibuf2->mall;
+ tbuf.mall = ibuf2->mall;
tbuf.c_handle = NULL;
tbuf.refcounter = 0;
@@ -449,7 +449,7 @@ ImBuf *IMB_dupImBuf(ImBuf *ibuf1)
static void imbuf_cache_destructor(void *data)
{
- ImBuf *ibuf = (ImBuf*) data;
+ ImBuf *ibuf = (ImBuf *) data;
imb_freerectImBuf(ibuf);
imb_freerectfloatImBuf(ibuf);
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index 5d8c65f7971..a0856533335 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -119,10 +119,16 @@ int ismovie(const char *UNUSED(filepath))
return 0;
}
- /* never called, just keep the linker happy */
-static int startmovie(struct anim *UNUSED(anim)) { return 1; }
-static ImBuf * movie_fetchibuf(struct anim *UNUSED(anim), int UNUSED(position)) { return NULL; }
-static void free_anim_movie(struct anim *UNUSED(anim)) { ; }
+/* never called, just keep the linker happy */
+static int startmovie(struct anim *UNUSED(anim)) {
+ return 1;
+}
+static ImBuf *movie_fetchibuf(struct anim *UNUSED(anim), int UNUSED(position)) {
+ return NULL;
+}
+static void free_anim_movie(struct anim *UNUSED(anim)) {
+ ;
+}
#if defined(_WIN32)
@@ -131,24 +137,24 @@ static void free_anim_movie(struct anim *UNUSED(anim)) { ; }
# define PATHSEPERATOR '/'
#endif
-static int an_stringdec(const char *string, char* head, char *tail, unsigned short *numlen)
+static int an_stringdec(const char *string, char *head, char *tail, unsigned short *numlen)
{
- unsigned short len, nume, nums=0;
- short i, found=FALSE;
+ unsigned short len, nume, nums = 0;
+ short i, found = FALSE;
- len=strlen(string);
+ len = strlen(string);
nume = len;
- for (i=len-1;i>=0;i--) {
- if (string[i]==PATHSEPERATOR) break;
+ for (i = len - 1; i >= 0; i--) {
+ if (string[i] == PATHSEPERATOR) break;
if (isdigit(string[i])) {
if (found) {
- nums=i;
+ nums = i;
}
else {
- nume=i;
- nums=i;
- found=TRUE;
+ nume = i;
+ nums = i;
+ found = TRUE;
}
}
else {
@@ -156,15 +162,15 @@ static int an_stringdec(const char *string, char* head, char *tail, unsigned sho
}
}
if (found) {
- strcpy(tail, &string[nume+1]);
+ strcpy(tail, &string[nume + 1]);
strcpy(head, string);
- head[nums]= '\0';
- *numlen=nume-nums+1;
+ head[nums] = '\0';
+ *numlen = nume - nums + 1;
return ((int)atoi(&(string[nums])));
}
- tail[0]= '\0';
+ tail[0] = '\0';
strcpy(head, string);
- *numlen=0;
+ *numlen = 0;
return TRUE;
}
@@ -174,7 +180,7 @@ static void an_stringenc(char *string, const char *head, const char *tail, unsig
BLI_stringenc(string, head, tail, numlen, pic);
}
-static void free_anim_avi (struct anim *anim)
+static void free_anim_avi(struct anim *anim)
{
#if defined(_WIN32) && !defined(FREE_WINDOWS)
int i;
@@ -183,8 +189,8 @@ static void free_anim_avi (struct anim *anim)
if (anim == NULL) return;
if (anim->avi == NULL) return;
- AVI_close (anim->avi);
- MEM_freeN (anim->avi);
+ AVI_close(anim->avi);
+ MEM_freeN(anim->avi);
anim->avi = NULL;
#if defined(_WIN32) && !defined(FREE_WINDOWS)
@@ -210,13 +216,13 @@ static void free_anim_avi (struct anim *anim)
}
#ifdef WITH_FFMPEG
-static void free_anim_ffmpeg(struct anim * anim);
+static void free_anim_ffmpeg(struct anim *anim);
#endif
#ifdef WITH_REDCODE
-static void free_anim_redcode(struct anim * anim);
+static void free_anim_redcode(struct anim *anim);
#endif
-void IMB_free_anim(struct anim * anim)
+void IMB_free_anim(struct anim *anim)
{
if (anim == NULL) {
printf("free anim, anim == NULL\n");
@@ -240,7 +246,7 @@ void IMB_free_anim(struct anim * anim)
MEM_freeN(anim);
}
-void IMB_close_anim(struct anim * anim)
+void IMB_close_anim(struct anim *anim)
{
if (anim == NULL) return;
@@ -255,11 +261,11 @@ void IMB_close_anim_proxies(struct anim *anim)
IMB_free_indices(anim);
}
-struct anim * IMB_open_anim(const char * name, int ib_flags, int streamindex)
+struct anim *IMB_open_anim(const char *name, int ib_flags, int streamindex)
{
- struct anim * anim;
+ struct anim *anim;
- anim = (struct anim*)MEM_callocN(sizeof(struct anim), "anim struct");
+ anim = (struct anim *)MEM_callocN(sizeof(struct anim), "anim struct");
if (anim != NULL) {
BLI_strncpy(anim->name, name, sizeof(anim->name));
anim->ib_flags = ib_flags;
@@ -269,12 +275,12 @@ struct anim * IMB_open_anim(const char * name, int ib_flags, int streamindex)
}
-static int startavi (struct anim *anim)
+static int startavi(struct anim *anim)
{
AviError avierror;
#if defined(_WIN32) && !defined(FREE_WINDOWS)
- HRESULT hr;
+ HRESULT hr;
int i, firstvideo = -1;
int streamcount;
BYTE abFormat[1024];
@@ -285,14 +291,14 @@ static int startavi (struct anim *anim)
streamcount = anim->streamindex;
#endif
- anim->avi = MEM_callocN (sizeof(AviMovie), "animavi");
+ anim->avi = MEM_callocN(sizeof(AviMovie), "animavi");
if (anim->avi == NULL) {
printf("Can't open avi: %s\n", anim->name);
return -1;
}
- avierror = AVI_open_movie (anim->name, anim->avi);
+ avierror = AVI_open_movie(anim->name, anim->avi);
#if defined(_WIN32) && !defined(FREE_WINDOWS)
if (avierror == AVI_ERROR_COMPRESSION) {
@@ -329,8 +335,8 @@ static int startavi (struct anim *anim)
FIXCC(avis.fccHandler);
FIXCC(avis.fccType);
printf("Can't find AVI decoder for type : %4.4hs/%4.4hs\n",
- (LPSTR)&avis.fccType,
- (LPSTR)&avis.fccHandler);
+ (LPSTR)&avis.fccType,
+ (LPSTR)&avis.fccHandler);
}
}
}
@@ -357,7 +363,7 @@ static int startavi (struct anim *anim)
if (avierror != AVI_ERROR_NONE) {
AVI_print_error(avierror);
- printf ("Error loading avi: %s\n", anim->name);
+ printf("Error loading avi: %s\n", anim->name);
free_anim_avi(anim);
return -1;
}
@@ -379,7 +385,7 @@ static int startavi (struct anim *anim)
return 0;
}
-static ImBuf * avi_fetchibuf (struct anim *anim, int position)
+static ImBuf *avi_fetchibuf(struct anim *anim, int position)
{
ImBuf *ibuf = NULL;
int *tmp;
@@ -403,23 +409,23 @@ static ImBuf * avi_fetchibuf (struct anim *anim, int position)
#else
if (1) {
#endif
- ibuf = IMB_allocImBuf (anim->x, anim->y, 24, IB_rect);
+ ibuf = IMB_allocImBuf(anim->x, anim->y, 24, IB_rect);
- tmp = AVI_read_frame (anim->avi, AVI_FORMAT_RGB32, position,
- AVI_get_stream(anim->avi, AVIST_VIDEO, 0));
+ tmp = AVI_read_frame(anim->avi, AVI_FORMAT_RGB32, position,
+ AVI_get_stream(anim->avi, AVIST_VIDEO, 0));
if (tmp == NULL) {
- printf ("Error reading frame from AVI");
- IMB_freeImBuf (ibuf);
+ printf("Error reading frame from AVI");
+ IMB_freeImBuf(ibuf);
return NULL;
}
- for (y=0; y < anim->y; y++) {
- memcpy (&(ibuf->rect)[((anim->y-y)-1)*anim->x], &tmp[y*anim->x],
- anim->x * 4);
+ for (y = 0; y < anim->y; y++) {
+ memcpy(&(ibuf->rect)[((anim->y - y) - 1) * anim->x], &tmp[y * anim->x],
+ anim->x * 4);
}
- MEM_freeN (tmp);
+ MEM_freeN(tmp);
}
ibuf->profile = IB_PROFILE_SRGB;
@@ -431,9 +437,9 @@ static ImBuf * avi_fetchibuf (struct anim *anim, int position)
extern void do_init_ffmpeg(void);
-static int startffmpeg(struct anim * anim)
+static int startffmpeg(struct anim *anim)
{
- int i, videoStream;
+ int i, videoStream;
AVCodec *pCodec;
AVFormatContext *pFormatCtx;
@@ -455,11 +461,11 @@ static int startffmpeg(struct anim * anim)
do_init_ffmpeg();
- if (av_open_input_file(&pFormatCtx, anim->name, NULL, 0, NULL)!=0) {
+ if (av_open_input_file(&pFormatCtx, anim->name, NULL, 0, NULL) != 0) {
return -1;
}
- if (av_find_stream_info(pFormatCtx)<0) {
+ if (av_find_stream_info(pFormatCtx) < 0) {
av_close_input_file(pFormatCtx);
return -1;
}
@@ -480,7 +486,7 @@ static int startffmpeg(struct anim * anim)
break;
}
- if (videoStream==-1) {
+ if (videoStream == -1) {
av_close_input_file(pFormatCtx);
return -1;
}
@@ -505,7 +511,7 @@ static int startffmpeg(struct anim * anim)
av_q2d(pFormatCtx->streams[videoStream]->r_frame_rate) /
AV_TIME_BASE);
- frs_num = pFormatCtx->streams[videoStream]->r_frame_rate.num;
+ frs_num = pFormatCtx->streams[videoStream]->r_frame_rate.num;
frs_den = pFormatCtx->streams[videoStream]->r_frame_rate.den;
frs_den *= AV_TIME_BASE;
@@ -543,9 +549,10 @@ static int startffmpeg(struct anim * anim)
anim->pFrameRGB = avcodec_alloc_frame();
if (avpicture_get_size(PIX_FMT_RGBA, anim->x, anim->y)
- != anim->x * anim->y * 4) {
- fprintf (stderr,
- "ffmpeg has changed alloc scheme ... ARGHHH!\n");
+ != anim->x * anim->y * 4)
+ {
+ fprintf(stderr,
+ "ffmpeg has changed alloc scheme ... ARGHHH!\n");
avcodec_close(anim->pCodecCtx);
av_close_input_file(anim->pFormatCtx);
av_free(anim->pFrameRGB);
@@ -556,7 +563,7 @@ static int startffmpeg(struct anim * anim)
}
if (anim->ib_flags & IB_animdeinterlace) {
- avpicture_fill((AVPicture*) anim->pFrameDeinterlaced,
+ avpicture_fill((AVPicture *) anim->pFrameDeinterlaced,
MEM_callocN(avpicture_get_size(
anim->pCodecCtx->pix_fmt,
anim->x, anim->y),
@@ -572,18 +579,18 @@ static int startffmpeg(struct anim * anim)
}
anim->img_convert_ctx = sws_getContext(
- anim->pCodecCtx->width,
- anim->pCodecCtx->height,
- anim->pCodecCtx->pix_fmt,
- anim->pCodecCtx->width,
- anim->pCodecCtx->height,
- PIX_FMT_RGBA,
- SWS_FAST_BILINEAR | SWS_PRINT_INFO,
- NULL, NULL, NULL);
+ anim->pCodecCtx->width,
+ anim->pCodecCtx->height,
+ anim->pCodecCtx->pix_fmt,
+ anim->pCodecCtx->width,
+ anim->pCodecCtx->height,
+ PIX_FMT_RGBA,
+ SWS_FAST_BILINEAR | SWS_PRINT_INFO,
+ NULL, NULL, NULL);
if (!anim->img_convert_ctx) {
- fprintf (stderr,
- "Can't transform color space??? Bailing out...\n");
+ fprintf(stderr,
+ "Can't transform color space??? Bailing out...\n");
avcodec_close(anim->pCodecCtx);
av_close_input_file(anim->pFormatCtx);
av_free(anim->pFrameRGB);
@@ -595,17 +602,17 @@ static int startffmpeg(struct anim * anim)
#ifdef FFMPEG_SWSCALE_COLOR_SPACE_SUPPORT
/* Try do detect if input has 0-255 YCbCR range (JFIF Jpeg MotionJpeg) */
- if (!sws_getColorspaceDetails(anim->img_convert_ctx, (int**)&inv_table, &srcRange,
- &table, &dstRange, &brightness, &contrast, &saturation)) {
+ if (!sws_getColorspaceDetails(anim->img_convert_ctx, (int **)&inv_table, &srcRange,
+ &table, &dstRange, &brightness, &contrast, &saturation)) {
srcRange = srcRange || anim->pCodecCtx->color_range == AVCOL_RANGE_JPEG;
inv_table = sws_getCoefficients(anim->pCodecCtx->colorspace);
if (sws_setColorspaceDetails(anim->img_convert_ctx, (int *)inv_table, srcRange,
- table, dstRange, brightness, contrast, saturation)) {
+ table, dstRange, brightness, contrast, saturation)) {
printf("Warning: Could not set libswscale colorspace details.\n");
- }
+ }
}
else {
printf("Warning: Could not set libswscale colorspace details.\n");
@@ -621,10 +628,10 @@ static int startffmpeg(struct anim * anim)
* Output is anim->last_frame
*/
-static void ffmpeg_postprocess(struct anim * anim)
+static void ffmpeg_postprocess(struct anim *anim)
{
- AVFrame * input = anim->pFrame;
- ImBuf * ibuf = anim->last_frame;
+ AVFrame *input = anim->pFrame;
+ ImBuf *ibuf = anim->last_frame;
int filter_y = 0;
ibuf->profile = IB_PROFILE_SRGB;
@@ -635,11 +642,11 @@ static void ffmpeg_postprocess(struct anim * anim)
/* This means the data wasnt read properly,
* this check stops crashing */
- if (input->data[0]==0 && input->data[1]==0 &&
- input->data[2]==0 && input->data[3]==0)
+ if (input->data[0] == 0 && input->data[1] == 0 &&
+ input->data[2] == 0 && input->data[3] == 0)
{
fprintf(stderr, "ffmpeg_fetchibuf: "
- "data not read properly...\n");
+ "data not read properly...\n");
return;
}
@@ -651,13 +658,13 @@ static void ffmpeg_postprocess(struct anim * anim)
if (anim->ib_flags & IB_animdeinterlace) {
if (avpicture_deinterlace(
- (AVPicture*)
- anim->pFrameDeinterlaced,
- (const AVPicture*)
- anim->pFrame,
- anim->pCodecCtx->pix_fmt,
- anim->pCodecCtx->width,
- anim->pCodecCtx->height) < 0)
+ (AVPicture *)
+ anim->pFrameDeinterlaced,
+ (const AVPicture *)
+ anim->pFrame,
+ anim->pCodecCtx->pix_fmt,
+ anim->pCodecCtx->width,
+ anim->pCodecCtx->height) < 0)
{
filter_y = TRUE;
}
@@ -666,37 +673,37 @@ static void ffmpeg_postprocess(struct anim * anim)
}
}
- avpicture_fill((AVPicture*) anim->pFrameRGB,
- (unsigned char*) ibuf->rect,
+ avpicture_fill((AVPicture *) anim->pFrameRGB,
+ (unsigned char *) ibuf->rect,
PIX_FMT_RGBA, anim->x, anim->y);
if (ENDIAN_ORDER == B_ENDIAN) {
- int * dstStride = anim->pFrameRGB->linesize;
- uint8_t** dst = anim->pFrameRGB->data;
+ int *dstStride = anim->pFrameRGB->linesize;
+ uint8_t **dst = anim->pFrameRGB->data;
int dstStride2[4] = { dstStride[0], 0, 0, 0 };
- uint8_t* dst2[4] = { dst[0], 0, 0, 0 };
+ uint8_t *dst2[4] = { dst[0], 0, 0, 0 };
int x, y, h, w;
- unsigned char* bottom;
- unsigned char* top;
+ unsigned char *bottom;
+ unsigned char *top;
sws_scale(anim->img_convert_ctx,
- (const uint8_t * const *)input->data,
+ (const uint8_t *const *)input->data,
input->linesize,
0,
anim->pCodecCtx->height,
dst2,
dstStride2);
- bottom = (unsigned char*) ibuf->rect;
- top = bottom + ibuf->x * (ibuf->y-1) * 4;
+ bottom = (unsigned char *) ibuf->rect;
+ top = bottom + ibuf->x * (ibuf->y - 1) * 4;
h = (ibuf->y + 1) / 2;
w = ibuf->x;
for (y = 0; y < h; y++) {
unsigned char tmp[4];
- unsigned int * tmp_l =
- (unsigned int*) tmp;
+ unsigned int *tmp_l =
+ (unsigned int *) tmp;
for (x = 0; x < w; x++) {
tmp[0] = bottom[0];
@@ -709,23 +716,23 @@ static void ffmpeg_postprocess(struct anim * anim)
bottom[2] = top[2];
bottom[3] = top[3];
- *(unsigned int*) top = *tmp_l;
+ *(unsigned int *) top = *tmp_l;
- bottom +=4;
+ bottom += 4;
top += 4;
}
top -= 8 * w;
}
}
else {
- int * dstStride = anim->pFrameRGB->linesize;
- uint8_t** dst = anim->pFrameRGB->data;
+ int *dstStride = anim->pFrameRGB->linesize;
+ uint8_t **dst = anim->pFrameRGB->data;
int dstStride2[4] = { -dstStride[0], 0, 0, 0 };
- uint8_t* dst2[4] = { dst[0] + (anim->y - 1)*dstStride[0],
- 0, 0, 0 };
+ uint8_t *dst2[4] = { dst[0] + (anim->y - 1) * dstStride[0],
+ 0, 0, 0 };
sws_scale(anim->img_convert_ctx,
- (const uint8_t * const *)input->data,
+ (const uint8_t *const *)input->data,
input->linesize,
0,
anim->pCodecCtx->height,
@@ -740,7 +747,7 @@ static void ffmpeg_postprocess(struct anim * anim)
/* decode one video frame also considering the packet read into next_packet */
-static int ffmpeg_decode_video_frame(struct anim * anim)
+static int ffmpeg_decode_video_frame(struct anim *anim)
{
int rval = 0;
@@ -760,9 +767,9 @@ static int ffmpeg_decode_video_frame(struct anim * anim)
? "->" : " ",
anim->next_packet.stream_index,
anim->videoStream,
- (anim->next_packet.dts == AV_NOPTS_VALUE) ? -1:
+ (anim->next_packet.dts == AV_NOPTS_VALUE) ? -1 :
(long long int)anim->next_packet.dts,
- (anim->next_packet.pts == AV_NOPTS_VALUE) ? -1:
+ (anim->next_packet.pts == AV_NOPTS_VALUE) ? -1 :
(long long int)anim->next_packet.pts,
(anim->next_packet.flags & AV_PKT_FLAG_KEY) ?
" KEY" : "");
@@ -770,13 +777,13 @@ static int ffmpeg_decode_video_frame(struct anim * anim)
anim->pFrameComplete = 0;
avcodec_decode_video2(
- anim->pCodecCtx,
- anim->pFrame, &anim->pFrameComplete,
- &anim->next_packet);
+ anim->pCodecCtx,
+ anim->pFrame, &anim->pFrameComplete,
+ &anim->next_packet);
if (anim->pFrameComplete) {
anim->next_pts = av_get_pts_from_frame(
- anim->pFormatCtx, anim->pFrame);
+ anim->pFormatCtx, anim->pFrame);
av_log(anim->pFormatCtx,
AV_LOG_DEBUG,
@@ -786,7 +793,7 @@ static int ffmpeg_decode_video_frame(struct anim * anim)
-1 : (long long int)anim->pFrame->pts,
(anim->pFrame->pkt_pts == AV_NOPTS_VALUE) ?
-1 : (long long int)anim->pFrame->pkt_pts,
- (long long int)anim->next_pts);
+ (long long int)anim->next_pts);
break;
}
}
@@ -799,14 +806,14 @@ static int ffmpeg_decode_video_frame(struct anim * anim)
av_log(anim->pFormatCtx,
AV_LOG_ERROR, " DECODE READ FAILED: av_read_frame() "
- "returned error: %d\n", rval);
+ "returned error: %d\n", rval);
}
return (rval >= 0);
}
static void ffmpeg_decode_video_frame_scan(
- struct anim * anim, int64_t pts_to_search)
+ struct anim *anim, int64_t pts_to_search)
{
/* there seem to exist *very* silly GOP lengths out in the wild... */
int count = 1000;
@@ -843,7 +850,7 @@ static void ffmpeg_decode_video_frame_scan(
}
}
-static int match_format(const char *name, AVFormatContext * pFormatCtx)
+static int match_format(const char *name, AVFormatContext *pFormatCtx)
{
const char *p;
int len, namelen;
@@ -858,15 +865,15 @@ static int match_format(const char *name, AVFormatContext * pFormatCtx)
len = MAX2(p - names, namelen);
if (!BLI_strncasecmp(name, names, len))
return 1;
- names = p+1;
+ names = p + 1;
}
return !BLI_strcasecmp(name, names);
}
static int ffmpeg_seek_by_byte(AVFormatContext *pFormatCtx)
{
- static const char * byte_seek_list [] = { "mpegts", 0 };
- const char ** p;
+ static const char *byte_seek_list[] = { "mpegts", 0 };
+ const char **p;
if (pFormatCtx->iformat->flags & AVFMT_TS_DISCONT) {
return TRUE;
@@ -883,14 +890,14 @@ static int ffmpeg_seek_by_byte(AVFormatContext *pFormatCtx)
return FALSE;
}
-static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
- IMB_Timecode_Type tc) {
+static ImBuf *ffmpeg_fetchibuf(struct anim *anim, int position,
+ IMB_Timecode_Type tc) {
int64_t pts_to_search = 0;
double frame_rate;
double pts_time_base;
long long st_time;
- struct anim_index * tc_index = 0;
- AVStream * v_st;
+ struct anim_index *tc_index = 0;
+ AVStream *v_st;
int new_frame_index = 0; /* To quite gcc barking... */
int old_frame_index = 0; /* To quite gcc barking... */
@@ -911,16 +918,16 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
if (tc_index) {
new_frame_index = IMB_indexer_get_frame_index(
- tc_index, position);
+ tc_index, position);
old_frame_index = IMB_indexer_get_frame_index(
- tc_index, anim->curposition);
- pts_to_search = IMB_indexer_get_pts(
- tc_index, new_frame_index);
+ tc_index, anim->curposition);
+ pts_to_search = IMB_indexer_get_pts(
+ tc_index, new_frame_index);
}
else {
pts_to_search = (long long)
- floor(((double) position) /
- pts_time_base / frame_rate + 0.5);
+ floor(((double) position) /
+ pts_time_base / frame_rate + 0.5);
if (st_time != AV_NOPTS_VALUE) {
pts_to_search += st_time / pts_time_base / AV_TIME_BASE;
@@ -954,9 +961,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
ffmpeg_decode_video_frame_scan(anim, pts_to_search);
}
else if (tc_index &&
- IMB_indexer_can_scan(tc_index, old_frame_index,
- new_frame_index)) {
-
+ IMB_indexer_can_scan(tc_index, old_frame_index,
+ new_frame_index))
+ {
av_log(anim->pFormatCtx, AV_LOG_DEBUG,
"FETCH: within preseek interval "
"(index tells us)\n");
@@ -971,9 +978,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
unsigned long long dts;
pos = IMB_indexer_get_seek_pos(
- tc_index, new_frame_index);
+ tc_index, new_frame_index);
dts = IMB_indexer_get_seek_pos_dts(
- tc_index, new_frame_index);
+ tc_index, new_frame_index);
av_log(anim->pFormatCtx, AV_LOG_DEBUG,
"TC INDEX seek pos = %lld\n", pos);
@@ -985,21 +992,21 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
"... using BYTE pos\n");
ret = av_seek_frame(anim->pFormatCtx,
- -1,
- pos, AVSEEK_FLAG_BYTE);
+ -1,
+ pos, AVSEEK_FLAG_BYTE);
av_update_cur_dts(anim->pFormatCtx, v_st, dts);
}
else {
av_log(anim->pFormatCtx, AV_LOG_DEBUG,
"... using DTS pos\n");
ret = av_seek_frame(anim->pFormatCtx,
- anim->videoStream,
- dts, AVSEEK_FLAG_BACKWARD);
+ anim->videoStream,
+ dts, AVSEEK_FLAG_BACKWARD);
}
}
else {
pos = (long long) (position - anim->preseek) *
- AV_TIME_BASE / frame_rate;
+ AV_TIME_BASE / frame_rate;
av_log(anim->pFormatCtx, AV_LOG_DEBUG,
"NO INDEX seek pos = %lld, st_time = %lld\n",
@@ -1017,7 +1024,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
"NO INDEX final seek pos = %lld\n", pos);
ret = av_seek_frame(anim->pFormatCtx, -1,
- pos, AVSEEK_FLAG_BACKWARD);
+ pos, AVSEEK_FLAG_BACKWARD);
}
if (ret < 0) {
@@ -1068,7 +1075,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position,
return anim->last_frame;
}
-static void free_anim_ffmpeg(struct anim * anim)
+static void free_anim_ffmpeg(struct anim *anim)
{
if (anim == NULL) return;
@@ -1095,7 +1102,7 @@ static void free_anim_ffmpeg(struct anim * anim)
#ifdef WITH_REDCODE
-static int startredcode(struct anim * anim)
+static int startredcode(struct anim *anim)
{
anim->redcodeCtx = redcode_open(anim->name);
if (!anim->redcodeCtx) {
@@ -1106,11 +1113,11 @@ static int startredcode(struct anim * anim)
return 0;
}
-static ImBuf * redcode_fetchibuf(struct anim * anim, int position)
+static ImBuf *redcode_fetchibuf(struct anim *anim, int position)
{
- struct ImBuf * ibuf;
- struct redcode_frame * frame;
- struct redcode_frame_raw * raw_frame;
+ struct ImBuf *ibuf;
+ struct redcode_frame *frame;
+ struct redcode_frame_raw *raw_frame;
if (!anim->redcodeCtx) {
return NULL;
@@ -1130,15 +1137,15 @@ static ImBuf * redcode_fetchibuf(struct anim * anim, int position)
return NULL;
}
- ibuf = IMB_allocImBuf(raw_frame->width * 2,
- raw_frame->height * 2, 32, IB_rectfloat);
+ ibuf = IMB_allocImBuf(raw_frame->width * 2,
+ raw_frame->height * 2, 32, IB_rectfloat);
redcode_decode_video_float(raw_frame, ibuf->rect_float, 1);
return ibuf;
}
-static void free_anim_redcode(struct anim * anim)
+static void free_anim_redcode(struct anim *anim)
{
if (anim->redcodeCtx) {
redcode_close(anim->redcodeCtx);
@@ -1153,7 +1160,7 @@ static void free_anim_redcode(struct anim * anim)
/* Geen plaatje, probeer dan volgende animatie te openen */
/* gelukt, haal dan eerste plaatje van animatie */
-static struct ImBuf * anim_getnew(struct anim * anim)
+static ImBuf *anim_getnew(struct anim *anim)
{
struct ImBuf *ibuf = NULL;
@@ -1176,49 +1183,49 @@ static struct ImBuf * anim_getnew(struct anim * anim)
anim->curtype = imb_get_anim_type(anim->name);
switch (anim->curtype) {
- case ANIM_SEQUENCE:
- ibuf = IMB_loadiffname(anim->name, anim->ib_flags);
- if (ibuf) {
- BLI_strncpy(anim->first, anim->name, sizeof(anim->first));
- anim->duration = 1;
- }
- break;
- case ANIM_MOVIE:
- if (startmovie(anim)) return (NULL);
- ibuf = IMB_allocImBuf (anim->x, anim->y, 24, 0); /* fake */
- break;
- case ANIM_AVI:
- if (startavi(anim)) {
- printf("couldnt start avi\n");
- return (NULL);
- }
- ibuf = IMB_allocImBuf (anim->x, anim->y, 24, 0);
- break;
+ case ANIM_SEQUENCE:
+ ibuf = IMB_loadiffname(anim->name, anim->ib_flags);
+ if (ibuf) {
+ BLI_strncpy(anim->first, anim->name, sizeof(anim->first));
+ anim->duration = 1;
+ }
+ break;
+ case ANIM_MOVIE:
+ if (startmovie(anim)) return (NULL);
+ ibuf = IMB_allocImBuf(anim->x, anim->y, 24, 0); /* fake */
+ break;
+ case ANIM_AVI:
+ if (startavi(anim)) {
+ printf("couldnt start avi\n");
+ return (NULL);
+ }
+ ibuf = IMB_allocImBuf(anim->x, anim->y, 24, 0);
+ break;
#ifdef WITH_QUICKTIME
- case ANIM_QTIME:
- if (startquicktime(anim)) return (0);
- ibuf = IMB_allocImBuf (anim->x, anim->y, 24, 0);
- break;
+ case ANIM_QTIME:
+ if (startquicktime(anim)) return (0);
+ ibuf = IMB_allocImBuf(anim->x, anim->y, 24, 0);
+ break;
#endif
#ifdef WITH_FFMPEG
- case ANIM_FFMPEG:
- if (startffmpeg(anim)) return (0);
- ibuf = IMB_allocImBuf (anim->x, anim->y, 24, 0);
- break;
+ case ANIM_FFMPEG:
+ if (startffmpeg(anim)) return (0);
+ ibuf = IMB_allocImBuf(anim->x, anim->y, 24, 0);
+ break;
#endif
#ifdef WITH_REDCODE
- case ANIM_REDCODE:
- if (startredcode(anim)) return (0);
- ibuf = IMB_allocImBuf (8, 8, 32, 0);
- break;
+ case ANIM_REDCODE:
+ if (startredcode(anim)) return (0);
+ ibuf = IMB_allocImBuf(8, 8, 32, 0);
+ break;
#endif
}
return(ibuf);
}
-struct ImBuf * IMB_anim_previewframe(struct anim * anim)
+struct ImBuf *IMB_anim_previewframe(struct anim *anim)
{
- struct ImBuf * ibuf = NULL;
+ struct ImBuf *ibuf = NULL;
int position = 0;
ibuf = IMB_anim_absolute(anim, 0, IMB_TC_NONE, IMB_PROXY_NONE);
@@ -1226,15 +1233,15 @@ struct ImBuf * IMB_anim_previewframe(struct anim * anim)
IMB_freeImBuf(ibuf);
position = anim->duration / 2;
ibuf = IMB_anim_absolute(anim, position, IMB_TC_NONE,
- IMB_PROXY_NONE);
+ IMB_PROXY_NONE);
}
return ibuf;
}
-struct ImBuf * IMB_anim_absolute(struct anim * anim, int position,
- IMB_Timecode_Type tc,
- IMB_Proxy_Size preview_size) {
- struct ImBuf * ibuf = NULL;
+struct ImBuf *IMB_anim_absolute(struct anim *anim, int position,
+ IMB_Timecode_Type tc,
+ IMB_Proxy_Size preview_size) {
+ struct ImBuf *ibuf = NULL;
char head[256], tail[256];
unsigned short digits;
int pic;
@@ -1243,74 +1250,74 @@ struct ImBuf * IMB_anim_absolute(struct anim * anim, int position,
filter_y = (anim->ib_flags & IB_animdeinterlace);
- if (anim->curtype == 0) {
+ if (anim->curtype == 0) {
ibuf = anim_getnew(anim);
if (ibuf == NULL) {
return(NULL);
}
IMB_freeImBuf(ibuf); /* ???? */
- ibuf= NULL;
+ ibuf = NULL;
}
if (position < 0) return(NULL);
if (position >= anim->duration) return(NULL);
if (preview_size != IMB_PROXY_NONE) {
- struct anim * proxy = IMB_anim_open_proxy(anim, preview_size);
+ struct anim *proxy = IMB_anim_open_proxy(anim, preview_size);
if (proxy) {
position = IMB_anim_index_get_frame_index(
- anim, tc, position);
+ anim, tc, position);
return IMB_anim_absolute(
- proxy, position,
- IMB_TC_NONE, IMB_PROXY_NONE);
+ proxy, position,
+ IMB_TC_NONE, IMB_PROXY_NONE);
}
}
switch (anim->curtype) {
- case ANIM_SEQUENCE:
- pic = an_stringdec(anim->first, head, tail, &digits);
- pic += position;
- an_stringenc(anim->name, head, tail, digits, pic);
- ibuf = IMB_loadiffname(anim->name, IB_rect);
- if (ibuf) {
- anim->curposition = position;
- }
- break;
- case ANIM_MOVIE:
- ibuf = movie_fetchibuf(anim, position);
- if (ibuf) {
- anim->curposition = position;
- IMB_convert_rgba_to_abgr(ibuf);
- ibuf->profile = IB_PROFILE_SRGB;
- }
- break;
- case ANIM_AVI:
- ibuf = avi_fetchibuf(anim, position);
- if (ibuf)
- anim->curposition = position;
- break;
+ case ANIM_SEQUENCE:
+ pic = an_stringdec(anim->first, head, tail, &digits);
+ pic += position;
+ an_stringenc(anim->name, head, tail, digits, pic);
+ ibuf = IMB_loadiffname(anim->name, IB_rect);
+ if (ibuf) {
+ anim->curposition = position;
+ }
+ break;
+ case ANIM_MOVIE:
+ ibuf = movie_fetchibuf(anim, position);
+ if (ibuf) {
+ anim->curposition = position;
+ IMB_convert_rgba_to_abgr(ibuf);
+ ibuf->profile = IB_PROFILE_SRGB;
+ }
+ break;
+ case ANIM_AVI:
+ ibuf = avi_fetchibuf(anim, position);
+ if (ibuf)
+ anim->curposition = position;
+ break;
#ifdef WITH_QUICKTIME
- case ANIM_QTIME:
- ibuf = qtime_fetchibuf(anim, position);
- if (ibuf)
- anim->curposition = position;
- break;
+ case ANIM_QTIME:
+ ibuf = qtime_fetchibuf(anim, position);
+ if (ibuf)
+ anim->curposition = position;
+ break;
#endif
#ifdef WITH_FFMPEG
- case ANIM_FFMPEG:
- ibuf = ffmpeg_fetchibuf(anim, position, tc);
- if (ibuf)
- anim->curposition = position;
- filter_y = 0; /* done internally */
- break;
+ case ANIM_FFMPEG:
+ ibuf = ffmpeg_fetchibuf(anim, position, tc);
+ if (ibuf)
+ anim->curposition = position;
+ filter_y = 0; /* done internally */
+ break;
#endif
#ifdef WITH_REDCODE
- case ANIM_REDCODE:
- ibuf = redcode_fetchibuf(anim, position);
- if (ibuf) anim->curposition = position;
- break;
+ case ANIM_REDCODE:
+ ibuf = redcode_fetchibuf(anim, position);
+ if (ibuf) anim->curposition = position;
+ break;
#endif
}
@@ -1326,7 +1333,7 @@ struct ImBuf * IMB_anim_absolute(struct anim * anim, int position,
int IMB_anim_get_duration(struct anim *anim, IMB_Timecode_Type tc)
{
- struct anim_index * idx;
+ struct anim_index *idx;
if (tc == IMB_TC_NONE) {
return anim->duration;
}
@@ -1339,8 +1346,8 @@ int IMB_anim_get_duration(struct anim *anim, IMB_Timecode_Type tc)
return IMB_indexer_get_duration(idx);
}
-int IMB_anim_get_fps(struct anim * anim,
- short * frs_sec, float * frs_sec_base)
+int IMB_anim_get_fps(struct anim *anim,
+ short *frs_sec, float *frs_sec_base)
{
if (anim->frs_sec) {
*frs_sec = anim->frs_sec;
@@ -1350,12 +1357,12 @@ int IMB_anim_get_fps(struct anim * anim,
return FALSE;
}
-void IMB_anim_set_preseek(struct anim * anim, int preseek)
+void IMB_anim_set_preseek(struct anim *anim, int preseek)
{
anim->preseek = preseek;
}
-int IMB_anim_get_preseek(struct anim * anim)
+int IMB_anim_get_preseek(struct anim *anim)
{
return anim->preseek;
}
diff --git a/source/blender/imbuf/intern/bmp.c b/source/blender/imbuf/intern/bmp.c
index bce3c70fd93..8734ea90cb1 100644
--- a/source/blender/imbuf/intern/bmp.c
+++ b/source/blender/imbuf/intern/bmp.c
@@ -45,17 +45,17 @@
*/
typedef struct BMPINFOHEADER {
- unsigned int biSize;
- unsigned int biWidth;
- unsigned int biHeight;
- unsigned short biPlanes;
- unsigned short biBitCount;
- unsigned int biCompression;
- unsigned int biSizeImage;
- unsigned int biXPelsPerMeter;
- unsigned int biYPelsPerMeter;
- unsigned int biClrUsed;
- unsigned int biClrImportant;
+ unsigned int biSize;
+ unsigned int biWidth;
+ unsigned int biHeight;
+ unsigned short biPlanes;
+ unsigned short biBitCount;
+ unsigned int biCompression;
+ unsigned int biSizeImage;
+ unsigned int biXPelsPerMeter;
+ unsigned int biYPelsPerMeter;
+ unsigned int biClrUsed;
+ unsigned int biClrImportant;
} BMPINFOHEADER;
typedef struct BMPHEADER {
@@ -160,7 +160,7 @@ struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags)
else if (depth == 24) {
for (i = y; i > 0; i--) {
int j;
- for (j = x ; j > 0; j--) {
+ for (j = x; j > 0; j--) {
rect[0] = bmp[2];
rect[1] = bmp[1];
rect[2] = bmp[0];
@@ -194,16 +194,16 @@ struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags)
/* Couple of helper functions for writing our data */
static int putIntLSB(unsigned int ui, FILE *ofile)
{
- putc((ui>>0)&0xFF, ofile);
- putc((ui>>8)&0xFF, ofile);
- putc((ui>>16)&0xFF, ofile);
- return putc((ui>>24)&0xFF, ofile);
+ putc((ui >> 0) & 0xFF, ofile);
+ putc((ui >> 8) & 0xFF, ofile);
+ putc((ui >> 16) & 0xFF, ofile);
+ return putc((ui >> 24) & 0xFF, ofile);
}
static int putShortLSB(unsigned short us, FILE *ofile)
{
- putc((us>>0)&0xFF, ofile);
- return putc((us>>8)&0xFF, ofile);
+ putc((us >> 0) & 0xFF, ofile);
+ return putc((us >> 8) & 0xFF, ofile);
}
/* Found write info at http://users.ece.gatech.edu/~slabaugh/personal/c/bitmapUnix.c */
@@ -216,12 +216,12 @@ int imb_savebmp(struct ImBuf *ibuf, const char *name, int flags)
(void)flags; /* unused */
- extrabytes = (4 - ibuf->x*3 % 4) % 4;
+ extrabytes = (4 - ibuf->x * 3 % 4) % 4;
bytesize = (ibuf->x * 3 + extrabytes) * ibuf->y;
data = (uchar *) ibuf->rect;
ofile = BLI_fopen(name, "wb");
- if (!ofile) return 0;
+ if (!ofile) return 0;
putShortLSB(19778, ofile); /* "BM" */
putIntLSB(0, ofile); /* This can be 0 for BI_RGB bitmaps */
@@ -242,15 +242,15 @@ int imb_savebmp(struct ImBuf *ibuf, const char *name, int flags)
putIntLSB(0, ofile);
/* Need to write out padded image data in bgr format */
- for (y=0;y<ibuf->y;y++) {
- for (x=0;x<ibuf->x;x++) {
- ptr=(x + y * ibuf->x) * 4;
- if (putc(data[ptr+2], ofile) == EOF) return 0;
- if (putc(data[ptr+1], ofile) == EOF) return 0;
+ for (y = 0; y < ibuf->y; y++) {
+ for (x = 0; x < ibuf->x; x++) {
+ ptr = (x + y * ibuf->x) * 4;
+ if (putc(data[ptr + 2], ofile) == EOF) return 0;
+ if (putc(data[ptr + 1], ofile) == EOF) return 0;
if (putc(data[ptr], ofile) == EOF) return 0;
}
/* add padding here */
- for (t=0;t<extrabytes;t++) if (putc(0, ofile) == EOF) return 0;
+ for (t = 0; t < extrabytes; t++) if (putc(0, ofile) == EOF) return 0;
}
if (ofile) {
fflush(ofile);
diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c
index ba9b118d185..4be521218f1 100644
--- a/source/blender/imbuf/intern/cache.c
+++ b/source/blender/imbuf/intern/cache.c
@@ -48,7 +48,7 @@
* back to the global cache every pixel, but not to big to keep too many tiles
* locked and using memory. */
-#define IB_THREAD_CACHE_SIZE 100
+#define IB_THREAD_CACHE_SIZE 100
typedef struct ImGlobalTile {
struct ImGlobalTile *next, *prev;
@@ -82,7 +82,7 @@ typedef struct ImGlobalTileCache {
MemArena *memarena;
uintptr_t totmem, maxmem;
- ImThreadTileCache thread_cache[BLENDER_MAX_THREADS+1];
+ ImThreadTileCache thread_cache[BLENDER_MAX_THREADS + 1];
int totthread;
ThreadMutex mutex;
@@ -96,15 +96,15 @@ static ImGlobalTileCache GLOBAL_CACHE;
static unsigned int imb_global_tile_hash(const void *gtile_p)
{
- const ImGlobalTile *gtile= gtile_p;
+ const ImGlobalTile *gtile = gtile_p;
- return ((unsigned int)(intptr_t)gtile->ibuf)*769 + gtile->tx*53 + gtile->ty*97;
+ return ((unsigned int)(intptr_t)gtile->ibuf) * 769 + gtile->tx * 53 + gtile->ty * 97;
}
static int imb_global_tile_cmp(const void *a_p, const void *b_p)
{
- const ImGlobalTile *a= a_p;
- const ImGlobalTile *b= b_p;
+ const ImGlobalTile *a = a_p;
+ const ImGlobalTile *b = b_p;
if (a->ibuf == b->ibuf && a->tx == b->tx && a->ty == b->ty) return 0;
else if (a->ibuf < b->ibuf || a->tx < b->tx || a->ty < b->ty) return -1;
@@ -113,15 +113,15 @@ static int imb_global_tile_cmp(const void *a_p, const void *b_p)
static unsigned int imb_thread_tile_hash(const void *ttile_p)
{
- const ImThreadTile *ttile= ttile_p;
+ const ImThreadTile *ttile = ttile_p;
- return ((unsigned int)(intptr_t)ttile->ibuf)*769 + ttile->tx*53 + ttile->ty*97;
+ return ((unsigned int)(intptr_t)ttile->ibuf) * 769 + ttile->tx * 53 + ttile->ty * 97;
}
static int imb_thread_tile_cmp(const void *a_p, const void *b_p)
{
- const ImThreadTile *a= a_p;
- const ImThreadTile *b= b_p;
+ const ImThreadTile *a = a_p;
+ const ImThreadTile *b = b_p;
if (a->ibuf == b->ibuf && a->tx == b->tx && a->ty == b->ty) return 0;
else if (a->ibuf < b->ibuf || a->tx < b->tx || a->ty < b->ty) return -1;
@@ -132,24 +132,24 @@ static int imb_thread_tile_cmp(const void *a_p, const void *b_p)
static void imb_global_cache_tile_load(ImGlobalTile *gtile)
{
- ImBuf *ibuf= gtile->ibuf;
- int toffs= ibuf->xtiles*gtile->ty + gtile->tx;
+ ImBuf *ibuf = gtile->ibuf;
+ int toffs = ibuf->xtiles * gtile->ty + gtile->tx;
unsigned int *rect;
- rect = MEM_callocN(sizeof(unsigned int)*ibuf->tilex*ibuf->tiley, "imb_tile");
+ rect = MEM_callocN(sizeof(unsigned int) * ibuf->tilex * ibuf->tiley, "imb_tile");
imb_loadtile(ibuf, gtile->tx, gtile->ty, rect);
- ibuf->tiles[toffs]= rect;
+ ibuf->tiles[toffs] = rect;
}
static void imb_global_cache_tile_unload(ImGlobalTile *gtile)
{
- ImBuf *ibuf= gtile->ibuf;
- int toffs= ibuf->xtiles*gtile->ty + gtile->tx;
+ ImBuf *ibuf = gtile->ibuf;
+ int toffs = ibuf->xtiles * gtile->ty + gtile->tx;
MEM_freeN(ibuf->tiles[toffs]);
- ibuf->tiles[toffs]= NULL;
+ ibuf->tiles[toffs] = NULL;
- GLOBAL_CACHE.totmem -= sizeof(unsigned int)*ibuf->tilex*ibuf->tiley;
+ GLOBAL_CACHE.totmem -= sizeof(unsigned int) * ibuf->tilex * ibuf->tiley;
}
/* external free */
@@ -162,7 +162,7 @@ void imb_tile_cache_tile_free(ImBuf *ibuf, int tx, int ty)
lookuptile.ibuf = ibuf;
lookuptile.tx = tx;
lookuptile.ty = ty;
- gtile= BLI_ghash_lookup(GLOBAL_CACHE.tilehash, &lookuptile);
+ gtile = BLI_ghash_lookup(GLOBAL_CACHE.tilehash, &lookuptile);
if (gtile) {
/* in case another thread is loading this */
@@ -186,11 +186,11 @@ static void imb_thread_cache_init(ImThreadTileCache *cache)
memset(cache, 0, sizeof(ImThreadTileCache));
- cache->tilehash= BLI_ghash_new(imb_thread_tile_hash, imb_thread_tile_cmp, "imb_thread_cache_init gh");
+ cache->tilehash = BLI_ghash_new(imb_thread_tile_hash, imb_thread_tile_cmp, "imb_thread_cache_init gh");
/* pre-allocate all thread local tiles in unused list */
- for (a=0; a<IB_THREAD_CACHE_SIZE; a++) {
- ttile= BLI_memarena_alloc(GLOBAL_CACHE.memarena, sizeof(ImThreadTile));
+ for (a = 0; a < IB_THREAD_CACHE_SIZE; a++) {
+ ttile = BLI_memarena_alloc(GLOBAL_CACHE.memarena, sizeof(ImThreadTile));
BLI_addtail(&cache->unused, ttile);
}
}
@@ -219,10 +219,10 @@ void imb_tile_cache_exit(void)
int a;
if (GLOBAL_CACHE.initialized) {
- for (gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next)
+ for (gtile = GLOBAL_CACHE.tiles.first; gtile; gtile = gtile->next)
imb_global_cache_tile_unload(gtile);
- for (a=0; a<GLOBAL_CACHE.totthread; a++)
+ for (a = 0; a < GLOBAL_CACHE.totthread; a++)
imb_thread_cache_exit(&GLOBAL_CACHE.thread_cache[a]);
if (GLOBAL_CACHE.memarena)
@@ -253,15 +253,15 @@ void IMB_tile_cache_params(int totthread, int maxmem)
memset(&GLOBAL_CACHE, 0, sizeof(ImGlobalTileCache));
- GLOBAL_CACHE.tilehash= BLI_ghash_new(imb_global_tile_hash, imb_global_tile_cmp, "tile_cache_params gh");
+ GLOBAL_CACHE.tilehash = BLI_ghash_new(imb_global_tile_hash, imb_global_tile_cmp, "tile_cache_params gh");
- GLOBAL_CACHE.memarena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "ImTileCache arena");
+ GLOBAL_CACHE.memarena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "ImTileCache arena");
BLI_memarena_use_calloc(GLOBAL_CACHE.memarena);
- GLOBAL_CACHE.maxmem= maxmem*1024*1024;
+ GLOBAL_CACHE.maxmem = maxmem * 1024 * 1024;
- GLOBAL_CACHE.totthread= totthread;
- for (a=0; a<totthread; a++)
+ GLOBAL_CACHE.totthread = totthread;
+ for (a = 0; a < totthread; a++)
imb_thread_cache_init(&GLOBAL_CACHE.thread_cache[a]);
BLI_mutex_init(&GLOBAL_CACHE.mutex);
@@ -282,7 +282,7 @@ static ImGlobalTile *imb_global_cache_get_tile(ImBuf *ibuf, int tx, int ty, ImGl
lookuptile.ibuf = ibuf;
lookuptile.tx = tx;
lookuptile.ty = ty;
- gtile= BLI_ghash_lookup(GLOBAL_CACHE.tilehash, &lookuptile);
+ gtile = BLI_ghash_lookup(GLOBAL_CACHE.tilehash, &lookuptile);
if (gtile) {
/* found tile. however it may be in the process of being loaded
@@ -301,7 +301,7 @@ static ImGlobalTile *imb_global_cache_get_tile(ImBuf *ibuf, int tx, int ty, ImGl
/* first check if we hit the memory limit */
if (GLOBAL_CACHE.maxmem && GLOBAL_CACHE.totmem > GLOBAL_CACHE.maxmem) {
/* find an existing tile to unload */
- for (gtile=GLOBAL_CACHE.tiles.last; gtile; gtile=gtile->prev)
+ for (gtile = GLOBAL_CACHE.tiles.last; gtile; gtile = gtile->prev)
if (gtile->refcount == 0 && gtile->loading == 0)
break;
}
@@ -315,25 +315,25 @@ static ImGlobalTile *imb_global_cache_get_tile(ImBuf *ibuf, int tx, int ty, ImGl
else {
/* allocate a new tile or reuse unused */
if (GLOBAL_CACHE.unused.first) {
- gtile= GLOBAL_CACHE.unused.first;
+ gtile = GLOBAL_CACHE.unused.first;
BLI_remlink(&GLOBAL_CACHE.unused, gtile);
}
else
- gtile= BLI_memarena_alloc(GLOBAL_CACHE.memarena, sizeof(ImGlobalTile));
+ gtile = BLI_memarena_alloc(GLOBAL_CACHE.memarena, sizeof(ImGlobalTile));
}
/* setup new tile */
- gtile->ibuf= ibuf;
- gtile->tx= tx;
- gtile->ty= ty;
- gtile->refcount= 1;
- gtile->loading= 1;
+ gtile->ibuf = ibuf;
+ gtile->tx = tx;
+ gtile->ty = ty;
+ gtile->refcount = 1;
+ gtile->loading = 1;
BLI_ghash_insert(GLOBAL_CACHE.tilehash, gtile, gtile);
BLI_addhead(&GLOBAL_CACHE.tiles, gtile);
/* mark as being loaded and unlock to allow other threads to load too */
- GLOBAL_CACHE.totmem += sizeof(unsigned int)*ibuf->tilex*ibuf->tiley;
+ GLOBAL_CACHE.totmem += sizeof(unsigned int) * ibuf->tilex * ibuf->tiley;
BLI_mutex_unlock(&GLOBAL_CACHE.mutex);
@@ -341,7 +341,7 @@ static ImGlobalTile *imb_global_cache_get_tile(ImBuf *ibuf, int tx, int ty, ImGl
imb_global_cache_tile_load(gtile);
/* mark as done loading */
- gtile->loading= 0;
+ gtile->loading = 0;
}
return gtile;
@@ -353,10 +353,10 @@ static unsigned int *imb_thread_cache_get_tile(ImThreadTileCache *cache, ImBuf *
{
ImThreadTile *ttile, lookuptile;
ImGlobalTile *gtile, *replacetile;
- int toffs= ibuf->xtiles*ty + tx;
+ int toffs = ibuf->xtiles * ty + tx;
/* test if it is already in our thread local cache */
- if ((ttile=cache->tiles.first)) {
+ if ((ttile = cache->tiles.first)) {
/* check last used tile before going to hash */
if (ttile->ibuf == ibuf && ttile->tx == tx && ttile->ty == ty)
return ibuf->tiles[toffs];
@@ -366,7 +366,7 @@ static unsigned int *imb_thread_cache_get_tile(ImThreadTileCache *cache, ImBuf *
lookuptile.tx = tx;
lookuptile.ty = ty;
- if ((ttile=BLI_ghash_lookup(cache->tilehash, &lookuptile))) {
+ if ((ttile = BLI_ghash_lookup(cache->tilehash, &lookuptile))) {
BLI_remlink(&cache->tiles, ttile);
BLI_addhead(&cache->tiles, ttile);
@@ -376,33 +376,33 @@ static unsigned int *imb_thread_cache_get_tile(ImThreadTileCache *cache, ImBuf *
/* not found, have to do slow lookup in global cache */
if (cache->unused.first == NULL) {
- ttile= cache->tiles.last;
- replacetile= ttile->global;
+ ttile = cache->tiles.last;
+ replacetile = ttile->global;
BLI_remlink(&cache->tiles, ttile);
BLI_ghash_remove(cache->tilehash, ttile, NULL, NULL);
}
else {
- ttile= cache->unused.first;
- replacetile= NULL;
+ ttile = cache->unused.first;
+ replacetile = NULL;
BLI_remlink(&cache->unused, ttile);
}
BLI_addhead(&cache->tiles, ttile);
BLI_ghash_insert(cache->tilehash, ttile, ttile);
- gtile= imb_global_cache_get_tile(ibuf, tx, ty, replacetile);
+ gtile = imb_global_cache_get_tile(ibuf, tx, ty, replacetile);
- ttile->ibuf= gtile->ibuf;
- ttile->tx= gtile->tx;
- ttile->ty= gtile->ty;
- ttile->global= gtile;
+ ttile->ibuf = gtile->ibuf;
+ ttile->tx = gtile->tx;
+ ttile->ty = gtile->ty;
+ ttile->global = gtile;
return ibuf->tiles[toffs];
}
unsigned int *IMB_gettile(ImBuf *ibuf, int tx, int ty, int thread)
{
- return imb_thread_cache_get_tile(&GLOBAL_CACHE.thread_cache[thread+1], ibuf, tx, ty);
+ return imb_thread_cache_get_tile(&GLOBAL_CACHE.thread_cache[thread + 1], ibuf, tx, ty);
}
void IMB_tiles_to_rect(ImBuf *ibuf)
@@ -412,12 +412,12 @@ void IMB_tiles_to_rect(ImBuf *ibuf)
unsigned int *to, *from;
int a, tx, ty, y, w, h;
- for (a=0; a<ibuf->miptot; a++) {
- mipbuf= IMB_getmipmap(ibuf, a);
+ for (a = 0; a < ibuf->miptot; a++) {
+ mipbuf = IMB_getmipmap(ibuf, a);
/* don't call imb_addrectImBuf, it frees all mipmaps */
if (!mipbuf->rect) {
- if ((mipbuf->rect = MEM_mapallocN(ibuf->x*ibuf->y*sizeof(unsigned int), "imb_addrectImBuf"))) {
+ if ((mipbuf->rect = MEM_mapallocN(ibuf->x * ibuf->y * sizeof(unsigned int), "imb_addrectImBuf"))) {
mipbuf->mall |= IB_rect;
mipbuf->flags |= IB_rect;
}
@@ -425,22 +425,22 @@ void IMB_tiles_to_rect(ImBuf *ibuf)
break;
}
- for (ty=0; ty<mipbuf->ytiles; ty++) {
- for (tx=0; tx<mipbuf->xtiles; tx++) {
+ for (ty = 0; ty < mipbuf->ytiles; ty++) {
+ for (tx = 0; tx < mipbuf->xtiles; tx++) {
/* acquire tile through cache, this assumes cache is initialized,
* which it is always now but it's a weak assumption ... */
- gtile= imb_global_cache_get_tile(mipbuf, tx, ty, NULL);
+ gtile = imb_global_cache_get_tile(mipbuf, tx, ty, NULL);
/* setup pointers */
- from= mipbuf->tiles[mipbuf->xtiles*ty + tx];
- to= mipbuf->rect + mipbuf->x*ty*mipbuf->tiley + tx*mipbuf->tilex;
+ from = mipbuf->tiles[mipbuf->xtiles * ty + tx];
+ to = mipbuf->rect + mipbuf->x * ty * mipbuf->tiley + tx * mipbuf->tilex;
/* exception in tile width/height for tiles at end of image */
- w= (tx == mipbuf->xtiles-1)? mipbuf->x - tx*mipbuf->tilex: mipbuf->tilex;
- h= (ty == mipbuf->ytiles-1)? mipbuf->y - ty*mipbuf->tiley: mipbuf->tiley;
+ w = (tx == mipbuf->xtiles - 1) ? mipbuf->x - tx * mipbuf->tilex : mipbuf->tilex;
+ h = (ty == mipbuf->ytiles - 1) ? mipbuf->y - ty * mipbuf->tiley : mipbuf->tiley;
- for (y=0; y<h; y++) {
- memcpy(to, from, sizeof(unsigned int)*w);
+ for (y = 0; y < h; y++) {
+ memcpy(to, from, sizeof(unsigned int) * w);
from += mipbuf->tilex;
to += mipbuf->x;
}
diff --git a/source/blender/imbuf/intern/cineon/cineon_dpx.c b/source/blender/imbuf/intern/cineon/cineon_dpx.c
index a7d168d42a2..8e996b97622 100644
--- a/source/blender/imbuf/intern/cineon/cineon_dpx.c
+++ b/source/blender/imbuf/intern/cineon/cineon_dpx.c
@@ -63,7 +63,7 @@ static void cineon_conversion_parameters(LogImageByteConversionParameters *param
}
#endif
-static struct ImBuf *imb_load_dpx_cineon(unsigned char *mem, int use_cineon, int size, int flags)
+static ImBuf *imb_load_dpx_cineon(unsigned char *mem, int use_cineon, int size, int flags)
{
ImBuf *ibuf;
LogImageFile *image;
diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c
index 8f8c6311b30..062c7a9368d 100644
--- a/source/blender/imbuf/intern/divers.c
+++ b/source/blender/imbuf/intern/divers.c
@@ -48,7 +48,7 @@
void IMB_de_interlace(ImBuf *ibuf)
{
- ImBuf * tbuf1, * tbuf2;
+ ImBuf *tbuf1, *tbuf2;
if (ibuf == NULL) return;
if (ibuf->flags & IB_fields) return;
@@ -75,7 +75,7 @@ void IMB_de_interlace(ImBuf *ibuf)
void IMB_interlace(ImBuf *ibuf)
{
- ImBuf * tbuf1, * tbuf2;
+ ImBuf *tbuf1, *tbuf2;
if (ibuf == NULL) return;
ibuf->flags &= ~IB_fields;
@@ -113,13 +113,13 @@ DitherContext *create_dither_context(int w, float factor)
DitherContext *di;
int i;
- di= MEM_callocN(sizeof(DitherContext), "dithering context");
- di->f= factor / 16.0f;
- di->error_buf= MEM_callocN(4*(w+1)*sizeof(int), "dithering error");
- di->e= di->error_buf;
+ di = MEM_callocN(sizeof(DitherContext), "dithering context");
+ di->f = factor / 16.0f;
+ di->error_buf = MEM_callocN(4 * (w + 1) * sizeof(int), "dithering error");
+ di->e = di->error_buf;
- for (i=0; i<4; ++i)
- di->v[i]= di->v0[i]= di->v1[i]= 1024.0f*(BLI_frand()-0.5f);
+ for (i = 0; i < 4; ++i)
+ di->v[i] = di->v0[i] = di->v1[i] = 1024.0f * (BLI_frand() - 0.5f);
return di;
}
@@ -134,10 +134,10 @@ static void dither_finish_row(DitherContext *di)
{
int i;
- for (i=0; i<4; i++)
- di->v[i]= di->v0[i]= di->v1[i] = 0;
+ for (i = 0; i < 4; i++)
+ di->v[i] = di->v0[i] = di->v1[i] = 0;
- di->e= di->error_buf;
+ di->e = di->error_buf;
}
MINLINE unsigned char dither_value(unsigned short v_in, DitherContext *di, int i)
@@ -145,12 +145,12 @@ MINLINE unsigned char dither_value(unsigned short v_in, DitherContext *di, int i
int dv, d2;
unsigned char v_out;
- di->v[i] = v_in + (2*di->v[i] + di->e[4]) * di->f;
+ di->v[i] = v_in + (2 * di->v[i] + di->e[4]) * di->f;
CLAMP(di->v[i], 0, 0xFF00);
v_out = USHORTTOUCHAR(di->v[i]);
- di->v[i] -= v_out<<8;
+ di->v[i] -= v_out << 8;
dv = di->v[i];
- d2 = di->v[i]<<1;
+ d2 = di->v[i] << 1;
di->v[i] += d2;
*(di->e++) = di->v[i] + di->v0[i];
di->v[i] += d2;
@@ -166,18 +166,18 @@ MINLINE unsigned char dither_value(unsigned short v_in, DitherContext *di, int i
MINLINE void ushort_to_byte_v4(uchar b[4], const unsigned short us[4])
{
- b[0]= USHORTTOUCHAR(us[0]);
- b[1]= USHORTTOUCHAR(us[1]);
- b[2]= USHORTTOUCHAR(us[2]);
- b[3]= USHORTTOUCHAR(us[3]);
+ b[0] = USHORTTOUCHAR(us[0]);
+ b[1] = USHORTTOUCHAR(us[1]);
+ b[2] = USHORTTOUCHAR(us[2]);
+ b[3] = USHORTTOUCHAR(us[3]);
}
MINLINE void ushort_to_byte_dither_v4(uchar b[4], const unsigned short us[4], DitherContext *di)
{
- b[0]= dither_value(us[0], di, 0);
- b[1]= dither_value(us[1], di, 1);
- b[2]= dither_value(us[2], di, 2);
- b[3]= dither_value(us[3], di, 3);
+ b[0] = dither_value(us[0], di, 0);
+ b[1] = dither_value(us[1], di, 1);
+ b[2] = dither_value(us[2], di, 2);
+ b[3] = dither_value(us[3], di, 3);
}
MINLINE void float_to_byte_dither_v4(uchar b[4], const float f[4], DitherContext *di)
@@ -188,8 +188,8 @@ MINLINE void float_to_byte_dither_v4(uchar b[4], const float f[4], DitherContext
/* float to byte pixels, output 4-channel RGBA */
void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
- int channels_from, float dither, int profile_to, int profile_from, int predivide,
- int width, int height, int stride_to, int stride_from)
+ int channels_from, float dither, int profile_to, int profile_from, int predivide,
+ int width, int height, int stride_to, int stride_from)
{
float tmp[4];
int x, y;
@@ -201,32 +201,32 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
BLI_init_srgb_conversion();
if (dither)
- di= create_dither_context(width, dither);
+ di = create_dither_context(width, dither);
for (y = 0; y < height; y++) {
if (channels_from == 1) {
- /* single channel input */
- const float *from = rect_from + stride_from*y;
- uchar *to = rect_to + stride_to*y*4;
+ /* single channel input */
+ const float *from = rect_from + stride_from * y;
+ uchar *to = rect_to + stride_to * y * 4;
- for (x = 0; x < width; x++, from++, to+=4)
+ for (x = 0; x < width; x++, from++, to += 4)
to[0] = to[1] = to[2] = to[3] = FTOCHAR(from[0]);
}
else if (channels_from == 3) {
- /* RGB input */
- const float *from = rect_from + stride_from*y*3;
- uchar *to = rect_to + stride_to*y*4;
+ /* RGB input */
+ const float *from = rect_from + stride_from * y * 3;
+ uchar *to = rect_to + stride_to * y * 4;
if (profile_to == profile_from) {
/* no color space conversion */
- for (x = 0; x < width; x++, from+=3, to+=4) {
+ for (x = 0; x < width; x++, from += 3, to += 4) {
rgb_float_to_uchar(to, from);
to[3] = 255;
}
}
else if (profile_to == IB_PROFILE_SRGB) {
/* convert from linear to sRGB */
- for (x = 0; x < width; x++, from+=3, to+=4) {
+ for (x = 0; x < width; x++, from += 3, to += 4) {
linearrgb_to_srgb_v3_v3(tmp, from);
rgb_float_to_uchar(to, tmp);
to[3] = 255;
@@ -234,7 +234,7 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
}
else if (profile_to == IB_PROFILE_LINEAR_RGB) {
/* convert from sRGB to linear */
- for (x = 0; x < width; x++, from+=3, to+=4) {
+ for (x = 0; x < width; x++, from += 3, to += 4) {
srgb_to_linearrgb_v3_v3(tmp, from);
rgb_float_to_uchar(to, tmp);
to[3] = 255;
@@ -242,18 +242,18 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
}
}
else if (channels_from == 4) {
- /* RGBA input */
- const float *from = rect_from + stride_from*y*4;
- uchar *to = rect_to + stride_to*y*4;
+ /* RGBA input */
+ const float *from = rect_from + stride_from * y * 4;
+ uchar *to = rect_to + stride_to * y * 4;
if (profile_to == profile_from) {
/* no color space conversion */
if (dither) {
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
float_to_byte_dither_v4(to, from, di);
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
rgba_float_to_uchar(to, from);
}
}
@@ -262,25 +262,25 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
unsigned short us[4];
if (dither && predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
linearrgb_to_srgb_ushort4_predivide(us, from);
ushort_to_byte_dither_v4(to, us, di);
}
}
else if (dither) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
linearrgb_to_srgb_ushort4(us, from);
ushort_to_byte_dither_v4(to, us, di);
}
}
else if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
linearrgb_to_srgb_ushort4_predivide(us, from);
ushort_to_byte_v4(to, us);
}
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
linearrgb_to_srgb_ushort4(us, from);
ushort_to_byte_v4(to, us);
}
@@ -289,25 +289,25 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
else if (profile_to == IB_PROFILE_LINEAR_RGB) {
/* convert from sRGB to linear */
if (dither && predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
srgb_to_linearrgb_predivide_v4(tmp, from);
float_to_byte_dither_v4(to, tmp, di);
}
}
else if (dither) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
srgb_to_linearrgb_v4(tmp, from);
float_to_byte_dither_v4(to, tmp, di);
}
}
else if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
srgb_to_linearrgb_predivide_v4(tmp, from);
rgba_float_to_uchar(to, tmp);
}
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
srgb_to_linearrgb_v4(tmp, from);
rgba_float_to_uchar(to, tmp);
}
@@ -325,8 +325,8 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
/* byte to float pixels, input and output 4-channel RGBA */
void IMB_buffer_float_from_byte(float *rect_to, const uchar *rect_from,
- int profile_to, int profile_from, int predivide,
- int width, int height, int stride_to, int stride_from)
+ int profile_to, int profile_from, int predivide,
+ int width, int height, int stride_to, int stride_from)
{
float tmp[4];
int x, y;
@@ -339,23 +339,23 @@ void IMB_buffer_float_from_byte(float *rect_to, const uchar *rect_from,
/* RGBA input */
for (y = 0; y < height; y++) {
- const uchar *from = rect_from + stride_from*y*4;
- float *to = rect_to + stride_to*y*4;
+ const uchar *from = rect_from + stride_from * y * 4;
+ float *to = rect_to + stride_to * y * 4;
if (profile_to == profile_from) {
/* no color space conversion */
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
rgba_uchar_to_float(to, from);
}
else if (profile_to == IB_PROFILE_LINEAR_RGB) {
/* convert sRGB to linear */
if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
srgb_to_linearrgb_uchar4_predivide(to, from);
}
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
srgb_to_linearrgb_uchar4(to, from);
}
}
@@ -363,13 +363,13 @@ void IMB_buffer_float_from_byte(float *rect_to, const uchar *rect_from,
else if (profile_to == IB_PROFILE_SRGB) {
/* convert linear to sRGB */
if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
rgba_uchar_to_float(tmp, from);
linearrgb_to_srgb_predivide_v4(to, tmp);
}
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
rgba_uchar_to_float(tmp, from);
linearrgb_to_srgb_v4(to, tmp);
}
@@ -380,8 +380,8 @@ void IMB_buffer_float_from_byte(float *rect_to, const uchar *rect_from,
/* float to float pixels, output 4-channel RGBA */
void IMB_buffer_float_from_float(float *rect_to, const float *rect_from,
- int channels_from, int profile_to, int profile_from, int predivide,
- int width, int height, int stride_to, int stride_from)
+ int channels_from, int profile_to, int profile_from, int predivide,
+ int width, int height, int stride_to, int stride_from)
{
int x, y;
@@ -389,39 +389,39 @@ void IMB_buffer_float_from_float(float *rect_to, const float *rect_from,
BLI_assert(profile_to != IB_PROFILE_NONE);
BLI_assert(profile_from != IB_PROFILE_NONE);
- if (channels_from==1) {
+ if (channels_from == 1) {
/* single channel input */
for (y = 0; y < height; y++) {
- const float *from = rect_from + stride_from*y;
- float *to = rect_to + stride_to*y*4;
+ const float *from = rect_from + stride_from * y;
+ float *to = rect_to + stride_to * y * 4;
- for (x = 0; x < width; x++, from++, to+=4)
+ for (x = 0; x < width; x++, from++, to += 4)
to[0] = to[1] = to[2] = to[3] = from[0];
}
}
else if (channels_from == 3) {
/* RGB input */
for (y = 0; y < height; y++) {
- const float *from = rect_from + stride_from*y*3;
- float *to = rect_to + stride_to*y*4;
+ const float *from = rect_from + stride_from * y * 3;
+ float *to = rect_to + stride_to * y * 4;
if (profile_to == profile_from) {
/* no color space conversion */
- for (x = 0; x < width; x++, from+=3, to+=4) {
+ for (x = 0; x < width; x++, from += 3, to += 4) {
copy_v3_v3(to, from);
to[3] = 1.0f;
}
}
else if (profile_to == IB_PROFILE_LINEAR_RGB) {
/* convert from sRGB to linear */
- for (x = 0; x < width; x++, from+=3, to+=4) {
+ for (x = 0; x < width; x++, from += 3, to += 4) {
srgb_to_linearrgb_v3_v3(to, from);
to[3] = 1.0f;
}
}
else if (profile_to == IB_PROFILE_SRGB) {
/* convert from linear to sRGB */
- for (x = 0; x < width; x++, from+=3, to+=4) {
+ for (x = 0; x < width; x++, from += 3, to += 4) {
linearrgb_to_srgb_v3_v3(to, from);
to[3] = 1.0f;
}
@@ -431,32 +431,32 @@ void IMB_buffer_float_from_float(float *rect_to, const float *rect_from,
else if (channels_from == 4) {
/* RGBA input */
for (y = 0; y < height; y++) {
- const float *from = rect_from + stride_from*y*4;
- float *to = rect_to + stride_to*y*4;
+ const float *from = rect_from + stride_from * y * 4;
+ float *to = rect_to + stride_to * y * 4;
if (profile_to == profile_from) {
/* same profile, copy */
- memcpy(to, from, sizeof(float)*4*width);
+ memcpy(to, from, sizeof(float) * 4 * width);
}
else if (profile_to == IB_PROFILE_LINEAR_RGB) {
/* convert to sRGB to linear */
if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
srgb_to_linearrgb_predivide_v4(to, from);
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
srgb_to_linearrgb_v4(to, from);
}
}
else if (profile_to == IB_PROFILE_SRGB) {
/* convert from linear to sRGB */
if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
linearrgb_to_srgb_predivide_v4(to, from);
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4)
+ for (x = 0; x < width; x++, from += 4, to += 4)
linearrgb_to_srgb_v4(to, from);
}
}
@@ -466,8 +466,8 @@ void IMB_buffer_float_from_float(float *rect_to, const float *rect_from,
/* byte to byte pixels, input and output 4-channel RGBA */
void IMB_buffer_byte_from_byte(uchar *rect_to, const uchar *rect_from,
- int profile_to, int profile_from, int predivide,
- int width, int height, int stride_to, int stride_from)
+ int profile_to, int profile_from, int predivide,
+ int width, int height, int stride_to, int stride_from)
{
float tmp[4];
int x, y;
@@ -478,24 +478,24 @@ void IMB_buffer_byte_from_byte(uchar *rect_to, const uchar *rect_from,
/* always RGBA input */
for (y = 0; y < height; y++) {
- const uchar *from = rect_from + stride_from*y*4;
- uchar *to = rect_to + stride_to*y*4;
+ const uchar *from = rect_from + stride_from * y * 4;
+ uchar *to = rect_to + stride_to * y * 4;
if (profile_to == profile_from) {
/* same profile, copy */
- memcpy(to, from, sizeof(uchar)*4*width);
+ memcpy(to, from, sizeof(uchar) * 4 * width);
}
else if (profile_to == IB_PROFILE_LINEAR_RGB) {
/* convert to sRGB to linear */
if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
rgba_uchar_to_float(tmp, from);
srgb_to_linearrgb_predivide_v4(tmp, tmp);
rgba_float_to_uchar(to, tmp);
}
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
rgba_uchar_to_float(tmp, from);
srgb_to_linearrgb_v4(tmp, tmp);
rgba_float_to_uchar(to, tmp);
@@ -505,14 +505,14 @@ void IMB_buffer_byte_from_byte(uchar *rect_to, const uchar *rect_from,
else if (profile_to == IB_PROFILE_SRGB) {
/* convert from linear to sRGB */
if (predivide) {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
rgba_uchar_to_float(tmp, from);
linearrgb_to_srgb_predivide_v4(tmp, tmp);
rgba_float_to_uchar(to, tmp);
}
}
else {
- for (x = 0; x < width; x++, from+=4, to+=4) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
rgba_uchar_to_float(tmp, from);
linearrgb_to_srgb_v4(tmp, tmp);
rgba_float_to_uchar(to, tmp);
@@ -526,15 +526,15 @@ void IMB_buffer_byte_from_byte(uchar *rect_to, const uchar *rect_from,
void IMB_rect_from_float(ImBuf *ibuf)
{
- int predivide= (ibuf->flags & IB_cm_predivide);
+ int predivide = (ibuf->flags & IB_cm_predivide);
int profile_from;
/* verify we have a float buffer */
- if (ibuf->rect_float==NULL)
+ if (ibuf->rect_float == NULL)
return;
/* create byte rect if it didn't exist yet */
- if (ibuf->rect==NULL)
+ if (ibuf->rect == NULL)
imb_addrectImBuf(ibuf);
/* determine profiles */
@@ -546,9 +546,9 @@ void IMB_rect_from_float(ImBuf *ibuf)
BLI_assert(0);
/* do conversion */
- IMB_buffer_byte_from_float((uchar*)ibuf->rect, ibuf->rect_float,
- ibuf->channels, ibuf->dither, IB_PROFILE_SRGB, profile_from, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ IMB_buffer_byte_from_float((uchar *)ibuf->rect, ibuf->rect_float,
+ ibuf->channels, ibuf->dither, IB_PROFILE_SRGB, profile_from, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
/* ensure user flag is reset */
ibuf->userflags &= ~IB_RECT_INVALID;
@@ -559,15 +559,15 @@ void IMB_partial_rect_from_float(ImBuf *ibuf, float *buffer, int x, int y, int w
{
float *rect_float;
uchar *rect_byte;
- int predivide= (ibuf->flags & IB_cm_predivide);
+ int predivide = (ibuf->flags & IB_cm_predivide);
int profile_from;
/* verify we have a float buffer */
- if (ibuf->rect_float==NULL || buffer==NULL)
+ if (ibuf->rect_float == NULL || buffer == NULL)
return;
/* create byte rect if it didn't exist yet */
- if (ibuf->rect==NULL)
+ if (ibuf->rect == NULL)
imb_addrectImBuf(ibuf);
/* determine profiles */
@@ -579,16 +579,16 @@ void IMB_partial_rect_from_float(ImBuf *ibuf, float *buffer, int x, int y, int w
BLI_assert(0);
/* do conversion */
- rect_float= ibuf->rect_float + (x + y*ibuf->x)*ibuf->channels;
- rect_byte= (uchar*)ibuf->rect + (x + y*ibuf->x)*4;
+ rect_float = ibuf->rect_float + (x + y * ibuf->x) * ibuf->channels;
+ rect_byte = (uchar *)ibuf->rect + (x + y * ibuf->x) * 4;
IMB_buffer_float_from_float(buffer, rect_float,
- ibuf->channels, IB_PROFILE_SRGB, profile_from, predivide,
- w, h, w, ibuf->x);
+ ibuf->channels, IB_PROFILE_SRGB, profile_from, predivide,
+ w, h, w, ibuf->x);
IMB_buffer_byte_from_float(rect_byte, buffer,
- 4, ibuf->dither, IB_PROFILE_SRGB, IB_PROFILE_SRGB, 0,
- w, h, ibuf->x, w);
+ 4, ibuf->dither, IB_PROFILE_SRGB, IB_PROFILE_SRGB, 0,
+ w, h, ibuf->x, w);
/* ensure user flag is reset */
ibuf->userflags &= ~IB_RECT_INVALID;
@@ -596,14 +596,14 @@ void IMB_partial_rect_from_float(ImBuf *ibuf, float *buffer, int x, int y, int w
void IMB_float_from_rect(ImBuf *ibuf)
{
- int predivide= (ibuf->flags & IB_cm_predivide);
+ int predivide = (ibuf->flags & IB_cm_predivide);
int profile_from;
/* verify if we byte and float buffers */
- if (ibuf->rect==NULL)
+ if (ibuf->rect == NULL)
return;
- if (ibuf->rect_float==NULL)
+ if (ibuf->rect_float == NULL)
if (imb_addrectfloatImBuf(ibuf) == 0)
return;
@@ -614,27 +614,27 @@ void IMB_float_from_rect(ImBuf *ibuf)
profile_from = IB_PROFILE_SRGB;
/* do conversion */
- IMB_buffer_float_from_byte(ibuf->rect_float, (uchar*)ibuf->rect,
- IB_PROFILE_LINEAR_RGB, profile_from, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ IMB_buffer_float_from_byte(ibuf->rect_float, (uchar *)ibuf->rect,
+ IB_PROFILE_LINEAR_RGB, profile_from, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
}
/* no profile conversion */
void IMB_float_from_rect_simple(ImBuf *ibuf)
{
- int predivide= (ibuf->flags & IB_cm_predivide);
+ int predivide = (ibuf->flags & IB_cm_predivide);
- if (ibuf->rect_float==NULL)
+ if (ibuf->rect_float == NULL)
imb_addrectfloatImBuf(ibuf);
- IMB_buffer_float_from_byte(ibuf->rect_float, (uchar*)ibuf->rect,
- IB_PROFILE_SRGB, IB_PROFILE_SRGB, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ IMB_buffer_float_from_byte(ibuf->rect_float, (uchar *)ibuf->rect,
+ IB_PROFILE_SRGB, IB_PROFILE_SRGB, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
}
void IMB_convert_profile(ImBuf *ibuf, int profile)
{
- int predivide= (ibuf->flags & IB_cm_predivide);
+ int predivide = (ibuf->flags & IB_cm_predivide);
int profile_from, profile_to;
if (ibuf->profile == profile)
@@ -662,25 +662,25 @@ void IMB_convert_profile(ImBuf *ibuf, int profile)
/* do conversion */
if (ibuf->rect_float) {
IMB_buffer_float_from_float(ibuf->rect_float, ibuf->rect_float,
- 4, profile_to, profile_from, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ 4, profile_to, profile_from, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
}
if (ibuf->rect) {
- IMB_buffer_byte_from_byte((uchar*)ibuf->rect, (uchar*)ibuf->rect,
- profile_to, profile_from, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ IMB_buffer_byte_from_byte((uchar *)ibuf->rect, (uchar *)ibuf->rect,
+ profile_to, profile_from, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
}
/* set new profile */
- ibuf->profile= profile;
+ ibuf->profile = profile;
}
/* use when you need to get a buffer with a certain profile
* if the return */
float *IMB_float_profile_ensure(ImBuf *ibuf, int profile, int *alloc)
{
- int predivide= (ibuf->flags & IB_cm_predivide);
+ int predivide = (ibuf->flags & IB_cm_predivide);
int profile_from, profile_to;
/* determine profiles */
@@ -696,7 +696,7 @@ float *IMB_float_profile_ensure(ImBuf *ibuf, int profile, int *alloc)
if (profile_from == profile_to) {
/* simple case, just allocate the buffer and return */
- *alloc= 0;
+ *alloc = 0;
if (ibuf->rect_float == NULL)
IMB_float_from_rect(ibuf);
@@ -705,18 +705,18 @@ float *IMB_float_profile_ensure(ImBuf *ibuf, int profile, int *alloc)
}
else {
/* conversion is needed, first check */
- float *fbuf= MEM_mallocN(ibuf->x * ibuf->y * sizeof(float) * 4, "IMB_float_profile_ensure");
- *alloc= 1;
+ float *fbuf = MEM_mallocN(ibuf->x * ibuf->y * sizeof(float) * 4, "IMB_float_profile_ensure");
+ *alloc = 1;
if (ibuf->rect_float == NULL) {
- IMB_buffer_float_from_byte(fbuf, (uchar*)ibuf->rect,
- profile_to, profile_from, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ IMB_buffer_float_from_byte(fbuf, (uchar *)ibuf->rect,
+ profile_to, profile_from, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
}
else {
IMB_buffer_float_from_float(fbuf, ibuf->rect_float,
- 4, profile_to, profile_from, predivide,
- ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+ 4, profile_to, profile_from, predivide,
+ ibuf->x, ibuf->y, ibuf->x, ibuf->x);
}
return fbuf;
@@ -728,24 +728,24 @@ float *IMB_float_profile_ensure(ImBuf *ibuf, int profile, int *alloc)
/* no profile conversion */
void IMB_color_to_bw(ImBuf *ibuf)
{
- float *rctf= ibuf->rect_float;
- uchar *rct= (uchar*)ibuf->rect;
+ float *rctf = ibuf->rect_float;
+ uchar *rct = (uchar *)ibuf->rect;
int i;
if (rctf) {
- for (i = ibuf->x * ibuf->y; i > 0; i--, rctf+=4)
- rctf[0]= rctf[1]= rctf[2]= rgb_to_grayscale(rctf);
+ for (i = ibuf->x * ibuf->y; i > 0; i--, rctf += 4)
+ rctf[0] = rctf[1] = rctf[2] = rgb_to_grayscale(rctf);
}
if (rct) {
- for (i = ibuf->x * ibuf->y; i > 0; i--, rct+=4)
- rct[0]= rct[1]= rct[2]= rgb_to_grayscale_byte(rct);
+ for (i = ibuf->x * ibuf->y; i > 0; i--, rct += 4)
+ rct[0] = rct[1] = rct[2] = rgb_to_grayscale_byte(rct);
}
}
void IMB_buffer_float_clamp(float *buf, int width, int height)
{
- int i, total = width*height*4;
+ int i, total = width * height * 4;
for (i = 0; i < total; i++) {
buf[i] = MIN2(1.0, buf[i]);
}
@@ -753,27 +753,27 @@ void IMB_buffer_float_clamp(float *buf, int width, int height)
/**************************** alter saturation *****************************/
-void IMB_saturation(ImBuf * ibuf, float sat)
+void IMB_saturation(ImBuf *ibuf, float sat)
{
int i;
- unsigned char *rct= (unsigned char *)ibuf->rect;
- float *rctf= ibuf->rect_float;
+ unsigned char *rct = (unsigned char *)ibuf->rect;
+ float *rctf = ibuf->rect_float;
float hsv[3];
if (rct) {
float rgb[3];
- for (i = ibuf->x * ibuf->y; i > 0; i--, rct+=4) {
+ for (i = ibuf->x * ibuf->y; i > 0; i--, rct += 4) {
rgb_uchar_to_float(rgb, rct);
- rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
- hsv_to_rgb(hsv[0], hsv[1] * sat, hsv[2], rgb, rgb+1, rgb+2);
+ rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2);
+ hsv_to_rgb(hsv[0], hsv[1] * sat, hsv[2], rgb, rgb + 1, rgb + 2);
rgb_float_to_uchar(rct, rgb);
}
}
if (rctf) {
- for (i = ibuf->x * ibuf->y; i > 0; i--, rctf+=4) {
- rgb_to_hsv(rctf[0], rctf[1], rctf[2], hsv, hsv+1, hsv+2);
- hsv_to_rgb(hsv[0], hsv[1] * sat, hsv[2], rctf, rctf+1, rctf+2);
+ for (i = ibuf->x * ibuf->y; i > 0; i--, rctf += 4) {
+ rgb_to_hsv(rctf[0], rctf[1], rctf[2], hsv, hsv + 1, hsv + 2);
+ hsv_to_rgb(hsv[0], hsv[1] * sat, hsv[2], rctf, rctf + 1, rctf + 2);
}
}
}
diff --git a/source/blender/imbuf/intern/filetype.c b/source/blender/imbuf/intern/filetype.c
index 59c10165974..da207c19695 100644
--- a/source/blender/imbuf/intern/filetype.c
+++ b/source/blender/imbuf/intern/filetype.c
@@ -44,13 +44,26 @@
#include "imbuf.h"
-static int imb_ftype_default(ImFileType *type, ImBuf *ibuf) { return (ibuf->ftype & type->filetype); }
+static int imb_ftype_default(ImFileType *type, ImBuf *ibuf)
+{
+ return (ibuf->ftype & type->filetype);
+}
#if defined(__APPLE__) && defined(IMBUF_COCOA)
-static int imb_ftype_cocoa(ImFileType *type, ImBuf *ibuf) { return (ibuf->ftype & TIF); }
+static int imb_ftype_cocoa(ImFileType *type, ImBuf *ibuf)
+{
+ return (ibuf->ftype & TIF);
+}
#endif
-static int imb_ftype_iris(ImFileType *type, ImBuf *ibuf) { (void)type; return (ibuf->ftype == IMAGIC); }
+static int imb_ftype_iris(ImFileType *type, ImBuf *ibuf)
+{
+ (void)type;
+ return (ibuf->ftype == IMAGIC);
+}
#ifdef WITH_QUICKTIME
-static int imb_ftype_quicktime(ImFileType *type, ImBuf *ibuf) { return 0; } // XXX
+static int imb_ftype_quicktime(ImFileType *type, ImBuf *ibuf)
+{
+ return 0; /* XXX */
+}
#endif
#ifdef WITH_QUICKTIME
@@ -58,7 +71,7 @@ void quicktime_init(void);
void quicktime_exit(void);
#endif
-ImFileType IMB_FILE_TYPES[]= {
+ImFileType IMB_FILE_TYPES[] = {
{NULL, NULL, imb_is_a_jpeg, imb_ftype_default, imb_load_jpeg, imb_savejpeg, NULL, 0, JPG},
{NULL, NULL, imb_is_a_png, imb_ftype_default, imb_loadpng, imb_savepng, NULL, 0, PNG},
{NULL, NULL, imb_is_a_bmp, imb_ftype_default, imb_bmp_decode, imb_savebmp, NULL, 0, BMP},
@@ -88,13 +101,14 @@ ImFileType IMB_FILE_TYPES[]= {
#ifdef WITH_QUICKTIME
{quicktime_init, quicktime_exit, imb_is_a_quicktime, imb_ftype_quicktime, imb_quicktime_decode, NULL, NULL, 0, QUICKTIME},
#endif
- {NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0}};
+ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0}
+};
void imb_filetypes_init(void)
{
ImFileType *type;
- for (type=IMB_FILE_TYPES; type->is_a; type++)
+ for (type = IMB_FILE_TYPES; type->is_a; type++)
if (type->init)
type->init();
}
@@ -103,7 +117,7 @@ void imb_filetypes_exit(void)
{
ImFileType *type;
- for (type=IMB_FILE_TYPES; type->is_a; type++)
+ for (type = IMB_FILE_TYPES; type->is_a; type++)
if (type->exit)
type->exit();
}
diff --git a/source/blender/imbuf/intern/filter.c b/source/blender/imbuf/intern/filter.c
index bc5e85a3c55..e744851a9b6 100644
--- a/source/blender/imbuf/intern/filter.c
+++ b/source/blender/imbuf/intern/filter.c
@@ -49,19 +49,19 @@ static void filtrow(unsigned char *point, int x)
{
unsigned int c1, c2, c3, error;
- if (x>1) {
+ if (x > 1) {
c1 = c2 = *point;
error = 2;
- for (x--;x>0;x--) {
+ for (x--; x > 0; x--) {
c3 = point[4];
- c1 += (c2<<1) + c3 + error;
+ c1 += (c2 << 1) + c3 + error;
error = c1 & 3;
*point = c1 >> 2;
point += 4;
- c1=c2;
- c2=c3;
+ c1 = c2;
+ c2 = c3;
}
- *point = (c1 + (c2<<1) + c2 + error) >> 2;
+ *point = (c1 + (c2 << 1) + c2 + error) >> 2;
}
}
@@ -69,17 +69,17 @@ static void filtrowf(float *point, int x)
{
float c1, c2, c3;
- if (x>1) {
+ if (x > 1) {
c1 = c2 = *point;
- for (x--;x>0;x--) {
+ for (x--; x > 0; x--) {
c3 = point[4];
c1 += (c2 * 2) + c3;
- *point = 0.25f*c1;
+ *point = 0.25f * c1;
point += 4;
- c1=c2;
- c2=c3;
+ c1 = c2;
+ c2 = c3;
}
- *point = 0.25f*(c1 + (c2 * 2) + c2);
+ *point = 0.25f * (c1 + (c2 * 2) + c2);
}
}
@@ -90,21 +90,21 @@ static void filtcolum(unsigned char *point, int y, int skip)
unsigned int c1, c2, c3, error;
unsigned char *point2;
- if (y>1) {
+ if (y > 1) {
c1 = c2 = *point;
point2 = point;
error = 2;
- for (y--;y>0;y--) {
+ for (y--; y > 0; y--) {
point2 += skip;
c3 = *point2;
- c1 += (c2<<1) + c3 +error;
+ c1 += (c2 << 1) + c3 + error;
error = c1 & 3;
*point = c1 >> 2;
- point=point2;
- c1=c2;
- c2=c3;
+ point = point2;
+ c1 = c2;
+ c2 = c3;
}
- *point = (c1 + (c2<<1) + c2 + error) >> 2;
+ *point = (c1 + (c2 << 1) + c2 + error) >> 2;
}
}
@@ -112,19 +112,19 @@ static void filtcolumf(float *point, int y, int skip)
{
float c1, c2, c3, *point2;
- if (y>1) {
+ if (y > 1) {
c1 = c2 = *point;
point2 = point;
- for (y--;y>0;y--) {
+ for (y--; y > 0; y--) {
point2 += skip;
c3 = *point2;
c1 += (c2 * 2) + c3;
- *point = 0.25f*c1;
- point=point2;
- c1=c2;
- c2=c3;
+ *point = 0.25f * c1;
+ point = point2;
+ c1 = c2;
+ c2 = c3;
}
- *point = 0.25f*(c1 + (c2 * 2) + c2);
+ *point = 0.25f * (c1 + (c2 * 2) + c2);
}
}
@@ -139,9 +139,9 @@ void IMB_filtery(struct ImBuf *ibuf)
x = ibuf->x;
y = ibuf->y;
- skip = x<<2;
+ skip = x << 2;
- for (;x>0;x--) {
+ for (; x > 0; x--) {
if (point) {
if (ibuf->planes > 24) filtcolum(point, y, skip);
point++;
@@ -177,9 +177,9 @@ void imb_filterx(struct ImBuf *ibuf)
x = ibuf->x;
y = ibuf->y;
- skip = (x<<2) - 3;
+ skip = (x << 2) - 3;
- for (;y>0;y--) {
+ for (; y > 0; y--) {
if (point) {
if (ibuf->planes > 24) filtrow(point, x);
point++;
@@ -188,7 +188,7 @@ void imb_filterx(struct ImBuf *ibuf)
filtrow(point, x);
point++;
filtrow(point, x);
- point+=skip;
+ point += skip;
}
if (pointf) {
if (ibuf->planes > 24) filtrowf(pointf, x);
@@ -198,7 +198,7 @@ void imb_filterx(struct ImBuf *ibuf)
filtrowf(pointf, x);
pointf++;
filtrowf(pointf, x);
- pointf+=skip;
+ pointf += skip;
}
}
}
@@ -209,44 +209,44 @@ void IMB_filterN(ImBuf *out, ImBuf *in)
register char *cp, *r11, *r13, *r21, *r23, *r31, *r33;
int rowlen, x, y;
- rowlen= in->x;
+ rowlen = in->x;
- for (y=0; y<in->y; y++) {
+ for (y = 0; y < in->y; y++) {
/* setup rows */
- row2= (char*)(in->rect + y*rowlen);
- row1= (y == 0)? row2: row2 - 4*rowlen;
- row3= (y == in->y-1)? row2: row2 + 4*rowlen;
+ row2 = (char *)(in->rect + y * rowlen);
+ row1 = (y == 0) ? row2 : row2 - 4 * rowlen;
+ row3 = (y == in->y - 1) ? row2 : row2 + 4 * rowlen;
- cp= (char *)(out->rect + y*rowlen);
+ cp = (char *)(out->rect + y * rowlen);
- for (x=0; x<rowlen; x++) {
+ for (x = 0; x < rowlen; x++) {
if (x == 0) {
r11 = row1;
r21 = row1;
r31 = row1;
}
else {
- r11 = row1-4;
- r21 = row1-4;
- r31 = row1-4;
+ r11 = row1 - 4;
+ r21 = row1 - 4;
+ r31 = row1 - 4;
}
- if (x == rowlen-1) {
+ if (x == rowlen - 1) {
r13 = row1;
r23 = row1;
r33 = row1;
}
else {
- r13 = row1+4;
- r23 = row1+4;
- r33 = row1+4;
+ r13 = row1 + 4;
+ r23 = row1 + 4;
+ r33 = row1 + 4;
}
- cp[0]= (r11[0] + 2*row1[0] + r13[0] + 2*r21[0] + 4*row2[0] + 2*r23[0] + r31[0] + 2*row3[0] + r33[0])>>4;
- cp[1]= (r11[1] + 2*row1[1] + r13[1] + 2*r21[1] + 4*row2[1] + 2*r23[1] + r31[1] + 2*row3[1] + r33[1])>>4;
- cp[2]= (r11[2] + 2*row1[2] + r13[2] + 2*r21[2] + 4*row2[2] + 2*r23[2] + r31[2] + 2*row3[2] + r33[2])>>4;
- cp[3]= (r11[3] + 2*row1[3] + r13[3] + 2*r21[3] + 4*row2[3] + 2*r23[3] + r31[3] + 2*row3[3] + r33[3])>>4;
- cp+=4; row1+=4; row2+=4; row3+=4;
+ cp[0] = (r11[0] + 2 * row1[0] + r13[0] + 2 * r21[0] + 4 * row2[0] + 2 * r23[0] + r31[0] + 2 * row3[0] + r33[0]) >> 4;
+ cp[1] = (r11[1] + 2 * row1[1] + r13[1] + 2 * r21[1] + 4 * row2[1] + 2 * r23[1] + r31[1] + 2 * row3[1] + r33[1]) >> 4;
+ cp[2] = (r11[2] + 2 * row1[2] + r13[2] + 2 * r21[2] + 4 * row2[2] + 2 * r23[2] + r31[2] + 2 * row3[2] + r33[2]) >> 4;
+ cp[3] = (r11[3] + 2 * row1[3] + r13[3] + 2 * r21[3] + 4 * row2[3] + 2 * r23[3] + r31[3] + 2 * row3[3] + r33[3]) >> 4;
+ cp += 4; row1 += 4; row2 += 4; row3 += 4;
}
}
}
@@ -263,32 +263,32 @@ void IMB_mask_filter_extend(char *mask, int width, int height)
int rowlen, x, y;
char *temprect;
- rowlen= width;
+ rowlen = width;
/* make a copy, to prevent flooding */
- temprect= MEM_dupallocN(mask);
+ temprect = MEM_dupallocN(mask);
- for (y=1; y<=height; y++) {
+ for (y = 1; y <= height; y++) {
/* setup rows */
- row1= (char *)(temprect + (y-2)*rowlen);
- row2= row1 + rowlen;
- row3= row2 + rowlen;
- if (y==1)
- row1= row2;
- else if (y==height)
- row3= row2;
-
- for (x=0; x<rowlen; x++) {
- if (mask[((y-1)*rowlen)+x]==0) {
- if (*row1 || *row2 || *row3 || *(row1+1) || *(row3+1) ) {
- mask[((y-1)*rowlen)+x] = FILTER_MASK_MARGIN;
+ row1 = (char *)(temprect + (y - 2) * rowlen);
+ row2 = row1 + rowlen;
+ row3 = row2 + rowlen;
+ if (y == 1)
+ row1 = row2;
+ else if (y == height)
+ row3 = row2;
+
+ for (x = 0; x < rowlen; x++) {
+ if (mask[((y - 1) * rowlen) + x] == 0) {
+ if (*row1 || *row2 || *row3 || *(row1 + 1) || *(row3 + 1) ) {
+ mask[((y - 1) * rowlen) + x] = FILTER_MASK_MARGIN;
}
- else if ((x!=rowlen-1) && (*(row1+2) || *(row2+2) || *(row3+2)) ) {
- mask[((y-1)*rowlen)+x] = FILTER_MASK_MARGIN;
+ else if ((x != rowlen - 1) && (*(row1 + 2) || *(row2 + 2) || *(row3 + 2)) ) {
+ mask[((y - 1) * rowlen) + x] = FILTER_MASK_MARGIN;
}
}
- if (x!=0) {
+ if (x != 0) {
row1++; row2++; row3++;
}
}
@@ -301,10 +301,10 @@ void IMB_mask_clear(ImBuf *ibuf, char *mask, int val)
{
int x, y;
if (ibuf->rect_float) {
- for (x=0; x<ibuf->x; x++) {
- for (y=0; y<ibuf->y; y++) {
- if (mask[ibuf->x*y + x] == val) {
- float *col= ibuf->rect_float + 4*(ibuf->x*y + x);
+ for (x = 0; x < ibuf->x; x++) {
+ for (y = 0; y < ibuf->y; y++) {
+ if (mask[ibuf->x * y + x] == val) {
+ float *col = ibuf->rect_float + 4 * (ibuf->x * y + x);
col[0] = col[1] = col[2] = col[3] = 0.0f;
}
}
@@ -312,10 +312,10 @@ void IMB_mask_clear(ImBuf *ibuf, char *mask, int val)
}
else {
/* char buffer */
- for (x=0; x<ibuf->x; x++) {
- for (y=0; y<ibuf->y; y++) {
- if (mask[ibuf->x*y + x] == val) {
- char *col= (char *)(ibuf->rect + ibuf->x*y + x);
+ for (x = 0; x < ibuf->x; x++) {
+ for (y = 0; y < ibuf->y; y++) {
+ if (mask[ibuf->x * y + x] == val) {
+ char *col = (char *)(ibuf->rect + ibuf->x * y + x);
col[0] = col[1] = col[2] = col[3] = 0;
}
}
@@ -325,23 +325,23 @@ void IMB_mask_clear(ImBuf *ibuf, char *mask, int val)
static int filter_make_index(const int x, const int y, const int w, const int h)
{
- if (x<0 || x>=w || y<0 || y>=h) return -1; /* return bad index */
- else return y*w+x;
+ if (x < 0 || x >= w || y < 0 || y >= h) return -1; /* return bad index */
+ else return y * w + x;
}
static int check_pixel_assigned(const void *buffer, const char *mask, const int index, const int depth, const int is_float)
{
int res = 0;
- if (index>=0) {
- const int alpha_index = depth*index+(depth-1);
+ if (index >= 0) {
+ const int alpha_index = depth * index + (depth - 1);
- if (mask!=NULL) {
- res = mask[index]!=0 ? 1 : 0;
+ if (mask != NULL) {
+ res = mask[index] != 0 ? 1 : 0;
}
- else if ( (is_float && ((const float *) buffer)[alpha_index]!=0.0f) ||
- (!is_float && ((const unsigned char *) buffer)[alpha_index]!=0) ) {
- res=1;
+ else if ( (is_float && ((const float *) buffer)[alpha_index] != 0.0f) ||
+ (!is_float && ((const unsigned char *) buffer)[alpha_index] != 0) ) {
+ res = 1;
}
}
@@ -354,93 +354,94 @@ static int check_pixel_assigned(const void *buffer, const char *mask, const int
* */
void IMB_filter_extend(struct ImBuf *ibuf, char *mask, int filter)
{
- const int width= ibuf->x;
- const int height= ibuf->y;
- const int depth= 4; /* always 4 channels */
- const int chsize= ibuf->rect_float ? sizeof(float) : sizeof(unsigned char);
- const int bsize= width*height*depth*chsize;
- const int is_float= ibuf->rect_float!=NULL;
- void *dstbuf= (void *) MEM_dupallocN(ibuf->rect_float ? (void *) ibuf->rect_float : (void *) ibuf->rect);
- char *dstmask= mask==NULL ? NULL : (char *) MEM_dupallocN(mask);
- void *srcbuf= ibuf->rect_float ? (void *) ibuf->rect_float : (void *) ibuf->rect;
- char *srcmask= mask;
- int cannot_early_out= 1, r, n, k, i, j, c;
+ const int width = ibuf->x;
+ const int height = ibuf->y;
+ const int depth = 4; /* always 4 channels */
+ const int chsize = ibuf->rect_float ? sizeof(float) : sizeof(unsigned char);
+ const int bsize = width * height * depth * chsize;
+ const int is_float = ibuf->rect_float != NULL;
+ void *dstbuf = (void *) MEM_dupallocN(ibuf->rect_float ? (void *) ibuf->rect_float : (void *) ibuf->rect);
+ char *dstmask = mask == NULL ? NULL : (char *) MEM_dupallocN(mask);
+ void *srcbuf = ibuf->rect_float ? (void *) ibuf->rect_float : (void *) ibuf->rect;
+ char *srcmask = mask;
+ int cannot_early_out = 1, r, n, k, i, j, c;
float weight[25];
/* build a weights buffer */
- n= 1;
+ n = 1;
#if 0
- k= 0;
+ k = 0;
for (i = -n; i <= n; i++)
for (j = -n; j <= n; j++)
weight[k++] = sqrt((float) i * i + j * j);
#endif
- weight[0]=1; weight[1]=2; weight[2]=1;
- weight[3]=2; weight[4]=0; weight[5]=2;
- weight[6]=1; weight[7]=2; weight[8]=1;
+ weight[0] = 1; weight[1] = 2; weight[2] = 1;
+ weight[3] = 2; weight[4] = 0; weight[5] = 2;
+ weight[6] = 1; weight[7] = 2; weight[8] = 1;
/* run passes */
for (r = 0; cannot_early_out == 1 && r < filter; r++) {
int x, y;
cannot_early_out = 0;
- for (y= 0; y<height; y++) {
- for (x= 0; x<width; x++) {
- const int index= filter_make_index(x, y, width, height);
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ const int index = filter_make_index(x, y, width, height);
/* only update unassigned pixels */
if (!check_pixel_assigned(srcbuf, srcmask, index, depth, is_float)) {
float tmp[4];
- float wsum=0;
- float acc[4]={0, 0, 0, 0};
+ float wsum = 0;
+ float acc[4] = {0, 0, 0, 0};
k = 0;
- if (check_pixel_assigned(srcbuf, srcmask, filter_make_index(x-1, y, width, height), depth, is_float) ||
- check_pixel_assigned(srcbuf, srcmask, filter_make_index(x+1, y, width, height), depth, is_float) ||
- check_pixel_assigned(srcbuf, srcmask, filter_make_index(x, y-1, width, height), depth, is_float) ||
- check_pixel_assigned(srcbuf, srcmask, filter_make_index(x, y+1, width, height), depth, is_float)) {
- for (i= -n; i<=n; i++) {
- for (j=-n; j<=n; j++) {
+ if (check_pixel_assigned(srcbuf, srcmask, filter_make_index(x - 1, y, width, height), depth, is_float) ||
+ check_pixel_assigned(srcbuf, srcmask, filter_make_index(x + 1, y, width, height), depth, is_float) ||
+ check_pixel_assigned(srcbuf, srcmask, filter_make_index(x, y - 1, width, height), depth, is_float) ||
+ check_pixel_assigned(srcbuf, srcmask, filter_make_index(x, y + 1, width, height), depth, is_float))
+ {
+ for (i = -n; i <= n; i++) {
+ for (j = -n; j <= n; j++) {
if (i != 0 || j != 0) {
- const int tmpindex= filter_make_index(x+i, y+j, width, height);
+ const int tmpindex = filter_make_index(x + i, y + j, width, height);
- if (check_pixel_assigned(srcbuf, srcmask, tmpindex, depth, is_float)) {
+ if (check_pixel_assigned(srcbuf, srcmask, tmpindex, depth, is_float)) {
if (is_float) {
- for (c=0; c<depth; c++)
- tmp[c] = ((const float *) srcbuf)[depth*tmpindex+c];
+ for (c = 0; c < depth; c++)
+ tmp[c] = ((const float *) srcbuf)[depth * tmpindex + c];
}
else {
- for (c=0; c<depth; c++)
- tmp[c] = (float) ((const unsigned char *) srcbuf)[depth*tmpindex+c];
+ for (c = 0; c < depth; c++)
+ tmp[c] = (float) ((const unsigned char *) srcbuf)[depth * tmpindex + c];
}
- wsum+= weight[k];
+ wsum += weight[k];
- for (c=0; c<depth; c++)
- acc[c]+= weight[k] * tmp[c];
+ for (c = 0; c < depth; c++)
+ acc[c] += weight[k] * tmp[c];
}
}
k++;
}
}
- if (wsum!=0) {
- for (c=0; c<depth; c++)
- acc[c]/= wsum;
+ if (wsum != 0) {
+ for (c = 0; c < depth; c++)
+ acc[c] /= wsum;
if (is_float) {
- for (c=0; c<depth; c++)
- ((float *) dstbuf)[depth*index+c] = acc[c];
+ for (c = 0; c < depth; c++)
+ ((float *) dstbuf)[depth * index + c] = acc[c];
}
else {
- for (c=0; c<depth; c++) {
- ((unsigned char *) dstbuf)[depth*index+c]= acc[c] > 255 ? 255 : (acc[c] < 0 ? 0 : ((unsigned char) (acc[c]+0.5f)));
+ for (c = 0; c < depth; c++) {
+ ((unsigned char *) dstbuf)[depth * index + c] = acc[c] > 255 ? 255 : (acc[c] < 0 ? 0 : ((unsigned char) (acc[c] + 0.5f)));
}
}
- if (dstmask!=NULL) dstmask[index]=FILTER_MASK_MARGIN; /* assigned */
+ if (dstmask != NULL) dstmask[index] = FILTER_MASK_MARGIN; /* assigned */
cannot_early_out = 1;
}
}
@@ -450,12 +451,12 @@ void IMB_filter_extend(struct ImBuf *ibuf, char *mask, int filter)
/* keep the original buffer up to date. */
memcpy(srcbuf, dstbuf, bsize);
- if (dstmask!=NULL) memcpy(srcmask, dstmask, width*height);
+ if (dstmask != NULL) memcpy(srcmask, dstmask, width * height);
}
/* free memory */
MEM_freeN(dstbuf);
- if (dstmask!=NULL) MEM_freeN(dstmask);
+ if (dstmask != NULL) MEM_freeN(dstmask);
}
/* threadsafe version, only recreates existing maps */
@@ -464,14 +465,14 @@ void IMB_remakemipmap(ImBuf *ibuf, int use_filter)
ImBuf *hbuf = ibuf;
int curmap = 0;
- ibuf->miptot= 1;
+ ibuf->miptot = 1;
while (curmap < IB_MIPMAP_LEVELS) {
if (ibuf->mipmap[curmap]) {
if (use_filter) {
- ImBuf *nbuf= IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect);
+ ImBuf *nbuf = IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect);
IMB_filterN(nbuf, hbuf);
imb_onehalf_no_alloc(ibuf->mipmap[curmap], nbuf);
IMB_freeImBuf(nbuf);
@@ -480,10 +481,10 @@ void IMB_remakemipmap(ImBuf *ibuf, int use_filter)
imb_onehalf_no_alloc(ibuf->mipmap[curmap], hbuf);
}
- ibuf->miptot= curmap+2;
- hbuf= ibuf->mipmap[curmap];
+ ibuf->miptot = curmap + 2;
+ hbuf = ibuf->mipmap[curmap];
if (hbuf)
- hbuf->miplevel= curmap+1;
+ hbuf->miplevel = curmap + 1;
if (!hbuf || (hbuf->x <= 2 && hbuf->y <= 2))
break;
@@ -500,11 +501,11 @@ void IMB_makemipmap(ImBuf *ibuf, int use_filter)
imb_freemipmapImBuf(ibuf);
- ibuf->miptot= 1;
+ ibuf->miptot = 1;
while (curmap < IB_MIPMAP_LEVELS) {
if (use_filter) {
- ImBuf *nbuf= IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect);
+ ImBuf *nbuf = IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect);
IMB_filterN(nbuf, hbuf);
ibuf->mipmap[curmap] = IMB_onehalf(nbuf);
IMB_freeImBuf(nbuf);
@@ -512,9 +513,9 @@ void IMB_makemipmap(ImBuf *ibuf, int use_filter)
else
ibuf->mipmap[curmap] = IMB_onehalf(hbuf);
- ibuf->miptot= curmap+2;
- hbuf= ibuf->mipmap[curmap];
- hbuf->miplevel= curmap+1;
+ ibuf->miptot = curmap + 2;
+ hbuf = ibuf->mipmap[curmap];
+ hbuf->miplevel = curmap + 1;
if (hbuf->x <= 2 && hbuf->y <= 2)
break;
@@ -525,8 +526,8 @@ void IMB_makemipmap(ImBuf *ibuf, int use_filter)
ImBuf *IMB_getmipmap(ImBuf *ibuf, int level)
{
- CLAMP(level, 0, ibuf->miptot-1);
- return (level == 0)? ibuf: ibuf->mipmap[level-1];
+ CLAMP(level, 0, ibuf->miptot - 1);
+ return (level == 0) ? ibuf : ibuf->mipmap[level - 1];
}
void IMB_premultiply_rect(unsigned int *rect, char planes, int w, int h)
@@ -534,22 +535,22 @@ void IMB_premultiply_rect(unsigned int *rect, char planes, int w, int h)
char *cp;
int x, y, val;
- if (planes == 24) { /* put alpha at 255 */
- cp= (char *)(rect);
+ if (planes == 24) { /* put alpha at 255 */
+ cp = (char *)(rect);
- for (y=0; y<h; y++)
- for (x=0; x<w; x++, cp+=4)
- cp[3]= 255;
+ for (y = 0; y < h; y++)
+ for (x = 0; x < w; x++, cp += 4)
+ cp[3] = 255;
}
else {
- cp= (char *)(rect);
-
- for (y=0; y<h; y++) {
- for (x=0; x<w; x++, cp+=4) {
- val= cp[3];
- cp[0]= (cp[0]*val)>>8;
- cp[1]= (cp[1]*val)>>8;
- cp[2]= (cp[2]*val)>>8;
+ cp = (char *)(rect);
+
+ for (y = 0; y < h; y++) {
+ for (x = 0; x < w; x++, cp += 4) {
+ val = cp[3];
+ cp[0] = (cp[0] * val) >> 8;
+ cp[1] = (cp[1] * val) >> 8;
+ cp[2] = (cp[2] * val) >> 8;
}
}
}
@@ -560,21 +561,21 @@ void IMB_premultiply_rect_float(float *rect_float, char planes, int w, int h)
float val, *cp;
int x, y;
- if (planes==24) { /* put alpha at 1.0 */
- cp= rect_float;
+ if (planes == 24) { /* put alpha at 1.0 */
+ cp = rect_float;
- for (y=0; y<h; y++)
- for (x=0; x<w; x++, cp+=4)
- cp[3]= 1.0;
+ for (y = 0; y < h; y++)
+ for (x = 0; x < w; x++, cp += 4)
+ cp[3] = 1.0;
}
else {
- cp= rect_float;
- for (y=0; y<h; y++) {
- for (x=0; x<w; x++, cp+=4) {
- val= cp[3];
- cp[0]= cp[0]*val;
- cp[1]= cp[1]*val;
- cp[2]= cp[2]*val;
+ cp = rect_float;
+ for (y = 0; y < h; y++) {
+ for (x = 0; x < w; x++, cp += 4) {
+ val = cp[3];
+ cp[0] = cp[0] * val;
+ cp[1] = cp[1] * val;
+ cp[2] = cp[2] * val;
}
}
}
@@ -583,7 +584,7 @@ void IMB_premultiply_rect_float(float *rect_float, char planes, int w, int h)
void IMB_premultiply_alpha(ImBuf *ibuf)
{
- if (ibuf==NULL)
+ if (ibuf == NULL)
return;
if (ibuf->rect)
diff --git a/source/blender/imbuf/intern/imageprocess.c b/source/blender/imbuf/intern/imageprocess.c
index dea941c9716..40f6f36e06b 100644
--- a/source/blender/imbuf/intern/imageprocess.c
+++ b/source/blender/imbuf/intern/imageprocess.c
@@ -50,10 +50,6 @@
#include "IMB_imbuf.h"
#include <math.h>
-/* This define should be relocated to a global header some where Kent Mein
- * I stole it from util.h in the plugins api */
-#define MAX2(x, y) ( (x)>(y) ? (x) : (y) )
-
/* Only this one is used liberally here, and in imbuf */
void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf)
{
@@ -65,13 +61,13 @@ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf)
size = ibuf->x * ibuf->y;
while (size-- > 0) {
- rt= cp[0];
- cp[0]= cp[3];
- cp[3]= rt;
- rt= cp[1];
- cp[1]= cp[2];
- cp[2]= rt;
- cp+= 4;
+ rt = cp[0];
+ cp[0] = cp[3];
+ cp[3] = rt;
+ rt = cp[1];
+ cp[1] = cp[2];
+ cp[2] = rt;
+ cp += 4;
}
}
@@ -79,26 +75,26 @@ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf)
size = ibuf->x * ibuf->y;
while (size-- > 0) {
- rtf= cpf[0];
- cpf[0]= cpf[3];
- cpf[3]= rtf;
- rtf= cpf[1];
- cpf[1]= cpf[2];
- cpf[2]= rtf;
- cpf+= 4;
+ rtf = cpf[0];
+ cpf[0] = cpf[3];
+ cpf[3] = rtf;
+ rtf = cpf[1];
+ cpf[1] = cpf[2];
+ cpf[2] = rtf;
+ cpf += 4;
}
}
}
static void pixel_from_buffer(struct ImBuf *ibuf, unsigned char **outI, float **outF, int x, int y)
{
- int offset = ibuf->x * y * 4 + 4*x;
+ int offset = ibuf->x * y * 4 + 4 * x;
if (ibuf->rect)
- *outI= (unsigned char *)ibuf->rect + offset;
+ *outI = (unsigned char *)ibuf->rect + offset;
if (ibuf->rect_float)
- *outF= (float *)ibuf->rect_float + offset;
+ *outF = (float *)ibuf->rect_float + offset;
}
/**************************************************************************
@@ -115,11 +111,11 @@ static void pixel_from_buffer(struct ImBuf *ibuf, unsigned char **outI, float **
static float P(float k)
{
float p1, p2, p3, p4;
- p1 = MAX2(k+2.0f, 0);
- p2 = MAX2(k+1.0f, 0);
+ p1 = MAX2(k + 2.0f, 0);
+ p2 = MAX2(k + 1.0f, 0);
p3 = MAX2(k, 0);
- p4 = MAX2(k-1.0f, 0);
- return (float)(1.0f/6.0f)*( p1*p1*p1 - 4.0f * p2*p2*p2 + 6.0f * p3*p3*p3 - 4.0f * p4*p4*p4);
+ p4 = MAX2(k - 1.0f, 0);
+ return (float)(1.0f / 6.0f) * (p1 * p1 * p1 - 4.0f * p2 * p2 * p2 + 6.0f * p3 * p3 * p3 - 4.0f * p4 * p4 * p4);
}
@@ -127,7 +123,7 @@ static float P(float k)
/* older, slower function, works the same as above */
static float P(float k)
{
- return (float)(1.0f/6.0f)*( pow( MAX2(k+2.0f, 0), 3.0f ) - 4.0f * pow( MAX2(k+1.0f, 0), 3.0f ) + 6.0f * pow( MAX2(k, 0), 3.0f ) - 4.0f * pow( MAX2(k-1.0f, 0), 3.0f));
+ return (float)(1.0f / 6.0f) * (pow(MAX2(k + 2.0f, 0), 3.0f) - 4.0f * pow(MAX2(k + 1.0f, 0), 3.0f) + 6.0f * pow(MAX2(k, 0), 3.0f) - 4.0f * pow(MAX2(k - 1.0f, 0), 3.0f));
}
#endif
@@ -138,51 +134,51 @@ void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *o
float a, b, w, wx, wy[4], outR, outG, outB, outA, *dataF;
/* sample area entirely outside image? */
- if (ceil(u)<0 || floor(u)>in->x-1 || ceil(v)<0 || floor(v)>in->y-1)
+ if (ceil(u) < 0 || floor(u) > in->x - 1 || ceil(v) < 0 || floor(v) > in->y - 1)
return;
/* ImBuf in must have a valid rect or rect_float, assume this is already checked */
- i= (int)floor(u);
- j= (int)floor(v);
- a= u - i;
- b= v - j;
+ i = (int)floor(u);
+ j = (int)floor(v);
+ a = u - i;
+ b = v - j;
outR = outG = outB = outA = 0.0f;
/* Optimized and not so easy to read */
/* avoid calling multiple times */
- wy[0] = P(b-(-1));
- wy[1] = P(b- 0);
- wy[2] = P(b- 1);
- wy[3] = P(b- 2);
-
- for (n= -1; n<= 2; n++) {
- x1= i+n;
- CLAMP(x1, 0, in->x-1);
- wx = P(n-a);
- for (m= -1; m<= 2; m++) {
- y1= j+m;
- CLAMP(y1, 0, in->y-1);
+ wy[0] = P(b - (-1));
+ wy[1] = P(b - 0);
+ wy[2] = P(b - 1);
+ wy[3] = P(b - 2);
+
+ for (n = -1; n <= 2; n++) {
+ x1 = i + n;
+ CLAMP(x1, 0, in->x - 1);
+ wx = P(n - a);
+ for (m = -1; m <= 2; m++) {
+ y1 = j + m;
+ CLAMP(y1, 0, in->y - 1);
/* normally we could do this */
/* w = P(n-a) * P(b-m); */
/* except that would call P() 16 times per pixel therefor pow() 64 times, better precalc these */
- w = wx * wy[m+1];
+ w = wx * wy[m + 1];
if (outF) {
- dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
- outR+= dataF[0] * w;
- outG+= dataF[1] * w;
- outB+= dataF[2] * w;
- outA+= dataF[3] * w;
+ dataF = in->rect_float + in->x * y1 * 4 + 4 * x1;
+ outR += dataF[0] * w;
+ outG += dataF[1] * w;
+ outB += dataF[2] * w;
+ outA += dataF[3] * w;
}
if (outI) {
- dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
- outR+= dataI[0] * w;
- outG+= dataI[1] * w;
- outB+= dataI[2] * w;
- outA+= dataI[3] * w;
+ dataI = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x1;
+ outR += dataI[0] * w;
+ outG += dataI[1] * w;
+ outB += dataI[2] * w;
+ outA += dataI[3] * w;
}
}
}
@@ -191,24 +187,24 @@ void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *o
#if 0
/* older, slower function, works the same as above */
- for (n= -1; n<= 2; n++) {
- for (m= -1; m<= 2; m++) {
- x1= i+n;
- y1= j+m;
- if (x1>0 && x1 < in->x && y1>0 && y1<in->y) {
+ for (n = -1; n <= 2; n++) {
+ for (m = -1; m <= 2; m++) {
+ x1 = i + n;
+ y1 = j + m;
+ if (x1 > 0 && x1 < in->x && y1 > 0 && y1 < in->y) {
if (do_float) {
- dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
- outR+= dataF[0] * P(n-a) * P(b-m);
- outG+= dataF[1] * P(n-a) * P(b-m);
- outB+= dataF[2] * P(n-a) * P(b-m);
- outA+= dataF[3] * P(n-a) * P(b-m);
+ dataF = in->rect_float + in->x * y1 * 4 + 4 * x1;
+ outR += dataF[0] * P(n - a) * P(b - m);
+ outG += dataF[1] * P(n - a) * P(b - m);
+ outB += dataF[2] * P(n - a) * P(b - m);
+ outA += dataF[3] * P(n - a) * P(b - m);
}
if (do_rect) {
- dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
- outR+= dataI[0] * P(n-a) * P(b-m);
- outG+= dataI[1] * P(n-a) * P(b-m);
- outB+= dataI[2] * P(n-a) * P(b-m);
- outA+= dataI[3] * P(n-a) * P(b-m);
+ dataI = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x1;
+ outR += dataI[0] * P(n - a) * P(b - m);
+ outG += dataI[1] * P(n - a) * P(b - m);
+ outB += dataI[2] * P(n - a) * P(b - m);
+ outA += dataI[3] * P(n - a) * P(b - m);
}
}
}
@@ -216,16 +212,16 @@ void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *o
#endif
if (outI) {
- outI[0]= (int)outR;
- outI[1]= (int)outG;
- outI[2]= (int)outB;
- outI[3]= (int)outA;
+ outI[0] = (int)outR;
+ outI[1] = (int)outG;
+ outI[2] = (int)outB;
+ outI[3] = (int)outA;
}
if (outF) {
- outF[0]= outR;
- outF[1]= outG;
- outF[2]= outB;
- outF[3]= outA;
+ outF[0] = outR;
+ outF[1] = outG;
+ outF[2] = outB;
+ outF[3] = outA;
}
}
@@ -250,68 +246,68 @@ void bilinear_interpolation_color(struct ImBuf *in, unsigned char *outI, float *
float *row1, *row2, *row3, *row4, a, b;
unsigned char *row1I, *row2I, *row3I, *row4I;
float a_b, ma_b, a_mb, ma_mb;
- float empty[4]= {0.0f, 0.0f, 0.0f, 0.0f};
- unsigned char emptyI[4]= {0, 0, 0, 0};
+ float empty[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ unsigned char emptyI[4] = {0, 0, 0, 0};
int y1, y2, x1, x2;
/* ImBuf in must have a valid rect or rect_float, assume this is already checked */
- x1= (int)floor(u);
- x2= (int)ceil(u);
- y1= (int)floor(v);
- y2= (int)ceil(v);
+ x1 = (int)floor(u);
+ x2 = (int)ceil(u);
+ y1 = (int)floor(v);
+ y2 = (int)ceil(v);
// sample area entirely outside image?
- if (x2<0 || x1>in->x-1 || y2<0 || y1>in->y-1) return;
+ if (x2 < 0 || x1 > in->x - 1 || y2 < 0 || y1 > in->y - 1) return;
if (outF) {
// sample including outside of edges of image
- if (x1<0 || y1<0) row1= empty;
- else row1= (float *)in->rect_float + in->x * y1 * 4 + 4*x1;
-
- if (x1<0 || y2>in->y-1) row2= empty;
- else row2= (float *)in->rect_float + in->x * y2 * 4 + 4*x1;
+ if (x1 < 0 || y1 < 0) row1 = empty;
+ else row1 = (float *)in->rect_float + in->x * y1 * 4 + 4 * x1;
- if (x2>in->x-1 || y1<0) row3= empty;
- else row3= (float *)in->rect_float + in->x * y1 * 4 + 4*x2;
+ if (x1 < 0 || y2 > in->y - 1) row2 = empty;
+ else row2 = (float *)in->rect_float + in->x * y2 * 4 + 4 * x1;
- if (x2>in->x-1 || y2>in->y-1) row4= empty;
- else row4= (float *)in->rect_float + in->x * y2 * 4 + 4*x2;
+ if (x2 > in->x - 1 || y1 < 0) row3 = empty;
+ else row3 = (float *)in->rect_float + in->x * y1 * 4 + 4 * x2;
- a= u-floorf(u);
- b= v-floorf(v);
- a_b= a*b; ma_b= (1.0f-a)*b; a_mb= a*(1.0f-b); ma_mb= (1.0f-a)*(1.0f-b);
-
- outF[0]= ma_mb*row1[0] + a_mb*row3[0] + ma_b*row2[0]+ a_b*row4[0];
- outF[1]= ma_mb*row1[1] + a_mb*row3[1] + ma_b*row2[1]+ a_b*row4[1];
- outF[2]= ma_mb*row1[2] + a_mb*row3[2] + ma_b*row2[2]+ a_b*row4[2];
- outF[3]= ma_mb*row1[3] + a_mb*row3[3] + ma_b*row2[3]+ a_b*row4[3];
+ if (x2 > in->x - 1 || y2 > in->y - 1) row4 = empty;
+ else row4 = (float *)in->rect_float + in->x * y2 * 4 + 4 * x2;
+
+ a = u - floorf(u);
+ b = v - floorf(v);
+ a_b = a * b; ma_b = (1.0f - a) * b; a_mb = a * (1.0f - b); ma_mb = (1.0f - a) * (1.0f - b);
+
+ outF[0] = ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + a_b * row4[0];
+ outF[1] = ma_mb * row1[1] + a_mb * row3[1] + ma_b * row2[1] + a_b * row4[1];
+ outF[2] = ma_mb * row1[2] + a_mb * row3[2] + ma_b * row2[2] + a_b * row4[2];
+ outF[3] = ma_mb * row1[3] + a_mb * row3[3] + ma_b * row2[3] + a_b * row4[3];
}
if (outI) {
// sample including outside of edges of image
- if (x1<0 || y1<0) row1I= emptyI;
- else row1I= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x1;
+ if (x1 < 0 || y1 < 0) row1I = emptyI;
+ else row1I = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x1;
- if (x1<0 || y2>in->y-1) row2I= emptyI;
- else row2I= (unsigned char *)in->rect + in->x * y2 * 4 + 4*x1;
+ if (x1 < 0 || y2 > in->y - 1) row2I = emptyI;
+ else row2I = (unsigned char *)in->rect + in->x * y2 * 4 + 4 * x1;
- if (x2>in->x-1 || y1<0) row3I= emptyI;
- else row3I= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x2;
+ if (x2 > in->x - 1 || y1 < 0) row3I = emptyI;
+ else row3I = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x2;
- if (x2>in->x-1 || y2>in->y-1) row4I= emptyI;
- else row4I= (unsigned char *)in->rect + in->x * y2 * 4 + 4*x2;
+ if (x2 > in->x - 1 || y2 > in->y - 1) row4I = emptyI;
+ else row4I = (unsigned char *)in->rect + in->x * y2 * 4 + 4 * x2;
- a= u-floorf(u);
- b= v-floorf(v);
- a_b= a*b; ma_b= (1.0f-a)*b; a_mb= a*(1.0f-b); ma_mb= (1.0f-a)*(1.0f-b);
+ a = u - floorf(u);
+ b = v - floorf(v);
+ a_b = a * b; ma_b = (1.0f - a) * b; a_mb = a * (1.0f - b); ma_mb = (1.0f - a) * (1.0f - b);
/* need to add 0.5 to avoid rounding down (causes darken with the smear brush)
* tested with white images and this should not wrap back to zero */
- outI[0]= (ma_mb*row1I[0] + a_mb*row3I[0] + ma_b*row2I[0]+ a_b*row4I[0]) + 0.5f;
- outI[1]= (ma_mb*row1I[1] + a_mb*row3I[1] + ma_b*row2I[1]+ a_b*row4I[1]) + 0.5f;
- outI[2]= (ma_mb*row1I[2] + a_mb*row3I[2] + ma_b*row2I[2]+ a_b*row4I[2]) + 0.5f;
- outI[3]= (ma_mb*row1I[3] + a_mb*row3I[3] + ma_b*row2I[3]+ a_b*row4I[3]) + 0.5f;
+ outI[0] = (ma_mb * row1I[0] + a_mb * row3I[0] + ma_b * row2I[0] + a_b * row4I[0]) + 0.5f;
+ outI[1] = (ma_mb * row1I[1] + a_mb * row3I[1] + ma_b * row2I[1] + a_b * row4I[1]) + 0.5f;
+ outI[2] = (ma_mb * row1I[2] + a_mb * row3I[2] + ma_b * row2I[2] + a_b * row4I[2]) + 0.5f;
+ outI[3] = (ma_mb * row1I[3] + a_mb * row3I[3] + ma_b * row2I[3] + a_b * row4I[3]) + 0.5f;
}
}
@@ -331,54 +327,54 @@ void bilinear_interpolation_color_wrap(struct ImBuf *in, unsigned char *outI, fl
/* ImBuf in must have a valid rect or rect_float, assume this is already checked */
- x1= (int)floor(u);
- x2= (int)ceil(u);
- y1= (int)floor(v);
- y2= (int)ceil(v);
+ x1 = (int)floor(u);
+ x2 = (int)ceil(u);
+ y1 = (int)floor(v);
+ y2 = (int)ceil(v);
// sample area entirely outside image?
- if (x2<0 || x1>in->x-1 || y2<0 || y1>in->y-1) return;
+ if (x2 < 0 || x1 > in->x - 1 || y2 < 0 || y1 > in->y - 1) return;
/* wrap interpolation pixels - main difference from bilinear_interpolation_color */
- if (x1<0)x1= in->x+x1;
- if (y1<0)y1= in->y+y1;
+ if (x1 < 0) x1 = in->x + x1;
+ if (y1 < 0) y1 = in->y + y1;
- if (x2>=in->x)x2= x2-in->x;
- if (y2>=in->y)y2= y2-in->y;
+ if (x2 >= in->x) x2 = x2 - in->x;
+ if (y2 >= in->y) y2 = y2 - in->y;
if (outF) {
// sample including outside of edges of image
- row1= (float *)in->rect_float + in->x * y1 * 4 + 4*x1;
- row2= (float *)in->rect_float + in->x * y2 * 4 + 4*x1;
- row3= (float *)in->rect_float + in->x * y1 * 4 + 4*x2;
- row4= (float *)in->rect_float + in->x * y2 * 4 + 4*x2;
-
- a= u-floorf(u);
- b= v-floorf(v);
- a_b= a*b; ma_b= (1.0f-a)*b; a_mb= a*(1.0f-b); ma_mb= (1.0f-a)*(1.0f-b);
-
- outF[0]= ma_mb*row1[0] + a_mb*row3[0] + ma_b*row2[0]+ a_b*row4[0];
- outF[1]= ma_mb*row1[1] + a_mb*row3[1] + ma_b*row2[1]+ a_b*row4[1];
- outF[2]= ma_mb*row1[2] + a_mb*row3[2] + ma_b*row2[2]+ a_b*row4[2];
- outF[3]= ma_mb*row1[3] + a_mb*row3[3] + ma_b*row2[3]+ a_b*row4[3];
+ row1 = (float *)in->rect_float + in->x * y1 * 4 + 4 * x1;
+ row2 = (float *)in->rect_float + in->x * y2 * 4 + 4 * x1;
+ row3 = (float *)in->rect_float + in->x * y1 * 4 + 4 * x2;
+ row4 = (float *)in->rect_float + in->x * y2 * 4 + 4 * x2;
+
+ a = u - floorf(u);
+ b = v - floorf(v);
+ a_b = a * b; ma_b = (1.0f - a) * b; a_mb = a * (1.0f - b); ma_mb = (1.0f - a) * (1.0f - b);
+
+ outF[0] = ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + a_b * row4[0];
+ outF[1] = ma_mb * row1[1] + a_mb * row3[1] + ma_b * row2[1] + a_b * row4[1];
+ outF[2] = ma_mb * row1[2] + a_mb * row3[2] + ma_b * row2[2] + a_b * row4[2];
+ outF[3] = ma_mb * row1[3] + a_mb * row3[3] + ma_b * row2[3] + a_b * row4[3];
}
if (outI) {
// sample including outside of edges of image
- row1I= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x1;
- row2I= (unsigned char *)in->rect + in->x * y2 * 4 + 4*x1;
- row3I= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x2;
- row4I= (unsigned char *)in->rect + in->x * y2 * 4 + 4*x2;
-
- a= u-floorf(u);
- b= v-floorf(v);
- a_b= a*b; ma_b= (1.0f-a)*b; a_mb= a*(1.0f-b); ma_mb= (1.0f-a)*(1.0f-b);
+ row1I = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x1;
+ row2I = (unsigned char *)in->rect + in->x * y2 * 4 + 4 * x1;
+ row3I = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x2;
+ row4I = (unsigned char *)in->rect + in->x * y2 * 4 + 4 * x2;
+
+ a = u - floorf(u);
+ b = v - floorf(v);
+ a_b = a * b; ma_b = (1.0f - a) * b; a_mb = a * (1.0f - b); ma_mb = (1.0f - a) * (1.0f - b);
/* need to add 0.5 to avoid rounding down (causes darken with the smear brush)
* tested with white images and this should not wrap back to zero */
- outI[0]= (ma_mb*row1I[0] + a_mb*row3I[0] + ma_b*row2I[0]+ a_b*row4I[0]) + 0.5f;
- outI[1]= (ma_mb*row1I[1] + a_mb*row3I[1] + ma_b*row2I[1]+ a_b*row4I[1]) + 0.5f;
- outI[2]= (ma_mb*row1I[2] + a_mb*row3I[2] + ma_b*row2I[2]+ a_b*row4I[2]) + 0.5f;
- outI[3]= (ma_mb*row1I[3] + a_mb*row3I[3] + ma_b*row2I[3]+ a_b*row4I[3]) + 0.5f;
+ outI[0] = (ma_mb * row1I[0] + a_mb * row3I[0] + ma_b * row2I[0] + a_b * row4I[0]) + 0.5f;
+ outI[1] = (ma_mb * row1I[1] + a_mb * row3I[1] + ma_b * row2I[1] + a_b * row4I[1]) + 0.5f;
+ outI[2] = (ma_mb * row1I[2] + a_mb * row3I[2] + ma_b * row2I[2] + a_b * row4I[2]) + 0.5f;
+ outI[3] = (ma_mb * row1I[3] + a_mb * row3I[3] + ma_b * row2I[3] + a_b * row4I[3]) + 0.5f;
}
}
@@ -405,41 +401,41 @@ void neareast_interpolation_color(struct ImBuf *in, unsigned char *outI, float *
/* ImBuf in must have a valid rect or rect_float, assume this is already checked */
- x1= (int)(u);
- y1= (int)(v);
+ x1 = (int)(u);
+ y1 = (int)(v);
// sample area entirely outside image?
- if (x1<0 || x1>in->x-1 || y1<0 || y1>in->y-1) return;
+ if (x1 < 0 || x1 > in->x - 1 || y1 < 0 || y1 > in->y - 1) return;
// sample including outside of edges of image
- if (x1<0 || y1<0) {
+ if (x1 < 0 || y1 < 0) {
if (outI) {
- outI[0]= 0;
- outI[1]= 0;
- outI[2]= 0;
- outI[3]= 0;
+ outI[0] = 0;
+ outI[1] = 0;
+ outI[2] = 0;
+ outI[3] = 0;
}
if (outF) {
- outF[0]= 0.0f;
- outF[1]= 0.0f;
- outF[2]= 0.0f;
- outF[3]= 0.0f;
+ outF[0] = 0.0f;
+ outF[1] = 0.0f;
+ outF[2] = 0.0f;
+ outF[3] = 0.0f;
}
}
else {
- dataI= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x1;
+ dataI = (unsigned char *)in->rect + in->x * y1 * 4 + 4 * x1;
if (outI) {
- outI[0]= dataI[0];
- outI[1]= dataI[1];
- outI[2]= dataI[2];
- outI[3]= dataI[3];
+ outI[0] = dataI[0];
+ outI[1] = dataI[1];
+ outI[2] = dataI[2];
+ outI[3] = dataI[3];
}
- dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
+ dataF = in->rect_float + in->x * y1 * 4 + 4 * x1;
if (outF) {
- outF[0]= dataF[0];
- outF[1]= dataF[1];
- outF[2]= dataF[2];
- outF[3]= dataF[3];
+ outF[0] = dataF[0];
+ outF[1] = dataF[1];
+ outF[2] = dataF[2];
+ outF[3] = dataF[3];
}
}
}
diff --git a/source/blender/imbuf/intern/indexer.c b/source/blender/imbuf/intern/indexer.c
index d823df11e36..74fa7c5987e 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -45,18 +45,17 @@
static char magic[] = "BlenMIdx";
-static char temp_ext [] = "_part";
+static char temp_ext[] = "_part";
static int proxy_sizes[] = { IMB_PROXY_25, IMB_PROXY_50, IMB_PROXY_75,
- IMB_PROXY_100 };
+ IMB_PROXY_100 };
static float proxy_fac[] = { 0.25, 0.50, 0.75, 1.00 };
#ifdef WITH_FFMPEG
-static int tc_types[] = { IMB_TC_RECORD_RUN,
- IMB_TC_FREE_RUN,
- IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN,
- IMB_TC_RECORD_RUN_NO_GAPS,
- };
+static int tc_types[] = {IMB_TC_RECORD_RUN,
+ IMB_TC_FREE_RUN,
+ IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN,
+ IMB_TC_RECORD_RUN_NO_GAPS};
#endif
#define INDEX_FILE_VERSION 1
@@ -65,11 +64,11 @@ static int tc_types[] = { IMB_TC_RECORD_RUN,
* - time code index functions
* ---------------------------------------------------------------------- */
-anim_index_builder * IMB_index_builder_create(const char * name)
+anim_index_builder *IMB_index_builder_create(const char *name)
{
- anim_index_builder * rv = MEM_callocN(sizeof(struct anim_index_builder),
- "index builder");
+ anim_index_builder *rv = MEM_callocN(sizeof(struct anim_index_builder),
+ "index builder");
fprintf(stderr, "Starting work on index: %s\n", name);
@@ -84,21 +83,21 @@ anim_index_builder * IMB_index_builder_create(const char * name)
if (!rv->fp) {
fprintf(stderr, "Couldn't open index target: %s! "
- "Index build broken!\n", rv->temp_name);
+ "Index build broken!\n", rv->temp_name);
MEM_freeN(rv);
return NULL;
}
- fprintf(rv->fp, "%s%c%.3d", magic, (ENDIAN_ORDER==B_ENDIAN)?'V':'v',
- INDEX_FILE_VERSION);
+ fprintf(rv->fp, "%s%c%.3d", magic, (ENDIAN_ORDER == B_ENDIAN) ? 'V' : 'v',
+ INDEX_FILE_VERSION);
return rv;
}
-void IMB_index_builder_add_entry(anim_index_builder * fp,
- int frameno, unsigned long long seek_pos,
- unsigned long long seek_pos_dts,
- unsigned long long pts)
+void IMB_index_builder_add_entry(anim_index_builder *fp,
+ int frameno, unsigned long long seek_pos,
+ unsigned long long seek_pos_dts,
+ unsigned long long pts)
{
fwrite(&frameno, sizeof(int), 1, fp->fp);
fwrite(&seek_pos, sizeof(unsigned long long), 1, fp->fp);
@@ -106,12 +105,12 @@ void IMB_index_builder_add_entry(anim_index_builder * fp,
fwrite(&pts, sizeof(unsigned long long), 1, fp->fp);
}
-void IMB_index_builder_proc_frame(anim_index_builder * fp,
- unsigned char * buffer,
- int data_size,
- int frameno, unsigned long long seek_pos,
- unsigned long long seek_pos_dts,
- unsigned long long pts)
+void IMB_index_builder_proc_frame(anim_index_builder *fp,
+ unsigned char *buffer,
+ int data_size,
+ int frameno, unsigned long long seek_pos,
+ unsigned long long seek_pos_dts,
+ unsigned long long pts)
{
if (fp->proc_frame) {
anim_index_entry e;
@@ -124,11 +123,11 @@ void IMB_index_builder_proc_frame(anim_index_builder * fp,
}
else {
IMB_index_builder_add_entry(fp, frameno, seek_pos,
- seek_pos_dts, pts);
+ seek_pos_dts, pts);
}
}
-void IMB_index_builder_finish(anim_index_builder * fp, int rollback)
+void IMB_index_builder_finish(anim_index_builder *fp, int rollback)
{
if (fp->delete_priv_data) {
fp->delete_priv_data(fp);
@@ -147,11 +146,11 @@ void IMB_index_builder_finish(anim_index_builder * fp, int rollback)
MEM_freeN(fp);
}
-struct anim_index * IMB_indexer_open(const char * name)
+struct anim_index *IMB_indexer_open(const char *name)
{
char header[13];
- struct anim_index * idx;
- FILE * fp = BLI_fopen(name, "rb");
+ struct anim_index *idx;
+ FILE *fp = BLI_fopen(name, "rb");
int i;
if (!fp) {
@@ -170,7 +169,7 @@ struct anim_index * IMB_indexer_open(const char * name)
return NULL;
}
- if (atoi(header+9) != INDEX_FILE_VERSION) {
+ if (atoi(header + 9) != INDEX_FILE_VERSION) {
fclose(fp);
return NULL;
}
@@ -182,11 +181,11 @@ struct anim_index * IMB_indexer_open(const char * name)
fseek(fp, 0, SEEK_END);
idx->num_entries = (ftell(fp) - 12) /
- (sizeof(int) + // framepos
- sizeof(unsigned long long) + // seek_pos
- sizeof(unsigned long long) + // seek_pos_dts
- sizeof(unsigned long long) // pts
- );
+ (sizeof(int) + // framepos
+ sizeof(unsigned long long) + // seek_pos
+ sizeof(unsigned long long) + // seek_pos_dts
+ sizeof(unsigned long long) // pts
+ );
fseek(fp, 12, SEEK_SET);
@@ -219,7 +218,7 @@ struct anim_index * IMB_indexer_open(const char * name)
}
unsigned long long IMB_indexer_get_seek_pos(
- struct anim_index * idx, int frame_index)
+ struct anim_index *idx, int frame_index)
{
if (frame_index < 0) {
frame_index = 0;
@@ -231,7 +230,7 @@ unsigned long long IMB_indexer_get_seek_pos(
}
unsigned long long IMB_indexer_get_seek_pos_dts(
- struct anim_index * idx, int frame_index)
+ struct anim_index *idx, int frame_index)
{
if (frame_index < 0) {
frame_index = 0;
@@ -242,7 +241,7 @@ unsigned long long IMB_indexer_get_seek_pos_dts(
return idx->entries[frame_index].seek_pos_dts;
}
-int IMB_indexer_get_frame_index(struct anim_index * idx, int frameno)
+int IMB_indexer_get_frame_index(struct anim_index *idx, int frameno)
{
int len = idx->num_entries;
int half;
@@ -275,8 +274,8 @@ int IMB_indexer_get_frame_index(struct anim_index * idx, int frameno)
}
}
-unsigned long long IMB_indexer_get_pts(struct anim_index * idx,
- int frame_index)
+unsigned long long IMB_indexer_get_pts(struct anim_index *idx,
+ int frame_index)
{
if (frame_index < 0) {
frame_index = 0;
@@ -287,16 +286,16 @@ unsigned long long IMB_indexer_get_pts(struct anim_index * idx,
return idx->entries[frame_index].pts;
}
-int IMB_indexer_get_duration(struct anim_index * idx)
+int IMB_indexer_get_duration(struct anim_index *idx)
{
if (idx->num_entries == 0) {
return 0;
}
- return idx->entries[idx->num_entries-1].frameno + 1;
+ return idx->entries[idx->num_entries - 1].frameno + 1;
}
-int IMB_indexer_can_scan(struct anim_index * idx,
- int old_frame_index, int new_frame_index)
+int IMB_indexer_can_scan(struct anim_index *idx,
+ int old_frame_index, int new_frame_index)
{
/* makes only sense, if it is the same I-Frame and we are not
* trying to run backwards in time... */
@@ -304,7 +303,7 @@ int IMB_indexer_can_scan(struct anim_index * idx,
old_frame_index < new_frame_index);
}
-void IMB_indexer_close(struct anim_index * idx)
+void IMB_indexer_close(struct anim_index *idx)
{
MEM_freeN(idx->entries);
MEM_freeN(idx);
@@ -313,19 +312,19 @@ void IMB_indexer_close(struct anim_index * idx)
int IMB_proxy_size_to_array_index(IMB_Proxy_Size pr_size)
{
switch (pr_size) {
- case IMB_PROXY_NONE: /* if we got here, something is broken anyways,
- so sane defaults... */
- return 0;
- case IMB_PROXY_25:
- return 0;
- case IMB_PROXY_50:
- return 1;
- case IMB_PROXY_75:
- return 2;
- case IMB_PROXY_100:
- return 3;
- default:
- return 0;
+ case IMB_PROXY_NONE: /* if we got here, something is broken anyways,
+ so sane defaults... */
+ return 0;
+ case IMB_PROXY_25:
+ return 0;
+ case IMB_PROXY_50:
+ return 1;
+ case IMB_PROXY_75:
+ return 2;
+ case IMB_PROXY_100:
+ return 3;
+ default:
+ return 0;
};
return 0;
}
@@ -333,19 +332,19 @@ int IMB_proxy_size_to_array_index(IMB_Proxy_Size pr_size)
int IMB_timecode_to_array_index(IMB_Timecode_Type tc)
{
switch (tc) {
- case IMB_TC_NONE: /* if we got here, something is broken anyways,
- so sane defaults... */
- return 0;
- case IMB_TC_RECORD_RUN:
- return 0;
- case IMB_TC_FREE_RUN:
- return 1;
- case IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN:
- return 2;
- case IMB_TC_RECORD_RUN_NO_GAPS:
- return 3;
- default:
- return 0;
+ case IMB_TC_NONE: /* if we got here, something is broken anyways,
+ so sane defaults... */
+ return 0;
+ case IMB_TC_RECORD_RUN:
+ return 0;
+ case IMB_TC_FREE_RUN:
+ return 1;
+ case IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN:
+ return 2;
+ case IMB_TC_RECORD_RUN_NO_GAPS:
+ return 3;
+ default:
+ return 0;
};
return 0;
}
@@ -355,7 +354,7 @@ int IMB_timecode_to_array_index(IMB_Timecode_Type tc)
* - rebuild helper functions
* ---------------------------------------------------------------------- */
-static void get_index_dir(struct anim * anim, char * index_dir)
+static void get_index_dir(struct anim *anim, char *index_dir)
{
if (!anim->index_dir[0]) {
char fname[FILE_MAXFILE];
@@ -369,8 +368,8 @@ static void get_index_dir(struct anim * anim, char * index_dir)
}
}
-static void get_proxy_filename(struct anim * anim, IMB_Proxy_Size preview_size,
- char * fname, int temp)
+static void get_proxy_filename(struct anim *anim, IMB_Proxy_Size preview_size,
+ char *fname, int temp)
{
char index_dir[FILE_MAXDIR];
int i = IMB_proxy_size_to_array_index(preview_size);
@@ -386,9 +385,9 @@ static void get_proxy_filename(struct anim * anim, IMB_Proxy_Size preview_size,
}
BLI_snprintf(proxy_name, sizeof(proxy_name), "proxy_%d%s.avi",
- (int) (proxy_fac[i] * 100), stream_suffix);
+ (int) (proxy_fac[i] * 100), stream_suffix);
BLI_snprintf(proxy_temp_name, sizeof(proxy_temp_name), "proxy_%d%s_part.avi",
- (int) (proxy_fac[i] * 100), stream_suffix);
+ (int) (proxy_fac[i] * 100), stream_suffix);
get_index_dir(anim, index_dir);
@@ -396,16 +395,17 @@ static void get_proxy_filename(struct anim * anim, IMB_Proxy_Size preview_size,
temp ? proxy_temp_name : proxy_name);
}
-static void get_tc_filename(struct anim * anim, IMB_Timecode_Type tc,
- char * fname)
+static void get_tc_filename(struct anim *anim, IMB_Timecode_Type tc,
+ char *fname)
{
char index_dir[FILE_MAXDIR];
int i = IMB_timecode_to_array_index(tc);
- const char * index_names[] = {
+ const char *index_names[] = {
"record_run%s.blen_tc",
"free_run%s.blen_tc",
"interp_free_run%s.blen_tc",
- "record_run_no_gaps%s.blen_tc"};
+ "record_run_no_gaps%s.blen_tc"
+ };
char stream_suffix[20];
char index_name[256];
@@ -440,18 +440,18 @@ typedef struct IndexBuildContext {
#ifdef WITH_FFMPEG
struct proxy_output_ctx {
- AVFormatContext* of;
- AVStream* st;
- AVCodecContext* c;
- AVCodec* codec;
- struct SwsContext * sws_ctx;
- AVFrame* frame;
- uint8_t* video_buffer;
+ AVFormatContext *of;
+ AVStream *st;
+ AVCodecContext *c;
+ AVCodec *codec;
+ struct SwsContext *sws_ctx;
+ AVFrame *frame;
+ uint8_t *video_buffer;
int video_buffersize;
int cfra;
int proxy_size;
int orig_height;
- struct anim * anim;
+ struct anim *anim;
};
// work around stupid swscaler 16 bytes alignment bug...
@@ -461,13 +461,13 @@ static int round_up(int x, int mod)
return x + ((mod - (x % mod)) % mod);
}
-static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
- struct anim * anim,
- AVStream * st, int proxy_size, int width, int height,
- int quality)
+static struct proxy_output_ctx *alloc_proxy_output_ffmpeg(
+ struct anim *anim,
+ AVStream *st, int proxy_size, int width, int height,
+ int quality)
{
- struct proxy_output_ctx * rv = MEM_callocN(
- sizeof(struct proxy_output_ctx), "alloc_proxy_output");
+ struct proxy_output_ctx *rv = MEM_callocN(
+ sizeof(struct proxy_output_ctx), "alloc_proxy_output");
char fname[FILE_MAX];
int ffmpeg_quality;
@@ -501,7 +501,7 @@ static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
if (!rv->codec) {
fprintf(stderr, "No ffmpeg MJPEG encoder available? "
- "Proxy not built!\n");
+ "Proxy not built!\n");
av_free(rv->of);
return NULL;
}
@@ -514,7 +514,7 @@ static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
}
rv->c->sample_aspect_ratio =
- rv->st->sample_aspect_ratio =
+ rv->st->sample_aspect_ratio =
st->codec->sample_aspect_ratio;
rv->c->time_base.den = 25;
@@ -533,14 +533,14 @@ static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
if (av_set_parameters(rv->of, NULL) < 0) {
fprintf(stderr, "Couldn't set output parameters? "
- "Proxy not built!\n");
+ "Proxy not built!\n");
av_free(rv->of);
return 0;
}
if (avio_open(&rv->of->pb, fname, AVIO_FLAG_WRITE) < 0) {
fprintf(stderr, "Couldn't open outputfile! "
- "Proxy not built!\n");
+ "Proxy not built!\n");
av_free(rv->of);
return 0;
}
@@ -548,16 +548,16 @@ static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
avcodec_open(rv->c, rv->codec);
rv->video_buffersize = 2000000;
- rv->video_buffer = (uint8_t*)MEM_mallocN(
- rv->video_buffersize, "FFMPEG video buffer");
+ rv->video_buffer = (uint8_t *)MEM_mallocN(
+ rv->video_buffersize, "FFMPEG video buffer");
rv->orig_height = st->codec->height;
if (st->codec->width != width || st->codec->height != height ||
- st->codec->pix_fmt != rv->c->pix_fmt)
+ st->codec->pix_fmt != rv->c->pix_fmt)
{
rv->frame = avcodec_alloc_frame();
- avpicture_fill((AVPicture*) rv->frame,
+ avpicture_fill((AVPicture *) rv->frame,
MEM_mallocN(avpicture_get_size(
rv->c->pix_fmt,
round_up(width, 16), height),
@@ -565,13 +565,13 @@ static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
rv->c->pix_fmt, round_up(width, 16), height);
rv->sws_ctx = sws_getContext(
- st->codec->width,
- st->codec->height,
- st->codec->pix_fmt,
- width, height,
- rv->c->pix_fmt,
- SWS_FAST_BILINEAR | SWS_PRINT_INFO,
- NULL, NULL, NULL);
+ st->codec->width,
+ st->codec->height,
+ st->codec->pix_fmt,
+ width, height,
+ rv->c->pix_fmt,
+ SWS_FAST_BILINEAR | SWS_PRINT_INFO,
+ NULL, NULL, NULL);
}
av_write_header(rv->of);
@@ -580,7 +580,7 @@ static struct proxy_output_ctx * alloc_proxy_output_ffmpeg(
}
static int add_to_proxy_output_ffmpeg(
- struct proxy_output_ctx * ctx, AVFrame * frame)
+ struct proxy_output_ctx *ctx, AVFrame *frame)
{
int outsize = 0;
@@ -588,11 +588,11 @@ static int add_to_proxy_output_ffmpeg(
return 0;
}
- if ( ctx->sws_ctx && frame &&
- (frame->data[0] || frame->data[1] ||
- frame->data[2] || frame->data[3]))
+ if (ctx->sws_ctx && frame &&
+ (frame->data[0] || frame->data[1] ||
+ frame->data[2] || frame->data[3]))
{
- sws_scale(ctx->sws_ctx, (const uint8_t * const*) frame->data,
+ sws_scale(ctx->sws_ctx, (const uint8_t *const *) frame->data,
frame->linesize, 0, ctx->orig_height,
ctx->frame->data, ctx->frame->linesize);
}
@@ -604,12 +604,12 @@ static int add_to_proxy_output_ffmpeg(
}
outsize = avcodec_encode_video(
- ctx->c, ctx->video_buffer, ctx->video_buffersize,
- frame);
+ ctx->c, ctx->video_buffer, ctx->video_buffersize,
+ frame);
if (outsize < 0) {
fprintf(stderr, "Error encoding proxy frame %d for '%s'\n",
- ctx->cfra - 1, ctx->of->filename);
+ ctx->cfra - 1, ctx->of->filename);
return 0;
}
@@ -619,8 +619,8 @@ static int add_to_proxy_output_ffmpeg(
if (ctx->c->coded_frame->pts != AV_NOPTS_VALUE) {
packet.pts = av_rescale_q(ctx->c->coded_frame->pts,
- ctx->c->time_base,
- ctx->st->time_base);
+ ctx->c->time_base,
+ ctx->st->time_base);
}
if (ctx->c->coded_frame->key_frame)
packet.flags |= AV_PKT_FLAG_KEY;
@@ -631,8 +631,8 @@ static int add_to_proxy_output_ffmpeg(
if (av_interleaved_write_frame(ctx->of, &packet) != 0) {
fprintf(stderr, "Error writing proxy frame %d "
- "into '%s'\n", ctx->cfra - 1,
- ctx->of->filename);
+ "into '%s'\n", ctx->cfra - 1,
+ ctx->of->filename);
return 0;
}
@@ -643,8 +643,8 @@ static int add_to_proxy_output_ffmpeg(
}
}
-static void free_proxy_output_ffmpeg(struct proxy_output_ctx * ctx,
- int rollback)
+static void free_proxy_output_ffmpeg(struct proxy_output_ctx *ctx,
+ int rollback)
{
int i;
char fname[FILE_MAX];
@@ -714,8 +714,8 @@ typedef struct FFmpegIndexBuilderContext {
int num_proxy_sizes;
int num_indexers;
- struct proxy_output_ctx * proxy_ctx[IMB_PROXY_MAX_SLOT];
- anim_index_builder * indexer [IMB_TC_MAX_SLOT];
+ struct proxy_output_ctx *proxy_ctx[IMB_PROXY_MAX_SLOT];
+ anim_index_builder *indexer[IMB_TC_MAX_SLOT];
IMB_Timecode_Type tcs_in_use;
IMB_Proxy_Size proxy_sizes_in_use;
@@ -790,10 +790,10 @@ static IndexBuildContext *index_ffmpeg_create_context(struct anim *anim, IMB_Tim
for (i = 0; i < num_proxy_sizes; i++) {
if (proxy_sizes_in_use & proxy_sizes[i]) {
context->proxy_ctx[i] = alloc_proxy_output_ffmpeg(
- anim, context->iStream, proxy_sizes[i],
- context->iCodecCtx->width * proxy_fac[i],
- context->iCodecCtx->height * proxy_fac[i],
- quality);
+ anim, context->iStream, proxy_sizes[i],
+ context->iCodecCtx->width * proxy_fac[i],
+ context->iCodecCtx->height * proxy_fac[i],
+ quality);
if (!context->proxy_ctx[i]) {
proxy_sizes_in_use &= ~proxy_sizes[i];
}
@@ -849,7 +849,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
double pts_time_base;
int frameno = 0, frameno_gapless = 0;
int start_pts_set = FALSE;
- AVFrame* in_frame = 0;
+ AVFrame *in_frame = 0;
AVPacket next_packet;
uint64_t stream_size;
@@ -863,7 +863,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
while (av_read_frame(context->iFormatCtx, &next_packet) >= 0) {
int frame_finished = 0;
float next_progress = (float)((int)floor(((double) next_packet.pos) * 100 /
- ((double) stream_size)+0.5)) / 100;
+ ((double) stream_size) + 0.5)) / 100;
if (*progress != next_progress) {
*progress = next_progress;
@@ -885,8 +885,8 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
}
avcodec_decode_video2(
- context->iCodecCtx, in_frame, &frame_finished,
- &next_packet);
+ context->iCodecCtx, in_frame, &frame_finished,
+ &next_packet);
}
if (frame_finished) {
@@ -896,7 +896,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
for (i = 0; i < context->num_proxy_sizes; i++) {
add_to_proxy_output_ffmpeg(
- context->proxy_ctx[i], in_frame);
+ context->proxy_ctx[i], in_frame);
}
if (!start_pts_set) {
@@ -927,11 +927,11 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
tc_frameno = frameno_gapless;
IMB_index_builder_proc_frame(
- context->indexer[i],
- next_packet.data,
- next_packet.size,
- tc_frameno,
- s_pos, s_dts, pts);
+ context->indexer[i],
+ next_packet.data,
+ next_packet.size,
+ tc_frameno,
+ s_pos, s_dts, pts);
}
}
@@ -959,16 +959,16 @@ typedef struct FallbackIndexBuilderContext {
IMB_Proxy_Size proxy_sizes_in_use;
} FallbackIndexBuilderContext;
-static AviMovie * alloc_proxy_output_avi(
- struct anim * anim, char * filename, int width, int height,
- int quality)
+static AviMovie *alloc_proxy_output_avi(
+ struct anim *anim, char *filename, int width, int height,
+ int quality)
{
int x, y;
AviFormat format;
double framerate;
- AviMovie * avi;
+ AviMovie *avi;
short frs_sec = 25; /* it doesn't really matter for proxies,
- but sane defaults help anyways...*/
+ but sane defaults help anyways...*/
float frs_sec_base = 1.0;
IMB_anim_get_fps(anim, &frs_sec, &frs_sec_base);
@@ -976,24 +976,24 @@ static AviMovie * alloc_proxy_output_avi(
x = width;
y = height;
- framerate= (double) frs_sec / (double) frs_sec_base;
+ framerate = (double) frs_sec / (double) frs_sec_base;
- avi = MEM_mallocN (sizeof(AviMovie), "avimovie");
+ avi = MEM_mallocN(sizeof(AviMovie), "avimovie");
format = AVI_FORMAT_MJPEG;
- if (AVI_open_compress (filename, avi, 1, format) != AVI_ERROR_NONE) {
+ if (AVI_open_compress(filename, avi, 1, format) != AVI_ERROR_NONE) {
MEM_freeN(avi);
return NULL;
}
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_WIDTH, &x);
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_HEIGHT, &y);
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_QUALITY, &quality);
- AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_FRAMERATE, &framerate);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_WIDTH, &x);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_HEIGHT, &y);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_QUALITY, &quality);
+ AVI_set_compress_option(avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_FRAMERATE, &framerate);
- avi->interlace= 0;
- avi->odd_fields= 0;
+ avi->interlace = 0;
+ avi->odd_fields = 0;
return avi;
}
@@ -1005,10 +1005,10 @@ static IndexBuildContext *index_fallback_create_context(struct anim *anim, IMB_T
int i;
/* since timecode indices only work with ffmpeg right now,
- don't know a sensible fallback here...
-
- so no proxies, no game to play...
- */
+ * don't know a sensible fallback here...
+ *
+ * so no proxies, no game to play...
+ */
if (proxy_sizes_in_use == IMB_PROXY_NONE) {
return NULL;
}
@@ -1028,7 +1028,7 @@ static IndexBuildContext *index_fallback_create_context(struct anim *anim, IMB_T
BLI_make_existing_file(fname);
context->proxy_ctx[i] = alloc_proxy_output_avi(anim, fname,
- anim->x * proxy_fac[i], anim->y * proxy_fac[i], quality);
+ anim->x * proxy_fac[i], anim->y * proxy_fac[i], quality);
}
}
@@ -1089,15 +1089,15 @@ static void index_rebuild_fallback(FallbackIndexBuilderContext *context,
int x = anim->x * proxy_fac[i];
int y = anim->y * proxy_fac[i];
- struct ImBuf * s_ibuf = IMB_dupImBuf(tmp_ibuf);
+ struct ImBuf *s_ibuf = IMB_dupImBuf(tmp_ibuf);
IMB_scalefastImBuf(s_ibuf, x, y);
IMB_convert_rgba_to_abgr(s_ibuf);
- AVI_write_frame (context->proxy_ctx[i], pos,
- AVI_FORMAT_RGB32,
- s_ibuf->rect, x * y * 4);
+ AVI_write_frame(context->proxy_ctx[i], pos,
+ AVI_FORMAT_RGB32,
+ s_ibuf->rect, x * y * 4);
/* note that libavi free's the buffer... */
s_ibuf->rect = NULL;
@@ -1116,19 +1116,19 @@ static void index_rebuild_fallback(FallbackIndexBuilderContext *context,
* ---------------------------------------------------------------------- */
IndexBuildContext *IMB_anim_index_rebuild_context(struct anim *anim, IMB_Timecode_Type tcs_in_use,
- IMB_Proxy_Size proxy_sizes_in_use, int quality)
+ IMB_Proxy_Size proxy_sizes_in_use, int quality)
{
IndexBuildContext *context = NULL;
switch (anim->curtype) {
#ifdef WITH_FFMPEG
- case ANIM_FFMPEG:
- context = index_ffmpeg_create_context(anim, tcs_in_use, proxy_sizes_in_use, quality);
- break;
+ case ANIM_FFMPEG:
+ context = index_ffmpeg_create_context(anim, tcs_in_use, proxy_sizes_in_use, quality);
+ break;
#endif
- default:
- context = index_fallback_create_context(anim, tcs_in_use, proxy_sizes_in_use, quality);
- break;
+ default:
+ context = index_fallback_create_context(anim, tcs_in_use, proxy_sizes_in_use, quality);
+ break;
}
if (context)
@@ -1142,13 +1142,13 @@ void IMB_anim_index_rebuild(struct IndexBuildContext *context,
{
switch (context->anim_type) {
#ifdef WITH_FFMPEG
- case ANIM_FFMPEG:
- index_rebuild_ffmpeg((FFmpegIndexBuilderContext*)context, stop, do_update, progress);
- break;
+ case ANIM_FFMPEG:
+ index_rebuild_ffmpeg((FFmpegIndexBuilderContext *)context, stop, do_update, progress);
+ break;
#endif
- default:
- index_rebuild_fallback((FallbackIndexBuilderContext*)context, stop, do_update, progress);
- break;
+ default:
+ index_rebuild_fallback((FallbackIndexBuilderContext *)context, stop, do_update, progress);
+ break;
}
}
@@ -1156,18 +1156,18 @@ void IMB_anim_index_rebuild_finish(IndexBuildContext *context, short stop)
{
switch (context->anim_type) {
#ifdef WITH_FFMPEG
- case ANIM_FFMPEG:
- index_rebuild_ffmpeg_finish((FFmpegIndexBuilderContext*)context, stop);
- break;
+ case ANIM_FFMPEG:
+ index_rebuild_ffmpeg_finish((FFmpegIndexBuilderContext *)context, stop);
+ break;
#endif
- default:
- index_rebuild_fallback_finish((FallbackIndexBuilderContext*)context, stop);
- break;
+ default:
+ index_rebuild_fallback_finish((FallbackIndexBuilderContext *)context, stop);
+ break;
}
}
-void IMB_free_indices(struct anim * anim)
+void IMB_free_indices(struct anim *anim)
{
int i;
@@ -1190,7 +1190,7 @@ void IMB_free_indices(struct anim * anim)
anim->indices_tried = 0;
}
-void IMB_anim_set_index_dir(struct anim * anim, const char * dir)
+void IMB_anim_set_index_dir(struct anim *anim, const char *dir)
{
if (strcmp(anim->index_dir, dir) == 0) {
return;
@@ -1200,8 +1200,8 @@ void IMB_anim_set_index_dir(struct anim * anim, const char * dir)
IMB_free_indices(anim);
}
-struct anim * IMB_anim_open_proxy(
- struct anim * anim, IMB_Proxy_Size preview_size)
+struct anim *IMB_anim_open_proxy(
+ struct anim *anim, IMB_Proxy_Size preview_size)
{
char fname[FILE_MAX];
int i = IMB_proxy_size_to_array_index(preview_size);
@@ -1223,8 +1223,8 @@ struct anim * IMB_anim_open_proxy(
return anim->proxy_anim[i];
}
-struct anim_index * IMB_anim_open_index(
- struct anim * anim, IMB_Timecode_Type tc)
+struct anim_index *IMB_anim_open_index(
+ struct anim *anim, IMB_Timecode_Type tc)
{
char fname[FILE_MAX];
int i = IMB_timecode_to_array_index(tc);
@@ -1246,10 +1246,10 @@ struct anim_index * IMB_anim_open_index(
return anim->curr_idx[i];
}
-int IMB_anim_index_get_frame_index(struct anim * anim, IMB_Timecode_Type tc,
- int position)
+int IMB_anim_index_get_frame_index(struct anim *anim, IMB_Timecode_Type tc,
+ int position)
{
- struct anim_index * idx = IMB_anim_open_index(anim, tc);
+ struct anim_index *idx = IMB_anim_open_index(anim, tc);
if (!idx) {
return position;
diff --git a/source/blender/imbuf/intern/indexer_dv.c b/source/blender/imbuf/intern/indexer_dv.c
index 8dc03ae708d..460ca93435e 100644
--- a/source/blender/imbuf/intern/indexer_dv.c
+++ b/source/blender/imbuf/intern/indexer_dv.c
@@ -28,11 +28,11 @@
#include <time.h>
typedef struct indexer_dv_bitstream {
- unsigned char* buffer;
+ unsigned char *buffer;
int bit_pos;
} indexer_dv_bitstream;
-static indexer_dv_bitstream bitstream_new(unsigned char* buffer_)
+static indexer_dv_bitstream bitstream_new(unsigned char *buffer_)
{
indexer_dv_bitstream rv;
@@ -42,27 +42,27 @@ static indexer_dv_bitstream bitstream_new(unsigned char* buffer_)
return rv;
}
-static unsigned long bitstream_get_bits(indexer_dv_bitstream * This, int num)
+static unsigned long bitstream_get_bits(indexer_dv_bitstream *This, int num)
{
int byte_pos = This->bit_pos >> 3;
unsigned long i =
- This->buffer[byte_pos] | (This->buffer[byte_pos + 1] << 8) |
- (This->buffer[byte_pos + 2] << 16) |
- (This->buffer[byte_pos + 3] << 24);
+ This->buffer[byte_pos] | (This->buffer[byte_pos + 1] << 8) |
+ (This->buffer[byte_pos + 2] << 16) |
+ (This->buffer[byte_pos + 3] << 24);
int rval = (i >> (This->bit_pos & 0x7)) & ((1 << num) - 1);
This->bit_pos += num;
return rval;
}
-static int parse_num(indexer_dv_bitstream * b, int numbits)
+static int parse_num(indexer_dv_bitstream *b, int numbits)
{
return bitstream_get_bits(b, numbits);
}
-static int parse_bcd(indexer_dv_bitstream * b, int n)
+static int parse_bcd(indexer_dv_bitstream *b, int n)
{
char s[256];
- char * p = s + (n+3)/4;
+ char *p = s + (n + 3) / 4;
*p-- = 0;
@@ -93,8 +93,7 @@ static int parse_bcd(indexer_dv_bitstream * b, int n)
return atol(s);
}
-typedef struct indexer_dv_context
-{
+typedef struct indexer_dv_context {
int rec_curr_frame;
int rec_curr_second;
int rec_curr_minute;
@@ -119,10 +118,10 @@ typedef struct indexer_dv_context
anim_index_entry backbuffer[31];
int fsize;
- anim_index_builder * idx;
+ anim_index_builder *idx;
} indexer_dv_context;
-static void parse_packet(indexer_dv_context * This, unsigned char * p)
+static void parse_packet(indexer_dv_context *This, unsigned char *p)
{
indexer_dv_bitstream b;
int type = p[0];
@@ -158,7 +157,7 @@ static void parse_packet(indexer_dv_context * This, unsigned char * p)
}
}
-static void parse_header_block(indexer_dv_context * This, unsigned char* target)
+static void parse_header_block(indexer_dv_context *This, unsigned char *target)
{
int i;
for (i = 3; i < 80; i += 5) {
@@ -169,7 +168,7 @@ static void parse_header_block(indexer_dv_context * This, unsigned char* target)
}
static void parse_subcode_blocks(
- indexer_dv_context * This, unsigned char* target)
+ indexer_dv_context *This, unsigned char *target)
{
int i, j;
@@ -183,7 +182,7 @@ static void parse_subcode_blocks(
}
static void parse_vaux_blocks(
- indexer_dv_context * This, unsigned char* target)
+ indexer_dv_context *This, unsigned char *target)
{
int i, j;
@@ -198,7 +197,7 @@ static void parse_vaux_blocks(
}
static void parse_audio_headers(
- indexer_dv_context * This, unsigned char* target)
+ indexer_dv_context *This, unsigned char *target)
{
int i;
@@ -210,11 +209,11 @@ static void parse_audio_headers(
}
}
-static void parse_frame(indexer_dv_context * This,
- unsigned char * framebuffer, int isPAL)
+static void parse_frame(indexer_dv_context *This,
+ unsigned char *framebuffer, int isPAL)
{
int numDIFseq = isPAL ? 12 : 10;
- unsigned char* target = framebuffer;
+ unsigned char *target = framebuffer;
int ds;
for (ds = 0; ds < numDIFseq; ds++) {
@@ -229,7 +228,7 @@ static void parse_frame(indexer_dv_context * This,
}
}
-static void inc_frame(int * frame, time_t * t, int isPAL)
+static void inc_frame(int *frame, time_t *t, int isPAL)
{
if ((isPAL && *frame >= 25) || (!isPAL && *frame >= 30)) {
fprintf(stderr, "Ouchie: inc_frame: invalid_frameno: %d\n",
@@ -246,20 +245,21 @@ static void inc_frame(int * frame, time_t * t, int isPAL)
}
}
-static void write_index(indexer_dv_context * This, anim_index_entry * entry)
+static void write_index(indexer_dv_context *This, anim_index_entry *entry)
{
IMB_index_builder_add_entry(
- This->idx, entry->frameno + This->frameno_offset,
- entry->seek_pos, entry->seek_pos_dts, entry->pts);
+ This->idx, entry->frameno + This->frameno_offset,
+ entry->seek_pos, entry->seek_pos_dts, entry->pts);
}
-static void fill_gap(indexer_dv_context * This, int isPAL)
+static void fill_gap(indexer_dv_context *This, int isPAL)
{
int i;
for (i = 0; i < This->fsize; i++) {
if (This->gap_start == This->ref_time_read &&
- This->gap_frame == This->curr_frame) {
+ This->gap_frame == This->curr_frame)
+ {
fprintf(stderr,
"indexer_dv::fill_gap: "
"can't seek backwards !\n");
@@ -280,8 +280,8 @@ static void fill_gap(indexer_dv_context * This, int isPAL)
This->fsize = 0;
}
-static void proc_frame(indexer_dv_context * This,
- unsigned char* UNUSED(framebuffer), int isPAL)
+static void proc_frame(indexer_dv_context *This,
+ unsigned char *UNUSED(framebuffer), int isPAL)
{
struct tm recDate;
time_t t;
@@ -332,14 +332,14 @@ static void proc_frame(indexer_dv_context * This,
}
}
-static void indexer_dv_proc_frame(anim_index_builder * idx,
- unsigned char * buffer,
+static void indexer_dv_proc_frame(anim_index_builder *idx,
+ unsigned char *buffer,
int UNUSED(data_size),
- struct anim_index_entry * entry)
+ struct anim_index_entry *entry)
{
int isPAL;
- indexer_dv_context * This = (indexer_dv_context *) idx->private_data;
+ indexer_dv_context *This = (indexer_dv_context *) idx->private_data;
isPAL = (buffer[3] & 0x80);
@@ -362,29 +362,29 @@ static void indexer_dv_proc_frame(anim_index_builder * idx,
"backbuffer overrun, emergency flush");
for (i = 0; i < This->fsize; i++) {
- write_index(This, This->backbuffer+i);
+ write_index(This, This->backbuffer + i);
}
This->fsize = 0;
}
}
}
-static void indexer_dv_delete(anim_index_builder * idx)
+static void indexer_dv_delete(anim_index_builder *idx)
{
int i = 0;
- indexer_dv_context * This = (indexer_dv_context *) idx->private_data;
+ indexer_dv_context *This = (indexer_dv_context *) idx->private_data;
for (i = 0; i < This->fsize; i++) {
- write_index(This, This->backbuffer+i);
+ write_index(This, This->backbuffer + i);
}
MEM_freeN(This);
}
-void IMB_indexer_dv_new(anim_index_builder * idx)
+void IMB_indexer_dv_new(anim_index_builder *idx)
{
- indexer_dv_context * rv = MEM_callocN(
- sizeof(indexer_dv_context), "index_dv builder context");
+ indexer_dv_context *rv = MEM_callocN(
+ sizeof(indexer_dv_context), "index_dv builder context");
rv->ref_time_read = -1;
rv->curr_frame = -1;
diff --git a/source/blender/imbuf/intern/iris.c b/source/blender/imbuf/intern/iris.c
index 430361dbb53..10c6a0fd012 100644
--- a/source/blender/imbuf/intern/iris.c
+++ b/source/blender/imbuf/intern/iris.c
@@ -42,58 +42,58 @@
#include "IMB_filetype.h"
typedef struct {
- unsigned short imagic; /* stuff saved on disk . . */
- unsigned short type;
- unsigned short dim;
- unsigned short xsize;
- unsigned short ysize;
- unsigned short zsize;
- unsigned int min;
- unsigned int max;
- unsigned int wastebytes;
- char name[80];
- unsigned int colormap;
-
- int file; /* stuff used in core only */
- unsigned short flags;
- short dorev;
- short x;
- short y;
- short z;
- short cnt;
- unsigned short *ptr;
- unsigned short *base;
- unsigned short *tmpbuf;
- unsigned int offset;
- unsigned int rleend; /* for rle images */
- unsigned int *rowstart; /* for rle images */
- int *rowsize; /* for rle images */
+ unsigned short imagic; /* stuff saved on disk . . */
+ unsigned short type;
+ unsigned short dim;
+ unsigned short xsize;
+ unsigned short ysize;
+ unsigned short zsize;
+ unsigned int min;
+ unsigned int max;
+ unsigned int wastebytes;
+ char name[80];
+ unsigned int colormap;
+
+ int file; /* stuff used in core only */
+ unsigned short flags;
+ short dorev;
+ short x;
+ short y;
+ short z;
+ short cnt;
+ unsigned short *ptr;
+ unsigned short *base;
+ unsigned short *tmpbuf;
+ unsigned int offset;
+ unsigned int rleend; /* for rle images */
+ unsigned int *rowstart; /* for rle images */
+ int *rowsize; /* for rle images */
} IMAGE;
#define RINTLUM (79)
#define GINTLUM (156)
#define BINTLUM (21)
-#define ILUM(r, g, b) ((int)(RINTLUM * (r) + GINTLUM * (g) + BINTLUM * (b)) >> 8)
+#define ILUM(r, g, b) ((int)(RINTLUM * (r) + GINTLUM * (g) + BINTLUM * (b)) >> 8)
-#define OFFSET_R 0 /* this is byte order dependent */
-#define OFFSET_G 1
-#define OFFSET_B 2
-#define OFFSET_A 3
+#define OFFSET_R 0 /* this is byte order dependent */
+#define OFFSET_G 1
+#define OFFSET_B 2
+#define OFFSET_A 3
-#define CHANOFFSET(z) (3-(z)) /* this is byte order dependent */
+#define CHANOFFSET(z) (3 - (z)) /* this is byte order dependent */
-#define TYPEMASK 0xff00
-#define BPPMASK 0x00ff
-#define ITYPE_VERBATIM 0x0000
-#define ITYPE_RLE 0x0100
-#define ISRLE(type) (((type) & 0xff00) == ITYPE_RLE)
-#define ISVERBATIM(type) (((type) & 0xff00) == ITYPE_VERBATIM)
-#define BPP(type) ((type) & BPPMASK)
-#define RLE(bpp) (ITYPE_RLE | (bpp))
-#define VERBATIM(bpp) (ITYPE_VERBATIM | (bpp))
-#define IBUFSIZE(pixels) ((pixels+(pixels>>6))<<2)
-#define RLE_NOP 0x00
+#define TYPEMASK 0xff00
+#define BPPMASK 0x00ff
+#define ITYPE_VERBATIM 0x0000
+#define ITYPE_RLE 0x0100
+#define ISRLE(type) (((type) & 0xff00) == ITYPE_RLE)
+#define ISVERBATIM(type) (((type) & 0xff00) == ITYPE_VERBATIM)
+#define BPP(type) ((type) & BPPMASK)
+#define RLE(bpp) (ITYPE_RLE | (bpp))
+#define VERBATIM(bpp) (ITYPE_VERBATIM | (bpp))
+#define IBUFSIZE(pixels) ((pixels + (pixels >> 6)) << 2)
+#define RLE_NOP 0x00
/* funcs */
static void readheader(FILE *inf, IMAGE *image);
@@ -118,37 +118,37 @@ static void lumrow(unsigned char *rgbptr, unsigned char *lumptr, int n);
*
*/
-static uchar * file_data;
+static uchar *file_data;
static int file_offset;
static unsigned short getshort(FILE *inf)
{
- unsigned char * buf;
+ unsigned char *buf;
(void)inf; /* unused */
buf = file_data + file_offset;
file_offset += 2;
- return (buf[0]<<8)+(buf[1]<<0);
+ return (buf[0] << 8) + (buf[1] << 0);
}
static unsigned int getlong(FILE *inf)
{
- unsigned char * buf;
+ unsigned char *buf;
(void)inf; /* unused */
buf = file_data + file_offset;
file_offset += 4;
- return (buf[0]<<24)+(buf[1]<<16)+(buf[2]<<8)+(buf[3]<<0);
+ return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + (buf[3] << 0);
}
static void putshort(FILE *outf, unsigned short val)
{
unsigned char buf[2];
- buf[0] = (val>>8);
- buf[1] = (val>>0);
+ buf[0] = (val >> 8);
+ buf[1] = (val >> 0);
fwrite(buf, 2, 1, outf);
}
@@ -156,10 +156,10 @@ static int putlong(FILE *outf, unsigned int val)
{
unsigned char buf[4];
- buf[0] = (val>>24);
- buf[1] = (val>>16);
- buf[2] = (val>>8);
- buf[3] = (val>>0);
+ buf[0] = (val >> 24);
+ buf[1] = (val >> 16);
+ buf[2] = (val >> 8);
+ buf[3] = (val >> 0);
return fwrite(buf, 4, 1, outf);
}
@@ -176,7 +176,7 @@ static void readheader(FILE *inf, IMAGE *image)
static int writeheader(FILE *outf, IMAGE *image)
{
- IMAGE t= {0};
+ IMAGE t = {0};
fwrite(&t, sizeof(IMAGE), 1, outf);
fseek(outf, 0, SEEK_SET);
@@ -216,14 +216,14 @@ static void test_endian_zbuf(struct ImBuf *ibuf)
int len;
int *zval;
- if ( BIG_LONG(1) == 1 ) return;
+ if (BIG_LONG(1) == 1) return;
if (ibuf->zbuf == NULL) return;
- len= ibuf->x*ibuf->y;
- zval= ibuf->zbuf;
+ len = ibuf->x * ibuf->y;
+ zval = ibuf->zbuf;
while (len--) {
- zval[0]= BIG_LONG(zval[0]);
+ zval[0] = BIG_LONG(zval[0]);
zval++;
}
}
@@ -258,7 +258,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
int x, y, z, tablen;
int xsize, ysize, zsize;
int bpp, rle, cur, badorder;
- ImBuf * ibuf;
+ ImBuf *ibuf;
(void)size; /* unused */
@@ -294,7 +294,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
if (rle) {
- tablen = ysize*zsize*sizeof(int);
+ tablen = ysize * zsize * sizeof(int);
starttab = (unsigned int *)MEM_mallocN(tablen, "iris starttab");
lengthtab = (unsigned int *)MEM_mallocN(tablen, "iris endtab");
file_offset = 512;
@@ -305,13 +305,13 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
/* check data order */
cur = 0;
badorder = 0;
- for (y = 0; y<ysize; y++) {
- for (z = 0; z<zsize; z++) {
- if (starttab[y+z*ysize]<cur) {
+ for (y = 0; y < ysize; y++) {
+ for (z = 0; z < zsize; z++) {
+ if (starttab[y + z * ysize] < cur) {
badorder = 1;
break;
}
- cur = starttab[y+z*ysize];
+ cur = starttab[y + z * ysize];
}
if (badorder)
break;
@@ -325,15 +325,15 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
zbase = (unsigned int *)ibuf->zbuf;
if (badorder) {
- for (z=0; z<zsize; z++) {
+ for (z = 0; z < zsize; z++) {
lptr = base;
- for (y=0; y<ysize; y++) {
- file_offset = starttab[y+z*ysize];
+ for (y = 0; y < ysize; y++) {
+ file_offset = starttab[y + z * ysize];
rledat = file_data + file_offset;
- file_offset += lengthtab[y+z*ysize];
+ file_offset += lengthtab[y + z * ysize];
- expandrow((uchar *)lptr, rledat, 3-z);
+ expandrow((uchar *)lptr, rledat, 3 - z);
lptr += xsize;
}
}
@@ -341,17 +341,17 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
else {
lptr = base;
zptr = zbase;
- for (y=0; y<ysize; y++) {
+ for (y = 0; y < ysize; y++) {
- for (z=0; z<zsize; z++) {
+ for (z = 0; z < zsize; z++) {
- file_offset = starttab[y+z*ysize];
+ file_offset = starttab[y + z * ysize];
rledat = file_data + file_offset;
- file_offset += lengthtab[y+z*ysize];
+ file_offset += lengthtab[y + z * ysize];
- if (z<4) expandrow((uchar *)lptr, rledat, 3-z);
- else if (z<8) expandrow((uchar *)zptr, rledat, 7-z);
+ if (z < 4) expandrow((uchar *)lptr, rledat, 3 - z);
+ else if (z < 8) expandrow((uchar *)zptr, rledat, 7 - z);
}
lptr += xsize;
zptr += xsize;
@@ -360,22 +360,22 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
}
- else { /* bpp == 2 */
+ else { /* bpp == 2 */
- ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat);
+ ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect) | IB_rectfloat);
fbase = ibuf->rect_float;
if (badorder) {
- for (z=0; z<zsize; z++) {
+ for (z = 0; z < zsize; z++) {
fptr = fbase;
- for (y=0; y<ysize; y++) {
- file_offset = starttab[y+z*ysize];
+ for (y = 0; y < ysize; y++) {
+ file_offset = starttab[y + z * ysize];
rledat = file_data + file_offset;
- file_offset += lengthtab[y+z*ysize];
+ file_offset += lengthtab[y + z * ysize];
- expandrow2(fptr, rledat, 3-z);
+ expandrow2(fptr, rledat, 3 - z);
fptr += xsize * 4;
}
}
@@ -383,16 +383,16 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
else {
fptr = fbase;
- for (y=0; y<ysize; y++) {
+ for (y = 0; y < ysize; y++) {
- for (z=0; z<zsize; z++) {
+ for (z = 0; z < zsize; z++) {
- file_offset = starttab[y+z*ysize];
+ file_offset = starttab[y + z * ysize];
rledat = file_data + file_offset;
- file_offset += lengthtab[y+z*ysize];
+ file_offset += lengthtab[y + z * ysize];
- expandrow2(fptr, rledat, 3-z);
+ expandrow2(fptr, rledat, 3 - z);
}
fptr += xsize * 4;
@@ -418,12 +418,12 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
for (z = 0; z < zsize; z++) {
- if (z<4) lptr = base;
- else if (z<8) lptr= zbase;
+ if (z < 4) lptr = base;
+ else if (z < 8) lptr = zbase;
for (y = 0; y < ysize; y++) {
- interleaverow((uchar *)lptr, rledat, 3-z, xsize);
+ interleaverow((uchar *)lptr, rledat, 3 - z, xsize);
rledat += xsize;
lptr += xsize;
@@ -431,9 +431,9 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
}
}
- else { /* bpp == 2 */
+ else { /* bpp == 2 */
- ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect)|IB_rectfloat);
+ ibuf = IMB_allocImBuf(xsize, ysize, 32, (flags & IB_rect) | IB_rectfloat);
fbase = ibuf->rect_float;
@@ -446,7 +446,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
for (y = 0; y < ysize; y++) {
- interleaverow2(fptr, rledat, 3-z, xsize);
+ interleaverow2(fptr, rledat, 3 - z, xsize);
rledat += xsize * 2;
fptr += xsize * 4;
@@ -458,7 +458,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
if (bpp == 1) {
- uchar * rect;
+ uchar *rect;
if (image.zsize == 1) {
rect = (uchar *) ibuf->rect;
@@ -487,7 +487,7 @@ struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
}
}
- else { /* bpp == 2 */
+ else { /* bpp == 2 */
if (image.zsize == 1) {
fbase = ibuf->rect_float;
@@ -550,7 +550,7 @@ static void interleaverow2(float *lptr, unsigned char *cptr, int z, int n)
{
lptr += z;
while (n--) {
- *lptr = ((cptr[0]<<8) | (cptr[1]<<0)) / (float)0xFFFF;
+ *lptr = ((cptr[0] << 8) | (cptr[1] << 0)) / (float)0xFFFF;
cptr += 2;
lptr += 4;
}
@@ -563,50 +563,50 @@ static void expandrow2(float *optr, unsigned char *iptr, int z)
optr += z;
while (1) {
- pixel = (iptr[0]<<8) | (iptr[1]<<0);
+ pixel = (iptr[0] << 8) | (iptr[1] << 0);
iptr += 2;
- if ( !(count = (pixel & 0x7f)) )
+ if (!(count = (pixel & 0x7f)) )
return;
if (pixel & 0x80) {
- while (count>=8) {
- optr[0*4] = ((iptr[0]<<8) | (iptr[1]<<0))/(float)0xFFFF;
- optr[1*4] = ((iptr[2]<<8) | (iptr[3]<<0))/(float)0xFFFF;
- optr[2*4] = ((iptr[4]<<8) | (iptr[5]<<0))/(float)0xFFFF;
- optr[3*4] = ((iptr[6]<<8) | (iptr[7]<<0))/(float)0xFFFF;
- optr[4*4] = ((iptr[8]<<8) | (iptr[9]<<0))/(float)0xFFFF;
- optr[5*4] = ((iptr[10]<<8) | (iptr[11]<<0))/(float)0xFFFF;
- optr[6*4] = ((iptr[12]<<8) | (iptr[13]<<0))/(float)0xFFFF;
- optr[7*4] = ((iptr[14]<<8) | (iptr[15]<<0))/(float)0xFFFF;
- optr += 8*4;
- iptr += 8*2;
+ while (count >= 8) {
+ optr[0 * 4] = ((iptr[0] << 8) | (iptr[1] << 0)) / (float)0xFFFF;
+ optr[1 * 4] = ((iptr[2] << 8) | (iptr[3] << 0)) / (float)0xFFFF;
+ optr[2 * 4] = ((iptr[4] << 8) | (iptr[5] << 0)) / (float)0xFFFF;
+ optr[3 * 4] = ((iptr[6] << 8) | (iptr[7] << 0)) / (float)0xFFFF;
+ optr[4 * 4] = ((iptr[8] << 8) | (iptr[9] << 0)) / (float)0xFFFF;
+ optr[5 * 4] = ((iptr[10] << 8) | (iptr[11] << 0)) / (float)0xFFFF;
+ optr[6 * 4] = ((iptr[12] << 8) | (iptr[13] << 0)) / (float)0xFFFF;
+ optr[7 * 4] = ((iptr[14] << 8) | (iptr[15] << 0)) / (float)0xFFFF;
+ optr += 8 * 4;
+ iptr += 8 * 2;
count -= 8;
}
while (count--) {
- *optr = ((iptr[0]<<8) | (iptr[1]<<0))/(float)0xFFFF;
- iptr+=2;
- optr+=4;
+ *optr = ((iptr[0] << 8) | (iptr[1] << 0)) / (float)0xFFFF;
+ iptr += 2;
+ optr += 4;
}
}
else {
- pixel_f = ((iptr[0]<<8) | (iptr[1]<<0))/(float)0xFFFF;
+ pixel_f = ((iptr[0] << 8) | (iptr[1] << 0)) / (float)0xFFFF;
iptr += 2;
- while (count>=8) {
- optr[0*4] = pixel_f;
- optr[1*4] = pixel_f;
- optr[2*4] = pixel_f;
- optr[3*4] = pixel_f;
- optr[4*4] = pixel_f;
- optr[5*4] = pixel_f;
- optr[6*4] = pixel_f;
- optr[7*4] = pixel_f;
- optr += 8*4;
+ while (count >= 8) {
+ optr[0 * 4] = pixel_f;
+ optr[1 * 4] = pixel_f;
+ optr[2 * 4] = pixel_f;
+ optr[3 * 4] = pixel_f;
+ optr[4 * 4] = pixel_f;
+ optr[5 * 4] = pixel_f;
+ optr[6 * 4] = pixel_f;
+ optr[7 * 4] = pixel_f;
+ optr += 8 * 4;
count -= 8;
}
while (count--) {
*optr = pixel_f;
- optr+=4;
+ optr += 4;
}
}
}
@@ -619,44 +619,44 @@ static void expandrow(unsigned char *optr, unsigned char *iptr, int z)
optr += z;
while (1) {
pixel = *iptr++;
- if ( !(count = (pixel & 0x7f)) )
+ if (!(count = (pixel & 0x7f)) )
return;
if (pixel & 0x80) {
- while (count>=8) {
- optr[0*4] = iptr[0];
- optr[1*4] = iptr[1];
- optr[2*4] = iptr[2];
- optr[3*4] = iptr[3];
- optr[4*4] = iptr[4];
- optr[5*4] = iptr[5];
- optr[6*4] = iptr[6];
- optr[7*4] = iptr[7];
- optr += 8*4;
+ while (count >= 8) {
+ optr[0 * 4] = iptr[0];
+ optr[1 * 4] = iptr[1];
+ optr[2 * 4] = iptr[2];
+ optr[3 * 4] = iptr[3];
+ optr[4 * 4] = iptr[4];
+ optr[5 * 4] = iptr[5];
+ optr[6 * 4] = iptr[6];
+ optr[7 * 4] = iptr[7];
+ optr += 8 * 4;
iptr += 8;
count -= 8;
}
while (count--) {
*optr = *iptr++;
- optr+=4;
+ optr += 4;
}
}
else {
pixel = *iptr++;
- while (count>=8) {
- optr[0*4] = pixel;
- optr[1*4] = pixel;
- optr[2*4] = pixel;
- optr[3*4] = pixel;
- optr[4*4] = pixel;
- optr[5*4] = pixel;
- optr[6*4] = pixel;
- optr[7*4] = pixel;
- optr += 8*4;
+ while (count >= 8) {
+ optr[0 * 4] = pixel;
+ optr[1 * 4] = pixel;
+ optr[2 * 4] = pixel;
+ optr[3 * 4] = pixel;
+ optr[4 * 4] = pixel;
+ optr[5 * 4] = pixel;
+ optr[6 * 4] = pixel;
+ optr[7 * 4] = pixel;
+ optr += 8 * 4;
count -= 8;
}
while (count--) {
*optr = pixel;
- optr+=4;
+ optr += 4;
}
}
}
@@ -689,19 +689,19 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, cons
outf = BLI_fopen(name, "wb");
if (!outf) return 0;
- tablen = ysize*zsize*sizeof(int);
+ tablen = ysize * zsize * sizeof(int);
image = (IMAGE *)MEM_mallocN(sizeof(IMAGE), "iris image");
starttab = (unsigned int *)MEM_mallocN(tablen, "iris starttab");
lengthtab = (unsigned int *)MEM_mallocN(tablen, "iris lengthtab");
- rlebuflen = 1.05*xsize+10;
+ rlebuflen = 1.05 * xsize + 10;
rlebuf = (unsigned char *)MEM_mallocN(rlebuflen, "iris rlebuf");
- lumbuf = (unsigned int *)MEM_mallocN(xsize*sizeof(int), "iris lumbuf");
+ lumbuf = (unsigned int *)MEM_mallocN(xsize * sizeof(int), "iris lumbuf");
memset(image, 0, sizeof(IMAGE));
image->imagic = IMAGIC;
image->type = RLE(1);
- if (zsize>1)
+ if (zsize > 1)
image->dim = 3;
else
image->dim = 2;
@@ -711,8 +711,8 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, cons
image->min = 0;
image->max = 255;
goodwrite *= writeheader(outf, image);
- fseek(outf, 512+2*tablen, SEEK_SET);
- pos = 512+2*tablen;
+ fseek(outf, 512 + 2 * tablen, SEEK_SET);
+ pos = 512 + 2 * tablen;
for (y = 0; y < ysize; y++) {
for (z = 0; z < zsize; z++) {
@@ -722,20 +722,20 @@ static int output_iris(unsigned int *lptr, int xsize, int ysize, int zsize, cons
len = compressrow((uchar *)lumbuf, rlebuf, CHANOFFSET(z), xsize);
}
else {
- if (z<4) {
+ if (z < 4) {
len = compressrow((uchar *)lptr, rlebuf, CHANOFFSET(z), xsize);
}
- else if (z<8 && zptr) {
- len = compressrow((uchar *)zptr, rlebuf, CHANOFFSET(z-4), xsize);
+ else if (z < 8 && zptr) {
+ len = compressrow((uchar *)zptr, rlebuf, CHANOFFSET(z - 4), xsize);
}
}
- if (len>rlebuflen) {
+ if (len > rlebuflen) {
fprintf(stderr, "output_iris: rlebuf is too small - bad poop\n");
exit(1);
}
goodwrite *= fwrite(rlebuf, len, 1, outf);
- starttab[y+z*ysize] = pos;
- lengthtab[y+z*ysize] = len;
+ starttab[y + z * ysize] = pos;
+ lengthtab[y + z * ysize] = len;
pos += len;
}
lptr += xsize;
@@ -779,32 +779,32 @@ static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cn
lbuf += z;
iptr = lbuf;
- ibufend = iptr+cnt*4;
+ ibufend = iptr + cnt * 4;
optr = rlebuf;
- while (iptr<ibufend) {
+ while (iptr < ibufend) {
sptr = iptr;
iptr += 8;
- while ((iptr<ibufend)&& ((iptr[-8]!=iptr[-4])||(iptr[-4]!=iptr[0])))
- iptr+=4;
+ while ((iptr < ibufend) && ((iptr[-8] != iptr[-4]) || (iptr[-4] != iptr[0])))
+ iptr += 4;
iptr -= 8;
- count = (iptr-sptr)/4;
+ count = (iptr - sptr) / 4;
while (count) {
- todo = count>126 ? 126:count;
+ todo = count > 126 ? 126 : count;
count -= todo;
- *optr++ = 0x80|todo;
- while (todo>8) {
- optr[0] = sptr[0*4];
- optr[1] = sptr[1*4];
- optr[2] = sptr[2*4];
- optr[3] = sptr[3*4];
- optr[4] = sptr[4*4];
- optr[5] = sptr[5*4];
- optr[6] = sptr[6*4];
- optr[7] = sptr[7*4];
+ *optr++ = 0x80 | todo;
+ while (todo > 8) {
+ optr[0] = sptr[0 * 4];
+ optr[1] = sptr[1 * 4];
+ optr[2] = sptr[2 * 4];
+ optr[3] = sptr[3 * 4];
+ optr[4] = sptr[4 * 4];
+ optr[5] = sptr[5 * 4];
+ optr[6] = sptr[6 * 4];
+ optr[7] = sptr[7 * 4];
optr += 8;
- sptr += 8*4;
+ sptr += 8 * 4;
todo -= 8;
}
while (todo--) {
@@ -815,11 +815,11 @@ static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cn
sptr = iptr;
cc = *iptr;
iptr += 4;
- while ( (iptr<ibufend) && (*iptr == cc) )
+ while ( (iptr < ibufend) && (*iptr == cc) )
iptr += 4;
- count = (iptr-sptr)/4;
+ count = (iptr - sptr) / 4;
while (count) {
- todo = count>126 ? 126:count;
+ todo = count > 126 ? 126 : count;
count -= todo;
*optr++ = todo;
*optr++ = cc;
@@ -829,7 +829,7 @@ static int compressrow(unsigned char *lbuf, unsigned char *rlebuf, int z, int cn
return optr - (unsigned char *)rlebuf;
}
-int imb_saveiris(struct ImBuf * ibuf, const char *name, int flags)
+int imb_saveiris(struct ImBuf *ibuf, const char *name, int flags)
{
short zsize;
int ret;
diff --git a/source/blender/imbuf/intern/jp2.c b/source/blender/imbuf/intern/jp2.c
index c71763b245d..4f71f296caa 100644
--- a/source/blender/imbuf/intern/jp2.c
+++ b/source/blender/imbuf/intern/jp2.c
@@ -40,7 +40,7 @@
#define JP2_FILEHEADER_SIZE 14
-static char JP2_HEAD[]= {0x0, 0x0, 0x0, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A};
+static char JP2_HEAD[] = {0x0, 0x0, 0x0, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A};
/* We only need this because of how the presets are set */
typedef struct img_folder {
@@ -72,7 +72,7 @@ int imb_is_a_jp2(unsigned char *buf)
*/
static void error_callback(const char *msg, void *client_data)
{
- FILE *stream = (FILE*)client_data;
+ FILE *stream = (FILE *)client_data;
fprintf(stream, "[ERROR] %s", msg);
}
/**
@@ -80,7 +80,7 @@ static void error_callback(const char *msg, void *client_data)
*/
static void warning_callback(const char *msg, void *client_data)
{
- FILE *stream = (FILE*)client_data;
+ FILE *stream = (FILE *)client_data;
fprintf(stream, "[WARNING] %s", msg);
}
/**
@@ -99,21 +99,21 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
struct ImBuf *ibuf = NULL;
int use_float = 0; /* for precision higher then 8 use float */
- long signed_offsets[4]= {0, 0, 0, 0};
- int float_divs[4]= {1, 1, 1, 1};
+ long signed_offsets[4] = {0, 0, 0, 0};
+ int float_divs[4] = {1, 1, 1, 1};
int index;
int w, h, planes;
- opj_dparameters_t parameters; /* decompression parameters */
+ opj_dparameters_t parameters; /* decompression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
+ opj_event_mgr_t event_mgr; /* event manager */
opj_image_t *image = NULL;
int i;
- opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
+ opj_dinfo_t *dinfo = NULL; /* handle to a decompressor */
opj_cio_t *cio = NULL;
if (check_jp2(mem) == 0) return(NULL);
@@ -166,18 +166,18 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
h = image->comps[0].h;
switch (image->numcomps) {
- case 1: /* Greyscale */
- case 3: /* Color */
- planes= 24;
- break;
- default: /* 2 or 4 - Greyscale or Color + alpha */
- planes= 32; /* greyscale + alpha */
- break;
+ case 1: /* Greyscale */
+ case 3: /* Color */
+ planes = 24;
+ break;
+ default: /* 2 or 4 - Greyscale or Color + alpha */
+ planes = 32; /* greyscale + alpha */
+ break;
}
i = image->numcomps;
- if (i>4) i= 4;
+ if (i > 4) i = 4;
while (i) {
i--;
@@ -186,15 +186,15 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
use_float = 1;
if (image->comps[i].sgnd)
- signed_offsets[i]= 1 << (image->comps[i].prec - 1);
+ signed_offsets[i] = 1 << (image->comps[i].prec - 1);
/* only needed for float images but dosnt hurt to calc this */
- float_divs[i]= (1<<image->comps[i].prec)-1;
+ float_divs[i] = (1 << image->comps[i].prec) - 1;
}
- ibuf= IMB_allocImBuf(w, h, planes, use_float ? IB_rectfloat : IB_rect);
+ ibuf = IMB_allocImBuf(w, h, planes, use_float ? IB_rectfloat : IB_rect);
- if (ibuf==NULL) {
+ if (ibuf == NULL) {
if (dinfo)
opj_destroy_decompress(dinfo);
return NULL;
@@ -203,67 +203,67 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
ibuf->ftype = JP2;
if (use_float) {
- float *rect_float= ibuf->rect_float;
+ float *rect_float = ibuf->rect_float;
if (image->numcomps < 3) {
/* greyscale 12bits+ */
- for (i = 0; i < w * h; i++, rect_float+=4) {
+ for (i = 0; i < w * h; i++, rect_float += 4) {
index = w * h - ((i) / (w) + 1) * w + (i) % (w);
- rect_float[0]= rect_float[1]= rect_float[2]= (float)(image->comps[0].data[index] + signed_offsets[0]) / float_divs[0];
+ rect_float[0] = rect_float[1] = rect_float[2] = (float)(image->comps[0].data[index] + signed_offsets[0]) / float_divs[0];
if (image->numcomps == 2)
- rect_float[3]= (image->comps[1].data[index] + signed_offsets[1]) / float_divs[1];
+ rect_float[3] = (image->comps[1].data[index] + signed_offsets[1]) / float_divs[1];
else
- rect_float[3]= 1.0f;
+ rect_float[3] = 1.0f;
}
}
else {
/* rgb or rgba 12bits+ */
- for (i = 0; i < w * h; i++, rect_float+=4) {
+ for (i = 0; i < w * h; i++, rect_float += 4) {
index = w * h - ((i) / (w) + 1) * w + (i) % (w);
- rect_float[0]= (float)(image->comps[0].data[index] + signed_offsets[0]) / float_divs[0];
- rect_float[1]= (float)(image->comps[1].data[index] + signed_offsets[1]) / float_divs[1];
- rect_float[2]= (float)(image->comps[2].data[index] + signed_offsets[2]) / float_divs[2];
+ rect_float[0] = (float)(image->comps[0].data[index] + signed_offsets[0]) / float_divs[0];
+ rect_float[1] = (float)(image->comps[1].data[index] + signed_offsets[1]) / float_divs[1];
+ rect_float[2] = (float)(image->comps[2].data[index] + signed_offsets[2]) / float_divs[2];
if (image->numcomps >= 4)
- rect_float[3]= (float)(image->comps[3].data[index] + signed_offsets[3]) / float_divs[3];
+ rect_float[3] = (float)(image->comps[3].data[index] + signed_offsets[3]) / float_divs[3];
else
- rect_float[3]= 1.0f;
+ rect_float[3] = 1.0f;
}
}
}
else {
- unsigned char *rect= (unsigned char *)ibuf->rect;
+ unsigned char *rect = (unsigned char *)ibuf->rect;
if (image->numcomps < 3) {
/* greyscale */
- for (i = 0; i < w * h; i++, rect+=4) {
+ for (i = 0; i < w * h; i++, rect += 4) {
index = w * h - ((i) / (w) + 1) * w + (i) % (w);
- rect[0]= rect[1]= rect[2]= (image->comps[0].data[index] + signed_offsets[0]);
+ rect[0] = rect[1] = rect[2] = (image->comps[0].data[index] + signed_offsets[0]);
if (image->numcomps == 2)
- rect[3]= image->comps[1].data[index] + signed_offsets[1];
+ rect[3] = image->comps[1].data[index] + signed_offsets[1];
else
- rect[3]= 255;
+ rect[3] = 255;
}
}
else {
/* 8bit rgb or rgba */
- for (i = 0; i < w * h; i++, rect+=4) {
+ for (i = 0; i < w * h; i++, rect += 4) {
int index = w * h - ((i) / (w) + 1) * w + (i) % (w);
- rect[0]= image->comps[0].data[index] + signed_offsets[0];
- rect[1]= image->comps[1].data[index] + signed_offsets[1];
- rect[2]= image->comps[2].data[index] + signed_offsets[2];
+ rect[0] = image->comps[0].data[index] + signed_offsets[0];
+ rect[1] = image->comps[1].data[index] + signed_offsets[1];
+ rect[2] = image->comps[2].data[index] + signed_offsets[2];
if (image->numcomps >= 4)
- rect[3]= image->comps[3].data[index] + signed_offsets[3];
+ rect[3] = image->comps[3].data[index] + signed_offsets[3];
else
- rect[3]= 255;
+ rect[3] = 255;
}
}
}
@@ -286,12 +286,12 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
//static opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp) {
/* prec can be 8, 12, 16 */
-#define UPSAMPLE_8_TO_12(_val) ((_val<<4) | (_val & ((1<<4)-1)))
-#define UPSAMPLE_8_TO_16(_val) ((_val<<8)+_val)
+#define UPSAMPLE_8_TO_12(_val) ((_val << 4) | (_val & ((1 << 4) - 1)))
+#define UPSAMPLE_8_TO_16(_val) ((_val << 8) + _val)
-#define DOWNSAMPLE_FLOAT_TO_8BIT(_val) (_val)<=0.0f?0: ((_val)>=1.0f?255: (int)(255.0f*(_val)))
-#define DOWNSAMPLE_FLOAT_TO_12BIT(_val) (_val)<=0.0f?0: ((_val)>=1.0f?4095: (int)(4095.0f*(_val)))
-#define DOWNSAMPLE_FLOAT_TO_16BIT(_val) (_val)<=0.0f?0: ((_val)>=1.0f?65535: (int)(65535.0f*(_val)))
+#define DOWNSAMPLE_FLOAT_TO_8BIT(_val) (_val) <= 0.0f ? 0 : ((_val) >= 1.0f ? 255 : (int)(255.0f * (_val)))
+#define DOWNSAMPLE_FLOAT_TO_12BIT(_val) (_val) <= 0.0f ? 0 : ((_val) >= 1.0f ? 4095 : (int)(4095.0f * (_val)))
+#define DOWNSAMPLE_FLOAT_TO_16BIT(_val) (_val) <= 0.0f ? 0 : ((_val) >= 1.0f ? 65535 : (int)(65535.0f * (_val)))
/*
@@ -304,10 +304,10 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
/* ****************************** COPIED FROM image_to_j2k.c */
/* ----------------------------------------------------------------------- */
-#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/
-#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
-#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
-#define COMP_48_CS 520833 /*Maximum size per color component for 2K @ 48fps*/
+#define CINEMA_24_CS 1302083 /*Codestream length for 24fps*/
+#define CINEMA_48_CS 651041 /*Codestream length for 48fps*/
+#define COMP_24_CS 1041666 /*Maximum size per color component for 2K & 4K @ 24fps*/
+#define COMP_48_CS 520833 /*Maximum size per color component for 2K @ 48fps*/
static int initialise_4K_poc(opj_poc_t *POC, int numres)
@@ -316,11 +316,11 @@ static int initialise_4K_poc(opj_poc_t *POC, int numres)
POC[0].resno0 = 0;
POC[0].compno0 = 0;
POC[0].layno1 = 1;
- POC[0].resno1 = numres-1;
+ POC[0].resno1 = numres - 1;
POC[0].compno1 = 3;
POC[0].prg1 = CPRL;
POC[1].tile = 1;
- POC[1].resno0 = numres-1;
+ POC[1].resno0 = numres - 1;
POC[1].compno0 = 0;
POC[1].layno1 = 1;
POC[1].resno1 = numres;
@@ -332,8 +332,8 @@ static int initialise_4K_poc(opj_poc_t *POC, int numres)
static void cinema_parameters(opj_cparameters_t *parameters)
{
parameters->tile_size_on = 0; /* FALSE */
- parameters->cp_tdx=1;
- parameters->cp_tdy=1;
+ parameters->cp_tdx = 1;
+ parameters->cp_tdy = 1;
/*Tile part*/
parameters->tp_flag = 'C';
@@ -356,7 +356,7 @@ static void cinema_parameters(opj_cparameters_t *parameters)
/* No ROI */
parameters->roi_compno = -1;
- parameters->subsampling_dx = 1; parameters->subsampling_dy = 1;
+ parameters->subsampling_dx = 1; parameters->subsampling_dy = 1;
/* 9-7 transform */
parameters->irreversible = 1;
@@ -369,93 +369,93 @@ static void cinema_setup_encoder(opj_cparameters_t *parameters, opj_image_t *ima
float temp_rate;
switch (parameters->cp_cinema) {
- case CINEMA2K_24:
- case CINEMA2K_48:
- if (parameters->numresolution > 6) {
- parameters->numresolution = 6;
- }
- if (!((image->comps[0].w == 2048) || (image->comps[0].h == 1080))) {
- fprintf(stdout, "Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 "
- "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n",
- image->comps[0].w, image->comps[0].h);
- parameters->cp_rsiz = STD_RSIZ;
- }
- break;
+ case CINEMA2K_24:
+ case CINEMA2K_48:
+ if (parameters->numresolution > 6) {
+ parameters->numresolution = 6;
+ }
+ if (!((image->comps[0].w == 2048) || (image->comps[0].h == 1080))) {
+ fprintf(stdout, "Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 "
+ "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n",
+ image->comps[0].w, image->comps[0].h);
+ parameters->cp_rsiz = STD_RSIZ;
+ }
+ break;
- case CINEMA4K_24:
- if (parameters->numresolution < 1) {
- parameters->numresolution = 1;
- }
- else if (parameters->numresolution > 7) {
- parameters->numresolution = 7;
- }
- if (!((image->comps[0].w == 4096) || (image->comps[0].h == 2160))) {
- fprintf(stdout, "Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4"
- "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n",
- image->comps[0].w, image->comps[0].h);
- parameters->cp_rsiz = STD_RSIZ;
- }
- parameters->numpocs = initialise_4K_poc(parameters->POC, parameters->numresolution);
- break;
- case OFF:
- /* do nothing */
- break;
+ case CINEMA4K_24:
+ if (parameters->numresolution < 1) {
+ parameters->numresolution = 1;
+ }
+ else if (parameters->numresolution > 7) {
+ parameters->numresolution = 7;
+ }
+ if (!((image->comps[0].w == 4096) || (image->comps[0].h == 2160))) {
+ fprintf(stdout, "Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4"
+ "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n",
+ image->comps[0].w, image->comps[0].h);
+ parameters->cp_rsiz = STD_RSIZ;
+ }
+ parameters->numpocs = initialise_4K_poc(parameters->POC, parameters->numresolution);
+ break;
+ case OFF:
+ /* do nothing */
+ break;
}
switch (parameters->cp_cinema) {
- case CINEMA2K_24:
- case CINEMA4K_24:
- for (i=0 ; i<parameters->tcp_numlayers ; i++) {
- temp_rate = 0;
- if (img_fol->rates[i]== 0) {
- parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
- (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
- }
- else {
- temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
- (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
- if (temp_rate > CINEMA_24_CS ) {
- parameters->tcp_rates[i]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
- (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+ case CINEMA2K_24:
+ case CINEMA4K_24:
+ for (i = 0; i < parameters->tcp_numlayers; i++) {
+ temp_rate = 0;
+ if (img_fol->rates[i] == 0) {
+ parameters->tcp_rates[0] = ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)) /
+ (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
}
else {
- parameters->tcp_rates[i]= img_fol->rates[i];
+ temp_rate = ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)) /
+ (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
+ if (temp_rate > CINEMA_24_CS) {
+ parameters->tcp_rates[i] = ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)) /
+ (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+ }
+ else {
+ parameters->tcp_rates[i] = img_fol->rates[i];
+ }
}
}
- }
- parameters->max_comp_size = COMP_24_CS;
- break;
+ parameters->max_comp_size = COMP_24_CS;
+ break;
- case CINEMA2K_48:
- for (i=0 ; i<parameters->tcp_numlayers ; i++) {
- temp_rate = 0;
- if (img_fol->rates[i]== 0) {
- parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
- (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
- }
- else {
- temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
- (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
- if (temp_rate > CINEMA_48_CS ) {
- parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
- (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+ case CINEMA2K_48:
+ for (i = 0; i < parameters->tcp_numlayers; i++) {
+ temp_rate = 0;
+ if (img_fol->rates[i] == 0) {
+ parameters->tcp_rates[0] = ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)) /
+ (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
}
else {
- parameters->tcp_rates[i]= img_fol->rates[i];
+ temp_rate = ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)) /
+ (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
+ if (temp_rate > CINEMA_48_CS) {
+ parameters->tcp_rates[0] = ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)) /
+ (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+ }
+ else {
+ parameters->tcp_rates[i] = img_fol->rates[i];
+ }
}
}
- }
- parameters->max_comp_size = COMP_48_CS;
- break;
- case OFF:
- /* do nothing */
- break;
+ parameters->max_comp_size = COMP_48_CS;
+ break;
+ case OFF:
+ /* do nothing */
+ break;
}
parameters->cp_disto_alloc = 1;
}
-static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters)
+static opj_image_t *ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters)
{
unsigned char *rect;
float *rect_float;
@@ -467,51 +467,51 @@ static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters)
int i, numcomps, w, h, prec;
int x, y, y_row;
OPJ_COLOR_SPACE color_space;
- opj_image_cmptparm_t cmptparm[4]; /* maximum of 4 components */
- opj_image_t * image = NULL;
+ opj_image_cmptparm_t cmptparm[4]; /* maximum of 4 components */
+ opj_image_t *image = NULL;
img_fol_t img_fol; /* only needed for cinema presets */
memset(&img_fol, 0, sizeof(img_fol_t));
if (ibuf->ftype & JP2_CINE) {
- if (ibuf->x==4096 || ibuf->y==2160)
- parameters->cp_cinema= CINEMA4K_24;
+ if (ibuf->x == 4096 || ibuf->y == 2160)
+ parameters->cp_cinema = CINEMA4K_24;
else {
if (ibuf->ftype & JP2_CINE_48FPS) {
- parameters->cp_cinema= CINEMA2K_48;
+ parameters->cp_cinema = CINEMA2K_48;
}
else {
- parameters->cp_cinema= CINEMA2K_24;
+ parameters->cp_cinema = CINEMA2K_24;
}
}
if (parameters->cp_cinema) {
- img_fol.rates = (float*)MEM_mallocN(parameters->tcp_numlayers * sizeof(float), "jp2_rates");
- for (i=0; i< parameters->tcp_numlayers; i++) {
+ img_fol.rates = (float *)MEM_mallocN(parameters->tcp_numlayers * sizeof(float), "jp2_rates");
+ for (i = 0; i < parameters->tcp_numlayers; i++) {
img_fol.rates[i] = parameters->tcp_rates[i];
}
cinema_parameters(parameters);
}
- color_space= CLRSPC_SYCC;
- prec= 12;
- numcomps= 3;
+ color_space = CLRSPC_SYCC;
+ prec = 12;
+ numcomps = 3;
}
else {
/* Get settings from the imbuf */
color_space = (ibuf->ftype & JP2_YCC) ? CLRSPC_SYCC : CLRSPC_SRGB;
- if (ibuf->ftype & JP2_16BIT) prec= 16;
- else if (ibuf->ftype & JP2_12BIT) prec= 12;
- else prec= 8;
+ if (ibuf->ftype & JP2_16BIT) prec = 16;
+ else if (ibuf->ftype & JP2_12BIT) prec = 12;
+ else prec = 8;
/* 32bit images == alpha channel */
/* grayscale not supported yet */
- numcomps= (ibuf->planes==32) ? 4 : 3;
+ numcomps = (ibuf->planes == 32) ? 4 : 3;
}
- w= ibuf->x;
- h= ibuf->y;
+ w = ibuf->x;
+ h = ibuf->y;
/* initialize image components */
@@ -535,16 +535,16 @@ static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters)
/* set image offset and reference grid */
image->x0 = parameters->image_offset_x0;
image->y0 = parameters->image_offset_y0;
- image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
- image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
+ image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
+ image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
/* set image data */
- rect = (unsigned char*) ibuf->rect;
- rect_float= ibuf->rect_float;
+ rect = (unsigned char *) ibuf->rect;
+ rect_float = ibuf->rect_float;
- if (rect_float && rect && prec==8) {
+ if (rect_float && rect && prec == 8) {
/* No need to use the floating point buffer, just write the 8 bits from the char buffer */
- rect_float= NULL;
+ rect_float = NULL;
}
@@ -552,112 +552,112 @@ static opj_image_t* ibuftoimage(ImBuf *ibuf, opj_cparameters_t *parameters)
float rgb[3];
switch (prec) {
- case 8: /* Convert blenders float color channels to 8, 12 or 16bit ints */
- for (y=h-1; y>=0; y--) {
- y_row = y*w;
- for (x=0; x<w; x++, rect_float+=4) {
- i = y_row + x;
-
- if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
- linearrgb_to_srgb_v3_v3(rgb, rect_float);
- else
- copy_v3_v3(rgb, rect_float);
-
- image->comps[0].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rgb[0]);
- image->comps[1].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rgb[1]);
- image->comps[2].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rgb[2]);
- if (numcomps>3)
- image->comps[3].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rect_float[3]);
+ case 8: /* Convert blenders float color channels to 8, 12 or 16bit ints */
+ for (y = h - 1; y >= 0; y--) {
+ y_row = y * w;
+ for (x = 0; x < w; x++, rect_float += 4) {
+ i = y_row + x;
+
+ if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
+ linearrgb_to_srgb_v3_v3(rgb, rect_float);
+ else
+ copy_v3_v3(rgb, rect_float);
+
+ image->comps[0].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rgb[0]);
+ image->comps[1].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rgb[1]);
+ image->comps[2].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rgb[2]);
+ if (numcomps > 3)
+ image->comps[3].data[i] = DOWNSAMPLE_FLOAT_TO_8BIT(rect_float[3]);
+ }
}
- }
- break;
+ break;
- case 12:
- for (y=h-1; y>=0; y--) {
- y_row = y*w;
- for (x=0; x<w; x++, rect_float+=4) {
- i = y_row + x;
-
- if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
- linearrgb_to_srgb_v3_v3(rgb, rect_float);
- else
- copy_v3_v3(rgb, rect_float);
-
- image->comps[0].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rgb[0]);
- image->comps[1].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rgb[1]);
- image->comps[2].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rgb[2]);
- if (numcomps>3)
- image->comps[3].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rect_float[3]);
+ case 12:
+ for (y = h - 1; y >= 0; y--) {
+ y_row = y * w;
+ for (x = 0; x < w; x++, rect_float += 4) {
+ i = y_row + x;
+
+ if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
+ linearrgb_to_srgb_v3_v3(rgb, rect_float);
+ else
+ copy_v3_v3(rgb, rect_float);
+
+ image->comps[0].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rgb[0]);
+ image->comps[1].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rgb[1]);
+ image->comps[2].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rgb[2]);
+ if (numcomps > 3)
+ image->comps[3].data[i] = DOWNSAMPLE_FLOAT_TO_12BIT(rect_float[3]);
+ }
}
- }
- break;
- case 16:
- for (y=h-1; y>=0; y--) {
- y_row = y*w;
- for (x=0; x<w; x++, rect_float+=4) {
- i = y_row + x;
-
- if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
- linearrgb_to_srgb_v3_v3(rgb, rect_float);
- else
- copy_v3_v3(rgb, rect_float);
-
- image->comps[0].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rgb[0]);
- image->comps[1].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rgb[1]);
- image->comps[2].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rgb[2]);
- if (numcomps>3)
- image->comps[3].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rect_float[3]);
+ break;
+ case 16:
+ for (y = h - 1; y >= 0; y--) {
+ y_row = y * w;
+ for (x = 0; x < w; x++, rect_float += 4) {
+ i = y_row + x;
+
+ if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
+ linearrgb_to_srgb_v3_v3(rgb, rect_float);
+ else
+ copy_v3_v3(rgb, rect_float);
+
+ image->comps[0].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rgb[0]);
+ image->comps[1].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rgb[1]);
+ image->comps[2].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rgb[2]);
+ if (numcomps > 3)
+ image->comps[3].data[i] = DOWNSAMPLE_FLOAT_TO_16BIT(rect_float[3]);
+ }
}
- }
- break;
+ break;
}
}
else {
/* just use rect*/
switch (prec) {
- case 8:
- for (y=h-1; y>=0; y--) {
- y_row = y*w;
- for (x=0; x<w; x++, rect+=4) {
- i = y_row + x;
-
- image->comps[0].data[i] = rect[0];
- image->comps[1].data[i] = rect[1];
- image->comps[2].data[i] = rect[2];
- if (numcomps>3)
- image->comps[3].data[i] = rect[3];
+ case 8:
+ for (y = h - 1; y >= 0; y--) {
+ y_row = y * w;
+ for (x = 0; x < w; x++, rect += 4) {
+ i = y_row + x;
+
+ image->comps[0].data[i] = rect[0];
+ image->comps[1].data[i] = rect[1];
+ image->comps[2].data[i] = rect[2];
+ if (numcomps > 3)
+ image->comps[3].data[i] = rect[3];
+ }
}
- }
- break;
+ break;
- case 12: /* Up Sampling, a bit pointless but best write the bit depth requested */
- for (y=h-1; y>=0; y--) {
- y_row = y*w;
- for (x=0; x<w; x++, rect+=4) {
- i = y_row + x;
-
- image->comps[0].data[i]= UPSAMPLE_8_TO_12(rect[0]);
- image->comps[1].data[i]= UPSAMPLE_8_TO_12(rect[1]);
- image->comps[2].data[i]= UPSAMPLE_8_TO_12(rect[2]);
- if (numcomps>3)
- image->comps[3].data[i]= UPSAMPLE_8_TO_12(rect[3]);
+ case 12: /* Up Sampling, a bit pointless but best write the bit depth requested */
+ for (y = h - 1; y >= 0; y--) {
+ y_row = y * w;
+ for (x = 0; x < w; x++, rect += 4) {
+ i = y_row + x;
+
+ image->comps[0].data[i] = UPSAMPLE_8_TO_12(rect[0]);
+ image->comps[1].data[i] = UPSAMPLE_8_TO_12(rect[1]);
+ image->comps[2].data[i] = UPSAMPLE_8_TO_12(rect[2]);
+ if (numcomps > 3)
+ image->comps[3].data[i] = UPSAMPLE_8_TO_12(rect[3]);
+ }
}
- }
- break;
- case 16:
- for (y=h-1; y>=0; y--) {
- y_row = y*w;
- for (x=0; x<w; x++, rect+=4) {
- i = y_row + x;
-
- image->comps[0].data[i]= UPSAMPLE_8_TO_16(rect[0]);
- image->comps[1].data[i]= UPSAMPLE_8_TO_16(rect[1]);
- image->comps[2].data[i]= UPSAMPLE_8_TO_16(rect[2]);
- if (numcomps>3)
- image->comps[3].data[i]= UPSAMPLE_8_TO_16(rect[3]);
+ break;
+ case 16:
+ for (y = h - 1; y >= 0; y--) {
+ y_row = y * w;
+ for (x = 0; x < w; x++, rect += 4) {
+ i = y_row + x;
+
+ image->comps[0].data[i] = UPSAMPLE_8_TO_16(rect[0]);
+ image->comps[1].data[i] = UPSAMPLE_8_TO_16(rect[1]);
+ image->comps[2].data[i] = UPSAMPLE_8_TO_16(rect[2]);
+ if (numcomps > 3)
+ image->comps[3].data[i] = UPSAMPLE_8_TO_16(rect[3]);
+ }
}
- }
- break;
+ break;
}
}
@@ -681,8 +681,8 @@ int imb_savejp2(struct ImBuf *ibuf, const char *name, int flags)
int quality = ibuf->ftype & 0xff;
int bSuccess;
- opj_cparameters_t parameters; /* compression parameters */
- opj_event_mgr_t event_mgr; /* event manager */
+ opj_cparameters_t parameters; /* compression parameters */
+ opj_event_mgr_t event_mgr; /* event manager */
opj_image_t *image = NULL;
(void)flags; /* unused */
@@ -702,22 +702,22 @@ int imb_savejp2(struct ImBuf *ibuf, const char *name, int flags)
/* compression ratio */
/* invert range, from 10-100, 100-1
* where jpeg see's 1 and highest quality (lossless) and 100 is very low quality*/
- parameters.tcp_rates[0]= ((100-quality)/90.0f*99.0f) + 1;
+ parameters.tcp_rates[0] = ((100 - quality) / 90.0f * 99.0f) + 1;
parameters.tcp_numlayers = 1; // only one resolution
parameters.cp_disto_alloc = 1;
- image= ibuftoimage(ibuf, &parameters);
+ image = ibuftoimage(ibuf, &parameters);
- { /* JP2 format output */
+ { /* JP2 format output */
int codestream_length;
opj_cio_t *cio = NULL;
FILE *f = NULL;
/* get a JP2 compressor handle */
- opj_cinfo_t* cinfo = opj_create_compress(CODEC_JP2);
+ opj_cinfo_t *cinfo = opj_create_compress(CODEC_JP2);
/* catch events using our callbacks and give a local context */
opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
diff --git a/source/blender/imbuf/intern/jpeg.c b/source/blender/imbuf/intern/jpeg.c
index f3a382eaa56..1a96e55e3d1 100644
--- a/source/blender/imbuf/intern/jpeg.c
+++ b/source/blender/imbuf/intern/jpeg.c
@@ -47,21 +47,21 @@
#include "jpeglib.h"
#include "jerror.h"
-#define IS_jpg(x) (x->ftype & JPG)
-#define IS_stdjpg(x) ((x->ftype & JPG_MSK) == JPG_STD)
-#define IS_vidjpg(x) ((x->ftype & JPG_MSK) == JPG_VID)
-#define IS_jstjpg(x) ((x->ftype & JPG_MSK) == JPG_JST)
-#define IS_maxjpg(x) ((x->ftype & JPG_MSK) == JPG_MAX)
+#define IS_jpg(x) (x->ftype & JPG)
+#define IS_stdjpg(x) ((x->ftype & JPG_MSK) == JPG_STD)
+#define IS_vidjpg(x) ((x->ftype & JPG_MSK) == JPG_VID)
+#define IS_jstjpg(x) ((x->ftype & JPG_MSK) == JPG_JST)
+#define IS_maxjpg(x) ((x->ftype & JPG_MSK) == JPG_MAX)
/* the types are from the jpeg lib */
-static void jpeg_error (j_common_ptr cinfo);
+static void jpeg_error(j_common_ptr cinfo);
static void init_source(j_decompress_ptr cinfo);
static boolean fill_input_buffer(j_decompress_ptr cinfo);
static void skip_input_data(j_decompress_ptr cinfo, long num_bytes);
static void term_source(j_decompress_ptr cinfo);
static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t size);
-static boolean handle_app1 (j_decompress_ptr cinfo);
-static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int flags);
+static boolean handle_app1(j_decompress_ptr cinfo);
+static ImBuf *ibJpegImageFromCinfo(struct jpeg_decompress_struct *cinfo, int flags);
/*
@@ -82,7 +82,7 @@ static int ibuf_ftype;
int imb_is_a_jpeg(unsigned char *mem)
{
- if ((mem[0]== 0xFF) && (mem[1] == 0xD8))return 1;
+ if ((mem[0] == 0xFF) && (mem[1] == 0xD8)) return 1;
return 0;
}
@@ -91,19 +91,19 @@ int imb_is_a_jpeg(unsigned char *mem)
//----------------------------------------------------------
typedef struct my_error_mgr {
- struct jpeg_error_mgr pub; /* "public" fields */
+ struct jpeg_error_mgr pub; /* "public" fields */
- jmp_buf setjmp_buffer; /* for return to caller */
+ jmp_buf setjmp_buffer; /* for return to caller */
} my_error_mgr;
-typedef my_error_mgr * my_error_ptr;
+typedef my_error_mgr *my_error_ptr;
-static void jpeg_error (j_common_ptr cinfo)
+static void jpeg_error(j_common_ptr cinfo)
{
my_error_ptr err = (my_error_ptr)cinfo->err;
/* Always display the message */
- (*cinfo->err->output_message) (cinfo);
+ (*cinfo->err->output_message)(cinfo);
/* Let the memory manager delete any temp files before we die */
jpeg_destroy(cinfo);
@@ -117,19 +117,19 @@ static void jpeg_error (j_common_ptr cinfo)
//----------------------------------------------------------
typedef struct {
- unsigned char *buffer;
- int filled;
+ unsigned char *buffer;
+ int filled;
} buffer_struct;
typedef struct {
- struct jpeg_source_mgr pub; /* public fields */
+ struct jpeg_source_mgr pub; /* public fields */
- unsigned char *buffer;
- int size;
- JOCTET terminal[2];
+ unsigned char *buffer;
+ int size;
+ JOCTET terminal[2];
} my_source_mgr;
-typedef my_source_mgr * my_src_ptr;
+typedef my_source_mgr *my_src_ptr;
static void init_source(j_decompress_ptr cinfo)
{
@@ -179,25 +179,25 @@ static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t
if (cinfo->src == NULL) { /* first time for this JPEG object? */
cinfo->src = (struct jpeg_source_mgr *)(*cinfo->mem->alloc_small)
- ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(my_source_mgr));
+ ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(my_source_mgr));
}
src = (my_src_ptr) cinfo->src;
- src->pub.init_source = init_source;
- src->pub.fill_input_buffer = fill_input_buffer;
- src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart;
- src->pub.term_source = term_source;
+ src->pub.init_source = init_source;
+ src->pub.fill_input_buffer = fill_input_buffer;
+ src->pub.skip_input_data = skip_input_data;
+ src->pub.resync_to_restart = jpeg_resync_to_restart;
+ src->pub.term_source = term_source;
- src->pub.bytes_in_buffer = size;
- src->pub.next_input_byte = buffer;
+ src->pub.bytes_in_buffer = size;
+ src->pub.next_input_byte = buffer;
src->buffer = buffer;
src->size = size;
}
-#define MAKESTMT(stuff) do { stuff } while (0)
+#define MAKESTMT(stuff) do { stuff } while (0)
#define INPUT_VARS(cinfo) \
struct jpeg_source_mgr * datasrc = (cinfo)->src; \
@@ -229,7 +229,7 @@ static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t
/* Read a byte into variable V.
* If must suspend, take the specified action (typically "return FALSE").
*/
-#define INPUT_BYTE(cinfo,V,action) \
+#define INPUT_BYTE(cinfo, V, action) \
MAKESTMT(MAKE_BYTE_AVAIL(cinfo,action); \
bytes_in_buffer--; \
V = GETJOCTET(*next_input_byte++); )
@@ -237,17 +237,17 @@ static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t
/* As above, but read two bytes interpreted as an unsigned 16-bit integer.
* V should be declared unsigned int or perhaps INT32.
*/
-#define INPUT_2BYTES(cinfo,V,action) \
+#define INPUT_2BYTES(cinfo, V, action) \
MAKESTMT(MAKE_BYTE_AVAIL(cinfo,action); \
bytes_in_buffer--; \
V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \
- MAKE_BYTE_AVAIL(cinfo,action); \
+ MAKE_BYTE_AVAIL(cinfo, action); \
bytes_in_buffer--; \
V += GETJOCTET(*next_input_byte++); )
static boolean
-handle_app1 (j_decompress_ptr cinfo)
+handle_app1(j_decompress_ptr cinfo)
{
INT32 length; /* initialized by the macro */
INT32 i;
@@ -264,20 +264,20 @@ handle_app1 (j_decompress_ptr cinfo)
if (strncmp(neogeo, "NeoGeo", 6) == 0) memcpy(&ibuf_ftype, neogeo + 6, 4);
ibuf_ftype = BIG_LONG(ibuf_ftype);
}
- INPUT_SYNC(cinfo); /* do before skip_input_data */
- if (length > 0) (*cinfo->src->skip_input_data) (cinfo, length);
+ INPUT_SYNC(cinfo); /* do before skip_input_data */
+ if (length > 0) (*cinfo->src->skip_input_data)(cinfo, length);
return TRUE;
}
-static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int flags)
+static ImBuf *ibJpegImageFromCinfo(struct jpeg_decompress_struct *cinfo, int flags)
{
JSAMPARRAY row_pointer;
- JSAMPLE * buffer = NULL;
+ JSAMPLE *buffer = NULL;
int row_stride;
int x, y, depth, r, g, b, k;
- struct ImBuf * ibuf = NULL;
- uchar * rect;
+ struct ImBuf *ibuf = NULL;
+ uchar *rect;
jpeg_saved_marker_ptr marker;
char *str, *key, *value;
@@ -314,7 +314,7 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
else {
row_stride = cinfo->output_width * depth;
- row_pointer = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, row_stride, 1);
+ row_pointer = (*cinfo->mem->alloc_sarray)((j_common_ptr) cinfo, JPOOL_IMAGE, row_stride, 1);
for (y = ibuf->y - 1; y >= 0; y--) {
jpeg_read_scanlines(cinfo, row_pointer, 1);
@@ -323,14 +323,14 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
switch (depth) {
case 1:
- for (x=ibuf->x; x >0; x--) {
+ for (x = ibuf->x; x > 0; x--) {
rect[3] = 255;
rect[0] = rect[1] = rect[2] = *buffer++;
rect += 4;
}
break;
case 3:
- for (x=ibuf->x; x >0; x--) {
+ for (x = ibuf->x; x > 0; x--) {
rect[3] = 255;
rect[0] = *buffer++;
rect[1] = *buffer++;
@@ -339,7 +339,7 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
}
break;
case 4:
- for (x=ibuf->x; x >0; x--) {
+ for (x = ibuf->x; x > 0; x--) {
r = *buffer++;
g = *buffer++;
b = *buffer++;
@@ -371,7 +371,7 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
}
}
- marker= cinfo->marker_list;
+ marker = cinfo->marker_list;
while (marker) {
if (marker->marker != JPEG_COM)
goto next_stamp_marker;
@@ -400,8 +400,8 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
goto next_stamp_marker;
}
- str = BLI_strdup ((char *) marker->data);
- key = strchr (str, ':');
+ str = BLI_strdup((char *) marker->data);
+ key = strchr(str, ':');
/*
* A little paranoid, but the file maybe
* is broken... and a "extra" check is better
@@ -413,7 +413,7 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
}
key++;
- value = strchr (key, ':');
+ value = strchr(key, ':');
if (!value) {
MEM_freeN(str);
goto next_stamp_marker;
@@ -425,7 +425,7 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
ibuf->flags |= IB_metadata;
MEM_freeN(str);
next_stamp_marker:
- marker= marker->next;
+ marker = marker->next;
}
jpeg_finish_decompress(cinfo);
@@ -441,11 +441,11 @@ next_stamp_marker:
return(ibuf);
}
-ImBuf * imb_load_jpeg (unsigned char * buffer, size_t size, int flags)
+ImBuf *imb_load_jpeg(unsigned char *buffer, size_t size, int flags)
{
struct jpeg_decompress_struct _cinfo, *cinfo = &_cinfo;
struct my_error_mgr jerr;
- ImBuf * ibuf;
+ ImBuf *ibuf;
if (!imb_is_a_jpeg(buffer)) return NULL;
@@ -470,11 +470,11 @@ ImBuf * imb_load_jpeg (unsigned char * buffer, size_t size, int flags)
}
-static void write_jpeg(struct jpeg_compress_struct * cinfo, struct ImBuf * ibuf)
+static void write_jpeg(struct jpeg_compress_struct *cinfo, struct ImBuf *ibuf)
{
- JSAMPLE * buffer = NULL;
+ JSAMPLE *buffer = NULL;
JSAMPROW row_pointer[1];
- uchar * rect;
+ uchar *rect;
int x, y;
char neogeo[128];
ImMetaData *iptr;
@@ -486,15 +486,15 @@ static void write_jpeg(struct jpeg_compress_struct * cinfo, struct ImBuf * ibuf)
ibuf_ftype = BIG_LONG(ibuf->ftype);
memcpy(neogeo + 6, &ibuf_ftype, 4);
- jpeg_write_marker(cinfo, 0xe1, (JOCTET*) neogeo, 10);
+ jpeg_write_marker(cinfo, 0xe1, (JOCTET *) neogeo, 10);
if (ibuf->metadata) {
/* key + max value + "Blender" */
- text= MEM_mallocN(530, "stamp info read");
- iptr= ibuf->metadata;
+ text = MEM_mallocN(530, "stamp info read");
+ iptr = ibuf->metadata;
while (iptr) {
- if (!strcmp (iptr->key, "None")) {
- jpeg_write_marker(cinfo, JPEG_COM, (JOCTET *) iptr->value, strlen (iptr->value) + 1);
+ if (!strcmp(iptr->key, "None")) {
+ jpeg_write_marker(cinfo, JPEG_COM, (JOCTET *) iptr->value, strlen(iptr->value) + 1);
goto next_stamp_info;
}
@@ -507,8 +507,8 @@ static void write_jpeg(struct jpeg_compress_struct * cinfo, struct ImBuf * ibuf)
* The first "Blender" is a simple identify to help
* in the read process.
*/
- sprintf (text, "Blender:%s:%s", iptr->key, iptr->value);
- jpeg_write_marker(cinfo, JPEG_COM, (JOCTET *) text, strlen (text)+1);
+ sprintf(text, "Blender:%s:%s", iptr->key, iptr->value);
+ jpeg_write_marker(cinfo, JPEG_COM, (JOCTET *) text, strlen(text) + 1);
next_stamp_info:
iptr = iptr->next;
}
@@ -516,9 +516,9 @@ next_stamp_info:
}
row_pointer[0] =
- MEM_mallocN(sizeof(JSAMPLE) *
- cinfo->input_components *
- cinfo->image_width, "jpeg row_pointer");
+ MEM_mallocN(sizeof(JSAMPLE) *
+ cinfo->input_components *
+ cinfo->image_width, "jpeg row_pointer");
for (y = ibuf->y - 1; y >= 0; y--) {
rect = (uchar *) (ibuf->rect + y * ibuf->x);
@@ -542,7 +542,7 @@ next_stamp_info:
case JCS_UNKNOWN:
memcpy(buffer, rect, 4 * ibuf->x);
break;
- /* default was missing... intentional ? */
+ /* default was missing... intentional ? */
default:
; /* do nothing */
}
@@ -555,7 +555,7 @@ next_stamp_info:
}
-static int init_jpeg(FILE * outfile, struct jpeg_compress_struct * cinfo, struct ImBuf *ibuf)
+static int init_jpeg(FILE *outfile, struct jpeg_compress_struct *cinfo, struct ImBuf *ibuf)
{
int quality;
@@ -587,7 +587,7 @@ static int init_jpeg(FILE * outfile, struct jpeg_compress_struct * cinfo, struct
case JCS_UNKNOWN:
cinfo->input_components = 4;
break;
- /* default was missing... intentional ? */
+ /* default was missing... intentional ? */
default:
; /* do nothing */
}
@@ -604,7 +604,7 @@ static int init_jpeg(FILE * outfile, struct jpeg_compress_struct * cinfo, struct
static int save_stdjpeg(const char *name, struct ImBuf *ibuf)
{
- FILE * outfile;
+ FILE *outfile;
struct jpeg_compress_struct _cinfo, *cinfo = &_cinfo;
struct my_error_mgr jerr;
@@ -638,7 +638,7 @@ static int save_stdjpeg(const char *name, struct ImBuf *ibuf)
static int save_vidjpeg(const char *name, struct ImBuf *ibuf)
{
- FILE * outfile;
+ FILE *outfile;
struct jpeg_compress_struct _cinfo, *cinfo = &_cinfo;
struct my_error_mgr jerr;
@@ -678,7 +678,7 @@ static int save_vidjpeg(const char *name, struct ImBuf *ibuf)
static int save_jstjpeg(const char *name, struct ImBuf *ibuf)
{
char fieldname[1024];
- struct ImBuf * tbuf;
+ struct ImBuf *tbuf;
int oldy, returnval;
tbuf = IMB_allocImBuf(ibuf->x, ibuf->y / 2, 24, IB_rect);
@@ -708,7 +708,7 @@ static int save_jstjpeg(const char *name, struct ImBuf *ibuf)
static int save_maxjpeg(const char *name, struct ImBuf *ibuf)
{
- FILE * outfile;
+ FILE *outfile;
struct jpeg_compress_struct _cinfo, *cinfo = &_cinfo;
struct my_error_mgr jerr;
diff --git a/source/blender/imbuf/intern/metadata.c b/source/blender/imbuf/intern/metadata.c
index 0da7358b55b..a7caae73679 100644
--- a/source/blender/imbuf/intern/metadata.c
+++ b/source/blender/imbuf/intern/metadata.c
@@ -43,7 +43,7 @@
-void IMB_metadata_free(struct ImBuf* img)
+void IMB_metadata_free(struct ImBuf *img)
{
ImMetaData *info;
@@ -54,7 +54,7 @@ void IMB_metadata_free(struct ImBuf* img)
}
info = img->metadata;
while (info) {
- ImMetaData* next = info->next;
+ ImMetaData *next = info->next;
MEM_freeN(info->key);
MEM_freeN(info->value);
MEM_freeN(info);
@@ -62,7 +62,7 @@ void IMB_metadata_free(struct ImBuf* img)
}
}
-int IMB_metadata_get_field(struct ImBuf* img, const char* key, char* field, int len)
+int IMB_metadata_get_field(struct ImBuf *img, const char *key, char *field, int len)
{
ImMetaData *info;
int retval = 0;
@@ -84,7 +84,7 @@ int IMB_metadata_get_field(struct ImBuf* img, const char* key, char* field, int
return retval;
}
-int IMB_metadata_add_field(struct ImBuf* img, const char* key, const char* value)
+int IMB_metadata_add_field(struct ImBuf *img, const char *key, const char *value)
{
ImMetaData *info;
ImMetaData *last;
@@ -121,7 +121,7 @@ int IMB_metadata_del_field(struct ImBuf *img, const char *key)
p = img->metadata;
p1 = NULL;
while (p) {
- if (!strcmp (key, p->key)) {
+ if (!strcmp(key, p->key)) {
if (p1)
p1->next = p->next;
else
@@ -146,18 +146,18 @@ int IMB_metadata_change_field(struct ImBuf *img, const char *key, const char *fi
return (0);
if (!img->metadata)
- return (IMB_metadata_add_field (img, key, field));
+ return (IMB_metadata_add_field(img, key, field));
p = img->metadata;
while (p) {
- if (!strcmp (key, p->key)) {
- MEM_freeN (p->value);
- p->value = BLI_strdup (field);
+ if (!strcmp(key, p->key)) {
+ MEM_freeN(p->value);
+ p->value = BLI_strdup(field);
return (1);
}
p = p->next;
}
- return (IMB_metadata_add_field (img, key, field));
+ return (IMB_metadata_add_field(img, key, field));
}
diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c
index 485f593a8fb..2992e4a0aa7 100644
--- a/source/blender/imbuf/intern/moviecache.c
+++ b/source/blender/imbuf/intern/moviecache.c
@@ -59,7 +59,7 @@ typedef struct MovieCache {
int keysize;
unsigned long curtime;
- int totseg, *points, proxy, render_flags; /* for visual statistics optimization */
+ int totseg, *points, proxy, render_flags; /* for visual statistics optimization */
int pad;
} MovieCache;
@@ -71,35 +71,35 @@ typedef struct MovieCacheKey {
typedef struct MovieCacheItem {
MovieCache *cache_owner;
ImBuf *ibuf;
- MEM_CacheLimiterHandleC * c_handle;
+ MEM_CacheLimiterHandleC *c_handle;
unsigned long last_access;
} MovieCacheItem;
static unsigned int moviecache_hashhash(const void *keyv)
{
- MovieCacheKey *key = (MovieCacheKey*)keyv;
+ MovieCacheKey *key = (MovieCacheKey *)keyv;
return key->cache_owner->hashfp(key->userkey);
}
static int moviecache_hashcmp(const void *av, const void *bv)
{
- const MovieCacheKey *a = (MovieCacheKey*)av;
- const MovieCacheKey *b = (MovieCacheKey*)bv;
+ const MovieCacheKey *a = (MovieCacheKey *)av;
+ const MovieCacheKey *b = (MovieCacheKey *)bv;
return a->cache_owner->cmpfp(a->userkey, b->userkey);
}
static void moviecache_keyfree(void *val)
{
- MovieCacheKey *key = (MovieCacheKey*)val;
+ MovieCacheKey *key = (MovieCacheKey *)val;
BLI_mempool_free(key->cache_owner->keys_pool, key);
}
static void moviecache_valfree(void *val)
{
- MovieCacheItem *item = (MovieCacheItem*)val;
+ MovieCacheItem *item = (MovieCacheItem *)val;
if (item->ibuf) {
MEM_CacheLimiter_unmanage(item->c_handle);
@@ -160,7 +160,7 @@ static size_t IMB_get_size_in_memory(ImBuf *ibuf)
if (ibuf->rect_float)
channel_size += sizeof(float);
- size += channel_size * ibuf->x * ibuf->y * ibuf->channels;
+ size += channel_size * ibuf->x * ibuf->y * ibuf->channels;
if (ibuf->miptot) {
for (a = 0; a < ibuf->miptot; a++) {
@@ -170,13 +170,13 @@ static size_t IMB_get_size_in_memory(ImBuf *ibuf)
}
if (ibuf->tiles) {
- size += sizeof(unsigned int)*ibuf->ytiles*ibuf->xtiles;
+ size += sizeof(unsigned int) * ibuf->ytiles * ibuf->xtiles;
}
return size;
}
-static size_t get_item_size (void *p)
+static size_t get_item_size(void *p)
{
size_t size = sizeof(MovieCacheItem);
MovieCacheItem *item = (MovieCacheItem *) p;
@@ -198,8 +198,8 @@ void IMB_moviecache_destruct(void)
delete_MEM_CacheLimiter(limitor);
}
-struct MovieCache *IMB_moviecache_create(int keysize, GHashHashFP hashfp, GHashCmpFP cmpfp,
- MovieCacheGetKeyDataFP getdatafp)
+MovieCache *IMB_moviecache_create(int keysize, GHashHashFP hashfp, GHashCmpFP cmpfp,
+ MovieCacheGetKeyDataFP getdatafp)
{
MovieCache *cache;
@@ -257,14 +257,14 @@ void IMB_moviecache_put(MovieCache *cache, void *userkey, ImBuf *ibuf)
}
}
-ImBuf* IMB_moviecache_get(MovieCache *cache, void *userkey)
+ImBuf *IMB_moviecache_get(MovieCache *cache, void *userkey)
{
MovieCacheKey key;
MovieCacheItem *item;
key.cache_owner = cache;
key.userkey = userkey;
- item = (MovieCacheItem*)BLI_ghash_lookup(cache->hash, &key);
+ item = (MovieCacheItem *)BLI_ghash_lookup(cache->hash, &key);
if (item) {
item->last_access = cache->curtime++;
@@ -316,7 +316,7 @@ void IMB_moviecache_get_cache_segments(MovieCache *cache, int proxy, int render_
}
else {
int totframe = BLI_ghash_size(cache->hash);
- int *frames = MEM_callocN(totframe*sizeof(int), "movieclip cache frames");
+ int *frames = MEM_callocN(totframe * sizeof(int), "movieclip cache frames");
int a, totseg = 0;
GHashIterator *iter;
@@ -353,7 +353,7 @@ void IMB_moviecache_get_cache_segments(MovieCache *cache, int proxy, int render_
if (totseg) {
int b, *points;
- points = MEM_callocN(2*sizeof(int)*totseg, "movieclip cache segments");
+ points = MEM_callocN(2 * sizeof(int) * totseg, "movieclip cache segments");
/* fill */
for (a = 0, b = 0; a < totframe; a++) {
diff --git a/source/blender/imbuf/intern/openexr/openexr_multi.h b/source/blender/imbuf/intern/openexr/openexr_multi.h
index 88d8b09675b..523dc8120c4 100644
--- a/source/blender/imbuf/intern/openexr/openexr_multi.h
+++ b/source/blender/imbuf/intern/openexr/openexr_multi.h
@@ -37,35 +37,35 @@
/* Note: as for now openexr only supports 32 chars in channel names.
* This api also supports max 8 channels per pass now. easy to fix! */
-#define EXR_LAY_MAXNAME 19
-#define EXR_PASS_MAXNAME 11
-#define EXR_TOT_MAXNAME 32
-#define EXR_PASS_MAXCHAN 8
+#define EXR_LAY_MAXNAME 19
+#define EXR_PASS_MAXNAME 11
+#define EXR_TOT_MAXNAME 32
+#define EXR_PASS_MAXCHAN 8
#ifdef __cplusplus
extern "C" {
#endif
-void * IMB_exr_get_handle (void);
-void IMB_exr_add_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
+void *IMB_exr_get_handle(void);
+void IMB_exr_add_channel(void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
-int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height);
-int IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress);
-void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley);
+int IMB_exr_begin_read(void *handle, const char *filename, int *width, int *height);
+int IMB_exr_begin_write(void *handle, const char *filename, int width, int height, int compress);
+void IMB_exrtile_begin_write(void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley);
-void IMB_exr_set_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
+void IMB_exr_set_channel(void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
-void IMB_exr_read_channels (void *handle);
-void IMB_exr_write_channels (void *handle);
-void IMB_exrtile_write_channels (void *handle, int partx, int party, int level);
-void IMB_exrtile_clear_channels (void *handle);
+void IMB_exr_read_channels(void *handle);
+void IMB_exr_write_channels(void *handle);
+void IMB_exrtile_write_channels(void *handle, int partx, int party, int level);
+void IMB_exrtile_clear_channels(void *handle);
-void IMB_exr_multilayer_convert (void *handle, void *base,
- void * (*addlayer)(void *base, char *str),
- void (*addpass)(void *base, void *lay, char *str, float *rect, int totchan, char *chan_id));
+void IMB_exr_multilayer_convert(void *handle, void *base,
+ void * (*addlayer)(void *base, char *str),
+ void (*addpass)(void *base, void *lay, char *str, float *rect, int totchan, char *chan_id));
-void IMB_exr_close (void *handle);
+void IMB_exr_close(void *handle);
#ifdef __cplusplus
} // extern "C"
diff --git a/source/blender/imbuf/intern/png.c b/source/blender/imbuf/intern/png.c
index 35a44635727..2aed1485700 100644
--- a/source/blender/imbuf/intern/png.c
+++ b/source/blender/imbuf/intern/png.c
@@ -301,7 +301,8 @@ int imb_savepng(struct ImBuf *ibuf, const char *name, int flags)
return(1);
}
-struct ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags){
+ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags)
+{
struct ImBuf *ibuf = NULL;
png_structp png_ptr;
png_infop info_ptr;
diff --git a/source/blender/imbuf/intern/radiance_hdr.c b/source/blender/imbuf/intern/radiance_hdr.c
index 66acd952ac0..4f4ab9e72d0 100644
--- a/source/blender/imbuf/intern/radiance_hdr.c
+++ b/source/blender/imbuf/intern/radiance_hdr.c
@@ -56,7 +56,7 @@
/* needed constants */
#define MINELEN 8
#define MAXELEN 0x7fff
-#define MINRUN 4 /* minimum run length */
+#define MINRUN 4 /* minimum run length */
#define RED 0
#define GRN 1
#define BLU 2
@@ -66,11 +66,11 @@
typedef unsigned char RGBE[4];
typedef float fCOLOR[3];
/* copy source -> dest */
-#define copy_rgbe(c1, c2) (c2[RED]=c1[RED], c2[GRN]=c1[GRN], c2[BLU]=c1[BLU], c2[EXP]=c1[EXP])
-#define copy_fcol(f1, f2) (f2[RED]=f1[RED], f2[GRN]=f1[GRN], f2[BLU]=f1[BLU])
+#define copy_rgbe(c1, c2) (c2[RED] = c1[RED], c2[GRN] = c1[GRN], c2[BLU] = c1[BLU], c2[EXP] = c1[EXP])
+#define copy_fcol(f1, f2) (f2[RED] = f1[RED], f2[GRN] = f1[GRN], f2[BLU] = f1[BLU])
/* read routines */
-static unsigned char* oldreadcolrs(RGBE *scan, unsigned char *mem, int xmax)
+static unsigned char *oldreadcolrs(RGBE *scan, unsigned char *mem, int xmax)
{
int i, rshift = 0, len = xmax;
while (len > 0) {
@@ -79,7 +79,7 @@ static unsigned char* oldreadcolrs(RGBE *scan, unsigned char *mem, int xmax)
scan[0][BLU] = *mem++;
scan[0][EXP] = *mem++;
if (scan[0][RED] == 1 && scan[0][GRN] == 1 && scan[0][BLU] == 1) {
- for (i=scan[0][EXP]<<rshift;i>0;i--) {
+ for (i = scan[0][EXP] << rshift; i > 0; i--) {
copy_rgbe(scan[-1], scan[0]);
scan++;
len--;
@@ -95,14 +95,14 @@ static unsigned char* oldreadcolrs(RGBE *scan, unsigned char *mem, int xmax)
return mem;
}
-static unsigned char* freadcolrs(RGBE *scan, unsigned char* mem, int xmax)
+static unsigned char *freadcolrs(RGBE *scan, unsigned char *mem, int xmax)
{
int i, j, code, val;
if ((xmax < MINELEN) | (xmax > MAXELEN)) return oldreadcolrs(scan, mem, xmax);
i = *mem++;
- if (i != 2) return oldreadcolrs(scan, mem-1, xmax);
+ if (i != 2) return oldreadcolrs(scan, mem - 1, xmax);
scan[0][GRN] = *mem++;
scan[0][BLU] = *mem++;
@@ -110,8 +110,8 @@ static unsigned char* freadcolrs(RGBE *scan, unsigned char* mem, int xmax)
i = *mem++;
if (((scan[0][BLU] << 8) | i) != xmax) return NULL;
- for (i=0;i<4;i++)
- for (j=0;j<xmax;) {
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < xmax; ) {
code = *mem++;
if (code > 128) {
code &= 127;
@@ -131,14 +131,14 @@ static unsigned char* freadcolrs(RGBE *scan, unsigned char* mem, int xmax)
/* rgbe -> float color */
static void RGBE2FLOAT(RGBE rgbe, fCOLOR fcol)
{
- if (rgbe[EXP]==0) {
+ if (rgbe[EXP] == 0) {
fcol[RED] = fcol[GRN] = fcol[BLU] = 0;
}
else {
- float f = ldexp(1.0, rgbe[EXP]-(COLXS+8));
- fcol[RED] = f*(rgbe[RED] + 0.5f);
- fcol[GRN] = f*(rgbe[GRN] + 0.5f);
- fcol[BLU] = f*(rgbe[BLU] + 0.5f);
+ float f = ldexp(1.0, rgbe[EXP] - (COLXS + 8));
+ fcol[RED] = f * (rgbe[RED] + 0.5f);
+ fcol[GRN] = f * (rgbe[GRN] + 0.5f);
+ fcol[BLU] = f * (rgbe[BLU] + 0.5f);
}
}
@@ -146,8 +146,8 @@ static void RGBE2FLOAT(RGBE rgbe, fCOLOR fcol)
static void FLOAT2RGBE(fCOLOR fcol, RGBE rgbe)
{
int e;
- float d = (fcol[RED]>fcol[GRN]) ? fcol[RED] : fcol[GRN];
- if (fcol[BLU]>d) d = fcol[BLU];
+ float d = (fcol[RED] > fcol[GRN]) ? fcol[RED] : fcol[GRN];
+ if (fcol[BLU] > d) d = fcol[BLU];
if (d <= 1e-32f)
rgbe[RED] = rgbe[GRN] = rgbe[BLU] = rgbe[EXP] = 0;
else {
@@ -166,63 +166,63 @@ int imb_is_a_hdr(unsigned char *buf)
// For recognition, Blender only loads first 32 bytes, so use #?RADIANCE id instead
// update: actually, the 'RADIANCE' part is just an optional program name, the magic word is really only the '#?' part
//if (strstr((char*)buf, "#?RADIANCE")) return 1;
- if (strstr((char*)buf, "#?")) return 1;
+ if (strstr((char *)buf, "#?")) return 1;
// if (strstr((char*)buf, "32-bit_rle_rgbe")) return 1;
return 0;
}
struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags)
{
- struct ImBuf* ibuf;
- RGBE* sline;
+ struct ImBuf *ibuf;
+ RGBE *sline;
fCOLOR fcol;
- float* rect_float;
- int found=0;
- int width=0, height=0;
+ float *rect_float;
+ int found = 0;
+ int width = 0, height = 0;
int x, y;
- unsigned char* ptr;
+ unsigned char *ptr;
char oriY[80], oriX[80];
if (imb_is_a_hdr((void *)mem)) {
/* find empty line, next line is resolution info */
- for (x=1;x<size;x++) {
- if ((mem[x-1]=='\n') && (mem[x]=='\n')) {
+ for (x = 1; x < size; x++) {
+ if ((mem[x - 1] == '\n') && (mem[x] == '\n')) {
found = 1;
break;
}
}
- if (found && (x<(size + 2))) {
+ if (found && (x < (size + 2))) {
if (sscanf((char *)&mem[x + 1], "%79s %d %79s %d", (char *)&oriY, &height,
- (char*)&oriX, &width) != 4)
+ (char *)&oriX, &width) != 4)
{
return NULL;
}
/* find end of this line, data right behind it */
- ptr = (unsigned char *)strchr((char*)&mem[x+1], '\n');
+ ptr = (unsigned char *)strchr((char *)&mem[x + 1], '\n');
ptr++;
if (flags & IB_test) ibuf = IMB_allocImBuf(width, height, 32, 0);
- else ibuf = IMB_allocImBuf(width, height, 32, (flags & IB_rect)|IB_rectfloat);
+ else ibuf = IMB_allocImBuf(width, height, 32, (flags & IB_rect) | IB_rectfloat);
- if (ibuf==NULL) return NULL;
+ if (ibuf == NULL) return NULL;
ibuf->ftype = RADHDR;
ibuf->profile = IB_PROFILE_LINEAR_RGB;
if (flags & IB_test) return ibuf;
/* read in and decode the actual data */
- sline = (RGBE*)MEM_mallocN(sizeof(RGBE)*width, "radhdr_read_tmpscan");
+ sline = (RGBE *)MEM_mallocN(sizeof(RGBE) * width, "radhdr_read_tmpscan");
rect_float = (float *)ibuf->rect_float;
- for (y=0;y<height;y++) {
+ for (y = 0; y < height; y++) {
ptr = freadcolrs(sline, ptr, width);
- if (ptr==NULL) {
+ if (ptr == NULL) {
printf("HDR decode error\n");
MEM_freeN(sline);
return ibuf;
}
- for (x=0;x<width;x++) {
+ for (x = 0; x < width; x++) {
/* convert to ldr */
RGBE2FLOAT(sline[x], fcol);
*rect_float++ = fcol[RED];
@@ -232,7 +232,7 @@ struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags)
}
}
MEM_freeN(sline);
- if (oriY[0]=='-') IMB_flipy(ibuf);
+ if (oriY[0] == '-') IMB_flipy(ibuf);
if (flags & IB_rect) {
IMB_rect_from_float(ibuf);
@@ -248,36 +248,36 @@ struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags)
}
/* ImBuf write */
-static int fwritecolrs(FILE* file, int width, int channels, unsigned char* ibufscan, float* fpscan)
+static int fwritecolrs(FILE *file, int width, int channels, unsigned char *ibufscan, float *fpscan)
{
- int x, i, j, beg, c2, cnt=0;
+ int x, i, j, beg, c2, cnt = 0;
fCOLOR fcol;
RGBE rgbe, *rgbe_scan;
- if ((ibufscan==NULL) && (fpscan==NULL)) return 0;
+ if ((ibufscan == NULL) && (fpscan == NULL)) return 0;
- rgbe_scan = (RGBE*)MEM_mallocN(sizeof(RGBE)*width, "radhdr_write_tmpscan");
+ rgbe_scan = (RGBE *)MEM_mallocN(sizeof(RGBE) * width, "radhdr_write_tmpscan");
/* convert scanline */
- j= 0;
- for (i=0;i<width;i++) {
+ j = 0;
+ for (i = 0; i < width; i++) {
if (fpscan) {
fcol[RED] = fpscan[j];
- fcol[GRN] = (channels >= 2)? fpscan[j+1]: fpscan[j];
- fcol[BLU] = (channels >= 3)? fpscan[j+2]: fpscan[j];
+ fcol[GRN] = (channels >= 2) ? fpscan[j + 1] : fpscan[j];
+ fcol[BLU] = (channels >= 3) ? fpscan[j + 2] : fpscan[j];
}
else {
fcol[RED] = (float)ibufscan[j] / 255.f;
- fcol[GRN] = (float)((channels >= 2)? ibufscan[j+1]: ibufscan[j]) / 255.f;
- fcol[BLU] = (float)((channels >= 3)? ibufscan[j+2]: ibufscan[j]) / 255.f;
+ fcol[GRN] = (float)((channels >= 2) ? ibufscan[j + 1] : ibufscan[j]) / 255.f;
+ fcol[BLU] = (float)((channels >= 3) ? ibufscan[j + 2] : ibufscan[j]) / 255.f;
}
FLOAT2RGBE(fcol, rgbe);
copy_rgbe(rgbe, rgbe_scan[i]);
- j+=channels;
+ j += channels;
}
- if ((width < MINELEN) | (width > MAXELEN)) { /* OOBs, write out flat */
- x=fwrite((char *)rgbe_scan, sizeof(RGBE), width, file) - width;
+ if ((width < MINELEN) | (width > MAXELEN)) { /* OOBs, write out flat */
+ x = fwrite((char *)rgbe_scan, sizeof(RGBE), width, file) - width;
MEM_freeN(rgbe_scan);
return x;
}
@@ -287,29 +287,29 @@ static int fwritecolrs(FILE* file, int width, int channels, unsigned char* ibufs
putc((unsigned char)(width >> 8), file);
putc((unsigned char)(width & 255), file);
/* put components separately */
- for (i=0;i<4;i++) {
- for (j=0;j<width;j+=cnt) { /* find next run */
- for (beg=j;beg<width;beg+=cnt) {
- for (cnt=1;(cnt<127) && ((beg+cnt)<width) && (rgbe_scan[beg+cnt][i] == rgbe_scan[beg][i]); cnt++);
- if (cnt>=MINRUN) break; /* long enough */
+ for (i = 0; i < 4; i++) {
+ for (j = 0; j < width; j += cnt) { /* find next run */
+ for (beg = j; beg < width; beg += cnt) {
+ for (cnt = 1; (cnt < 127) && ((beg + cnt) < width) && (rgbe_scan[beg + cnt][i] == rgbe_scan[beg][i]); cnt++) ;
+ if (cnt >= MINRUN) break; /* long enough */
}
- if (((beg-j)>1) && ((beg-j) < MINRUN)) {
- c2 = j+1;
+ if (((beg - j) > 1) && ((beg - j) < MINRUN)) {
+ c2 = j + 1;
while (rgbe_scan[c2++][i] == rgbe_scan[j][i])
if (c2 == beg) { /* short run */
- putc((unsigned char)(128+beg-j), file);
+ putc((unsigned char)(128 + beg - j), file);
putc((unsigned char)(rgbe_scan[j][i]), file);
j = beg;
break;
}
}
while (j < beg) { /* write out non-run */
- if ((c2 = beg-j) > 128) c2 = 128;
+ if ((c2 = beg - j) > 128) c2 = 128;
putc((unsigned char)(c2), file);
while (c2--) putc(rgbe_scan[j++][i], file);
}
if (cnt >= MINRUN) { /* write out run */
- putc((unsigned char)(128+cnt), file);
+ putc((unsigned char)(128 + cnt), file);
putc(rgbe_scan[beg][i], file);
}
else cnt = 0;
@@ -336,30 +336,30 @@ static void writeHeader(FILE *file, int width, int height)
int imb_savehdr(struct ImBuf *ibuf, const char *name, int flags)
{
- FILE* file = BLI_fopen(name, "wb");
- float *fp= NULL;
- int y, width=ibuf->x, height=ibuf->y;
- unsigned char *cp= NULL;
+ FILE *file = BLI_fopen(name, "wb");
+ float *fp = NULL;
+ int y, width = ibuf->x, height = ibuf->y;
+ unsigned char *cp = NULL;
(void)flags; /* unused */
- if (file==NULL) return 0;
+ if (file == NULL) return 0;
writeHeader(file, width, height);
if (ibuf->rect)
- cp= (unsigned char *)ibuf->rect + ibuf->channels*(height-1)*width;
+ cp = (unsigned char *)ibuf->rect + ibuf->channels * (height - 1) * width;
if (ibuf->rect_float)
- fp= ibuf->rect_float + ibuf->channels*(height-1)*width;
+ fp = ibuf->rect_float + ibuf->channels * (height - 1) * width;
- for (y=height-1;y>=0;y--) {
+ for (y = height - 1; y >= 0; y--) {
if (fwritecolrs(file, width, ibuf->channels, cp, fp) < 0) {
fclose(file);
printf("HDR write error\n");
return 0;
}
- if (cp) cp-= ibuf->channels*width;
- if (fp) fp-= ibuf->channels*width;
+ if (cp) cp -= ibuf->channels * width;
+ if (fp) fp -= ibuf->channels * width;
}
fclose(file);
diff --git a/source/blender/imbuf/intern/readimage.c b/source/blender/imbuf/intern/readimage.c
index e9d549be8b9..e78c4a55843 100644
--- a/source/blender/imbuf/intern/readimage.c
+++ b/source/blender/imbuf/intern/readimage.c
@@ -60,9 +60,9 @@ ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags, const c
return NULL;
}
- for (type=IMB_FILE_TYPES; type->is_a; type++) {
+ for (type = IMB_FILE_TYPES; type->is_a; type++) {
if (type->load) {
- ibuf= type->load(mem, size, flags);
+ ibuf = type->load(mem, size, flags);
if (ibuf) {
if (flags & IB_premul) {
IMB_premultiply_alpha(ibuf);
@@ -87,15 +87,15 @@ ImBuf *IMB_loadifffile(int file, int flags, const char *descr)
if (file == -1) return NULL;
- size= BLI_file_descriptor_size(file);
+ size = BLI_file_descriptor_size(file);
- mem= mmap(NULL, size, PROT_READ, MAP_SHARED, file, 0);
- if (mem==(unsigned char*)-1) {
+ mem = mmap(NULL, size, PROT_READ, MAP_SHARED, file, 0);
+ if (mem == (unsigned char *)-1) {
fprintf(stderr, "%s: couldn't get mapping %s\n", __func__, descr);
return NULL;
}
- ibuf= IMB_ibImageFromMemory(mem, size, flags, descr);
+ ibuf = IMB_ibImageFromMemory(mem, size, flags, descr);
if (munmap(mem, size))
fprintf(stderr, "%s: couldn't unmap file %s\n", __func__, descr);
@@ -126,16 +126,16 @@ ImBuf *IMB_loadiffname(const char *filepath, int flags)
imb_cache_filename(filepath_tx, filepath, flags);
- file = BLI_open(filepath_tx, O_BINARY|O_RDONLY, 0);
+ file = BLI_open(filepath_tx, O_BINARY | O_RDONLY, 0);
if (file < 0) return NULL;
- ibuf= IMB_loadifffile(file, flags, filepath_tx);
+ ibuf = IMB_loadifffile(file, flags, filepath_tx);
if (ibuf) {
BLI_strncpy(ibuf->name, filepath, sizeof(ibuf->name));
BLI_strncpy(ibuf->cachename, filepath_tx, sizeof(ibuf->cachename));
- for (a=1; a<ibuf->miptot; a++)
- BLI_strncpy(ibuf->mipmap[a-1]->cachename, filepath_tx, sizeof(ibuf->cachename));
+ for (a = 1; a < ibuf->miptot; a++)
+ BLI_strncpy(ibuf->mipmap[a - 1]->cachename, filepath_tx, sizeof(ibuf->cachename));
if (flags & IB_fields) IMB_de_interlace(ibuf);
}
@@ -152,10 +152,10 @@ ImBuf *IMB_testiffname(const char *filepath, int flags)
imb_cache_filename(filepath_tx, filepath, flags);
- file = BLI_open(filepath_tx, O_BINARY|O_RDONLY, 0);
+ file = BLI_open(filepath_tx, O_BINARY | O_RDONLY, 0);
if (file < 0) return NULL;
- ibuf=IMB_loadifffile(file, flags|IB_test|IB_multilayer, filepath_tx);
+ ibuf = IMB_loadifffile(file, flags | IB_test | IB_multilayer, filepath_tx);
if (ibuf) {
BLI_strncpy(ibuf->name, filepath, sizeof(ibuf->name));
@@ -175,15 +175,15 @@ static void imb_loadtilefile(ImBuf *ibuf, int file, int tx, int ty, unsigned int
if (file == -1) return;
- size= BLI_file_descriptor_size(file);
+ size = BLI_file_descriptor_size(file);
- mem= mmap(NULL, size, PROT_READ, MAP_SHARED, file, 0);
- if (mem==(unsigned char*)-1) {
+ mem = mmap(NULL, size, PROT_READ, MAP_SHARED, file, 0);
+ if (mem == (unsigned char *)-1) {
fprintf(stderr, "Couldn't get memory mapping for %s\n", ibuf->cachename);
return;
}
- for (type=IMB_FILE_TYPES; type->is_a; type++)
+ for (type = IMB_FILE_TYPES; type->is_a; type++)
if (type->load_tile && type->ftype(type, ibuf))
type->load_tile(ibuf, mem, size, tx, ty, rect);
@@ -195,7 +195,7 @@ void imb_loadtile(ImBuf *ibuf, int tx, int ty, unsigned int *rect)
{
int file;
- file = BLI_open(ibuf->cachename, O_BINARY|O_RDONLY, 0);
+ file = BLI_open(ibuf->cachename, O_BINARY | O_RDONLY, 0);
if (file < 0) return;
imb_loadtilefile(ibuf, file, tx, ty, rect);
diff --git a/source/blender/imbuf/intern/rotate.c b/source/blender/imbuf/intern/rotate.c
index 8914d4ee64d..b3fe363a266 100644
--- a/source/blender/imbuf/intern/rotate.c
+++ b/source/blender/imbuf/intern/rotate.c
@@ -44,7 +44,7 @@
#include "IMB_allocimbuf.h"
-void IMB_flipy(struct ImBuf * ibuf)
+void IMB_flipy(struct ImBuf *ibuf)
{
int x, y;
@@ -57,47 +57,47 @@ void IMB_flipy(struct ImBuf * ibuf)
y = ibuf->y;
top = ibuf->rect;
- bottom = top + ((y-1) * x);
- line= MEM_mallocN(x*sizeof(int), "linebuf");
+ bottom = top + ((y - 1) * x);
+ line = MEM_mallocN(x * sizeof(int), "linebuf");
y >>= 1;
- for (;y>0;y--) {
- memcpy(line, top, x*sizeof(int));
- memcpy(top, bottom, x*sizeof(int));
- memcpy(bottom, line, x*sizeof(int));
+ for (; y > 0; y--) {
+ memcpy(line, top, x * sizeof(int));
+ memcpy(top, bottom, x * sizeof(int));
+ memcpy(bottom, line, x * sizeof(int));
bottom -= x;
- top+= x;
+ top += x;
}
MEM_freeN(line);
}
if (ibuf->rect_float) {
- float *topf=NULL, *bottomf=NULL, *linef=NULL;
+ float *topf = NULL, *bottomf = NULL, *linef = NULL;
x = ibuf->x;
y = ibuf->y;
- topf= ibuf->rect_float;
- bottomf = topf + 4*((y-1) * x);
- linef= MEM_mallocN(4*x*sizeof(float), "linebuff");
+ topf = ibuf->rect_float;
+ bottomf = topf + 4 * ((y - 1) * x);
+ linef = MEM_mallocN(4 * x * sizeof(float), "linebuff");
y >>= 1;
- for (;y>0;y--) {
- memcpy(linef, topf, 4*x*sizeof(float));
- memcpy(topf, bottomf, 4*x*sizeof(float));
- memcpy(bottomf, linef, 4*x*sizeof(float));
- bottomf -= 4*x;
- topf+= 4*x;
+ for (; y > 0; y--) {
+ memcpy(linef, topf, 4 * x * sizeof(float));
+ memcpy(topf, bottomf, 4 * x * sizeof(float));
+ memcpy(bottomf, linef, 4 * x * sizeof(float));
+ bottomf -= 4 * x;
+ topf += 4 * x;
}
MEM_freeN(linef);
}
}
-void IMB_flipx(struct ImBuf * ibuf)
+void IMB_flipx(struct ImBuf *ibuf)
{
int x, y, xr, xl, yi;
float px_f[4];
@@ -108,19 +108,19 @@ void IMB_flipx(struct ImBuf * ibuf)
y = ibuf->y;
if (ibuf->rect) {
- for (yi=y-1;yi>=0;yi--) {
- for (xr=x-1, xl=0; xr>=xl; xr--, xl++) {
- SWAP(unsigned int, ibuf->rect[(x*yi)+xr], ibuf->rect[(x*yi)+xl]);
+ for (yi = y - 1; yi >= 0; yi--) {
+ for (xr = x - 1, xl = 0; xr >= xl; xr--, xl++) {
+ SWAP(unsigned int, ibuf->rect[(x * yi) + xr], ibuf->rect[(x * yi) + xl]);
}
}
}
if (ibuf->rect_float) {
- for (yi=y-1;yi>=0;yi--) {
- for (xr=x-1, xl=0; xr>=xl; xr--, xl++) {
- memcpy(&px_f, &ibuf->rect_float[((x*yi)+xr)*4], 4*sizeof(float));
- memcpy(&ibuf->rect_float[((x*yi)+xr)*4], &ibuf->rect_float[((x*yi)+xl)*4], 4*sizeof(float));
- memcpy(&ibuf->rect_float[((x*yi)+xl)*4], &px_f, 4*sizeof(float));
+ for (yi = y - 1; yi >= 0; yi--) {
+ for (xr = x - 1, xl = 0; xr >= xl; xr--, xl++) {
+ memcpy(&px_f, &ibuf->rect_float[((x * yi) + xr) * 4], 4 * sizeof(float));
+ memcpy(&ibuf->rect_float[((x * yi) + xr) * 4], &ibuf->rect_float[((x * yi) + xl) * 4], 4 * sizeof(float));
+ memcpy(&ibuf->rect_float[((x * yi) + xl) * 4], &px_f, 4 * sizeof(float));
}
}
}
diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c
index 3ccb6739beb..ef057784a28 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -59,27 +59,27 @@ struct ImBuf *IMB_half_x(struct ImBuf *ibuf1)
float af, rf, gf, bf, *p1f, *_p1f, *destf;
int do_rect, do_float;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (NULL);
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL && ibuf1->rect_float == NULL) return (NULL);
- do_rect= (ibuf1->rect != NULL);
- do_float= (ibuf1->rect_float != NULL);
+ do_rect = (ibuf1->rect != NULL);
+ do_float = (ibuf1->rect_float != NULL);
if (ibuf1->x <= 1) return(IMB_dupImBuf(ibuf1));
- ibuf2 = IMB_allocImBuf((ibuf1->x)/2, ibuf1->y, ibuf1->planes, ibuf1->flags);
- if (ibuf2==NULL) return (NULL);
+ ibuf2 = IMB_allocImBuf((ibuf1->x) / 2, ibuf1->y, ibuf1->planes, ibuf1->flags);
+ if (ibuf2 == NULL) return (NULL);
_p1 = (uchar *) ibuf1->rect;
- dest=(uchar *) ibuf2->rect;
+ dest = (uchar *) ibuf2->rect;
_p1f = ibuf1->rect_float;
- destf= ibuf2->rect_float;
+ destf = ibuf2->rect_float;
- for (y=ibuf2->y;y>0;y--) {
+ for (y = ibuf2->y; y > 0; y--) {
p1 = _p1;
p1f = _p1f;
- for (x = ibuf2->x; x>0; x--) {
+ for (x = ibuf2->x; x > 0; x--) {
if (do_rect) {
a = *(p1++);
b = *(p1++);
@@ -103,10 +103,10 @@ struct ImBuf *IMB_half_x(struct ImBuf *ibuf1)
bf += *(p1f++);
gf += *(p1f++);
rf += *(p1f++);
- *(destf++) = 0.5f*af;
- *(destf++) = 0.5f*bf;
- *(destf++) = 0.5f*gf;
- *(destf++) = 0.5f*rf;
+ *(destf++) = 0.5f * af;
+ *(destf++) = 0.5f * bf;
+ *(destf++) = 0.5f * gf;
+ *(destf++) = 0.5f * rf;
}
}
if (do_rect) _p1 += (ibuf1->x << 2);
@@ -122,17 +122,17 @@ struct ImBuf *IMB_double_fast_x(struct ImBuf *ibuf1)
int *p1, *dest, i, col, do_rect, do_float;
float *p1f, *destf;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (NULL);
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL && ibuf1->rect_float == NULL) return (NULL);
- do_rect= (ibuf1->rect != NULL);
- do_float= (ibuf1->rect_float != NULL);
+ do_rect = (ibuf1->rect != NULL);
+ do_float = (ibuf1->rect_float != NULL);
ibuf2 = IMB_allocImBuf(2 * ibuf1->x, ibuf1->y, ibuf1->planes, ibuf1->flags);
- if (ibuf2==NULL) return (NULL);
+ if (ibuf2 == NULL) return (NULL);
p1 = (int *) ibuf1->rect;
- dest=(int *) ibuf2->rect;
+ dest = (int *) ibuf2->rect;
p1f = (float *)ibuf1->rect_float;
destf = (float *)ibuf2->rect_float;
@@ -143,12 +143,12 @@ struct ImBuf *IMB_double_fast_x(struct ImBuf *ibuf1)
*dest++ = col;
}
if (do_float) {
- destf[0]= destf[4] = p1f[0];
- destf[1]= destf[5] = p1f[1];
- destf[2]= destf[6] = p1f[2];
- destf[3]= destf[7] = p1f[3];
- destf+= 8;
- p1f+= 4;
+ destf[0] = destf[4] = p1f[0];
+ destf[1] = destf[5] = p1f[1];
+ destf[2] = destf[6] = p1f[2];
+ destf[3] = destf[7] = p1f[3];
+ destf += 8;
+ p1f += 4;
}
}
@@ -159,8 +159,8 @@ struct ImBuf *IMB_double_x(struct ImBuf *ibuf1)
{
struct ImBuf *ibuf2;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (NULL);
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL && ibuf1->rect_float == NULL) return (NULL);
ibuf2 = IMB_double_fast_x(ibuf1);
@@ -178,24 +178,24 @@ struct ImBuf *IMB_half_y(struct ImBuf *ibuf1)
int do_rect, do_float;
float af, rf, gf, bf, *p1f, *p2f, *_p1f, *destf;
- p1= p2= NULL;
- p1f= p2f= NULL;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (NULL);
+ p1 = p2 = NULL;
+ p1f = p2f = NULL;
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL && ibuf1->rect_float == NULL) return (NULL);
if (ibuf1->y <= 1) return(IMB_dupImBuf(ibuf1));
- do_rect= (ibuf1->rect != NULL);
- do_float= (ibuf1->rect_float != NULL);
+ do_rect = (ibuf1->rect != NULL);
+ do_float = (ibuf1->rect_float != NULL);
ibuf2 = IMB_allocImBuf(ibuf1->x, (ibuf1->y) / 2, ibuf1->planes, ibuf1->flags);
- if (ibuf2==NULL) return (NULL);
+ if (ibuf2 == NULL) return (NULL);
_p1 = (uchar *) ibuf1->rect;
- dest=(uchar *) ibuf2->rect;
+ dest = (uchar *) ibuf2->rect;
_p1f = (float *) ibuf1->rect_float;
- destf= (float *) ibuf2->rect_float;
+ destf = (float *) ibuf2->rect_float;
- for (y=ibuf2->y; y>0; y--) {
+ for (y = ibuf2->y; y > 0; y--) {
if (do_rect) {
p1 = _p1;
p2 = _p1 + (ibuf1->x << 2);
@@ -228,10 +228,10 @@ struct ImBuf *IMB_half_y(struct ImBuf *ibuf1)
bf += *(p2f++);
gf += *(p2f++);
rf += *(p2f++);
- *(destf++) = 0.5f*af;
- *(destf++) = 0.5f*bf;
- *(destf++) = 0.5f*gf;
- *(destf++) = 0.5f*rf;
+ *(destf++) = 0.5f * af;
+ *(destf++) = 0.5f * bf;
+ *(destf++) = 0.5f * gf;
+ *(destf++) = 0.5f * rf;
}
}
if (do_rect) _p1 += (ibuf1->x << 3);
@@ -249,19 +249,19 @@ struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1)
int x, y;
int do_rect, do_float;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (NULL);
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL && ibuf1->rect_float == NULL) return (NULL);
- do_rect= (ibuf1->rect != NULL);
- do_float= (ibuf1->rect_float != NULL);
+ do_rect = (ibuf1->rect != NULL);
+ do_float = (ibuf1->rect_float != NULL);
ibuf2 = IMB_allocImBuf(ibuf1->x, 2 * ibuf1->y, ibuf1->planes, ibuf1->flags);
- if (ibuf2==NULL) return (NULL);
+ if (ibuf2 == NULL) return (NULL);
p1 = (int *) ibuf1->rect;
- dest1= (int *) ibuf2->rect;
+ dest1 = (int *) ibuf2->rect;
p1f = (float *) ibuf1->rect_float;
- dest1f= (float *) ibuf2->rect_float;
+ dest1f = (float *) ibuf2->rect_float;
for (y = ibuf1->y; y > 0; y--) {
if (do_rect) {
@@ -270,7 +270,7 @@ struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1)
dest1 = dest2;
}
if (do_float) {
- dest2f = dest1f + (4*ibuf2->x);
+ dest2f = dest1f + (4 * ibuf2->x);
for (x = ibuf2->x * 4; x > 0; x--) *dest1f++ = *dest2f++ = *p1f++;
dest1f = dest2f;
}
@@ -283,8 +283,8 @@ struct ImBuf *IMB_double_y(struct ImBuf *ibuf1)
{
struct ImBuf *ibuf2;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL) return (NULL);
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL) return (NULL);
ibuf2 = IMB_double_fast_y(ibuf1);
@@ -298,22 +298,22 @@ void imb_onehalf_no_alloc(struct ImBuf *ibuf2, struct ImBuf *ibuf1)
uchar *p1, *p2 = NULL, *dest;
float *p1f, *destf, *p2f = NULL;
int x, y;
- const short do_rect= (ibuf1->rect != NULL);
- const short do_float= (ibuf1->rect_float != NULL) && (ibuf2->rect_float != NULL);
+ const short do_rect = (ibuf1->rect != NULL);
+ const short do_float = (ibuf1->rect_float != NULL) && (ibuf2->rect_float != NULL);
if (do_rect && (ibuf2->rect == NULL)) {
imb_addrectImBuf(ibuf2);
}
p1f = ibuf1->rect_float;
- destf=ibuf2->rect_float;
+ destf = ibuf2->rect_float;
p1 = (uchar *) ibuf1->rect;
- dest=(uchar *) ibuf2->rect;
+ dest = (uchar *) ibuf2->rect;
- for (y=ibuf2->y;y>0;y--) {
+ for (y = ibuf2->y; y > 0; y--) {
if (do_rect) p2 = p1 + (ibuf1->x << 2);
if (do_float) p2f = p1f + (ibuf1->x << 2);
- for (x=ibuf2->x;x>0;x--) {
+ for (x = ibuf2->x; x > 0; x--) {
if (do_rect) {
dest[0] = (p1[0] + p2[0] + p1[4] + p2[4]) >> 2;
dest[1] = (p1[1] + p2[1] + p1[5] + p2[5]) >> 2;
@@ -324,37 +324,37 @@ void imb_onehalf_no_alloc(struct ImBuf *ibuf2, struct ImBuf *ibuf1)
dest += 4;
}
if (do_float) {
- destf[0] = 0.25f*(p1f[0] + p2f[0] + p1f[4] + p2f[4]);
- destf[1] = 0.25f*(p1f[1] + p2f[1] + p1f[5] + p2f[5]);
- destf[2] = 0.25f*(p1f[2] + p2f[2] + p1f[6] + p2f[6]);
- destf[3] = 0.25f*(p1f[3] + p2f[3] + p1f[7] + p2f[7]);
+ destf[0] = 0.25f * (p1f[0] + p2f[0] + p1f[4] + p2f[4]);
+ destf[1] = 0.25f * (p1f[1] + p2f[1] + p1f[5] + p2f[5]);
+ destf[2] = 0.25f * (p1f[2] + p2f[2] + p1f[6] + p2f[6]);
+ destf[3] = 0.25f * (p1f[3] + p2f[3] + p1f[7] + p2f[7]);
p1f += 8;
p2f += 8;
destf += 4;
}
}
- if (do_rect) p1=p2;
- if (do_float) p1f=p2f;
+ if (do_rect) p1 = p2;
+ if (do_float) p1f = p2f;
if (ibuf1->x & 1) {
- if (do_rect) p1+=4;
- if (do_float) p1f+=4;
+ if (do_rect) p1 += 4;
+ if (do_float) p1f += 4;
}
}
}
-struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1)
+ImBuf *IMB_onehalf(struct ImBuf *ibuf1)
{
struct ImBuf *ibuf2;
- if (ibuf1==NULL) return (NULL);
- if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (NULL);
+ if (ibuf1 == NULL) return (NULL);
+ if (ibuf1->rect == NULL && ibuf1->rect_float == NULL) return (NULL);
if (ibuf1->x <= 1) return(IMB_half_y(ibuf1));
if (ibuf1->y <= 1) return(IMB_half_x(ibuf1));
- ibuf2=IMB_allocImBuf((ibuf1->x)/2, (ibuf1->y)/2, ibuf1->planes, ibuf1->flags);
- if (ibuf2==NULL) return (NULL);
+ ibuf2 = IMB_allocImBuf((ibuf1->x) / 2, (ibuf1->y) / 2, ibuf1->planes, ibuf1->flags);
+ if (ibuf2 == NULL) return (NULL);
imb_onehalf_no_alloc(ibuf2, ibuf1);
@@ -364,8 +364,8 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1)
/* q_scale_linear_interpolation helper functions */
static void enlarge_picture_byte(
- unsigned char* src, unsigned char* dst, int src_width,
- int src_height, int dst_width, int dst_height)
+ unsigned char *src, unsigned char *dst, int src_width,
+ int src_height, int dst_width, int dst_height)
{
double ratiox = (double) (dst_width - 1.0) / (double) (src_width - 1.001);
double ratioy = (double) (dst_height - 1.0) / (double) (src_height - 1.001);
@@ -377,8 +377,8 @@ static void enlarge_picture_byte(
y_src = 0;
for (y_dst = 0; y_dst < dst_height; y_dst++) {
- unsigned char* line1 = src + (y_src >> 16) * 4 * src_width;
- unsigned char* line2 = line1 + 4 * src_width;
+ unsigned char *line1 = src + (y_src >> 16) * 4 * src_width;
+ unsigned char *line2 = line1 + 4 * src_width;
uintptr_t weight1y = 65536 - (y_src & 0xffff);
uintptr_t weight2y = 65536 - weight1y;
@@ -429,25 +429,25 @@ struct scale_outpix_byte {
};
static void shrink_picture_byte(
- unsigned char* src, unsigned char* dst, int src_width,
- int src_height, int dst_width, int dst_height)
+ unsigned char *src, unsigned char *dst, int src_width,
+ int src_height, int dst_width, int dst_height)
{
double ratiox = (double) (dst_width) / (double) (src_width);
double ratioy = (double) (dst_height) / (double) (src_height);
uintptr_t x_src, dx_dst, x_dst;
uintptr_t y_src, dy_dst, y_dst;
intptr_t y_counter;
- unsigned char * dst_begin = dst;
+ unsigned char *dst_begin = dst;
- struct scale_outpix_byte * dst_line1 = NULL;
- struct scale_outpix_byte * dst_line2 = NULL;
+ struct scale_outpix_byte *dst_line1 = NULL;
+ struct scale_outpix_byte *dst_line2 = NULL;
- dst_line1 = (struct scale_outpix_byte*) MEM_callocN(
- (dst_width + 1) * sizeof(struct scale_outpix_byte),
- "shrink_picture_byte 1");
- dst_line2 = (struct scale_outpix_byte*) MEM_callocN(
- (dst_width + 1) * sizeof(struct scale_outpix_byte),
- "shrink_picture_byte 2");
+ dst_line1 = (struct scale_outpix_byte *) MEM_callocN(
+ (dst_width + 1) * sizeof(struct scale_outpix_byte),
+ "shrink_picture_byte 1");
+ dst_line2 = (struct scale_outpix_byte *) MEM_callocN(
+ (dst_width + 1) * sizeof(struct scale_outpix_byte),
+ "shrink_picture_byte 2");
dx_dst = 65536.0 * ratiox;
dy_dst = 65536.0 * ratioy;
@@ -455,7 +455,7 @@ static void shrink_picture_byte(
y_dst = 0;
y_counter = 65536;
for (y_src = 0; y_src < src_height; y_src++) {
- unsigned char* line = src + y_src * 4 * src_width;
+ unsigned char *line = src + y_src * 4 * src_width;
uintptr_t weight1y = 65535 - (y_dst & 0xffff);
uintptr_t weight2y = 65535 - weight1y;
x_dst = 0;
@@ -486,19 +486,19 @@ static void shrink_picture_byte(
w = (weight1y * weight2x) >> 16;
- dst_line1[x+1].r += (line[0] * w + 32767) >> 16;
- dst_line1[x+1].g += (line[1] * w + 32767) >> 16;
- dst_line1[x+1].b += (line[2] * w + 32767) >> 16;
- dst_line1[x+1].a += (line[3] * w + 32767) >> 16;
- dst_line1[x+1].weight += w;
+ dst_line1[x + 1].r += (line[0] * w + 32767) >> 16;
+ dst_line1[x + 1].g += (line[1] * w + 32767) >> 16;
+ dst_line1[x + 1].b += (line[2] * w + 32767) >> 16;
+ dst_line1[x + 1].a += (line[3] * w + 32767) >> 16;
+ dst_line1[x + 1].weight += w;
w = (weight2y * weight2x) >> 16;
- dst_line2[x+1].r += (line[0] * w + 32767) >> 16;
- dst_line2[x+1].g += (line[1] * w + 32767) >> 16;
- dst_line2[x+1].b += (line[2] * w + 32767) >> 16;
- dst_line2[x+1].a += (line[3] * w + 32767) >> 16;
- dst_line2[x+1].weight += w;
+ dst_line2[x + 1].r += (line[0] * w + 32767) >> 16;
+ dst_line2[x + 1].g += (line[1] * w + 32767) >> 16;
+ dst_line2[x + 1].b += (line[2] * w + 32767) >> 16;
+ dst_line2[x + 1].a += (line[3] * w + 32767) >> 16;
+ dst_line2[x + 1].weight += w;
x_dst += dx_dst;
line += 4;
@@ -509,16 +509,16 @@ static void shrink_picture_byte(
if (y_counter < 0) {
int val;
uintptr_t x;
- struct scale_outpix_byte * temp;
+ struct scale_outpix_byte *temp;
y_counter += 65536;
- for (x=0; x < dst_width; x++) {
+ for (x = 0; x < dst_width; x++) {
uintptr_t f = 0x80000000UL / dst_line1[x].weight;
- *dst++ = (val= (dst_line1[x].r * f) >> 15) > 255 ? 255: val;
- *dst++ = (val= (dst_line1[x].g * f) >> 15) > 255 ? 255: val;
- *dst++ = (val= (dst_line1[x].b * f) >> 15) > 255 ? 255: val;
- *dst++ = (val= (dst_line1[x].a * f) >> 15) > 255 ? 255: val;
+ *dst++ = (val = (dst_line1[x].r * f) >> 15) > 255 ? 255 : val;
+ *dst++ = (val = (dst_line1[x].g * f) >> 15) > 255 ? 255 : val;
+ *dst++ = (val = (dst_line1[x].b * f) >> 15) > 255 ? 255 : val;
+ *dst++ = (val = (dst_line1[x].a * f) >> 15) > 255 ? 255 : val;
}
memset(dst_line1, 0, dst_width *
sizeof(struct scale_outpix_byte));
@@ -532,10 +532,10 @@ static void shrink_picture_byte(
uintptr_t x;
for (x = 0; x < dst_width; x++) {
uintptr_t f = 0x80000000UL / dst_line1[x].weight;
- *dst++ = (val= (dst_line1[x].r * f) >> 15) > 255 ? 255: val;
- *dst++ = (val= (dst_line1[x].g * f) >> 15) > 255 ? 255: val;
- *dst++ = (val= (dst_line1[x].b * f) >> 15) > 255 ? 255: val;
- *dst++ = (val= (dst_line1[x].a * f) >> 15) > 255 ? 255: val;
+ *dst++ = (val = (dst_line1[x].r * f) >> 15) > 255 ? 255 : val;
+ *dst++ = (val = (dst_line1[x].g * f) >> 15) > 255 ? 255 : val;
+ *dst++ = (val = (dst_line1[x].b * f) >> 15) > 255 ? 255 : val;
+ *dst++ = (val = (dst_line1[x].a * f) >> 15) > 255 ? 255 : val;
}
}
MEM_freeN(dst_line1);
@@ -543,22 +543,22 @@ static void shrink_picture_byte(
}
-static void q_scale_byte(unsigned char* in, unsigned char* out, int in_width,
- int in_height, int dst_width, int dst_height)
+static void q_scale_byte(unsigned char *in, unsigned char *out, int in_width,
+ int in_height, int dst_width, int dst_height)
{
if (dst_width > in_width && dst_height > in_height) {
enlarge_picture_byte(in, out, in_width, in_height,
- dst_width, dst_height);
+ dst_width, dst_height);
}
else if (dst_width < in_width && dst_height < in_height) {
shrink_picture_byte(in, out, in_width, in_height,
- dst_width, dst_height);
+ dst_width, dst_height);
}
}
static void enlarge_picture_float(
- float* src, float* dst, int src_width,
- int src_height, int dst_width, int dst_height)
+ float *src, float *dst, int src_width,
+ int src_height, int dst_width, int dst_height)
{
double ratiox = (double) (dst_width - 1.0) / (double) (src_width - 1.001);
double ratioy = (double) (dst_height - 1.0) / (double) (src_height - 1.001);
@@ -572,8 +572,8 @@ static void enlarge_picture_float(
y_src = 0;
for (y_dst = 0; y_dst < dst_height; y_dst++) {
- float* line1 = src + ((int) y_src) * 4 * src_width;
- float* line2 = line1 + 4 * src_width;
+ float *line1 = src + ((int) y_src) * 4 * src_width;
+ float *line2 = line1 + 4 * src_width;
const float weight1y = (float)(1.0 - (y_src - (int) y_src));
const float weight2y = 1.0f - weight1y;
@@ -593,7 +593,7 @@ static void enlarge_picture_float(
uintptr_t x = ((int) x_src) * 4;
- *dst++ = line1[x] * w11 +
+ *dst++ = line1[x] * w11 +
line2[x] * w21 +
line1[4 + x] * w12 +
line2[4 + x] * w22;
@@ -629,27 +629,27 @@ struct scale_outpix_float {
};
static void shrink_picture_float(
- float* src, float* dst, int src_width,
- int src_height, int dst_width, int dst_height)
+ float *src, float *dst, int src_width,
+ int src_height, int dst_width, int dst_height)
{
double ratiox = (double) (dst_width) / (double) (src_width);
double ratioy = (double) (dst_height) / (double) (src_height);
uintptr_t x_src;
uintptr_t y_src;
- float dx_dst, x_dst;
+ float dx_dst, x_dst;
float dy_dst, y_dst;
float y_counter;
- float * dst_begin = dst;
+ float *dst_begin = dst;
- struct scale_outpix_float * dst_line1;
- struct scale_outpix_float * dst_line2;
+ struct scale_outpix_float *dst_line1;
+ struct scale_outpix_float *dst_line2;
- dst_line1 = (struct scale_outpix_float*) MEM_callocN(
- (dst_width + 1) * sizeof(struct scale_outpix_float),
- "shrink_picture_float 1");
- dst_line2 = (struct scale_outpix_float*) MEM_callocN(
- (dst_width + 1) * sizeof(struct scale_outpix_float),
- "shrink_picture_float 2");
+ dst_line1 = (struct scale_outpix_float *) MEM_callocN(
+ (dst_width + 1) * sizeof(struct scale_outpix_float),
+ "shrink_picture_float 1");
+ dst_line2 = (struct scale_outpix_float *) MEM_callocN(
+ (dst_width + 1) * sizeof(struct scale_outpix_float),
+ "shrink_picture_float 2");
dx_dst = ratiox;
dy_dst = ratioy;
@@ -657,7 +657,7 @@ static void shrink_picture_float(
y_dst = 0;
y_counter = 1.0;
for (y_src = 0; y_src < src_height; y_src++) {
- float* line = src + y_src * 4 * src_width;
+ float *line = src + y_src * 4 * src_width;
uintptr_t weight1y = 1.0f - (y_dst - (int) y_dst);
uintptr_t weight2y = 1.0f - weight1y;
x_dst = 0;
@@ -687,19 +687,19 @@ static void shrink_picture_float(
w = weight1y * weight2x;
- dst_line1[x+1].r += line[0] * w;
- dst_line1[x+1].g += line[1] * w;
- dst_line1[x+1].b += line[2] * w;
- dst_line1[x+1].a += line[3] * w;
- dst_line1[x+1].weight += w;
+ dst_line1[x + 1].r += line[0] * w;
+ dst_line1[x + 1].g += line[1] * w;
+ dst_line1[x + 1].b += line[2] * w;
+ dst_line1[x + 1].a += line[3] * w;
+ dst_line1[x + 1].weight += w;
w = weight2y * weight2x;
- dst_line2[x+1].r += line[0] * w;
- dst_line2[x+1].g += line[1] * w;
- dst_line2[x+1].b += line[2] * w;
- dst_line2[x+1].a += line[3] * w;
- dst_line2[x+1].weight += w;
+ dst_line2[x + 1].r += line[0] * w;
+ dst_line2[x + 1].g += line[1] * w;
+ dst_line2[x + 1].b += line[2] * w;
+ dst_line2[x + 1].a += line[3] * w;
+ dst_line2[x + 1].weight += w;
x_dst += dx_dst;
line += 4;
@@ -709,11 +709,11 @@ static void shrink_picture_float(
y_counter -= dy_dst;
if (y_counter < 0) {
uintptr_t x;
- struct scale_outpix_float * temp;
+ struct scale_outpix_float *temp;
y_counter += 1.0f;
- for (x=0; x < dst_width; x++) {
+ for (x = 0; x < dst_width; x++) {
float f = 1.0f / dst_line1[x].weight;
*dst++ = dst_line1[x].r * f;
*dst++ = dst_line1[x].g * f;
@@ -742,16 +742,16 @@ static void shrink_picture_float(
}
-static void q_scale_float(float* in, float* out, int in_width,
- int in_height, int dst_width, int dst_height)
+static void q_scale_float(float *in, float *out, int in_width,
+ int in_height, int dst_width, int dst_height)
{
if (dst_width > in_width && dst_height > in_height) {
enlarge_picture_float(in, out, in_width, in_height,
- dst_width, dst_height);
+ dst_width, dst_height);
}
else if (dst_width < in_width && dst_height < in_height) {
shrink_picture_float(in, out, in_width, in_height,
- dst_width, dst_height);
+ dst_width, dst_height);
}
}
@@ -777,16 +777,17 @@ static void q_scale_float(float* in, float* out, int in_width,
* NOTE: disabled, due to inacceptable inaccuracy and quality loss, see bug #18609 (ton)
*/
static int q_scale_linear_interpolation(
- struct ImBuf *ibuf, int newx, int newy)
+ struct ImBuf *ibuf, int newx, int newy)
{
if ((newx >= ibuf->x && newy <= ibuf->y) ||
- (newx <= ibuf->x && newy >= ibuf->y)) {
+ (newx <= ibuf->x && newy >= ibuf->y))
+ {
return FALSE;
}
if (ibuf->rect) {
- unsigned char * newrect =
- MEM_mallocN(newx * newy * sizeof(int), "q_scale rect");
+ unsigned char *newrect =
+ MEM_mallocN(newx * newy * sizeof(int), "q_scale rect");
q_scale_byte((unsigned char *)ibuf->rect, newrect, ibuf->x, ibuf->y,
newx, newy);
@@ -795,9 +796,9 @@ static int q_scale_linear_interpolation(
ibuf->rect = (unsigned int *) newrect;
}
if (ibuf->rect_float) {
- float * newrect =
- MEM_mallocN(newx * newy * 4 *sizeof(float),
- "q_scale rectfloat");
+ float *newrect =
+ MEM_mallocN(newx * newy * 4 * sizeof(float),
+ "q_scale rectfloat");
q_scale_float(ibuf->rect_float, newrect, ibuf->x, ibuf->y,
newx, newy);
imb_freerectfloatImBuf(ibuf);
@@ -810,31 +811,31 @@ static int q_scale_linear_interpolation(
return TRUE;
}
-static struct ImBuf *scaledownx(struct ImBuf *ibuf, int newx)
+static ImBuf *scaledownx(struct ImBuf *ibuf, int newx)
{
- const int do_rect= (ibuf->rect != NULL);
- const int do_float= (ibuf->rect_float != NULL);
- const size_t rect_size= ibuf->x * ibuf->y * 4;
+ const int do_rect = (ibuf->rect != NULL);
+ const int do_float = (ibuf->rect_float != NULL);
+ const size_t rect_size = ibuf->x * ibuf->y * 4;
uchar *rect, *_newrect, *newrect;
float *rectf, *_newrectf, *newrectf;
float sample, add, val[4], nval[4], valf[4], nvalf[4];
int x, y;
- rectf= _newrectf= newrectf= NULL;
- rect=_newrect= newrect= NULL;
- nval[0]= nval[1]= nval[2]= nval[3]= 0.0f;
- nvalf[0]=nvalf[1]=nvalf[2]=nvalf[3]= 0.0f;
+ rectf = _newrectf = newrectf = NULL;
+ rect = _newrect = newrect = NULL;
+ nval[0] = nval[1] = nval[2] = nval[3] = 0.0f;
+ nvalf[0] = nvalf[1] = nvalf[2] = nvalf[3] = 0.0f;
if (!do_rect && !do_float) return (ibuf);
if (do_rect) {
_newrect = MEM_mallocN(newx * ibuf->y * sizeof(uchar) * 4, "scaledownx");
- if (_newrect==NULL) return(ibuf);
+ if (_newrect == NULL) return(ibuf);
}
if (do_float) {
_newrectf = MEM_mallocN(newx * ibuf->y * sizeof(float) * 4, "scaledownxf");
- if (_newrectf==NULL) {
+ if (_newrectf == NULL) {
if (_newrect) MEM_freeN(_newrect);
return(ibuf);
}
@@ -853,21 +854,21 @@ static struct ImBuf *scaledownx(struct ImBuf *ibuf, int newx)
for (y = ibuf->y; y > 0; y--) {
sample = 0.0f;
- val[0]= val[1]= val[2]= val[3]= 0.0f;
- valf[0]=valf[1]=valf[2]=valf[3]= 0.0f;
+ val[0] = val[1] = val[2] = val[3] = 0.0f;
+ valf[0] = valf[1] = valf[2] = valf[3] = 0.0f;
for (x = newx; x > 0; x--) {
if (do_rect) {
- nval[0] = - val[0] * sample;
- nval[1] = - val[1] * sample;
- nval[2] = - val[2] * sample;
- nval[3] = - val[3] * sample;
+ nval[0] = -val[0] * sample;
+ nval[1] = -val[1] * sample;
+ nval[2] = -val[2] * sample;
+ nval[3] = -val[3] * sample;
}
if (do_float) {
- nvalf[0] = - valf[0] * sample;
- nvalf[1] = - valf[1] * sample;
- nvalf[2] = - valf[2] * sample;
- nvalf[3] = - valf[3] * sample;
+ nvalf[0] = -valf[0] * sample;
+ nvalf[1] = -valf[1] * sample;
+ nvalf[2] = -valf[2] * sample;
+ nvalf[3] = -valf[3] * sample;
}
sample += add;
@@ -892,25 +893,25 @@ static struct ImBuf *scaledownx(struct ImBuf *ibuf, int newx)
}
if (do_rect) {
- val[0]= rect[0];val[1]= rect[1];val[2]= rect[2];val[3]= rect[3];
+ val[0] = rect[0]; val[1] = rect[1]; val[2] = rect[2]; val[3] = rect[3];
rect += 4;
- newrect[0] = ((nval[0] + sample * val[0])/add + 0.5f);
- newrect[1] = ((nval[1] + sample * val[1])/add + 0.5f);
- newrect[2] = ((nval[2] + sample * val[2])/add + 0.5f);
- newrect[3] = ((nval[3] + sample * val[3])/add + 0.5f);
+ newrect[0] = ((nval[0] + sample * val[0]) / add + 0.5f);
+ newrect[1] = ((nval[1] + sample * val[1]) / add + 0.5f);
+ newrect[2] = ((nval[2] + sample * val[2]) / add + 0.5f);
+ newrect[3] = ((nval[3] + sample * val[3]) / add + 0.5f);
newrect += 4;
}
if (do_float) {
- valf[0]= rectf[0];valf[1]= rectf[1];valf[2]= rectf[2];valf[3]= rectf[3];
+ valf[0] = rectf[0]; valf[1] = rectf[1]; valf[2] = rectf[2]; valf[3] = rectf[3];
rectf += 4;
- newrectf[0] = ((nvalf[0] + sample * valf[0])/add);
- newrectf[1] = ((nvalf[1] + sample * valf[1])/add);
- newrectf[2] = ((nvalf[2] + sample * valf[2])/add);
- newrectf[3] = ((nvalf[3] + sample * valf[3])/add);
+ newrectf[0] = ((nvalf[0] + sample * valf[0]) / add);
+ newrectf[1] = ((nvalf[1] + sample * valf[1]) / add);
+ newrectf[2] = ((nvalf[2] + sample * valf[2]) / add);
+ newrectf[3] = ((nvalf[3] + sample * valf[3]) / add);
newrectf += 4;
}
@@ -940,31 +941,31 @@ static struct ImBuf *scaledownx(struct ImBuf *ibuf, int newx)
}
-static struct ImBuf *scaledowny(struct ImBuf *ibuf, int newy)
+static ImBuf *scaledowny(struct ImBuf *ibuf, int newy)
{
- const int do_rect= (ibuf->rect != NULL);
- const int do_float= (ibuf->rect_float != NULL);
- const size_t rect_size= ibuf->x * ibuf->y * 4;
+ const int do_rect = (ibuf->rect != NULL);
+ const int do_float = (ibuf->rect_float != NULL);
+ const size_t rect_size = ibuf->x * ibuf->y * 4;
uchar *rect, *_newrect, *newrect;
float *rectf, *_newrectf, *newrectf;
float sample, add, val[4], nval[4], valf[4], nvalf[4];
int x, y, skipx;
- rectf= _newrectf= newrectf= NULL;
- rect= _newrect= newrect= NULL;
- nval[0]= nval[1]= nval[2]= nval[3]= 0.0f;
- nvalf[0]=nvalf[1]=nvalf[2]=nvalf[3]= 0.0f;
+ rectf = _newrectf = newrectf = NULL;
+ rect = _newrect = newrect = NULL;
+ nval[0] = nval[1] = nval[2] = nval[3] = 0.0f;
+ nvalf[0] = nvalf[1] = nvalf[2] = nvalf[3] = 0.0f;
if (!do_rect && !do_float) return (ibuf);
if (do_rect) {
_newrect = MEM_mallocN(newy * ibuf->x * sizeof(uchar) * 4, "scaledowny");
- if (_newrect==NULL) return(ibuf);
+ if (_newrect == NULL) return(ibuf);
}
if (do_float) {
_newrectf = MEM_mallocN(newy * ibuf->x * sizeof(float) * 4, "scaledownyf");
- if (_newrectf==NULL) {
+ if (_newrectf == NULL) {
if (_newrect) MEM_freeN(_newrect);
return(ibuf);
}
@@ -984,21 +985,21 @@ static struct ImBuf *scaledowny(struct ImBuf *ibuf, int newy)
}
sample = 0.0f;
- val[0]= val[1]= val[2]= val[3]= 0.0f;
- valf[0]=valf[1]=valf[2]=valf[3]= 0.0f;
+ val[0] = val[1] = val[2] = val[3] = 0.0f;
+ valf[0] = valf[1] = valf[2] = valf[3] = 0.0f;
for (y = newy; y > 0; y--) {
if (do_rect) {
- nval[0] = - val[0] * sample;
- nval[1] = - val[1] * sample;
- nval[2] = - val[2] * sample;
- nval[3] = - val[3] * sample;
+ nval[0] = -val[0] * sample;
+ nval[1] = -val[1] * sample;
+ nval[2] = -val[2] * sample;
+ nval[3] = -val[3] * sample;
}
if (do_float) {
- nvalf[0] = - valf[0] * sample;
- nvalf[1] = - valf[1] * sample;
- nvalf[2] = - valf[2] * sample;
- nvalf[3] = - valf[3] * sample;
+ nvalf[0] = -valf[0] * sample;
+ nvalf[1] = -valf[1] * sample;
+ nvalf[2] = -valf[2] * sample;
+ nvalf[3] = -valf[3] * sample;
}
sample += add;
@@ -1023,25 +1024,25 @@ static struct ImBuf *scaledowny(struct ImBuf *ibuf, int newy)
}
if (do_rect) {
- val[0]= rect[0];val[1]= rect[1];val[2]= rect[2];val[3]= rect[3];
+ val[0] = rect[0]; val[1] = rect[1]; val[2] = rect[2]; val[3] = rect[3];
rect += skipx;
- newrect[0] = ((nval[0] + sample * val[0])/add + 0.5f);
- newrect[1] = ((nval[1] + sample * val[1])/add + 0.5f);
- newrect[2] = ((nval[2] + sample * val[2])/add + 0.5f);
- newrect[3] = ((nval[3] + sample * val[3])/add + 0.5f);
+ newrect[0] = ((nval[0] + sample * val[0]) / add + 0.5f);
+ newrect[1] = ((nval[1] + sample * val[1]) / add + 0.5f);
+ newrect[2] = ((nval[2] + sample * val[2]) / add + 0.5f);
+ newrect[3] = ((nval[3] + sample * val[3]) / add + 0.5f);
newrect += skipx;
}
if (do_float) {
- valf[0]= rectf[0];valf[1]= rectf[1];valf[2]= rectf[2];valf[3]= rectf[3];
+ valf[0] = rectf[0]; valf[1] = rectf[1]; valf[2] = rectf[2]; valf[3] = rectf[3];
rectf += skipx;
- newrectf[0] = ((nvalf[0] + sample * valf[0])/add);
- newrectf[1] = ((nvalf[1] + sample * valf[1])/add);
- newrectf[2] = ((nvalf[2] + sample * valf[2])/add);
- newrectf[3] = ((nvalf[3] + sample * valf[3])/add);
+ newrectf[0] = ((nvalf[0] + sample * valf[0]) / add);
+ newrectf[1] = ((nvalf[1] + sample * valf[1]) / add);
+ newrectf[2] = ((nvalf[2] + sample * valf[2]) / add);
+ newrectf[3] = ((nvalf[3] + sample * valf[3]) / add);
newrectf += skipx;
}
@@ -1071,10 +1072,10 @@ static struct ImBuf *scaledowny(struct ImBuf *ibuf, int newy)
}
-static struct ImBuf *scaleupx(struct ImBuf *ibuf, int newx)
+static ImBuf *scaleupx(struct ImBuf *ibuf, int newx)
{
- uchar *rect, *_newrect=NULL, *newrect;
- float *rectf, *_newrectf=NULL, *newrectf;
+ uchar *rect, *_newrect = NULL, *newrect;
+ float *rectf, *_newrectf = NULL, *newrectf;
float sample, add;
float val_a, nval_a, diff_a;
float val_b, nval_b, diff_b;
@@ -1090,18 +1091,18 @@ static struct ImBuf *scaleupx(struct ImBuf *ibuf, int newx)
val_g = nval_g = diff_g = val_r = nval_r = diff_r = 0;
val_af = nval_af = diff_af = val_bf = nval_bf = diff_bf = 0;
val_gf = nval_gf = diff_gf = val_rf = nval_rf = diff_rf = 0;
- if (ibuf==NULL) return(NULL);
- if (ibuf->rect==NULL && ibuf->rect_float==NULL) return (ibuf);
+ if (ibuf == NULL) return(NULL);
+ if (ibuf->rect == NULL && ibuf->rect_float == NULL) return (ibuf);
if (ibuf->rect) {
do_rect = 1;
_newrect = MEM_mallocN(newx * ibuf->y * sizeof(int), "scaleupx");
- if (_newrect==NULL) return(ibuf);
+ if (_newrect == NULL) return(ibuf);
}
if (ibuf->rect_float) {
do_float = 1;
_newrectf = MEM_mallocN(newx * ibuf->y * sizeof(float) * 4, "scaleupxf");
- if (_newrectf==NULL) {
+ if (_newrectf == NULL) {
if (_newrect) MEM_freeN(_newrect);
return(ibuf);
}
@@ -1238,10 +1239,10 @@ static struct ImBuf *scaleupx(struct ImBuf *ibuf, int newx)
return(ibuf);
}
-static struct ImBuf *scaleupy(struct ImBuf *ibuf, int newy)
+static ImBuf *scaleupy(struct ImBuf *ibuf, int newy)
{
- uchar *rect, *_newrect=NULL, *newrect;
- float *rectf, *_newrectf=NULL, *newrectf;
+ uchar *rect, *_newrect = NULL, *newrect;
+ float *rectf, *_newrectf = NULL, *newrectf;
float sample, add;
float val_a, nval_a, diff_a;
float val_b, nval_b, diff_b;
@@ -1257,18 +1258,18 @@ static struct ImBuf *scaleupy(struct ImBuf *ibuf, int newy)
val_g = nval_g = diff_g = val_r = nval_r = diff_r = 0;
val_af = nval_af = diff_af = val_bf = nval_bf = diff_bf = 0;
val_gf = nval_gf = diff_gf = val_rf = nval_rf = diff_rf = 0;
- if (ibuf==NULL) return(NULL);
- if (ibuf->rect==NULL && ibuf->rect_float==NULL) return (ibuf);
+ if (ibuf == NULL) return(NULL);
+ if (ibuf->rect == NULL && ibuf->rect_float == NULL) return (ibuf);
if (ibuf->rect) {
do_rect = 1;
_newrect = MEM_mallocN(ibuf->x * newy * sizeof(int), "scaleupy");
- if (_newrect==NULL) return(ibuf);
+ if (_newrect == NULL) return(ibuf);
}
if (ibuf->rect_float) {
do_float = 1;
_newrectf = MEM_mallocN(ibuf->x * newy * sizeof(float) * 4, "scaleupyf");
- if (_newrectf==NULL) {
+ if (_newrectf == NULL) {
if (_newrect) MEM_freeN(_newrect);
return(ibuf);
}
@@ -1286,8 +1287,8 @@ static struct ImBuf *scaleupy(struct ImBuf *ibuf, int newy)
sample = 0;
if (do_rect) {
- rect = ((uchar *)ibuf->rect) + 4*(x-1);
- newrect = _newrect + 4*(x-1);
+ rect = ((uchar *)ibuf->rect) + 4 * (x - 1);
+ newrect = _newrect + 4 * (x - 1);
val_a = rect[0];
nval_a = rect[skipx];
@@ -1295,43 +1296,43 @@ static struct ImBuf *scaleupy(struct ImBuf *ibuf, int newy)
val_a += 0.5f;
val_b = rect[1];
- nval_b = rect[skipx+1];
+ nval_b = rect[skipx + 1];
diff_b = nval_b - val_b;
val_b += 0.5f;
val_g = rect[2];
- nval_g = rect[skipx+2];
+ nval_g = rect[skipx + 2];
diff_g = nval_g - val_g;
val_g += 0.5f;
val_r = rect[3];
- nval_r = rect[skipx+4];
+ nval_r = rect[skipx + 4];
diff_r = nval_r - val_r;
val_r += 0.5f;
- rect += 2*skipx;
+ rect += 2 * skipx;
}
if (do_float) {
- rectf = ((float *)ibuf->rect_float) + 4*(x-1);
- newrectf = _newrectf + 4*(x-1);
+ rectf = ((float *)ibuf->rect_float) + 4 * (x - 1);
+ newrectf = _newrectf + 4 * (x - 1);
val_af = rectf[0];
nval_af = rectf[skipx];
diff_af = nval_af - val_af;
val_bf = rectf[1];
- nval_bf = rectf[skipx+1];
+ nval_bf = rectf[skipx + 1];
diff_bf = nval_bf - val_bf;
val_gf = rectf[2];
- nval_gf = rectf[skipx+2];
+ nval_gf = rectf[skipx + 2];
diff_gf = nval_gf - val_gf;
val_rf = rectf[3];
- nval_rf = rectf[skipx+3];
+ nval_rf = rectf[skipx + 3];
diff_rf = nval_rf - val_rf;
- rectf += 2*skipx;
+ rectf += 2 * skipx;
}
for (y = newy; y > 0; y--) {
@@ -1422,7 +1423,7 @@ static void scalefast_Z_ImBuf(ImBuf *ibuf, int newx, int newy)
if (ibuf->zbuf) {
_newrect = MEM_mallocN(newx * newy * sizeof(int), "z rect");
- if (_newrect==NULL) return;
+ if (_newrect == NULL) return;
stepx = (65536.0 * (ibuf->x - 1.0) / (newx - 1.0)) + 0.5;
stepy = (65536.0 * (ibuf->y - 1.0) / (newy - 1.0)) + 0.5;
@@ -1431,7 +1432,7 @@ static void scalefast_Z_ImBuf(ImBuf *ibuf, int newx, int newy)
newrect = _newrect;
for (y = newy; y > 0; y--) {
- rect = (unsigned int*) ibuf->zbuf;
+ rect = (unsigned int *) ibuf->zbuf;
rect += (ofsy >> 16) * ibuf->x;
ofsy += stepy;
ofsx = 32768;
@@ -1443,14 +1444,14 @@ static void scalefast_Z_ImBuf(ImBuf *ibuf, int newx, int newy)
IMB_freezbufImBuf(ibuf);
ibuf->mall |= IB_zbuf;
- ibuf->zbuf = (int*) _newrect;
+ ibuf->zbuf = (int *) _newrect;
}
}
-struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, unsigned int newx, unsigned int newy)
+struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
{
- if (ibuf==NULL) return (NULL);
- if (ibuf->rect==NULL && ibuf->rect_float==NULL) return (ibuf);
+ if (ibuf == NULL) return (NULL);
+ if (ibuf->rect == NULL && ibuf->rect_float == NULL) return (ibuf);
if (newx == ibuf->x && newy == ibuf->y) { return ibuf; }
@@ -1480,28 +1481,28 @@ struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned
{
unsigned int *rect, *_newrect, *newrect;
struct imbufRGBA *rectf, *_newrectf, *newrectf;
- int x, y, do_float=0, do_rect=0;
+ int x, y, do_float = 0, do_rect = 0;
int ofsx, ofsy, stepx, stepy;
rect = NULL; _newrect = NULL; newrect = NULL;
rectf = NULL; _newrectf = NULL; newrectf = NULL;
- if (ibuf==NULL) return(NULL);
+ if (ibuf == NULL) return(NULL);
if (ibuf->rect) do_rect = 1;
if (ibuf->rect_float) do_float = 1;
- if (do_rect==0 && do_float==0) return(ibuf);
+ if (do_rect == 0 && do_float == 0) return(ibuf);
if (newx == ibuf->x && newy == ibuf->y) return(ibuf);
if (do_rect) {
_newrect = MEM_mallocN(newx * newy * sizeof(int), "scalefastimbuf");
- if (_newrect==NULL) return(ibuf);
+ if (_newrect == NULL) return(ibuf);
newrect = _newrect;
}
if (do_float) {
_newrectf = MEM_mallocN(newx * newy * sizeof(float) * 4, "scalefastimbuf f");
- if (_newrectf==NULL) {
+ if (_newrectf == NULL) {
if (_newrect) MEM_freeN(_newrect);
return(ibuf);
}
@@ -1525,7 +1526,7 @@ struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned
ofsx = 32768;
if (do_rect) {
- for (x = newx; x>0; x--) {
+ for (x = newx; x > 0; x--) {
*newrect++ = rect[ofsx >> 16];
ofsx += stepx;
}
@@ -1533,7 +1534,7 @@ struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned
if (do_float) {
ofsx = 32768;
- for (x = newx; x>0; x--) {
+ for (x = newx; x > 0; x--) {
*newrectf++ = rectf[ofsx >> 16];
ofsx += stepx;
}
diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c
index 1a05dd93229..bf75995fd9c 100644
--- a/source/blender/imbuf/intern/targa.c
+++ b/source/blender/imbuf/intern/targa.c
@@ -50,8 +50,7 @@
/***/
-typedef struct TARGA
-{
+typedef struct TARGA {
unsigned char numid;
unsigned char maptyp;
unsigned char imgtyp;
@@ -72,27 +71,27 @@ static int tga_out1(unsigned int data, FILE *file)
{
uchar *p;
- p = (uchar *) & data;
+ p = (uchar *) &data;
if (putc(p[0], file) == EOF) return(EOF);
return (~EOF);
}
-static int tga_out2(unsigned int data, FILE * file)
+static int tga_out2(unsigned int data, FILE *file)
{
uchar *p;
- p = (uchar *) & data;
+ p = (uchar *) &data;
if (putc(p[0], file) == EOF) return(EOF);
if (putc(p[1], file) == EOF) return(EOF);
return (~EOF);
}
-static int tga_out3(unsigned int data, FILE * file)
+static int tga_out3(unsigned int data, FILE *file)
{
uchar *p;
- p = (uchar *) & data;
+ p = (uchar *) &data;
if (putc(p[2], file) == EOF) return(EOF);
if (putc(p[1], file) == EOF) return(EOF);
if (putc(p[0], file) == EOF) return(EOF);
@@ -100,11 +99,11 @@ static int tga_out3(unsigned int data, FILE * file)
}
-static int tga_out4(unsigned int data, FILE * file)
+static int tga_out4(unsigned int data, FILE *file)
{
uchar *p;
- p = (uchar *) & data;
+ p = (uchar *) &data;
/* order = bgra */
if (putc(p[2], file) == EOF) return(EOF);
if (putc(p[1], file) == EOF) return(EOF);
@@ -113,7 +112,7 @@ static int tga_out4(unsigned int data, FILE * file)
return (~EOF);
}
-static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FILE*))
+static short makebody_tga(ImBuf *ibuf, FILE *file, int (*out)(unsigned int, FILE *))
{
register int last, this;
register int copy, bytes;
@@ -125,22 +124,22 @@ static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FI
rectstart = rect = ibuf->rect + (y * ibuf->x);
last = *rect++;
this = *rect++;
- copy = last^this;
+ copy = last ^ this;
while (bytes > 0) {
if (copy) {
do {
last = this;
this = *rect++;
if (last == this) {
- if (this == rect[-3]) { /* three the same? */
- bytes --; /* set bytes */
+ if (this == rect[-3]) { /* three the same? */
+ bytes--; /* set bytes */
break;
}
}
} while (--bytes != 0);
- copy = rect-rectstart;
- copy --;
+ copy = rect - rectstart;
+ copy--;
if (bytes) copy -= 2;
temp = rect;
@@ -148,9 +147,9 @@ static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FI
while (copy) {
last = copy;
- if (copy>=128) last = 128;
+ if (copy >= 128) last = 128;
copy -= last;
- if (fputc(last-1, file) == EOF) return(0);
+ if (fputc(last - 1, file) == EOF) return(0);
do {
if (out(*rect++, file) == EOF) return(0);
} while (--last != 0);
@@ -162,17 +161,17 @@ static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FI
copy = FALSE;
}
else {
- while (*rect++ == this) { /* seek for first different byte */
- if (--bytes == 0) break; /* oor end of line */
+ while (*rect++ == this) { /* seek for first different byte */
+ if (--bytes == 0) break; /* oor end of line */
}
- rect --;
- copy = rect-rectstart;
+ rect--;
+ copy = rect - rectstart;
rectstart = rect;
- bytes --;
+ bytes--;
this = *rect++;
while (copy) {
- if (copy>128) {
+ if (copy > 128) {
if (fputc(255, file) == EOF) return(0);
copy -= 128;
}
@@ -185,14 +184,14 @@ static short makebody_tga(ImBuf * ibuf, FILE * file, int (*out)(unsigned int, FI
}
if (out(last, file) == EOF) return(0);
}
- copy=TRUE;
+ copy = TRUE;
}
}
}
return (1);
}
-static int dumptarga(struct ImBuf * ibuf, FILE * file)
+static int dumptarga(struct ImBuf *ibuf, FILE *file)
{
int size;
uchar *rect;
@@ -243,16 +242,16 @@ static int dumptarga(struct ImBuf * ibuf, FILE * file)
}
-int imb_savetarga(struct ImBuf * ibuf, const char *name, int flags)
+int imb_savetarga(struct ImBuf *ibuf, const char *name, int flags)
{
- char buf[20]= {0};
+ char buf[20] = {0};
FILE *fildes;
short ok = 0;
(void)flags; /* unused */
- buf[16] = (ibuf->planes + 0x7 ) & ~0x7;
- if (ibuf->planes > 8 ) {
+ buf[16] = (ibuf->planes + 0x7) & ~0x7;
+ if (ibuf->planes > 8) {
buf[2] = 10;
}
else {
@@ -273,11 +272,11 @@ int imb_savetarga(struct ImBuf * ibuf, const char *name, int flags)
/* Don't forget to indicate that your 32 bit
* targa uses 8 bits for the alpha channel! */
- if (ibuf->planes==32) {
+ if (ibuf->planes == 32) {
buf[17] |= 0x08;
}
fildes = BLI_fopen(name, "wb");
- if (!fildes) return 0;
+ if (!fildes) return 0;
if (fwrite(buf, 1, 18, fildes) != 18) {
fclose(fildes);
@@ -289,18 +288,18 @@ int imb_savetarga(struct ImBuf * ibuf, const char *name, int flags)
}
else {
switch ((ibuf->planes + 7) >> 3) {
- case 1:
- ok = makebody_tga(ibuf, fildes, tga_out1);
- break;
- case 2:
- ok = makebody_tga(ibuf, fildes, tga_out2);
- break;
- case 3:
- ok = makebody_tga(ibuf, fildes, tga_out3);
- break;
- case 4:
- ok = makebody_tga(ibuf, fildes, tga_out4);
- break;
+ case 1:
+ ok = makebody_tga(ibuf, fildes, tga_out1);
+ break;
+ case 2:
+ ok = makebody_tga(ibuf, fildes, tga_out2);
+ break;
+ case 3:
+ ok = makebody_tga(ibuf, fildes, tga_out3);
+ break;
+ case 4:
+ ok = makebody_tga(ibuf, fildes, tga_out4);
+ break;
}
}
@@ -315,27 +314,27 @@ static int checktarga(TARGA *tga, unsigned char *mem)
tga->maptyp = mem[1];
tga->imgtyp = mem[2];
- tga->maporig = GSS(mem+3);
- tga->mapsize = GSS(mem+5);
+ tga->maporig = GSS(mem + 3);
+ tga->mapsize = GSS(mem + 5);
tga->mapbits = mem[7];
- tga->xorig = GSS(mem+8);
- tga->yorig = GSS(mem+10);
- tga->xsize = GSS(mem+12);
- tga->ysize = GSS(mem+14);
+ tga->xorig = GSS(mem + 8);
+ tga->yorig = GSS(mem + 10);
+ tga->xsize = GSS(mem + 12);
+ tga->ysize = GSS(mem + 14);
tga->pixsize = mem[16];
tga->imgdes = mem[17];
if (tga->maptyp > 1) return(0);
switch (tga->imgtyp) {
- case 1: /* raw cmap */
- case 2: /* raw rgb */
- case 3: /* raw b&w */
- case 9: /* cmap */
- case 10: /* rgb */
- case 11: /* b&w */
- break;
- default:
- return(0);
+ case 1: /* raw cmap */
+ case 2: /* raw rgb */
+ case 3: /* raw b&w */
+ case 9: /* cmap */
+ case 10: /* rgb */
+ case 11: /* b&w */
+ break;
+ default:
+ return(0);
}
if (tga->mapsize && tga->mapbits > 32) return(0);
if (tga->xsize <= 0 || tga->xsize >= 8192) return(0);
@@ -356,7 +355,7 @@ static void complete_partial_load(struct ImBuf *ibuf, unsigned int *rect)
{
int size = (ibuf->x * ibuf->y) - (rect - ibuf->rect);
if (size) {
- printf("decodetarga: incomplete file, %.1f%% missing\n", 100*((float)size / (ibuf->x * ibuf->y)));
+ printf("decodetarga: incomplete file, %.1f%% missing\n", 100 * ((float)size / (ibuf->x * ibuf->y)));
/* not essential but makes displaying partially rendered TGA's less ugly */
memset(rect, 0, size);
@@ -369,10 +368,10 @@ static void complete_partial_load(struct ImBuf *ibuf, unsigned int *rect)
static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size, int psize)
{
- unsigned char *mem_end = mem+mem_size;
+ unsigned char *mem_end = mem + mem_size;
int count, col, size;
unsigned int *rect;
- uchar * cp = (uchar *) &col;
+ uchar *cp = (uchar *) &col;
if (ibuf == NULL) return;
if (ibuf->rect == NULL) return;
@@ -387,7 +386,7 @@ static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size,
while (size > 0) {
count = *mem++;
- if (mem>mem_end)
+ if (mem > mem_end)
goto partial_load;
if (count >= 128) {
@@ -432,7 +431,7 @@ static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size,
}
}
else {
- count ++;
+ count++;
size -= count;
if (size >= 0) {
while (count > 0) {
@@ -465,13 +464,13 @@ static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size,
}
}
*rect++ = col;
- count --;
+ count--;
- if (mem>mem_end)
+ if (mem > mem_end)
goto partial_load;
}
- if (mem>mem_end)
+ if (mem > mem_end)
goto partial_load;
}
}
@@ -485,12 +484,12 @@ partial_load:
complete_partial_load(ibuf, rect);
}
-static void ldtarga(struct ImBuf * ibuf, unsigned char * mem, size_t mem_size, int psize)
+static void ldtarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size, int psize)
{
- unsigned char *mem_end = mem+mem_size;
+ unsigned char *mem_end = mem + mem_size;
int col, size;
unsigned int *rect;
- uchar * cp = (uchar *) &col;
+ uchar *cp = (uchar *) &col;
if (ibuf == NULL) return;
if (ibuf->rect == NULL) return;
@@ -503,7 +502,7 @@ static void ldtarga(struct ImBuf * ibuf, unsigned char * mem, size_t mem_size, i
cp[1] = cp[2] = 0;
while (size > 0) {
- if (mem>mem_end)
+ if (mem > mem_end)
goto partial_load;
if (psize & 2) {
@@ -545,13 +544,13 @@ partial_load:
}
-struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
+ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
{
TARGA tga;
- struct ImBuf * ibuf;
+ struct ImBuf *ibuf;
int col, count, size;
- unsigned int *rect, *cmap= NULL /*, mincol= 0*/, maxcol= 0;
- uchar * cp = (uchar *) &col;
+ unsigned int *rect, *cmap = NULL /*, mincol= 0*/, maxcol = 0;
+ uchar *cp = (uchar *) &col;
if (checktarga(&tga, mem) == 0) return(NULL);
@@ -570,9 +569,9 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
/* load color map */
/*mincol = tga.maporig;*/ /*UNUSED*/
maxcol = tga.mapsize;
- cmap = MEM_callocN(sizeof(unsigned int)*maxcol, "targa cmap");
+ cmap = MEM_callocN(sizeof(unsigned int) * maxcol, "targa cmap");
- for (count = 0 ; count < maxcol ; count ++) {
+ for (count = 0; count < maxcol; count++) {
switch (tga.mapbits >> 3) {
case 4:
cp[0] = mem[3];
@@ -603,7 +602,7 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
for (col = maxcol - 1; col > 0; col >>= 1) size++;
ibuf->planes = size;
- if (tga.mapbits != 32) { /* set alpha bits */
+ if (tga.mapbits != 32) { /* set alpha bits */
cmap[0] &= BIG_LONG(0x00ffffffl);
}
}
@@ -613,33 +612,33 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
if (tga.imgtyp != 1 && tga.imgtyp != 9) { /* happens sometimes (beuh) */
if (cmap) {
MEM_freeN(cmap);
- cmap= NULL;
+ cmap = NULL;
}
}
switch (tga.imgtyp) {
- case 1:
- case 2:
- case 3:
- if (tga.pixsize <= 8) ldtarga(ibuf, mem, mem_size, 0);
- else if (tga.pixsize <= 16) ldtarga(ibuf, mem, mem_size, 1);
- else if (tga.pixsize <= 24) ldtarga(ibuf, mem, mem_size, 2);
- else if (tga.pixsize <= 32) ldtarga(ibuf, mem, mem_size, 3);
- break;
- case 9:
- case 10:
- case 11:
- if (tga.pixsize <= 8) decodetarga(ibuf, mem, mem_size, 0);
- else if (tga.pixsize <= 16) decodetarga(ibuf, mem, mem_size, 1);
- else if (tga.pixsize <= 24) decodetarga(ibuf, mem, mem_size, 2);
- else if (tga.pixsize <= 32) decodetarga(ibuf, mem, mem_size, 3);
- break;
+ case 1:
+ case 2:
+ case 3:
+ if (tga.pixsize <= 8) ldtarga(ibuf, mem, mem_size, 0);
+ else if (tga.pixsize <= 16) ldtarga(ibuf, mem, mem_size, 1);
+ else if (tga.pixsize <= 24) ldtarga(ibuf, mem, mem_size, 2);
+ else if (tga.pixsize <= 32) ldtarga(ibuf, mem, mem_size, 3);
+ break;
+ case 9:
+ case 10:
+ case 11:
+ if (tga.pixsize <= 8) decodetarga(ibuf, mem, mem_size, 0);
+ else if (tga.pixsize <= 16) decodetarga(ibuf, mem, mem_size, 1);
+ else if (tga.pixsize <= 24) decodetarga(ibuf, mem, mem_size, 2);
+ else if (tga.pixsize <= 32) decodetarga(ibuf, mem, mem_size, 3);
+ break;
}
if (cmap) {
/* apply color map */
rect = ibuf->rect;
- for (size = ibuf->x * ibuf->y; size>0; --size, ++rect) {
+ for (size = ibuf->x * ibuf->y; size > 0; --size, ++rect) {
col = *rect;
if (col >= 0 && col < maxcol) *rect = cmap[col];
}
@@ -651,8 +650,8 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
rect = ibuf->rect;
for (size = ibuf->x * ibuf->y; size > 0; --size, ++rect) {
col = *rect;
- cp = (uchar*)rect;
- mem = (uchar*)&col;
+ cp = (uchar *)rect;
+ mem = (uchar *)&col;
cp[3] = ((mem[1] << 1) & 0xf8);
cp[2] = ((mem[0] & 0xe0) >> 2) + ((mem[1] & 0x03) << 6);
@@ -672,7 +671,7 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
crect = (uchar *) ibuf->rect;
lrect = (unsigned int *) ibuf->rect;
- for (size = ibuf->x * ibuf->y; size > 0; size --) {
+ for (size = ibuf->x * ibuf->y; size > 0; size--) {
col = *lrect++;
crect[0] = 255;
diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c
index 8507cb71543..54d90ec5c56 100644
--- a/source/blender/imbuf/intern/thumbs.c
+++ b/source/blender/imbuf/intern/thumbs.c
@@ -67,19 +67,19 @@
# include <unistd.h>
#endif
-#define URI_MAX FILE_MAX*3 + 8
+#define URI_MAX FILE_MAX * 3 + 8
static int get_thumb_dir(char *dir, ThumbSize size)
{
#ifdef WIN32
- wchar_t dir_16 [MAX_PATH];
+ wchar_t dir_16[MAX_PATH];
/* yes, applications shouldn't store data there, but so does GIMP :)*/
SHGetSpecialFolderPathW(0, dir_16, CSIDL_PROFILE, 0);
conv_utf_16_to_8(dir_16, dir, FILE_MAX);
#else
- const char* home = getenv("HOME");
+ const char *home = getenv("HOME");
if (!home) return 0;
BLI_strncpy(dir, home, FILE_MAX);
#endif
@@ -105,11 +105,11 @@ static int get_thumb_dir(char *dir, ThumbSize size)
* released under the Gnu General Public License.
*/
typedef enum {
- UNSAFE_ALL = 0x1, /* Escape all unsafe characters */
- UNSAFE_ALLOW_PLUS = 0x2, /* Allows '+' */
- UNSAFE_PATH = 0x8, /* Allows '/', '&', '=', ':', '@', '+', '$' and ',' */
- UNSAFE_HOST = 0x10, /* Allows '/' and ':' and '@' */
- UNSAFE_SLASHES = 0x20 /* Allows all characters except for '/' and '%' */
+ UNSAFE_ALL = 0x1, /* Escape all unsafe characters */
+ UNSAFE_ALLOW_PLUS = 0x2, /* Allows '+' */
+ UNSAFE_PATH = 0x8, /* Allows '/', '&', '=', ':', '@', '+', '$' and ',' */
+ UNSAFE_HOST = 0x10, /* Allows '/' and ':' and '@' */
+ UNSAFE_SLASHES = 0x20 /* Allows all characters except for '/' and '%' */
} UnsafeCharacterSet;
static const unsigned char acceptable[96] = {
@@ -132,9 +132,9 @@ static const char hex[17] = "0123456789abcdef";
/* Note: This escape function works on file: URIs, but if you want to
* escape something else, please read RFC-2396 */
-static void escape_uri_string (const char *string, char* escaped_string, int len, UnsafeCharacterSet mask)
+static void escape_uri_string(const char *string, char *escaped_string, int len, UnsafeCharacterSet mask)
{
-#define ACCEPTABLE(a) ((a)>=32 && (a)<128 && (acceptable[(a)-32] & use_mask))
+#define ACCEPTABLE(a) ((a) >= 32 && (a) < 128 && (acceptable[(a) - 32] & use_mask))
const char *p;
char *q;
@@ -146,7 +146,7 @@ static void escape_uri_string (const char *string, char* escaped_string, int len
c = (unsigned char) *p;
len--;
- if (!ACCEPTABLE (c)) {
+ if (!ACCEPTABLE(c)) {
*q++ = '%'; /* means hex coming */
*q++ = hex[c >> 4];
*q++ = hex[c & 15];
@@ -159,7 +159,7 @@ static void escape_uri_string (const char *string, char* escaped_string, int len
*q = '\0';
}
-static void to_hex_char(char* hexbytes, const unsigned char* bytes, int len)
+static void to_hex_char(char *hexbytes, const unsigned char *bytes, int len)
{
const unsigned char *p;
char *q;
@@ -177,7 +177,7 @@ static void to_hex_char(char* hexbytes, const unsigned char* bytes, int len)
static int uri_from_filename(const char *path, char *uri)
{
char orig_uri[URI_MAX];
- const char* dirstart = path;
+ const char *dirstart = path;
#ifdef WIN32
{
@@ -203,17 +203,17 @@ static int uri_from_filename(const char *path, char *uri)
#ifdef WITH_ICONV
{
- char uri_utf8[FILE_MAX*3+8];
- escape_uri_string(orig_uri, uri_utf8, FILE_MAX*3+8, UNSAFE_PATH);
+ char uri_utf8[FILE_MAX * 3 + 8];
+ escape_uri_string(orig_uri, uri_utf8, FILE_MAX * 3 + 8, UNSAFE_PATH);
BLI_string_to_utf8(uri_utf8, uri, NULL);
}
#else
- escape_uri_string(orig_uri, uri, FILE_MAX*3+8, UNSAFE_PATH);
+ escape_uri_string(orig_uri, uri, FILE_MAX * 3 + 8, UNSAFE_PATH);
#endif
return 1;
}
-static void thumbname_from_uri(const char* uri, char* thumb, const int thumb_len)
+static void thumbname_from_uri(const char *uri, char *thumb, const int thumb_len)
{
char hexdigest[33];
unsigned char digest[16];
@@ -227,7 +227,7 @@ static void thumbname_from_uri(const char* uri, char* thumb, const int thumb_len
// printf("%s: '%s' --> '%s'\n", __func__, uri, thumb);
}
-static int thumbpath_from_uri(const char* uri, char* path, const int path_len, ThumbSize size)
+static int thumbpath_from_uri(const char *uri, char *path, const int path_len, ThumbSize size)
{
char tmppath[FILE_MAX];
int rv = 0;
@@ -253,16 +253,16 @@ void IMB_thumb_makedirs(void)
}
/* create thumbnail for file and returns new imbuf for thumbnail */
-ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, ImBuf *img)
+ImBuf *IMB_thumb_create(const char *path, ThumbSize size, ThumbSource source, ImBuf *img)
{
- char uri[URI_MAX]= "";
- char desc[URI_MAX+22];
+ char uri[URI_MAX] = "";
+ char desc[URI_MAX + 22];
char tpath[FILE_MAX];
char tdir[FILE_MAX];
char temp[FILE_MAX];
- char mtime[40]= "0"; /* in case we can't stat the file */
- char cwidth[40]= "0"; /* in case images have no data */
- char cheight[40]= "0";
+ char mtime[40] = "0"; /* in case we can't stat the file */
+ char cwidth[40] = "0"; /* in case images have no data */
+ char cheight[40] = "0";
char thumb[40];
short tsize = 128;
short ex, ey;
@@ -285,7 +285,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
/* exception, skip images over 100mb */
if (source == THB_SOURCE_IMAGE) {
- const size_t size= BLI_file_size(path);
+ const size_t size = BLI_file_size(path);
if (size != -1 && size > THUMB_SIZE_MAX) {
// printf("file too big: %d, skipping %s\n", (int)size, path);
return NULL;
@@ -309,7 +309,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
if (THB_SOURCE_IMAGE == source || THB_SOURCE_BLEND == source) {
/* only load if we didnt give an image */
- if (img==NULL) {
+ if (img == NULL) {
if (THB_SOURCE_BLEND == source) {
img = IMB_loadblend_thumb(path);
}
@@ -326,7 +326,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
}
}
else if (THB_SOURCE_MOVIE == source) {
- struct anim * anim = NULL;
+ struct anim *anim = NULL;
anim = IMB_open_anim(path, IB_rect | IB_metadata, 0);
if (anim != NULL) {
img = IMB_anim_absolute(anim, 0, IMB_TC_NONE, IMB_PROXY_NONE);
@@ -346,11 +346,11 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
if (img->x > img->y) {
scaledx = (float)tsize;
- scaledy = ( (float)img->y/(float)img->x )*tsize;
+ scaledy = ( (float)img->y / (float)img->x) * tsize;
}
else {
scaledy = (float)tsize;
- scaledx = ( (float)img->x/(float)img->y )*tsize;
+ scaledx = ( (float)img->x / (float)img->y) * tsize;
}
ex = (short)scaledx;
ey = (short)scaledy;
@@ -392,10 +392,10 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
}
/* read thumbnail for file and returns new imbuf for thumbnail */
-ImBuf* IMB_thumb_read(const char* path, ThumbSize size)
+ImBuf *IMB_thumb_read(const char *path, ThumbSize size)
{
char thumb[FILE_MAX];
- char uri[FILE_MAX*3+8];
+ char uri[FILE_MAX * 3 + 8];
ImBuf *img = NULL;
if (!uri_from_filename(path, uri)) {
@@ -409,10 +409,10 @@ ImBuf* IMB_thumb_read(const char* path, ThumbSize size)
}
/* delete all thumbs for the file */
-void IMB_thumb_delete(const char* path, ThumbSize size)
+void IMB_thumb_delete(const char *path, ThumbSize size)
{
char thumb[FILE_MAX];
- char uri[FILE_MAX*3+8];
+ char uri[FILE_MAX * 3 + 8];
if (!uri_from_filename(path, uri)) {
return;
@@ -429,12 +429,12 @@ void IMB_thumb_delete(const char* path, ThumbSize size)
/* create the thumb if necessary and manage failed and old thumbs */
-ImBuf* IMB_thumb_manage(const char* path, ThumbSize size, ThumbSource source)
+ImBuf *IMB_thumb_manage(const char *path, ThumbSize size, ThumbSource source)
{
char thumb[FILE_MAX];
- char uri[FILE_MAX*3+8];
+ char uri[FILE_MAX * 3 + 8];
struct stat st;
- ImBuf* img = NULL;
+ ImBuf *img = NULL;
if (stat(path, &st)) {
return NULL;
@@ -507,5 +507,3 @@ ImBuf* IMB_thumb_manage(const char* path, ThumbSize size, ThumbSource source)
return img;
}
-
-
diff --git a/source/blender/imbuf/intern/thumbs_blend.c b/source/blender/imbuf/intern/thumbs_blend.c
index 2d477a5f43d..afef2365de4 100644
--- a/source/blender/imbuf/intern/thumbs_blend.c
+++ b/source/blender/imbuf/intern/thumbs_blend.c
@@ -47,7 +47,7 @@
static ImBuf *loadblend_thumb(gzFile gzfile)
{
char buf[12];
- int bhead[24/sizeof(int)]; /* max size on 64bit */
+ int bhead[24 / sizeof(int)]; /* max size on 64bit */
char endian, pointer_size;
char endian_switch;
int sizeof_bhead;
@@ -58,19 +58,19 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
if (strncmp(buf, "BLENDER", 7))
return NULL;
- if (buf[7]=='-')
- pointer_size= 8;
- else if (buf[7]=='_')
- pointer_size= 4;
+ if (buf[7] == '-')
+ pointer_size = 8;
+ else if (buf[7] == '_')
+ pointer_size = 4;
else
return NULL;
sizeof_bhead = 16 + pointer_size;
- if (buf[8]=='V')
- endian= B_ENDIAN; /* big: PPC */
- else if (buf[8]=='v')
- endian= L_ENDIAN; /* little: x86 */
+ if (buf[8] == 'V')
+ endian = B_ENDIAN; /* big: PPC */
+ else if (buf[8] == 'v')
+ endian = L_ENDIAN; /* little: x86 */
else
return NULL;
@@ -78,9 +78,9 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
while (gzread(gzfile, bhead, sizeof_bhead) == sizeof_bhead) {
if (endian_switch)
- SWITCH_INT(bhead[1]); /* length */
+ SWITCH_INT(bhead[1]); /* length */
- if (bhead[0]==REND) {
+ if (bhead[0] == REND) {
gzseek(gzfile, bhead[1], SEEK_CUR); /* skip to the next */
}
else {
@@ -90,7 +90,7 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
/* using 'TEST' since new names segfault when loading in old blenders */
if (bhead[0] == TEST) {
- ImBuf *img= NULL;
+ ImBuf *img = NULL;
int size[2];
if (gzread(gzfile, size, sizeof(size)) != sizeof(size))
@@ -108,11 +108,11 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
return NULL;
/* finally malloc and read the data */
- img= IMB_allocImBuf(size[0], size[1], 32, IB_rect | IB_metadata);
+ img = IMB_allocImBuf(size[0], size[1], 32, IB_rect | IB_metadata);
if (gzread(gzfile, img->rect, bhead[1]) != bhead[1]) {
IMB_freeImBuf(img);
- img= NULL;
+ img = NULL;
}
return img;
@@ -127,11 +127,11 @@ ImBuf *IMB_loadblend_thumb(const char *path)
/* not necessarily a gzip */
gzfile = BLI_gzopen(path, "rb");
- if (NULL == gzfile ) {
+ if (NULL == gzfile) {
return NULL;
}
else {
- ImBuf *img= loadblend_thumb(gzfile);
+ ImBuf *img = loadblend_thumb(gzfile);
/* read ok! */
gzclose(gzfile);
@@ -145,43 +145,43 @@ ImBuf *IMB_loadblend_thumb(const char *path)
void IMB_overlayblend_thumb(unsigned int *thumb, int width, int height, float aspect)
{
- unsigned char *px= (unsigned char *)thumb;
+ unsigned char *px = (unsigned char *)thumb;
int margin_l = MARGIN;
int margin_b = MARGIN;
int margin_r = width - MARGIN;
int margin_t = height - MARGIN;
if (aspect < 1.0f) {
- margin_l= (int)((width - ((float)width * aspect)) / 2.0f);
+ margin_l = (int)((width - ((float)width * aspect)) / 2.0f);
margin_l += MARGIN;
- CLAMP(margin_l, MARGIN, (width/2));
+ CLAMP(margin_l, MARGIN, (width / 2));
margin_r = width - margin_l;
}
else if (aspect > 1.0f) {
- margin_b= (int)((height - ((float)height / aspect)) / 2.0f);
+ margin_b = (int)((height - ((float)height / aspect)) / 2.0f);
margin_b += MARGIN;
- CLAMP(margin_b, MARGIN, (height/2));
+ CLAMP(margin_b, MARGIN, (height / 2));
margin_t = height - margin_b;
}
{
int x, y;
- int stride_x= (margin_r - margin_l) - 2;
+ int stride_x = (margin_r - margin_l) - 2;
- for (y=0; y < height; y++) {
- for (x=0; x < width; x++, px+=4) {
- int hline= 0, vline= 0;
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++, px += 4) {
+ int hline = 0, vline = 0;
if ((x > margin_l && x < margin_r) && (y > margin_b && y < margin_t)) {
/* interior. skip */
x += stride_x;
px += stride_x * 4;
}
- else if ((hline=(((x == margin_l || x == margin_r)) && y >= margin_b && y <= margin_t)) ||
- (vline=(((y == margin_b || y == margin_t)) && x >= margin_l && x <= margin_r)))
+ else if ((hline = (((x == margin_l || x == margin_r)) && y >= margin_b && y <= margin_t)) ||
+ (vline = (((y == margin_b || y == margin_t)) && x >= margin_l && x <= margin_r)))
{
/* dashed line */
if ((hline && y % 2) || (vline && x % 2)) {
- px[0]= px[1]= px[2]= 0;
+ px[0] = px[1] = px[2] = 0;
px[3] = 255;
}
}
diff --git a/source/blender/imbuf/intern/tiff.c b/source/blender/imbuf/intern/tiff.c
index a9396a5824d..0c6a5b56a3e 100644
--- a/source/blender/imbuf/intern/tiff.c
+++ b/source/blender/imbuf/intern/tiff.c
@@ -72,17 +72,17 @@ static tsize_t imb_tiff_WriteProc(thandle_t handle, tdata_t data, tsize_t n);
static toff_t imb_tiff_SeekProc(thandle_t handle, toff_t ofs, int whence);
static int imb_tiff_CloseProc(thandle_t handle);
static toff_t imb_tiff_SizeProc(thandle_t handle);
-static int imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize);
+static int imb_tiff_DummyMapProc(thandle_t fd, tdata_t *pbase, toff_t *psize);
static void imb_tiff_DummyUnmapProc(thandle_t fd, tdata_t base, toff_t size);
/* Structure for in-memory TIFF file. */
typedef struct ImbTIFFMemFile {
- unsigned char *mem; /* Location of first byte of TIFF file. */
- toff_t offset; /* Current offset within the file. */
- tsize_t size; /* Size of the TIFF file. */
+ unsigned char *mem; /* Location of first byte of TIFF file. */
+ toff_t offset; /* Current offset within the file. */
+ tsize_t size; /* Size of the TIFF file. */
} ImbTIFFMemFile;
-#define IMB_TIFF_GET_MEMFILE(x) ((ImbTIFFMemFile*)(x))
+#define IMB_TIFF_GET_MEMFILE(x) ((ImbTIFFMemFile *)(x))
@@ -98,7 +98,7 @@ static void imb_tiff_DummyUnmapProc(thandle_t fd, tdata_t base, toff_t size)
(void)size;
}
-static int imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
+static int imb_tiff_DummyMapProc(thandle_t fd, tdata_t *pbase, toff_t *psize)
{
(void)fd;
(void)pbase;
@@ -115,12 +115,12 @@ static int imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
* \param n: Number of bytes to read.
*
* \return: Number of bytes actually read.
- * 0 = EOF.
+ * 0 = EOF.
*/
static tsize_t imb_tiff_ReadProc(thandle_t handle, tdata_t data, tsize_t n)
{
tsize_t nRemaining, nCopy;
- ImbTIFFMemFile* mfile;
+ ImbTIFFMemFile *mfile;
void *srcAddr;
/* get the pointer to the in-memory file */
@@ -145,9 +145,9 @@ static tsize_t imb_tiff_ReadProc(thandle_t handle, tdata_t data, tsize_t n)
return (0);
/* all set -> do the read (copy) */
- srcAddr = (void*)(&(mfile->mem[mfile->offset]));
- memcpy((void*)data, srcAddr, nCopy);
- mfile->offset += nCopy; /* advance file ptr by copied bytes */
+ srcAddr = (void *)(&(mfile->mem[mfile->offset]));
+ memcpy((void *)data, srcAddr, nCopy);
+ mfile->offset += nCopy; /* advance file ptr by copied bytes */
return nCopy;
}
@@ -177,10 +177,10 @@ static tsize_t imb_tiff_WriteProc(thandle_t handle, tdata_t data, tsize_t n)
* \param handle: Handle of the TIFF file (pointer to ImbTIFFMemFile).
* \param ofs: Offset value (interpreted according to whence below).
* \param whence: This can be one of three values:
- * SEEK_SET - The offset is set to ofs bytes.
- * SEEK_CUR - The offset is set to its current location plus ofs bytes.
- * SEEK_END - (This is unsupported and will return -1, indicating an
- * error).
+ * SEEK_SET - The offset is set to ofs bytes.
+ * SEEK_CUR - The offset is set to its current location plus ofs bytes.
+ * SEEK_END - (This is unsupported and will return -1, indicating an
+ * error).
*
* \return: Resulting offset location within the file, measured in bytes from
* the beginning of the file. (-1) indicates an error.
@@ -208,8 +208,8 @@ static toff_t imb_tiff_SeekProc(thandle_t handle, toff_t ofs, int whence)
default:
/* no other types are supported - return an error */
fprintf(stderr,
- "imb_tiff_SeekProc: "
- "Unsupported TIFF SEEK type.\n");
+ "imb_tiff_SeekProc: "
+ "Unsupported TIFF SEEK type.\n");
return (-1);
}
@@ -260,7 +260,7 @@ static int imb_tiff_CloseProc(thandle_t handle)
*/
static toff_t imb_tiff_SizeProc(thandle_t handle)
{
- ImbTIFFMemFile* mfile;
+ ImbTIFFMemFile *mfile;
/* get the pointer to the in-memory file */
mfile = IMB_TIFF_GET_MEMFILE(handle);
@@ -281,10 +281,10 @@ static TIFF *imb_tiff_client_open(ImbTIFFMemFile *memFile, unsigned char *mem, s
memFile->size = size;
return TIFFClientOpen("(Blender TIFF Interface Layer)",
- "r", (thandle_t)(memFile),
- imb_tiff_ReadProc, imb_tiff_WriteProc,
- imb_tiff_SeekProc, imb_tiff_CloseProc,
- imb_tiff_SizeProc, imb_tiff_DummyMapProc, imb_tiff_DummyUnmapProc);
+ "r", (thandle_t)(memFile),
+ imb_tiff_ReadProc, imb_tiff_WriteProc,
+ imb_tiff_SeekProc, imb_tiff_CloseProc,
+ imb_tiff_SizeProc, imb_tiff_DummyMapProc, imb_tiff_DummyUnmapProc);
}
/**
@@ -294,58 +294,58 @@ static TIFF *imb_tiff_client_open(ImbTIFFMemFile *memFile, unsigned char *mem, s
* http://www.faqs.org/faqs/graphics/fileformats-faq/part4/section-9.html
* The first four bytes of big-endian and little-endian TIFF files
* respectively are (hex):
- * 4d 4d 00 2a
- * 49 49 2a 00
+ * 4d 4d 00 2a
+ * 49 49 2a 00
* Note that TIFF files on *any* platform can be either big- or little-endian;
* it's not platform-specific.
*
* AFAICT, libtiff doesn't provide a method to do this automatically, and
* hence my manual comparison. - Jonathan Merritt (lancelet) 4th Sept 2005.
*/
-#define IMB_TIFF_NCB 4 /* number of comparison bytes used */
+#define IMB_TIFF_NCB 4 /* number of comparison bytes used */
int imb_is_a_tiff(unsigned char *mem)
{
char big_endian[IMB_TIFF_NCB] = { 0x4d, 0x4d, 0x00, 0x2a };
char lil_endian[IMB_TIFF_NCB] = { 0x49, 0x49, 0x2a, 0x00 };
return ( (memcmp(big_endian, mem, IMB_TIFF_NCB) == 0) ||
- (memcmp(lil_endian, mem, IMB_TIFF_NCB) == 0) );
+ (memcmp(lil_endian, mem, IMB_TIFF_NCB) == 0) );
}
static void scanline_contig_16bit(float *rectf, unsigned short *sbuf, int scanline_w, int spp)
{
int i;
- for (i=0; i < scanline_w; i++) {
- rectf[i*4 + 0] = sbuf[i*spp + 0] / 65535.0;
- rectf[i*4 + 1] = (spp>=3)? sbuf[i*spp + 1] / 65535.0: sbuf[i*spp + 0] / 65535.0;
- rectf[i*4 + 2] = (spp>=3)? sbuf[i*spp + 2] / 65535.0: sbuf[i*spp + 0] / 65535.0;
- rectf[i*4 + 3] = (spp==4)?(sbuf[i*spp + 3] / 65535.0):1.0;
+ for (i = 0; i < scanline_w; i++) {
+ rectf[i * 4 + 0] = sbuf[i * spp + 0] / 65535.0;
+ rectf[i * 4 + 1] = (spp >= 3) ? sbuf[i * spp + 1] / 65535.0 : sbuf[i * spp + 0] / 65535.0;
+ rectf[i * 4 + 2] = (spp >= 3) ? sbuf[i * spp + 2] / 65535.0 : sbuf[i * spp + 0] / 65535.0;
+ rectf[i * 4 + 3] = (spp == 4) ? (sbuf[i * spp + 3] / 65535.0) : 1.0;
}
}
static void scanline_contig_32bit(float *rectf, float *fbuf, int scanline_w, int spp)
{
int i;
- for (i=0; i < scanline_w; i++) {
- rectf[i*4 + 0] = fbuf[i*spp + 0];
- rectf[i*4 + 1] = (spp>=3)? fbuf[i*spp + 1]: fbuf[i*spp + 0];
- rectf[i*4 + 2] = (spp>=3)? fbuf[i*spp + 2]: fbuf[i*spp + 0];
- rectf[i*4 + 3] = (spp==4)?fbuf[i*spp + 3]:1.0f;
+ for (i = 0; i < scanline_w; i++) {
+ rectf[i * 4 + 0] = fbuf[i * spp + 0];
+ rectf[i * 4 + 1] = (spp >= 3) ? fbuf[i * spp + 1] : fbuf[i * spp + 0];
+ rectf[i * 4 + 2] = (spp >= 3) ? fbuf[i * spp + 2] : fbuf[i * spp + 0];
+ rectf[i * 4 + 3] = (spp == 4) ? fbuf[i * spp + 3] : 1.0f;
}
}
static void scanline_separate_16bit(float *rectf, unsigned short *sbuf, int scanline_w, int chan)
{
int i;
- for (i=0; i < scanline_w; i++)
- rectf[i*4 + chan] = sbuf[i] / 65535.0;
+ for (i = 0; i < scanline_w; i++)
+ rectf[i * 4 + chan] = sbuf[i] / 65535.0;
}
static void scanline_separate_32bit(float *rectf, float *fbuf, int scanline_w, int chan)
{
int i;
- for (i=0; i < scanline_w; i++)
- rectf[i*4 + chan] = fbuf[i];
+ for (i = 0; i < scanline_w; i++)
+ rectf[i * 4 + chan] = fbuf[i];
}
static void imb_read_tiff_resolution(ImBuf *ibuf, TIFF *image)
@@ -359,12 +359,12 @@ static void imb_read_tiff_resolution(ImBuf *ibuf, TIFF *image)
TIFFGetFieldDefaulted(image, TIFFTAG_YRESOLUTION, &yres);
if (unit == RESUNIT_CENTIMETER) {
- ibuf->ppm[0]= (double)xres * 100.0;
- ibuf->ppm[1]= (double)yres * 100.0;
+ ibuf->ppm[0] = (double)xres * 100.0;
+ ibuf->ppm[1] = (double)yres * 100.0;
}
else {
- ibuf->ppm[0]= (double)xres / 0.0254;
- ibuf->ppm[1]= (double)yres / 0.0254;
+ ibuf->ppm[0] = (double)xres / 0.0254;
+ ibuf->ppm[1] = (double)yres / 0.0254;
}
}
@@ -376,15 +376,15 @@ static void imb_read_tiff_resolution(ImBuf *ibuf, TIFF *image)
static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
{
ImBuf *tmpibuf;
- int success= 0;
+ int success = 0;
short bitspersample, spp, config;
size_t scanline;
- int ib_flag=0, row, chan;
- float *fbuf=NULL;
- unsigned short *sbuf=NULL;
+ int ib_flag = 0, row, chan;
+ float *fbuf = NULL;
+ unsigned short *sbuf = NULL;
TIFFGetField(image, TIFFTAG_BITSPERSAMPLE, &bitspersample);
- TIFFGetField(image, TIFFTAG_SAMPLESPERPIXEL, &spp); /* number of 'channels' */
+ TIFFGetField(image, TIFFTAG_SAMPLESPERPIXEL, &spp); /* number of 'channels' */
TIFFGetField(image, TIFFTAG_PLANARCONFIG, &config);
imb_read_tiff_resolution(ibuf, image);
@@ -403,7 +403,7 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
ib_flag = IB_rect;
}
- tmpibuf= IMB_allocImBuf(ibuf->x, ibuf->y, ibuf->planes, ib_flag);
+ tmpibuf = IMB_allocImBuf(ibuf->x, ibuf->y, ibuf->planes, ib_flag);
/* simple RGBA image */
if (!(bitspersample == 32 || bitspersample == 16)) {
@@ -412,19 +412,19 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
/* contiguous channels: RGBRGBRGB */
else if (config == PLANARCONFIG_CONTIG) {
for (row = 0; row < ibuf->y; row++) {
- int ib_offset = ibuf->x*ibuf->y*4 - ibuf->x*4 * (row+1);
+ int ib_offset = ibuf->x * ibuf->y * 4 - ibuf->x * 4 * (row + 1);
if (bitspersample == 32) {
success |= TIFFReadScanline(image, fbuf, row, 0);
- scanline_contig_32bit(tmpibuf->rect_float+ib_offset, fbuf, ibuf->x, spp);
+ scanline_contig_32bit(tmpibuf->rect_float + ib_offset, fbuf, ibuf->x, spp);
}
else if (bitspersample == 16) {
success |= TIFFReadScanline(image, sbuf, row, 0);
- scanline_contig_16bit(tmpibuf->rect_float+ib_offset, sbuf, ibuf->x, spp);
+ scanline_contig_16bit(tmpibuf->rect_float + ib_offset, sbuf, ibuf->x, spp);
}
}
- /* separate channels: RRRGGGBBB */
+ /* separate channels: RRRGGGBBB */
}
else if (config == PLANARCONFIG_SEPARATE) {
@@ -432,7 +432,7 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
* but only fill in from the TIFF scanline where necessary. */
for (chan = 0; chan < 4; chan++) {
for (row = 0; row < ibuf->y; row++) {
- int ib_offset = ibuf->x*ibuf->y*4 - ibuf->x*4 * (row+1);
+ int ib_offset = ibuf->x * ibuf->y * 4 - ibuf->x * 4 * (row + 1);
if (bitspersample == 32) {
if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */
@@ -441,7 +441,7 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
success |= TIFFReadScanline(image, fbuf, row, 0);
else
success |= TIFFReadScanline(image, fbuf, row, chan);
- scanline_separate_32bit(tmpibuf->rect_float+ib_offset, fbuf, ibuf->x, chan);
+ scanline_separate_32bit(tmpibuf->rect_float + ib_offset, fbuf, ibuf->x, chan);
}
else if (bitspersample == 16) {
@@ -451,7 +451,7 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
success |= TIFFReadScanline(image, fbuf, row, 0);
else
success |= TIFFReadScanline(image, sbuf, row, chan);
- scanline_separate_16bit(tmpibuf->rect_float+ib_offset, sbuf, ibuf->x, chan);
+ scanline_separate_16bit(tmpibuf->rect_float + ib_offset, sbuf, ibuf->x, chan);
}
}
@@ -464,7 +464,7 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
_TIFFfree(sbuf);
if (success) {
- ibuf->profile = (bitspersample==32)?IB_PROFILE_LINEAR_RGB:IB_PROFILE_SRGB;
+ ibuf->profile = (bitspersample == 32) ? IB_PROFILE_LINEAR_RGB : IB_PROFILE_SRGB;
// Code seems to be not needed for 16 bits tif, on PPC G5 OSX (ton)
if (bitspersample < 16)
@@ -477,9 +477,9 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
/* assign rect last */
if (tmpibuf->rect_float)
- ibuf->rect_float= tmpibuf->rect_float;
+ ibuf->rect_float = tmpibuf->rect_float;
else
- ibuf->rect= tmpibuf->rect;
+ ibuf->rect = tmpibuf->rect;
ibuf->mall |= ib_flag;
ibuf->flags |= ib_flag;
@@ -539,7 +539,7 @@ ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
TIFFGetField(image, TIFFTAG_IMAGELENGTH, &height);
TIFFGetField(image, TIFFTAG_SAMPLESPERPIXEL, &spp);
- ib_depth = (spp==3)?24:32;
+ ib_depth = (spp == 3) ? 24 : 32;
ibuf = IMB_allocImBuf(width, height, ib_depth, 0);
if (ibuf) {
@@ -547,8 +547,8 @@ ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
}
else {
fprintf(stderr,
- "imb_loadtiff: could not allocate memory for TIFF "
- "image.\n");
+ "imb_loadtiff: could not allocate memory for TIFF "
+ "image.\n");
TIFFClose(image);
return NULL;
}
@@ -562,39 +562,39 @@ ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
/* detect if we are reading a tiled/mipmapped texture, in that case
* we don't read pixels but leave it to the cache to load tiles */
if (flags & IB_tilecache) {
- format= NULL;
+ format = NULL;
TIFFGetField(image, TIFFTAG_PIXAR_TEXTUREFORMAT, &format);
- if (format && strcmp(format, "Plain Texture")==0 && TIFFIsTiled(image)) {
+ if (format && strcmp(format, "Plain Texture") == 0 && TIFFIsTiled(image)) {
int numlevel = TIFFNumberOfDirectories(image);
/* create empty mipmap levels in advance */
- for (level=0; level<numlevel; level++) {
+ for (level = 0; level < numlevel; level++) {
if (!TIFFSetDirectory(image, level))
break;
if (level > 0) {
- width= (width > 1)? width/2: 1;
- height= (height > 1)? height/2: 1;
+ width = (width > 1) ? width / 2 : 1;
+ height = (height > 1) ? height / 2 : 1;
- hbuf= IMB_allocImBuf(width, height, 32, 0);
- hbuf->miplevel= level;
- hbuf->ftype= ibuf->ftype;
- ibuf->mipmap[level-1] = hbuf;
+ hbuf = IMB_allocImBuf(width, height, 32, 0);
+ hbuf->miplevel = level;
+ hbuf->ftype = ibuf->ftype;
+ ibuf->mipmap[level - 1] = hbuf;
if (flags & IB_premul)
hbuf->flags |= IB_premul;
}
else
- hbuf= ibuf;
+ hbuf = ibuf;
hbuf->flags |= IB_tilecache;
TIFFGetField(image, TIFFTAG_TILEWIDTH, &hbuf->tilex);
TIFFGetField(image, TIFFTAG_TILELENGTH, &hbuf->tiley);
- hbuf->xtiles= ceil(hbuf->x/(float)hbuf->tilex);
- hbuf->ytiles= ceil(hbuf->y/(float)hbuf->tiley);
+ hbuf->xtiles = ceil(hbuf->x / (float)hbuf->tilex);
+ hbuf->ytiles = ceil(hbuf->y / (float)hbuf->tiley);
imb_addtilesImBuf(hbuf);
@@ -637,9 +637,9 @@ void imb_loadtiletiff(ImBuf *ibuf, unsigned char *mem, size_t size, int tx, int
if (width == ibuf->x && height == ibuf->y) {
if (rect) {
/* tiff pixels are bottom to top, tiles are top to bottom */
- if (TIFFReadRGBATile(image, tx*ibuf->tilex, (ibuf->ytiles - 1 - ty)*ibuf->tiley, rect) == 1) {
+ if (TIFFReadRGBATile(image, tx * ibuf->tilex, (ibuf->ytiles - 1 - ty) * ibuf->tiley, rect) == 1) {
if (ibuf->tiley > ibuf->y)
- memmove(rect, rect+ibuf->tilex*(ibuf->tiley - ibuf->y), sizeof(int)*ibuf->tilex*ibuf->y);
+ memmove(rect, rect + ibuf->tilex * (ibuf->tiley - ibuf->y), sizeof(int) * ibuf->tilex * ibuf->y);
if (ibuf->flags & IB_premul)
IMB_premultiply_rect(rect, 32, ibuf->tilex, ibuf->tiley);
@@ -694,8 +694,8 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
samplesperpixel = (uint16)((ibuf->planes + 7) >> 3);
if ((samplesperpixel > 4) || (samplesperpixel == 2)) {
fprintf(stderr,
- "imb_savetiff: unsupported number of bytes per "
- "pixel: %d\n", samplesperpixel);
+ "imb_savetiff: unsupported number of bytes per "
+ "pixel: %d\n", samplesperpixel);
return (0);
}
@@ -708,8 +708,8 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
if (flags & IB_mem) {
/* bork at the creation of a TIFF in memory */
fprintf(stderr,
- "imb_savetiff: creation of in-memory TIFF files is "
- "not yet supported.\n");
+ "imb_savetiff: creation of in-memory TIFF files is "
+ "not yet supported.\n");
return (0);
}
else {
@@ -718,22 +718,22 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
}
if (image == NULL) {
fprintf(stderr,
- "imb_savetiff: could not open TIFF for writing.\n");
+ "imb_savetiff: could not open TIFF for writing.\n");
return (0);
}
/* allocate array for pixel data */
npixels = ibuf->x * ibuf->y;
if (bitspersample == 16)
- pixels16 = (unsigned short*)_TIFFmalloc(npixels *
- samplesperpixel * sizeof(unsigned short));
+ pixels16 = (unsigned short *)_TIFFmalloc(npixels *
+ samplesperpixel * sizeof(unsigned short));
else
- pixels = (unsigned char*)_TIFFmalloc(npixels *
- samplesperpixel * sizeof(unsigned char));
+ pixels = (unsigned char *)_TIFFmalloc(npixels *
+ samplesperpixel * sizeof(unsigned char));
if (pixels == NULL && pixels16 == NULL) {
fprintf(stderr,
- "imb_savetiff: could not allocate pixels array.\n");
+ "imb_savetiff: could not allocate pixels array.\n");
TIFFClose(image);
return (0);
}
@@ -744,7 +744,7 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
to16 = pixels16;
}
else {
- from = (unsigned char*)ibuf->rect;
+ from = (unsigned char *)ibuf->rect;
to = pixels;
}
@@ -755,26 +755,26 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
if (samplesperpixel == 4) {
/* RGBA images */
TIFFSetField(image, TIFFTAG_EXTRASAMPLES, 1,
- extraSampleTypes);
+ extraSampleTypes);
TIFFSetField(image, TIFFTAG_PHOTOMETRIC,
- PHOTOMETRIC_RGB);
+ PHOTOMETRIC_RGB);
}
else if (samplesperpixel == 3) {
/* RGB images */
TIFFSetField(image, TIFFTAG_PHOTOMETRIC,
- PHOTOMETRIC_RGB);
+ PHOTOMETRIC_RGB);
}
else if (samplesperpixel == 1) {
/* greyscale images, 1 channel */
TIFFSetField(image, TIFFTAG_PHOTOMETRIC,
- PHOTOMETRIC_MINISBLACK);
+ PHOTOMETRIC_MINISBLACK);
}
/* copy pixel data. While copying, we flip the image vertically. */
for (x = 0; x < ibuf->x; x++) {
for (y = 0; y < ibuf->y; y++) {
- from_i = 4*(y*ibuf->x+x);
- to_i = samplesperpixel*((ibuf->y-y-1)*ibuf->x+x);
+ from_i = 4 * (y * ibuf->x + x);
+ to_i = samplesperpixel * ((ibuf->y - y - 1) * ibuf->x + x);
if (pixels16) {
/* convert from float source */
@@ -785,7 +785,7 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
else
copy_v3_v3(rgb, &fromf[from_i]);
- rgb[3] = fromf[from_i+3];
+ rgb[3] = fromf[from_i + 3];
for (i = 0; i < samplesperpixel; i++, to_i++)
to16[to_i] = FTOUSHORT(rgb[i]);
@@ -807,21 +807,21 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
if (ibuf->ppm[0] > 0.0 && ibuf->ppm[1] > 0.0) {
- xres= (float)(ibuf->ppm[0] * 0.0254);
- yres= (float)(ibuf->ppm[1] * 0.0254);
+ xres = (float)(ibuf->ppm[0] * 0.0254);
+ yres = (float)(ibuf->ppm[1] * 0.0254);
}
else {
- xres= yres= 150.0f;
+ xres = yres = 150.0f;
}
TIFFSetField(image, TIFFTAG_XRESOLUTION, xres);
TIFFSetField(image, TIFFTAG_YRESOLUTION, yres);
TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
if (TIFFWriteEncodedStrip(image, 0,
- (bitspersample == 16)? (unsigned char*)pixels16: pixels,
- ibuf->x*ibuf->y*samplesperpixel*bitspersample/8) == -1) {
+ (bitspersample == 16) ? (unsigned char *)pixels16 : pixels,
+ ibuf->x * ibuf->y * samplesperpixel * bitspersample / 8) == -1) {
fprintf(stderr,
- "imb_savetiff: Could not write encoded TIFF.\n");
+ "imb_savetiff: Could not write encoded TIFF.\n");
TIFFClose(image);
if (pixels) _TIFFfree(pixels);
if (pixels16) _TIFFfree(pixels16);
diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c
index 99872192e32..4820347f048 100644
--- a/source/blender/imbuf/intern/util.c
+++ b/source/blender/imbuf/intern/util.c
@@ -93,7 +93,8 @@ const char *imb_ext_image[] = {
#ifdef WITH_OPENEXR
".exr",
#endif
- NULL};
+ NULL
+};
const char *imb_ext_image_qt[] = {
".gif",
@@ -101,7 +102,8 @@ const char *imb_ext_image_qt[] = {
".pct", ".pict",
".pntg",
".qtif",
- NULL};
+ NULL
+};
const char *imb_ext_movie[] = {
".avi",
@@ -128,7 +130,8 @@ const char *imb_ext_movie[] = {
".divx",
".xvid",
".mxf",
- NULL};
+ NULL
+};
/* sort of wrong being here... */
const char *imb_ext_audio[] = {
@@ -145,7 +148,8 @@ const char *imb_ext_audio[] = {
".aif",
".aiff",
".m4a",
- NULL};
+ NULL
+};
static int IMB_ispic_name(const char *name)
{
@@ -160,7 +164,7 @@ static int IMB_ispic_name(const char *name)
if (((st.st_mode) & S_IFMT) != S_IFREG)
return FALSE;
- if ((fp = BLI_open(name, O_BINARY|O_RDONLY, 0)) < 0)
+ if ((fp = BLI_open(name, O_BINARY | O_RDONLY, 0)) < 0)
return FALSE;
if (read(fp, buf, 32) != 32) {
@@ -174,8 +178,8 @@ static int IMB_ispic_name(const char *name)
if ((BIG_LONG(buf[0]) & 0xfffffff0) == 0xffd8ffe0)
return JPG;
- for (type=IMB_FILE_TYPES; type->is_a; type++)
- if (type->is_a((uchar*)buf))
+ for (type = IMB_FILE_TYPES; type->is_a; type++)
+ if (type->is_a((uchar *)buf))
return type->filetype;
return FALSE;
@@ -184,9 +188,9 @@ static int IMB_ispic_name(const char *name)
int IMB_ispic(const char *filename)
{
if (U.uiflag & USER_FILTERFILEEXTS) {
- if ( (BLI_testextensie_array(filename, imb_ext_image)) ||
- (G.have_quicktime && BLI_testextensie_array(filename, imb_ext_image_qt))
- ) {
+ if ( (BLI_testextensie_array(filename, imb_ext_image)) ||
+ (G.have_quicktime && BLI_testextensie_array(filename, imb_ext_image_qt))
+ ) {
return IMB_ispic_name(filename);
}
else {
@@ -200,15 +204,15 @@ int IMB_ispic(const char *filename)
-static int isavi (const char *name)
+static int isavi(const char *name)
{
- return AVI_is_avi (name);
+ return AVI_is_avi(name);
}
#ifdef WITH_QUICKTIME
-static int isqtime (const char *name)
+static int isqtime(const char *name)
{
- return anim_is_quicktime (name);
+ return anim_is_quicktime(name);
}
#endif
@@ -241,7 +245,7 @@ void do_init_ffmpeg(void)
}
}
-static int isffmpeg (const char *filename)
+static int isffmpeg(const char *filename)
{
AVFormatContext *pFormatCtx;
unsigned int i;
@@ -252,24 +256,24 @@ static int isffmpeg (const char *filename)
do_init_ffmpeg();
if (BLI_testextensie(filename, ".swf") ||
- BLI_testextensie(filename, ".jpg") ||
- BLI_testextensie(filename, ".png") ||
- BLI_testextensie(filename, ".dds") ||
- BLI_testextensie(filename, ".tga") ||
- BLI_testextensie(filename, ".bmp") ||
- BLI_testextensie(filename, ".exr") ||
- BLI_testextensie(filename, ".cin") ||
+ BLI_testextensie(filename, ".jpg") ||
+ BLI_testextensie(filename, ".png") ||
+ BLI_testextensie(filename, ".dds") ||
+ BLI_testextensie(filename, ".tga") ||
+ BLI_testextensie(filename, ".bmp") ||
+ BLI_testextensie(filename, ".exr") ||
+ BLI_testextensie(filename, ".cin") ||
BLI_testextensie(filename, ".wav"))
{
return 0;
}
- if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) {
+ if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL) != 0) {
if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_open_input_file failed\n");
return 0;
}
- if (av_find_stream_info(pFormatCtx)<0) {
+ if (av_find_stream_info(pFormatCtx) < 0) {
if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_find_stream_info failed\n");
av_close_input_file(pFormatCtx);
return 0;
@@ -278,32 +282,32 @@ static int isffmpeg (const char *filename)
if (UTIL_DEBUG) av_dump_format(pFormatCtx, 0, filename, 0);
- /* Find the first video stream */
- videoStream=-1;
- for (i=0; i<pFormatCtx->nb_streams; i++)
+ /* Find the first video stream */
+ videoStream = -1;
+ for (i = 0; i < pFormatCtx->nb_streams; i++)
if (pFormatCtx->streams[i] &&
- pFormatCtx->streams[i]->codec &&
- (pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO))
+ pFormatCtx->streams[i]->codec &&
+ (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO))
{
- videoStream=i;
+ videoStream = i;
break;
}
- if (videoStream==-1) {
+ if (videoStream == -1) {
av_close_input_file(pFormatCtx);
return 0;
}
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
- /* Find the decoder for the video stream */
- pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
- if (pCodec==NULL) {
+ /* Find the decoder for the video stream */
+ pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
+ if (pCodec == NULL) {
av_close_input_file(pFormatCtx);
return 0;
}
- if (avcodec_open(pCodecCtx, pCodec)<0) {
+ if (avcodec_open(pCodecCtx, pCodec) < 0) {
av_close_input_file(pFormatCtx);
return 0;
}
@@ -316,9 +320,9 @@ static int isffmpeg (const char *filename)
#endif
#ifdef WITH_REDCODE
-static int isredcode(const char * filename)
+static int isredcode(const char *filename)
{
- struct redcode_handle * h = redcode_open(filename);
+ struct redcode_handle *h = redcode_open(filename);
if (!h) {
return 0;
}
@@ -328,7 +332,7 @@ static int isredcode(const char * filename)
#endif
-int imb_get_anim_type(const char * name)
+int imb_get_anim_type(const char *name)
{
int type;
struct stat st;
@@ -336,13 +340,13 @@ int imb_get_anim_type(const char * name)
if (UTIL_DEBUG) printf("in getanimtype: %s\n", name);
#ifndef _WIN32
-# ifdef WITH_QUICKTIME
+# ifdef WITH_QUICKTIME
if (isqtime(name)) return (ANIM_QTIME);
-# endif
-# ifdef WITH_FFMPEG
+# endif
+# ifdef WITH_FFMPEG
/* stat test below fails on large files > 4GB */
if (isffmpeg(name)) return (ANIM_FFMPEG);
-# endif
+# endif
if (BLI_stat(name, &st) == -1) return(0);
if (((st.st_mode) & S_IFMT) != S_IFREG) return(0);
@@ -354,12 +358,12 @@ int imb_get_anim_type(const char * name)
if (((st.st_mode) & S_IFMT) != S_IFREG) return(0);
if (ismovie(name)) return (ANIM_MOVIE);
-# ifdef WITH_QUICKTIME
+# ifdef WITH_QUICKTIME
if (isqtime(name)) return (ANIM_QTIME);
-# endif
-# ifdef WITH_FFMPEG
+# endif
+# ifdef WITH_FFMPEG
if (isffmpeg(name)) return (ANIM_FFMPEG);
-# endif
+# endif
if (isavi(name)) return (ANIM_AVI);
@@ -412,5 +416,5 @@ int IMB_isanim(const char *filename)
type = imb_get_anim_type(filename);
}
- return (type && type!=ANIM_SEQUENCE);
+ return (type && type != ANIM_SEQUENCE);
}
diff --git a/source/blender/imbuf/intern/writeimage.c b/source/blender/imbuf/intern/writeimage.c
index 60fc7db6465..1c182e9784e 100644
--- a/source/blender/imbuf/intern/writeimage.c
+++ b/source/blender/imbuf/intern/writeimage.c
@@ -47,10 +47,10 @@ short IMB_saveiff(struct ImBuf *ibuf, const char *name, int flags)
if (ibuf == NULL) return (FALSE);
ibuf->flags = flags;
- for (type=IMB_FILE_TYPES; type->is_a; type++) {
+ for (type = IMB_FILE_TYPES; type->is_a; type++) {
if (type->save && type->ftype(type, ibuf)) {
if (!(type->flag & IM_FTYPE_FLOAT)) {
- if (ibuf->rect==NULL && ibuf->rect_float)
+ if (ibuf->rect == NULL && ibuf->rect_float)
IMB_rect_from_float(ibuf);
}
return type->save(ibuf, name, flags);
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 2404459889c..814b1d18876 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -226,10 +226,14 @@ typedef struct PreviewImage {
#define ID_BLEND_PATH(_bmain, _id) ((_id)->lib ? (_id)->lib->filepath : (_bmain)->name)
#ifdef GS
-#undef GS
+# undef GS
#endif
#define GS(a) (*((short *)(a)))
+#define ID_NEW(a) if ( (a) && (a)->id.newid ) (a) = (void *)(a)->id.newid
+#define ID_NEW_US(a) if ( (a)->id.newid) { (a) = (void *)(a)->id.newid; (a)->id.us++; }
+#define ID_NEW_US2(a) if (((ID *)a)->newid) { (a) = ((ID *)a)->newid; ((ID *)a)->us++; }
+
/* id->flag: set frist 8 bits always at zero while reading */
#define LIB_LOCAL 0
#define LIB_EXTERN 1
diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h
index b0a1d23f166..70e9cf04b18 100644
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@ -189,9 +189,9 @@ typedef struct MDisps {
float (*disps)[3];
/* Used for hiding parts of a multires mesh. Essentially the multires
- equivalent of MVert.flag's ME_HIDE bit.
-
- This is a bitmap, keep in sync with type used in BLI_bitmap.h */
+ * equivalent of MVert.flag's ME_HIDE bit.
+ *
+ * This is a bitmap, keep in sync with type used in BLI_bitmap.h */
unsigned int *hidden;
} MDisps;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 30280e95646..971ce613edc 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -745,10 +745,11 @@ typedef struct ScrewModifierData {
short flag;
} ScrewModifierData;
-#define MOD_SCREW_NORMAL_FLIP (1<<0)
-#define MOD_SCREW_NORMAL_CALC (1<<1)
-#define MOD_SCREW_OBJECT_OFFSET (1<<2)
-// #define MOD_SCREW_OBJECT_ANGLE (1<<4)
+#define MOD_SCREW_NORMAL_FLIP (1 << 0)
+#define MOD_SCREW_NORMAL_CALC (1 << 1)
+#define MOD_SCREW_OBJECT_OFFSET (1 << 2)
+// #define MOD_SCREW_OBJECT_ANGLE (1 << 4)
+#define MOD_SCREW_SMOOTH_SHADING (1 << 5)
typedef struct OceanModifierData {
ModifierData modifier;
@@ -1032,6 +1033,7 @@ typedef struct DynamicPaintModifierData {
typedef enum RemeshModifierFlags {
MOD_REMESH_FLOOD_FILL = 1,
+ MOD_REMESH_SMOOTH_SHADING = 2,
} RemeshModifierFlags;
typedef enum RemeshModifierMode {
diff --git a/source/blender/makesdna/DNA_movieclip_types.h b/source/blender/makesdna/DNA_movieclip_types.h
index ed7310ff883..f073a1957dc 100644
--- a/source/blender/makesdna/DNA_movieclip_types.h
+++ b/source/blender/makesdna/DNA_movieclip_types.h
@@ -84,7 +84,7 @@ typedef struct MovieClip {
struct MovieClipProxy proxy; /* proxy to clip data */
int flag;
- int len; /* lenght of movie */
+ int len; /* length of movie */
} MovieClip;
typedef struct MovieClipScopes {
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 6fbaf1723bc..4bbd1e20973 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -68,6 +68,14 @@ typedef struct bNodeStack {
#define NS_OSA_VECTORS 1
#define NS_OSA_VALUES 2
+/* node socket/node socket type -b conversion rules */
+#define NS_CR_CENTER 0
+#define NS_CR_NONE 1
+#define NS_CR_FIT_WIDTH 2
+#define NS_CR_FIT_HEIGHT 3
+#define NS_CR_FIT 4
+#define NS_CR_STRETCH 5
+
typedef struct bNodeSocket {
struct bNodeSocket *next, *prev, *new_sock;
@@ -87,7 +95,7 @@ typedef struct bNodeSocket {
short stack_index; /* local stack index */
/* XXX deprecated, kept for forward compatibility */
short stack_type DNA_DEPRECATED;
- int pad2;
+ int resizemode; /* compositor resize mode of the socket */
void *cache; /* cached data from execution */
/* internal data to retrieve relations and groups */
@@ -223,6 +231,11 @@ typedef struct bNodeLink {
#define NODE_LINKFLAG_HILITE 1 /* link has been successfully validated */
#define NODE_LINK_VALID 2
+/* tree->edit_quality/tree->render_quality */
+#define NTREE_QUALITY_HIGH 0
+#define NTREE_QUALITY_MEDIUM 1
+#define NTREE_QUALITY_LOW 2
+
/* the basis for a Node tree, all links and nodes reside internal here */
/* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
typedef struct bNodeTree {
@@ -240,6 +253,10 @@ typedef struct bNodeTree {
int update; /* update flags */
int nodetype; /* specific node type this tree is used for */
+
+ short edit_quality; /* Quality setting when editing */
+ short render_quality; /* Quality setting when rendering */
+ int chunksize; /* tile size for compositor engine */
ListBase inputs, outputs; /* external sockets for group nodes */
@@ -271,6 +288,7 @@ typedef struct bNodeTree {
/* ntree->flag */
#define NTREE_DS_EXPAND 1 /* for animation editors */
+#define NTREE_COM_OPENCL 2 /* use opencl */
/* XXX not nice, but needed as a temporary flags
* for group updates after library linking.
*/
@@ -317,6 +335,16 @@ typedef struct bNodeSocketValueRGBA {
/* data structs, for node->storage */
+#define CMP_NODE_MASKTYPE_ADD 0
+#define CMP_NODE_MASKTYPE_SUBTRACT 1
+#define CMP_NODE_MASKTYPE_MULTIPLY 2
+#define CMP_NODE_MASKTYPE_NOT 3
+
+#define CMP_NODE_LENSFLARE_GHOST 1
+#define CMP_NODE_LENSFLARE_GLOW 2
+#define CMP_NODE_LENSFLARE_CIRCLE 4
+#define CMP_NODE_LENSFLARE_STREAKS 8
+
/* this one has been replaced with ImageUser, keep it for do_versions() */
typedef struct NodeImageAnim {
int frames, sfra, nr;
@@ -324,10 +352,54 @@ typedef struct NodeImageAnim {
short pad;
} NodeImageAnim;
+typedef struct ColorCorrectionData {
+ float saturation;
+ float contrast;
+ float gamma;
+ float gain;
+ float lift;
+ int pad;
+} ColorCorrectionData;
+
+typedef struct NodeColorCorrection {
+ ColorCorrectionData master;
+ ColorCorrectionData shadows;
+ ColorCorrectionData midtones;
+ ColorCorrectionData highlights;
+ float startmidtones;
+ float endmidtones;
+} NodeColorCorrection;
+
+typedef struct NodeBokehImage {
+ float angle;
+ int flaps;
+ float rounding;
+ float catadioptric;
+ float lensshift;
+} NodeBokehImage;
+
+typedef struct NodeBoxMask {
+ float x;
+ float y;
+ float rotation;
+ float height;
+ float width;
+ int pad;
+} NodeBoxMask;
+
+typedef struct NodeEllipseMask {
+ float x;
+ float y;
+ float rotation;
+ float height;
+ float width;
+ int pad;
+} NodeEllipseMask;
+
/* layer info for image node outputs */
typedef struct NodeImageLayer {
- /* index in the Image->layers and Image->layers->passes lists */
- int layer_index, pass_index;
+ /* index in the Image->layers->passes lists */
+ int pass_index;
/* render pass flag, in case this is an original render pass */
int pass_flag;
} NodeImageLayer;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 85016256129..2a2e312c43b 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -893,7 +893,7 @@ typedef struct ToolSettings {
UvSculpt *uvsculpt; /* uv smooth */
/* Vertex group weight - used only for editmode, not weight
- paint */
+ * paint */
float vgroup_weight;
/* Subdivide Settings */
@@ -1340,9 +1340,6 @@ typedef struct Scene {
#define V3D_CAMERA_LOCAL(v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : NULL)
#define V3D_CAMERA_SCENE(scene, v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : (scene)->camera)
-#define ID_NEW(a) if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
-#define ID_NEW_US(a) if( (a)->id.newid) {(a)= (void *)(a)->id.newid; (a)->id.us++;}
-#define ID_NEW_US2(a) if( ((ID *)a)->newid) {(a)= ((ID *)a)->newid; ((ID *)a)->us++;}
#define CFRA (scene->r.cfra)
#define SUBFRA (scene->r.subframe)
#define SFRA (scene->r.sfra)
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index c026c2018fd..7497f5e7449 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -517,9 +517,10 @@ typedef struct ColorMapping {
#define MTEX_LIN_LIGHT 16
/* brush_map_mode */
-#define MTEX_MAP_MODE_FIXED 0
+#define MTEX_MAP_MODE_VIEW 0
#define MTEX_MAP_MODE_TILED 1
#define MTEX_MAP_MODE_3D 2
+#define MTEX_MAP_MODE_AREA 3
/* **************** EnvMap ********************* */
diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c
index d0429041d9b..80c80d02e06 100644
--- a/source/blender/makesdna/intern/dna_genfile.c
+++ b/source/blender/makesdna/intern/dna_genfile.c
@@ -143,10 +143,10 @@ static short le_short(short temp);
static short le_short(short temp)
{
short new;
- char *rt=(char *)&temp, *rtn=(char *)&new;
+ char *rt = (char *)&temp, *rtn = (char *)&new;
- rtn[0]= rt[1];
- rtn[1]= rt[0];
+ rtn[0] = rt[1];
+ rtn[1] = rt[0];
return new;
}
@@ -155,12 +155,12 @@ static short le_short(short temp)
static int le_int(int temp)
{
int new;
- char *rt=(char *)&temp, *rtn=(char *)&new;
+ char *rt = (char *)&temp, *rtn = (char *)&new;
- rtn[0]= rt[3];
- rtn[1]= rt[2];
- rtn[2]= rt[1];
- rtn[3]= rt[0];
+ rtn[0] = rt[3];
+ rtn[1] = rt[2];
+ rtn[2] = rt[1];
+ rtn[3] = rt[0];
return new;
}
@@ -171,18 +171,18 @@ static int le_int(int temp)
/* allowed duplicate code from makesdna.c */
int DNA_elem_array_size(const char *astr, int len)
{
- int a, mul=1;
- char str[100], *cp= NULL;
+ int a, mul = 1;
+ char str[100], *cp = NULL;
- memcpy(str, astr, len+1);
+ memcpy(str, astr, len + 1);
- for (a=0; a<len; a++) {
- if ( str[a]== '[' ) {
- cp= &(str[a+1]);
+ for (a = 0; a < len; a++) {
+ if (str[a] == '[') {
+ cp = &(str[a + 1]);
}
- else if ( str[a]==']' && cp) {
- str[a]= 0;
- mul*= atoi(cp);
+ else if (str[a] == ']' && cp) {
+ str[a] = 0;
+ mul *= atoi(cp);
}
}
@@ -210,7 +210,7 @@ void DNA_sdna_free(SDNA *sdna)
static int ispointer(const char *name)
{
/* check if pointer or function pointer */
- return (name[0]=='*' || (name[0]=='(' && name[1]=='*'));
+ return (name[0] == '*' || (name[0] == '(' && name[1] == '*'));
}
static int elementsize(SDNA *sdna, short type, short name)
@@ -219,24 +219,24 @@ static int elementsize(SDNA *sdna, short type, short name)
int mul, namelen, len;
const char *cp;
- cp= sdna->names[name];
- len= 0;
+ cp = sdna->names[name];
+ len = 0;
- namelen= strlen(cp);
+ namelen = strlen(cp);
/* is it a pointer or function pointer? */
if (ispointer(cp)) {
/* has the naam an extra length? (array) */
- mul= 1;
- if ( cp[namelen-1]==']') mul= DNA_elem_array_size(cp, namelen);
+ mul = 1;
+ if (cp[namelen - 1] == ']') mul = DNA_elem_array_size(cp, namelen);
- len= sdna->pointerlen*mul;
+ len = sdna->pointerlen * mul;
}
- else if ( sdna->typelens[type] ) {
+ else if (sdna->typelens[type]) {
/* has the naam an extra length? (array) */
- mul= 1;
- if ( cp[namelen-1]==']') mul= DNA_elem_array_size(cp, namelen);
+ mul = 1;
+ if (cp[namelen - 1] == ']') mul = DNA_elem_array_size(cp, namelen);
- len= mul*sdna->typelens[type];
+ len = mul * sdna->typelens[type];
}
@@ -250,13 +250,13 @@ static void printstruct(SDNA *sdna, short strnr)
int b, nr;
short *sp;
- sp= sdna->structs[strnr];
+ sp = sdna->structs[strnr];
- printf("struct %s\n", sdna->types[ sp[0] ]);
- nr= sp[1];
- sp+= 2;
+ printf("struct %s\n", sdna->types[sp[0]]);
+ nr = sp[1];
+ sp += 2;
- for (b=0; b< nr; b++, sp+= 2) {
+ for (b = 0; b < nr; b++, sp += 2) {
printf(" %s %s\n", sdna->types[sp[0]], sdna->names[sp[1]]);
}
}
@@ -265,14 +265,14 @@ static void printstruct(SDNA *sdna, short strnr)
static short *findstruct_name(SDNA *sdna, const char *str)
{
int a;
- short *sp= NULL;
+ short *sp = NULL;
- for (a=0; a<sdna->nr_structs; a++) {
+ for (a = 0; a < sdna->nr_structs; a++) {
- sp= sdna->structs[a];
+ sp = sdna->structs[a];
- if (strcmp( sdna->types[ sp[0] ], str )==0) return sp;
+ if (strcmp(sdna->types[sp[0]], str) == 0) return sp;
}
return NULL;
@@ -280,11 +280,11 @@ static short *findstruct_name(SDNA *sdna, const char *str)
int DNA_struct_find_nr(SDNA *sdna, const char *str)
{
- short *sp= NULL;
+ short *sp = NULL;
- if (sdna->lastfind<sdna->nr_structs) {
- sp= sdna->structs[sdna->lastfind];
- if (strcmp( sdna->types[ sp[0] ], str )==0) return sdna->lastfind;
+ if (sdna->lastfind < sdna->nr_structs) {
+ sp = sdna->structs[sdna->lastfind];
+ if (strcmp(sdna->types[sp[0]], str) == 0) return sdna->lastfind;
}
#ifdef WITH_DNA_GHASH
@@ -293,12 +293,12 @@ int DNA_struct_find_nr(SDNA *sdna, const char *str)
{
int a;
- for (a=0; a<sdna->nr_structs; a++) {
+ for (a = 0; a < sdna->nr_structs; a++) {
- sp= sdna->structs[a];
+ sp = sdna->structs[a];
- if (strcmp( sdna->types[ sp[0] ], str )==0) {
- sdna->lastfind= a;
+ if (strcmp(sdna->types[sp[0]], str) == 0) {
+ sdna->lastfind = a;
return a;
}
}
@@ -314,172 +314,172 @@ int DNA_struct_find_nr(SDNA *sdna, const char *str)
static void init_structDNA(SDNA *sdna, int do_endian_swap)
/* in sdna->data the data, now we convert that to something understandable */
{
- int *data, *verg, gravity_fix= -1;
+ int *data, *verg, gravity_fix = -1;
intptr_t nr;
short *sp;
char str[8], *cp;
- verg= (int *)str;
- data= (int *)sdna->data;
+ verg = (int *)str;
+ data = (int *)sdna->data;
strcpy(str, "SDNA");
- if ( *data == *verg ) {
+ if (*data == *verg) {
data++;
/* load names array */
strcpy(str, "NAME");
- if ( *data == *verg ) {
+ if (*data == *verg) {
data++;
- if (do_endian_swap) sdna->nr_names= le_int(*data);
- else sdna->nr_names= *data;
+ if (do_endian_swap) sdna->nr_names = le_int(*data);
+ else sdna->nr_names = *data;
data++;
- sdna->names= MEM_callocN(sizeof(void *)*sdna->nr_names, "sdnanames");
+ sdna->names = MEM_callocN(sizeof(void *) * sdna->nr_names, "sdnanames");
}
else {
printf("NAME error in SDNA file\n");
return;
}
- nr= 0;
- cp= (char *)data;
- while (nr<sdna->nr_names) {
- sdna->names[nr]= cp;
+ nr = 0;
+ cp = (char *)data;
+ while (nr < sdna->nr_names) {
+ sdna->names[nr] = cp;
/* "float gravity [3]" was parsed wrong giving both "gravity" and
* "[3]" members. we rename "[3]", and later set the type of
* "gravity" to "void" so the offsets work out correct */
- if (*cp == '[' && strcmp(cp, "[3]")==0) {
- if (nr && strcmp(sdna->names[nr-1], "Cvi") == 0) {
- sdna->names[nr]= "gravity[3]";
- gravity_fix= nr;
+ if (*cp == '[' && strcmp(cp, "[3]") == 0) {
+ if (nr && strcmp(sdna->names[nr - 1], "Cvi") == 0) {
+ sdna->names[nr] = "gravity[3]";
+ gravity_fix = nr;
}
}
- while ( *cp) cp++;
+ while (*cp) cp++;
cp++;
nr++;
}
- nr= (intptr_t)cp; /* prevent BUS error */
- nr= (nr+3) & ~3;
- cp= (char *)nr;
+ nr = (intptr_t)cp; /* prevent BUS error */
+ nr = (nr + 3) & ~3;
+ cp = (char *)nr;
/* load type names array */
- data= (int *)cp;
+ data = (int *)cp;
strcpy(str, "TYPE");
- if ( *data == *verg ) {
+ if (*data == *verg) {
data++;
- if (do_endian_swap) sdna->nr_types= le_int(*data);
- else sdna->nr_types= *data;
+ if (do_endian_swap) sdna->nr_types = le_int(*data);
+ else sdna->nr_types = *data;
data++;
- sdna->types= MEM_callocN(sizeof(void *)*sdna->nr_types, "sdnatypes");
+ sdna->types = MEM_callocN(sizeof(void *) * sdna->nr_types, "sdnatypes");
}
else {
printf("TYPE error in SDNA file\n");
return;
}
- nr= 0;
- cp= (char *)data;
- while (nr<sdna->nr_types) {
- sdna->types[nr]= cp;
+ nr = 0;
+ cp = (char *)data;
+ while (nr < sdna->nr_types) {
+ sdna->types[nr] = cp;
/* this is a patch, to change struct names without a conflict with SDNA */
/* be careful to use it, in this case for a system-struct (opengl/X) */
- if ( *cp == 'b') {
+ if (*cp == 'b') {
/* struct Screen was already used by X, 'bScreen' replaces the old IrisGL 'Screen' struct */
- if ( strcmp("bScreen", cp)==0 ) sdna->types[nr]= cp+1;
+ if (strcmp("bScreen", cp) == 0) sdna->types[nr] = cp + 1;
}
- while ( *cp) cp++;
+ while (*cp) cp++;
cp++;
nr++;
}
- nr= (intptr_t)cp; /* prevent BUS error */
- nr= (nr+3) & ~3;
- cp= (char *)nr;
+ nr = (intptr_t)cp; /* prevent BUS error */
+ nr = (nr + 3) & ~3;
+ cp = (char *)nr;
/* load typelen array */
- data= (int *)cp;
+ data = (int *)cp;
strcpy(str, "TLEN");
- if ( *data == *verg ) {
+ if (*data == *verg) {
data++;
- sp= (short *)data;
- sdna->typelens= sp;
+ sp = (short *)data;
+ sdna->typelens = sp;
if (do_endian_swap) {
- short a, *spo= sp;
+ short a, *spo = sp;
- a= sdna->nr_types;
+ a = sdna->nr_types;
while (a--) {
- spo[0]= le_short(spo[0]);
+ spo[0] = le_short(spo[0]);
spo++;
}
}
- sp+= sdna->nr_types;
+ sp += sdna->nr_types;
}
else {
printf("TLEN error in SDNA file\n");
return;
}
- if (sdna->nr_types & 1) sp++; /* prevent BUS error */
+ if (sdna->nr_types & 1) sp++; /* prevent BUS error */
/* load struct array */
- data= (int *)sp;
+ data = (int *)sp;
strcpy(str, "STRC");
- if ( *data == *verg ) {
+ if (*data == *verg) {
data++;
- if (do_endian_swap) sdna->nr_structs= le_int(*data);
- else sdna->nr_structs= *data;
+ if (do_endian_swap) sdna->nr_structs = le_int(*data);
+ else sdna->nr_structs = *data;
data++;
- sdna->structs= MEM_callocN(sizeof(void *)*sdna->nr_structs, "sdnastrcs");
+ sdna->structs = MEM_callocN(sizeof(void *) * sdna->nr_structs, "sdnastrcs");
}
else {
printf("STRC error in SDNA file\n");
return;
}
- nr= 0;
- sp= (short *)data;
- while (nr<sdna->nr_structs) {
- sdna->structs[nr]= sp;
+ nr = 0;
+ sp = (short *)data;
+ while (nr < sdna->nr_structs) {
+ sdna->structs[nr] = sp;
if (do_endian_swap) {
short a;
- sp[0]= le_short(sp[0]);
- sp[1]= le_short(sp[1]);
+ sp[0] = le_short(sp[0]);
+ sp[1] = le_short(sp[1]);
- a= sp[1];
- sp+= 2;
+ a = sp[1];
+ sp += 2;
while (a--) {
- sp[0]= le_short(sp[0]);
- sp[1]= le_short(sp[1]);
- sp+= 2;
+ sp[0] = le_short(sp[0]);
+ sp[1] = le_short(sp[1]);
+ sp += 2;
}
}
else {
- sp+= 2*sp[1]+2;
+ sp += 2 * sp[1] + 2;
}
nr++;
}
/* finally pointerlen: use struct ListBase to test it, never change the size of it! */
- sp= findstruct_name(sdna, "ListBase");
+ sp = findstruct_name(sdna, "ListBase");
/* weird; i have no memory of that... I think I used sizeof(void *) before... (ton) */
- sdna->pointerlen= sdna->typelens[ sp[0] ]/2;
+ sdna->pointerlen = sdna->typelens[sp[0]] / 2;
- if (sp[1]!=2 || (sdna->pointerlen!=4 && sdna->pointerlen!=8)) {
+ if (sp[1] != 2 || (sdna->pointerlen != 4 && sdna->pointerlen != 8)) {
printf("ListBase struct error! Needs it to calculate pointerize.\n");
exit(0);
/* well, at least sizeof(ListBase) is error proof! (ton) */
@@ -487,19 +487,19 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap)
/* second part of gravity problem, setting "gravity" type to void */
if (gravity_fix > -1) {
- for (nr=0; nr<sdna->nr_structs; nr++) {
- sp= sdna->structs[nr];
+ for (nr = 0; nr < sdna->nr_structs; nr++) {
+ sp = sdna->structs[nr];
if (strcmp(sdna->types[sp[0]], "ClothSimSettings") == 0)
- sp[10]= SDNA_TYPE_VOID;
+ sp[10] = SDNA_TYPE_VOID;
}
}
#ifdef WITH_DNA_GHASH
/* create a ghash lookup to speed up */
- sdna->structs_map= BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "init_structDNA gh");
+ sdna->structs_map = BLI_ghash_str_new("init_structDNA gh");
for (nr = 0; nr < sdna->nr_structs; nr++) {
- sp= sdna->structs[nr];
+ sp = sdna->structs[nr];
BLI_ghash_insert(sdna->structs_map, (void *)sdna->types[sp[0]], (void *)(nr + 1));
}
#endif
@@ -508,12 +508,12 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap)
SDNA *DNA_sdna_from_data(void *data, int datalen, int do_endian_swap)
{
- SDNA *sdna= MEM_mallocN(sizeof(*sdna), "sdna");
+ SDNA *sdna = MEM_mallocN(sizeof(*sdna), "sdna");
- sdna->lastfind= 0;
+ sdna->lastfind = 0;
- sdna->datalen= datalen;
- sdna->data= MEM_mallocN(datalen, "sdna_data");
+ sdna->datalen = datalen;
+ sdna->data = MEM_mallocN(datalen, "sdna_data");
memcpy(sdna->data, data, datalen);
init_structDNA(sdna, do_endian_swap);
@@ -532,19 +532,19 @@ static void recurs_test_compflags(SDNA *sdna, char *compflags, int structnr)
const char *cp;
/* check all structs, test if it's inside another struct */
- sp= sdna->structs[structnr];
- typenr= sp[0];
+ sp = sdna->structs[structnr];
+ typenr = sp[0];
- for (a=0; a<sdna->nr_structs; a++) {
- if (a!=structnr && compflags[a]==1) {
- sp= sdna->structs[a];
- elems= sp[1];
- sp+= 2;
- for (b=0; b<elems; b++, sp+=2) {
- if (sp[0]==typenr) {
- cp= sdna->names[ sp[1] ];
+ for (a = 0; a < sdna->nr_structs; a++) {
+ if (a != structnr && compflags[a] == 1) {
+ sp = sdna->structs[a];
+ elems = sp[1];
+ sp += 2;
+ for (b = 0; b < elems; b++, sp += 2) {
+ if (sp[0] == typenr) {
+ cp = sdna->names[sp[1]];
if (!ispointer(cp)) {
- compflags[a]= 2;
+ compflags[a] = 2;
recurs_test_compflags(sdna, compflags, a);
}
}
@@ -554,11 +554,11 @@ static void recurs_test_compflags(SDNA *sdna, char *compflags, int structnr)
}
- /* Unsure of exact function - compares the sdna argument to
- * newsdna and sets up the information necessary to convert
- * data written with a dna of oldsdna to inmemory data with a
- * structure defined by the newsdna sdna (I think). -zr
- */
+/* Unsure of exact function - compares the sdna argument to
+ * newsdna and sets up the information necessary to convert
+ * data written with a dna of oldsdna to inmemory data with a
+ * structure defined by the newsdna sdna (I think). -zr
+ */
/* well, the function below is just a lookup table to speed
* up reading files. doh! -ton
@@ -576,53 +576,53 @@ char *DNA_struct_get_compareflags(SDNA *sdna, SDNA *newsdna)
const char *str1, *str2;
char *compflags;
- if (sdna->nr_structs==0) {
+ if (sdna->nr_structs == 0) {
printf("error: file without SDNA\n");
return NULL;
}
- compflags= MEM_callocN(sdna->nr_structs, "compflags");
+ compflags = MEM_callocN(sdna->nr_structs, "compflags");
/* we check all structs in 'sdna' and compare them with
* the structs in 'newsdna'
*/
- for (a=0; a<sdna->nr_structs; a++) {
- spold= sdna->structs[a];
+ for (a = 0; a < sdna->nr_structs; a++) {
+ spold = sdna->structs[a];
/* search for type in cur */
- spcur= findstruct_name(newsdna, sdna->types[spold[0]]);
+ spcur = findstruct_name(newsdna, sdna->types[spold[0]]);
if (spcur) {
- compflags[a]= 2;
+ compflags[a] = 2;
/* compare length and amount of elems */
- if ( spcur[1] == spold[1]) {
- if ( newsdna->typelens[spcur[0]] == sdna->typelens[spold[0]] ) {
+ if (spcur[1] == spold[1]) {
+ if (newsdna->typelens[spcur[0]] == sdna->typelens[spold[0]]) {
/* same length, same amount of elems, now per type and name */
- b= spold[1];
- spold+= 2;
- spcur+= 2;
+ b = spold[1];
+ spold += 2;
+ spcur += 2;
while (b > 0) {
- str1= newsdna->types[spcur[0]];
- str2= sdna->types[spold[0]];
- if (strcmp(str1, str2)!=0) break;
+ str1 = newsdna->types[spcur[0]];
+ str2 = sdna->types[spold[0]];
+ if (strcmp(str1, str2) != 0) break;
- str1= newsdna->names[spcur[1]];
- str2= sdna->names[spold[1]];
- if (strcmp(str1, str2)!=0) break;
+ str1 = newsdna->names[spcur[1]];
+ str2 = sdna->names[spold[1]];
+ if (strcmp(str1, str2) != 0) break;
/* same type and same name, now pointersize */
if (ispointer(str1)) {
- if (sdna->pointerlen!=newsdna->pointerlen) break;
+ if (sdna->pointerlen != newsdna->pointerlen) break;
}
b--;
- spold+= 2;
- spcur+= 2;
+ spold += 2;
+ spcur += 2;
}
- if (b==0) compflags[a]= 1;
+ if (b == 0) compflags[a] = 1;
}
}
@@ -633,20 +633,20 @@ char *DNA_struct_get_compareflags(SDNA *sdna, SDNA *newsdna)
/* first struct in util.h is struct Link, this is skipped in compflags (als # 0).
* was a bug, and this way dirty patched! Solve this later....
*/
- compflags[0]= 1;
+ compflags[0] = 1;
/* Because structs can be inside structs, we recursively
* set flags when a struct is altered
*/
- for (a=0; a<sdna->nr_structs; a++) {
- if (compflags[a]==2) recurs_test_compflags(sdna, compflags, a);
+ for (a = 0; a < sdna->nr_structs; a++) {
+ if (compflags[a] == 2) recurs_test_compflags(sdna, compflags, a);
}
#if 0
- for (a=0; a<sdna->nr_structs; a++) {
- if (compflags[a]==2) {
- spold= sdna->structs[a];
- printf("changed: %s\n", sdna->types[ spold[0] ]);
+ for (a = 0; a < sdna->nr_structs; a++) {
+ if (compflags[a] == 2) {
+ spold = sdna->structs[a];
+ printf("changed: %s\n", sdna->types[spold[0]]);
}
}
#endif
@@ -656,94 +656,94 @@ char *DNA_struct_get_compareflags(SDNA *sdna, SDNA *newsdna)
static eSDNA_Type sdna_type_nr(const char *dna_type)
{
- if ((strcmp(dna_type, "char")==0) || (strcmp(dna_type, "const char")==0)) return SDNA_TYPE_CHAR;
- else if ((strcmp(dna_type, "uchar")==0) || (strcmp(dna_type, "unsigned char")==0)) return SDNA_TYPE_UCHAR;
- else if ( strcmp(dna_type, "short")==0) return SDNA_TYPE_SHORT;
- else if ((strcmp(dna_type, "ushort")==0)||(strcmp(dna_type, "unsigned short")==0)) return SDNA_TYPE_USHORT;
- else if ( strcmp(dna_type, "int")==0) return SDNA_TYPE_INT;
- else if ( strcmp(dna_type, "long")==0) return SDNA_TYPE_LONG;
- else if ((strcmp(dna_type, "ulong")==0)||(strcmp(dna_type, "unsigned long")==0)) return SDNA_TYPE_ULONG;
- else if ( strcmp(dna_type, "float")==0) return SDNA_TYPE_FLOAT;
- else if ( strcmp(dna_type, "double")==0) return SDNA_TYPE_DOUBLE;
- else if ( strcmp(dna_type, "int64_t")==0) return SDNA_TYPE_INT64;
- else if ( strcmp(dna_type, "uint64_t")==0) return SDNA_TYPE_UINT64;
- else return -1; /* invalid! */
+ if ((strcmp(dna_type, "char") == 0) || (strcmp(dna_type, "const char") == 0)) return SDNA_TYPE_CHAR;
+ else if ((strcmp(dna_type, "uchar") == 0) || (strcmp(dna_type, "unsigned char") == 0)) return SDNA_TYPE_UCHAR;
+ else if ( strcmp(dna_type, "short") == 0) return SDNA_TYPE_SHORT;
+ else if ((strcmp(dna_type, "ushort") == 0)||(strcmp(dna_type, "unsigned short") == 0)) return SDNA_TYPE_USHORT;
+ else if ( strcmp(dna_type, "int") == 0) return SDNA_TYPE_INT;
+ else if ( strcmp(dna_type, "long") == 0) return SDNA_TYPE_LONG;
+ else if ((strcmp(dna_type, "ulong") == 0)||(strcmp(dna_type, "unsigned long") == 0)) return SDNA_TYPE_ULONG;
+ else if ( strcmp(dna_type, "float") == 0) return SDNA_TYPE_FLOAT;
+ else if ( strcmp(dna_type, "double") == 0) return SDNA_TYPE_DOUBLE;
+ else if ( strcmp(dna_type, "int64_t") == 0) return SDNA_TYPE_INT64;
+ else if ( strcmp(dna_type, "uint64_t") == 0) return SDNA_TYPE_UINT64;
+ else return -1; /* invalid! */
}
static void cast_elem(const char *ctype, const char *otype, const char *name, char *curdata, char *olddata)
{
double val = 0.0;
- int arrlen, curlen=1, oldlen=1;
+ int arrlen, curlen = 1, oldlen = 1;
eSDNA_Type ctypenr, otypenr;
- arrlen= DNA_elem_array_size(name, strlen(name));
+ arrlen = DNA_elem_array_size(name, strlen(name));
- if ( (otypenr= sdna_type_nr(otype)) == -1 ||
- (ctypenr= sdna_type_nr(ctype)) == -1 )
+ if ( (otypenr = sdna_type_nr(otype)) == -1 ||
+ (ctypenr = sdna_type_nr(ctype)) == -1)
{
return;
}
/* define lengths */
- oldlen= DNA_elem_type_size(otypenr);
- curlen= DNA_elem_type_size(ctypenr);
+ oldlen = DNA_elem_type_size(otypenr);
+ curlen = DNA_elem_type_size(ctypenr);
- while (arrlen>0) {
+ while (arrlen > 0) {
switch (otypenr) {
- case SDNA_TYPE_CHAR:
- val= *olddata; break;
- case SDNA_TYPE_UCHAR:
- val= *( (unsigned char *)olddata); break;
- case SDNA_TYPE_SHORT:
- val= *( (short *)olddata); break;
- case SDNA_TYPE_USHORT:
- val= *( (unsigned short *)olddata); break;
- case SDNA_TYPE_INT:
- val= *( (int *)olddata); break;
- case SDNA_TYPE_LONG:
- val= *( (int *)olddata); break;
- case SDNA_TYPE_ULONG:
- val= *( (unsigned int *)olddata); break;
- case SDNA_TYPE_FLOAT:
- val= *( (float *)olddata); break;
- case SDNA_TYPE_DOUBLE:
- val= *( (double *)olddata); break;
- case SDNA_TYPE_INT64:
- val= *( (int64_t *)olddata); break;
- case SDNA_TYPE_UINT64:
- val= *( (uint64_t *)olddata); break;
+ case SDNA_TYPE_CHAR:
+ val = *olddata; break;
+ case SDNA_TYPE_UCHAR:
+ val = *( (unsigned char *)olddata); break;
+ case SDNA_TYPE_SHORT:
+ val = *( (short *)olddata); break;
+ case SDNA_TYPE_USHORT:
+ val = *( (unsigned short *)olddata); break;
+ case SDNA_TYPE_INT:
+ val = *( (int *)olddata); break;
+ case SDNA_TYPE_LONG:
+ val = *( (int *)olddata); break;
+ case SDNA_TYPE_ULONG:
+ val = *( (unsigned int *)olddata); break;
+ case SDNA_TYPE_FLOAT:
+ val = *( (float *)olddata); break;
+ case SDNA_TYPE_DOUBLE:
+ val = *( (double *)olddata); break;
+ case SDNA_TYPE_INT64:
+ val = *( (int64_t *)olddata); break;
+ case SDNA_TYPE_UINT64:
+ val = *( (uint64_t *)olddata); break;
}
switch (ctypenr) {
- case SDNA_TYPE_CHAR:
- *curdata= val; break;
- case SDNA_TYPE_UCHAR:
- *( (unsigned char *)curdata)= val; break;
- case SDNA_TYPE_SHORT:
- *( (short *)curdata)= val; break;
- case SDNA_TYPE_USHORT:
- *( (unsigned short *)curdata)= val; break;
- case SDNA_TYPE_INT:
- *( (int *)curdata)= val; break;
- case SDNA_TYPE_LONG:
- *( (int *)curdata)= val; break;
- case SDNA_TYPE_ULONG:
- *( (unsigned int *)curdata)= val; break;
- case SDNA_TYPE_FLOAT:
- if (otypenr<2) val/= 255;
- *( (float *)curdata)= val; break;
- case SDNA_TYPE_DOUBLE:
- if (otypenr<2) val/= 255;
- *( (double *)curdata)= val; break;
- case SDNA_TYPE_INT64:
- *( (int64_t *)curdata)= val; break;
- case SDNA_TYPE_UINT64:
- *( (uint64_t *)curdata)= val; break;
+ case SDNA_TYPE_CHAR:
+ *curdata = val; break;
+ case SDNA_TYPE_UCHAR:
+ *( (unsigned char *)curdata) = val; break;
+ case SDNA_TYPE_SHORT:
+ *( (short *)curdata) = val; break;
+ case SDNA_TYPE_USHORT:
+ *( (unsigned short *)curdata) = val; break;
+ case SDNA_TYPE_INT:
+ *( (int *)curdata) = val; break;
+ case SDNA_TYPE_LONG:
+ *( (int *)curdata) = val; break;
+ case SDNA_TYPE_ULONG:
+ *( (unsigned int *)curdata) = val; break;
+ case SDNA_TYPE_FLOAT:
+ if (otypenr < 2) val /= 255;
+ *( (float *)curdata) = val; break;
+ case SDNA_TYPE_DOUBLE:
+ if (otypenr < 2) val /= 255;
+ *( (double *)curdata) = val; break;
+ case SDNA_TYPE_INT64:
+ *( (int64_t *)curdata) = val; break;
+ case SDNA_TYPE_UINT64:
+ *( (uint64_t *)curdata) = val; break;
}
- olddata+= oldlen;
- curdata+= curlen;
+ olddata += oldlen;
+ curdata += curlen;
arrlen--;
}
}
@@ -757,26 +757,26 @@ static void cast_pointer(int curlen, int oldlen, const char *name, char *curdata
#endif
int arrlen;
- arrlen= DNA_elem_array_size(name, strlen(name));
+ arrlen = DNA_elem_array_size(name, strlen(name));
- while (arrlen>0) {
+ while (arrlen > 0) {
- if (curlen==oldlen) {
+ if (curlen == oldlen) {
memcpy(curdata, olddata, curlen);
}
- else if (curlen==4 && oldlen==8) {
+ else if (curlen == 4 && oldlen == 8) {
#ifdef WIN32
- lval= *( (__int64 *)olddata );
+ lval = *( (__int64 *)olddata);
#else
- lval= *( (long long *)olddata );
+ lval = *( (long long *)olddata);
#endif
- *((int *)curdata) = lval>>3; /* is of course gambling! */
+ *((int *)curdata) = lval >> 3; /* is of course gambling! */
}
- else if (curlen==8 && oldlen==4) {
+ else if (curlen == 8 && oldlen == 4) {
#ifdef WIN32
- *( (__int64 *)curdata ) = *((int *)olddata);
+ *( (__int64 *)curdata) = *((int *)olddata);
#else
- *( (long long *)curdata ) = *((int *)olddata);
+ *( (long long *)curdata) = *((int *)olddata);
#endif
}
else {
@@ -784,8 +784,8 @@ static void cast_pointer(int curlen, int oldlen, const char *name, char *curdata
printf("errpr: illegal pointersize!\n");
}
- olddata+= oldlen;
- curdata+= curlen;
+ olddata += oldlen;
+ curdata += curlen;
arrlen--;
}
@@ -793,14 +793,14 @@ static void cast_pointer(int curlen, int oldlen, const char *name, char *curdata
static int elem_strcmp(const char *name, const char *oname)
{
- int a=0;
+ int a = 0;
/* strcmp without array part */
while (1) {
if (name[a] != oname[a]) return 1;
- if (name[a]=='[') break;
- if (name[a]==0) break;
+ if (name[a] == '[') break;
+ if (name[a] == 0) break;
a++;
}
return 0;
@@ -814,25 +814,25 @@ static char *find_elem(SDNA *sdna, const char *type, const char *name, short *ol
/* without arraypart, so names can differ: return old namenr and type */
/* in old is the old struct */
- elemcount= old[1];
- old+= 2;
- for (a=0; a<elemcount; a++, old+=2) {
-
- otype= sdna->types[old[0]];
- oname= sdna->names[old[1]];
-
- len= elementsize(sdna, old[0], old[1]);
-
- if ( elem_strcmp(name, oname)==0 ) { /* naam equal */
- if ( strcmp(type, otype)==0 ) { /* type equal */
- if (sppo) *sppo= old;
+ elemcount = old[1];
+ old += 2;
+ for (a = 0; a < elemcount; a++, old += 2) {
+
+ otype = sdna->types[old[0]];
+ oname = sdna->names[old[1]];
+
+ len = elementsize(sdna, old[0], old[1]);
+
+ if (elem_strcmp(name, oname) == 0) { /* naam equal */
+ if (strcmp(type, otype) == 0) { /* type equal */
+ if (sppo) *sppo = old;
return olddata;
}
return NULL;
}
- olddata+= len;
+ olddata += len;
}
return NULL;
}
@@ -841,11 +841,11 @@ static void reconstruct_elem(SDNA *newsdna, SDNA *oldsdna,
char *type, const char *name, char *curdata, short *old, char *olddata)
{
/* rules: test for NAME:
- * - name equal:
- * - cast type
- * - name partially equal (array differs)
- * - type equal: memcpy
- * - types casten
+ * - name equal:
+ * - cast type
+ * - name partially equal (array differs)
+ * - type equal: memcpy
+ * - types casten
* (nzc 2-4-2001 I want the 'unsigned' bit to be parsed as well. Where
* can I force this?)
*/
@@ -854,61 +854,61 @@ static void reconstruct_elem(SDNA *newsdna, SDNA *oldsdna,
const char *oname, *cp;
/* is 'name' an array? */
- cp= name;
- array= 0;
- while ( *cp && *cp!='[') {
+ cp = name;
+ array = 0;
+ while (*cp && *cp != '[') {
cp++; array++;
}
- if ( *cp!= '[' ) array= 0;
+ if (*cp != '[') array = 0;
/* in old is the old struct */
- elemcount= old[1];
- old+= 2;
- for (a=0; a<elemcount; a++, old+=2) {
- otype= oldsdna->types[old[0]];
- oname= oldsdna->names[old[1]];
- len= elementsize(oldsdna, old[0], old[1]);
+ elemcount = old[1];
+ old += 2;
+ for (a = 0; a < elemcount; a++, old += 2) {
+ otype = oldsdna->types[old[0]];
+ oname = oldsdna->names[old[1]];
+ len = elementsize(oldsdna, old[0], old[1]);
- if ( strcmp(name, oname)==0 ) { /* name equal */
+ if (strcmp(name, oname) == 0) { /* name equal */
- if (ispointer(name)) { /* pointer of functionpointer afhandelen */
+ if (ispointer(name)) { /* pointer of functionpointer afhandelen */
cast_pointer(newsdna->pointerlen, oldsdna->pointerlen, name, curdata, olddata);
}
- else if ( strcmp(type, otype)==0 ) { /* type equal */
+ else if (strcmp(type, otype) == 0) { /* type equal */
memcpy(curdata, olddata, len);
}
else cast_elem(type, otype, name, curdata, olddata);
return;
}
- else if (array) { /* name is an array */
+ else if (array) { /* name is an array */
- if (oname[array]=='[' && strncmp(name, oname, array)==0 ) { /* basis equal */
+ if (oname[array] == '[' && strncmp(name, oname, array) == 0) { /* basis equal */
- cursize= DNA_elem_array_size(name, strlen(name));
- oldsize= DNA_elem_array_size(oname, strlen(oname));
+ cursize = DNA_elem_array_size(name, strlen(name));
+ oldsize = DNA_elem_array_size(oname, strlen(oname));
- if (ispointer(name)) { /* handle pointer or functionpointer */
- if (cursize>oldsize) cast_pointer(newsdna->pointerlen, oldsdna->pointerlen, oname, curdata, olddata);
+ if (ispointer(name)) { /* handle pointer or functionpointer */
+ if (cursize > oldsize) cast_pointer(newsdna->pointerlen, oldsdna->pointerlen, oname, curdata, olddata);
else cast_pointer(newsdna->pointerlen, oldsdna->pointerlen, name, curdata, olddata);
}
- else if (name[0]=='*' || strcmp(type, otype)==0 ) { /* type equal */
- mul= len/oldsize;
- mul*= (cursize < oldsize)? cursize: oldsize;
+ else if (name[0] == '*' || strcmp(type, otype) == 0) { /* type equal */
+ mul = len / oldsize;
+ mul *= (cursize < oldsize) ? cursize : oldsize;
memcpy(curdata, olddata, mul);
/* terminate strings */
- if (oldsize > cursize && strcmp(type, "char")==0)
- curdata[mul-1]= 0;
+ if (oldsize > cursize && strcmp(type, "char") == 0)
+ curdata[mul - 1] = 0;
}
else {
- if (cursize>oldsize) cast_elem(type, otype, oname, curdata, olddata);
+ if (cursize > oldsize) cast_elem(type, otype, oname, curdata, olddata);
else cast_elem(type, otype, name, curdata, olddata);
}
return;
}
}
- olddata+= len;
+ olddata += len;
}
}
@@ -924,69 +924,69 @@ static void reconstruct_struct(SDNA *newsdna, SDNA *oldsdna,
char *type, *cpo, *cpc;
const char *name, *nameo;
- if (oldSDNAnr== -1) return;
- if (curSDNAnr== -1) return;
+ if (oldSDNAnr == -1) return;
+ if (curSDNAnr == -1) return;
- if ( compflags[oldSDNAnr]==1 ) { /* if recursive: test for equal */
+ if (compflags[oldSDNAnr] == 1) { /* if recursive: test for equal */
- spo= oldsdna->structs[oldSDNAnr];
- elen= oldsdna->typelens[ spo[0] ];
+ spo = oldsdna->structs[oldSDNAnr];
+ elen = oldsdna->typelens[spo[0]];
memcpy(cur, data, elen);
return;
}
- firststructtypenr= *(newsdna->structs[0]);
+ firststructtypenr = *(newsdna->structs[0]);
- spo= oldsdna->structs[oldSDNAnr];
- spc= newsdna->structs[curSDNAnr];
+ spo = oldsdna->structs[oldSDNAnr];
+ spc = newsdna->structs[curSDNAnr];
- elemcount= spc[1];
+ elemcount = spc[1];
- spc+= 2;
- cpc= cur;
- for (a=0; a<elemcount; a++, spc+=2) {
- type= newsdna->types[spc[0]];
- name= newsdna->names[spc[1]];
+ spc += 2;
+ cpc = cur;
+ for (a = 0; a < elemcount; a++, spc += 2) {
+ type = newsdna->types[spc[0]];
+ name = newsdna->names[spc[1]];
- elen= elementsize(newsdna, spc[0], spc[1]);
+ elen = elementsize(newsdna, spc[0], spc[1]);
/* test: is type a struct? */
- if (spc[0]>=firststructtypenr && !ispointer(name)) {
+ if (spc[0] >= firststructtypenr && !ispointer(name)) {
/* where does the old struct data start (and is there an old one?) */
- cpo= find_elem(oldsdna, type, name, spo, data, &sppo);
+ cpo = find_elem(oldsdna, type, name, spo, data, &sppo);
if (cpo) {
- oldSDNAnr= DNA_struct_find_nr(oldsdna, type);
- curSDNAnr= DNA_struct_find_nr(newsdna, type);
+ oldSDNAnr = DNA_struct_find_nr(oldsdna, type);
+ curSDNAnr = DNA_struct_find_nr(newsdna, type);
/* array! */
- mul= DNA_elem_array_size(name, strlen(name));
- nameo= oldsdna->names[sppo[1]];
- mulo= DNA_elem_array_size(nameo, strlen(nameo));
+ mul = DNA_elem_array_size(name, strlen(name));
+ nameo = oldsdna->names[sppo[1]];
+ mulo = DNA_elem_array_size(nameo, strlen(nameo));
- eleno= elementsize(oldsdna, sppo[0], sppo[1]);
+ eleno = elementsize(oldsdna, sppo[0], sppo[1]);
- elen/= mul;
- eleno/= mulo;
+ elen /= mul;
+ eleno /= mulo;
while (mul--) {
reconstruct_struct(newsdna, oldsdna, compflags, oldSDNAnr, cpo, curSDNAnr, cpc);
- cpo+= eleno;
- cpc+= elen;
+ cpo += eleno;
+ cpc += elen;
/* new struct array larger than old */
mulo--;
- if (mulo<=0) break;
+ if (mulo <= 0) break;
}
}
- else cpc+= elen;
+ else cpc += elen;
}
else {
reconstruct_elem(newsdna, oldsdna, type, name, cpc, spo, data);
- cpc+= elen;
+ cpc += elen;
}
}
@@ -1002,32 +1002,32 @@ void DNA_struct_switch_endian(SDNA *oldsdna, int oldSDNAnr, char *data)
char *type, *cpo, *cur, cval;
const char *name;
- if (oldSDNAnr== -1) return;
- firststructtypenr= *(oldsdna->structs[0]);
+ if (oldSDNAnr == -1) return;
+ firststructtypenr = *(oldsdna->structs[0]);
- spo= spc= oldsdna->structs[oldSDNAnr];
+ spo = spc = oldsdna->structs[oldSDNAnr];
- elemcount= spo[1];
+ elemcount = spo[1];
- spc+= 2;
- cur= data;
+ spc += 2;
+ cur = data;
- for (a=0; a<elemcount; a++, spc+=2) {
- type= oldsdna->types[spc[0]];
- name= oldsdna->names[spc[1]];
+ for (a = 0; a < elemcount; a++, spc += 2) {
+ type = oldsdna->types[spc[0]];
+ name = oldsdna->names[spc[1]];
/* elementsize = including arraysize */
- elen= elementsize(oldsdna, spc[0], spc[1]);
+ elen = elementsize(oldsdna, spc[0], spc[1]);
/* test: is type a struct? */
- if (spc[0]>=firststructtypenr && !ispointer(name)) {
+ if (spc[0] >= firststructtypenr && !ispointer(name)) {
/* where does the old data start (is there one?) */
- cpo= find_elem(oldsdna, type, name, spo, data, NULL);
+ cpo = find_elem(oldsdna, type, name, spo, data, NULL);
if (cpo) {
- oldSDNAnr= DNA_struct_find_nr(oldsdna, type);
+ oldSDNAnr = DNA_struct_find_nr(oldsdna, type);
- mul= DNA_elem_array_size(name, strlen(name));
- elena= elen/mul;
+ mul = DNA_elem_array_size(name, strlen(name));
+ elena = elen / mul;
while (mul--) {
DNA_struct_switch_endian(oldsdna, oldSDNAnr, cpo);
@@ -1038,113 +1038,113 @@ void DNA_struct_switch_endian(SDNA *oldsdna, int oldSDNAnr, char *data)
else {
if (ispointer(name)) {
- if (oldsdna->pointerlen==8) {
+ if (oldsdna->pointerlen == 8) {
- mul= DNA_elem_array_size(name, strlen(name));
- cpo= cur;
+ mul = DNA_elem_array_size(name, strlen(name));
+ cpo = cur;
while (mul--) {
- cval= cpo[0]; cpo[0]= cpo[7]; cpo[7]= cval;
- cval= cpo[1]; cpo[1]= cpo[6]; cpo[6]= cval;
- cval= cpo[2]; cpo[2]= cpo[5]; cpo[5]= cval;
- cval= cpo[3]; cpo[3]= cpo[4]; cpo[4]= cval;
+ cval = cpo[0]; cpo[0] = cpo[7]; cpo[7] = cval;
+ cval = cpo[1]; cpo[1] = cpo[6]; cpo[6] = cval;
+ cval = cpo[2]; cpo[2] = cpo[5]; cpo[5] = cval;
+ cval = cpo[3]; cpo[3] = cpo[4]; cpo[4] = cval;
- cpo+= 8;
+ cpo += 8;
}
}
}
else {
- if ( spc[0]==SDNA_TYPE_SHORT ||
- spc[0]==SDNA_TYPE_USHORT )
+ if (spc[0] == SDNA_TYPE_SHORT ||
+ spc[0] == SDNA_TYPE_USHORT)
{
/* exception: variable called blocktype/ipowin: derived from ID_ */
- skip= 0;
- if (name[0]=='b' && name[1]=='l') {
- if (strcmp(name, "blocktype")==0) skip= 1;
+ skip = 0;
+ if (name[0] == 'b' && name[1] == 'l') {
+ if (strcmp(name, "blocktype") == 0) skip = 1;
}
- else if (name[0]=='i' && name[1]=='p') {
- if (strcmp(name, "ipowin")==0) skip= 1;
+ else if (name[0] == 'i' && name[1] == 'p') {
+ if (strcmp(name, "ipowin") == 0) skip = 1;
}
- if (skip==0) {
- mul= DNA_elem_array_size(name, strlen(name));
- cpo= cur;
+ if (skip == 0) {
+ mul = DNA_elem_array_size(name, strlen(name));
+ cpo = cur;
while (mul--) {
- cval= cpo[0];
- cpo[0]= cpo[1];
- cpo[1]= cval;
- cpo+= 2;
+ cval = cpo[0];
+ cpo[0] = cpo[1];
+ cpo[1] = cval;
+ cpo += 2;
}
}
}
- else if ( (spc[0]==SDNA_TYPE_INT ||
- spc[0]==SDNA_TYPE_LONG ||
- spc[0]==SDNA_TYPE_ULONG ||
- spc[0]==SDNA_TYPE_FLOAT))
+ else if ( (spc[0] == SDNA_TYPE_INT ||
+ spc[0] == SDNA_TYPE_LONG ||
+ spc[0] == SDNA_TYPE_ULONG ||
+ spc[0] == SDNA_TYPE_FLOAT))
{
- mul= DNA_elem_array_size(name, strlen(name));
- cpo= cur;
+ mul = DNA_elem_array_size(name, strlen(name));
+ cpo = cur;
while (mul--) {
- cval= cpo[0];
- cpo[0]= cpo[3];
- cpo[3]= cval;
- cval= cpo[1];
- cpo[1]= cpo[2];
- cpo[2]= cval;
- cpo+= 4;
+ cval = cpo[0];
+ cpo[0] = cpo[3];
+ cpo[3] = cval;
+ cval = cpo[1];
+ cpo[1] = cpo[2];
+ cpo[2] = cval;
+ cpo += 4;
}
}
- else if ( (spc[0]==SDNA_TYPE_INT64) ||
- (spc[0]==SDNA_TYPE_UINT64))
+ else if ( (spc[0] == SDNA_TYPE_INT64) ||
+ (spc[0] == SDNA_TYPE_UINT64))
{
- mul= DNA_elem_array_size(name, strlen(name));
- cpo= cur;
+ mul = DNA_elem_array_size(name, strlen(name));
+ cpo = cur;
while (mul--) {
- cval= cpo[0]; cpo[0]= cpo[7]; cpo[7]= cval;
- cval= cpo[1]; cpo[1]= cpo[6]; cpo[6]= cval;
- cval= cpo[2]; cpo[2]= cpo[5]; cpo[5]= cval;
- cval= cpo[3]; cpo[3]= cpo[4]; cpo[4]= cval;
+ cval = cpo[0]; cpo[0] = cpo[7]; cpo[7] = cval;
+ cval = cpo[1]; cpo[1] = cpo[6]; cpo[6] = cval;
+ cval = cpo[2]; cpo[2] = cpo[5]; cpo[5] = cval;
+ cval = cpo[3]; cpo[3] = cpo[4]; cpo[4] = cval;
- cpo+= 8;
+ cpo += 8;
}
}
}
}
- cur+= elen;
+ cur += elen;
}
}
void *DNA_struct_reconstruct(SDNA *newsdna, SDNA *oldsdna, char *compflags, int oldSDNAnr, int blocks, void *data)
{
- int a, curSDNAnr, curlen=0, oldlen;
+ int a, curSDNAnr, curlen = 0, oldlen;
short *spo, *spc;
char *cur, *type, *cpc, *cpo;
/* oldSDNAnr == structnr, we're looking for the corresponding 'cur' number */
- spo= oldsdna->structs[oldSDNAnr];
- type= oldsdna->types[ spo[0] ];
- oldlen= oldsdna->typelens[ spo[0] ];
- curSDNAnr= DNA_struct_find_nr(newsdna, type);
+ spo = oldsdna->structs[oldSDNAnr];
+ type = oldsdna->types[spo[0]];
+ oldlen = oldsdna->typelens[spo[0]];
+ curSDNAnr = DNA_struct_find_nr(newsdna, type);
/* init data and alloc */
if (curSDNAnr >= 0) {
- spc= newsdna->structs[curSDNAnr];
- curlen= newsdna->typelens[ spc[0] ];
+ spc = newsdna->structs[curSDNAnr];
+ curlen = newsdna->typelens[spc[0]];
}
- if (curlen==0) {
+ if (curlen == 0) {
return NULL;
}
- cur= MEM_callocN(blocks*curlen, "reconstruct");
- cpc= cur;
- cpo= data;
- for (a=0; a<blocks; a++) {
+ cur = MEM_callocN(blocks * curlen, "reconstruct");
+ cpc = cur;
+ cpo = data;
+ for (a = 0; a < blocks; a++) {
reconstruct_struct(newsdna, oldsdna, compflags, oldSDNAnr, cpo, curSDNAnr, cpc);
- cpc+= curlen;
- cpo+= oldlen;
+ cpc += curlen;
+ cpo += oldlen;
}
return cur;
@@ -1153,9 +1153,9 @@ void *DNA_struct_reconstruct(SDNA *newsdna, SDNA *oldsdna, char *compflags, int
int DNA_elem_offset(SDNA *sdna, const char *stype, const char *vartype, const char *name)
{
- int SDNAnr= DNA_struct_find_nr(sdna, stype);
- short *spo= sdna->structs[SDNAnr];
- char *cp= find_elem(sdna, vartype, name, spo, NULL, NULL);
+ int SDNAnr = DNA_struct_find_nr(sdna, stype);
+ short *spo = sdna->structs[SDNAnr];
+ char *cp = find_elem(sdna, vartype, name, spo, NULL, NULL);
return (int)((intptr_t)cp);
}
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c
index ec5b0cb8762..58880be6f5f 100644
--- a/source/blender/makesdna/intern/makesdna.c
+++ b/source/blender/makesdna/intern/makesdna.c
@@ -139,18 +139,18 @@ static const char *includefiles[] = {
""
};
-static int maxdata= 500000, maxnr= 50000;
-static int nr_names=0;
-static int nr_types=0;
-static int nr_structs=0;
-static char **names, *namedata; /* at address names[a] is string a */
-static char **types, *typedata; /* at address types[a] is string a */
-static short *typelens; /* at typelens[a] is de length of type a */
-static short *alphalens; /* contains sizes as they are calculated on the DEC Alpha (64 bits), infact any 64bit system */
-static short **structs, *structdata;/* at sp= structs[a] is the first address of a struct definition
- * sp[0] is type number
- * sp[1] is amount of elements
- * sp[2] sp[3] is typenr, namenr (etc) */
+static int maxdata = 500000, maxnr = 50000;
+static int nr_names = 0;
+static int nr_types = 0;
+static int nr_structs = 0;
+static char **names, *namedata; /* at address names[a] is string a */
+static char **types, *typedata; /* at address types[a] is string a */
+static short *typelens; /* at typelens[a] is de length of type a */
+static short *alphalens; /* contains sizes as they are calculated on the DEC Alpha (64 bits), infact any 64bit system */
+static short **structs, *structdata; /* at sp= structs[a] is the first address of a struct definition
+ * sp[0] is type number
+ * sp[1] is amount of elements
+ * sp[2] sp[3] is typenr, namenr (etc) */
/**
* Variable to control debug output of makesdna.
* debugSDNA:
@@ -214,7 +214,7 @@ void dna_write(FILE *file, void *pntr, int size);
/**
* Report all structures found so far, and print their lengths.
*/
-void printStructLenghts(void);
+void printStructLengths(void);
@@ -230,7 +230,7 @@ static int add_type(const char *str, int len)
char *cp;
/* first do validity check */
- if (str[0]==0) {
+ if (str[0] == 0) {
return -1;
}
else if (strchr(str, '*')) {
@@ -240,10 +240,10 @@ static int add_type(const char *str, int len)
}
/* search through type array */
- for (nr=0; nr<nr_types; nr++) {
- if (strcmp(str, types[nr])==0) {
+ for (nr = 0; nr < nr_types; nr++) {
+ if (strcmp(str, types[nr]) == 0) {
if (len) {
- typelens[nr]= len;
+ typelens[nr] = len;
alphalens[nr] = len;
}
return nr;
@@ -251,22 +251,22 @@ static int add_type(const char *str, int len)
}
/* append new type */
- if (nr_types==0) cp= typedata;
+ if (nr_types == 0) cp = typedata;
else {
- cp= types[nr_types-1]+strlen(types[nr_types-1])+1;
+ cp = types[nr_types - 1] + strlen(types[nr_types - 1]) + 1;
}
strcpy(cp, str);
- types[nr_types]= cp;
- typelens[nr_types]= len;
- alphalens[nr_types]= len;
+ types[nr_types] = cp;
+ typelens[nr_types] = len;
+ alphalens[nr_types] = len;
- if (nr_types>=maxnr) {
+ if (nr_types >= maxnr) {
printf("too many types\n");
- return nr_types-1;
+ return nr_types - 1;
}
nr_types++;
- return nr_types-1;
+ return nr_types - 1;
}
@@ -287,14 +287,14 @@ static int add_name(const char *str)
additional_slen_offset = 0;
- if (str[0]==0 /* || (str[1]==0) */) return -1;
+ if (str[0] == 0 /* || (str[1]==0) */) return -1;
if (str[0] == '(' && str[1] == '*') {
/* we handle function pointer and special array cases here, e.g.
* void (*function)(...) and float (*array)[..]. the array case
* name is still converted to (array*)() though because it is that
* way in old dna too, and works correct with elementsize() */
- int isfuncptr = (strchr(str+1, '(')) != NULL;
+ int isfuncptr = (strchr(str + 1, '(')) != NULL;
if (debugSDNA > 3) printf("\t\t\t\t*** Function pointer or multidim array pointer found\n");
/* functionpointer: transform the type (sometimes) */
@@ -313,13 +313,13 @@ static int add_name(const char *str)
if (debugSDNA > 3) printf("first brace after offset %d\n", i);
j++; /* j beyond closing brace ? */
- while ((str[j] != 0) && (str[j] != ')' )) {
+ while ((str[j] != 0) && (str[j] != ')')) {
if (debugSDNA > 3) printf("seen %c ( %d)\n", str[j], str[j]);
j++;
}
if (debugSDNA > 3) printf("seen %c ( %d)\n"
- "special after offset%d\n",
- str[j], str[j], j);
+ "special after offset%d\n",
+ str[j], str[j], j);
if (!isfuncptr) {
/* multidimensional array pointer case */
@@ -329,7 +329,7 @@ static int add_name(const char *str)
else
printf("Error during tokening multidim array pointer\n");
}
- else if (str[j] == 0 ) {
+ else if (str[j] == 0) {
if (debugSDNA > 3) printf("offsetting for space\n");
/* get additional offset */
k = 0;
@@ -340,7 +340,7 @@ static int add_name(const char *str)
if (debugSDNA > 3) printf("extra offset %d\n", k);
additional_slen_offset = k;
}
- else if (str[j] == ')' ) {
+ else if (str[j] == ')') {
if (debugSDNA > 3) printf("offsetting for brace\n");
; /* don't get extra offset */
}
@@ -366,22 +366,22 @@ static int add_name(const char *str)
(strncmp(buf, "(*windraw", 9) == 0) )
{
buf[i] = ')';
- buf[i+1] = '(';
- buf[i+2] = 'v';
- buf[i+3] = 'o';
- buf[i+4] = 'i';
- buf[i+5] = 'd';
- buf[i+6] = ')';
- buf[i+7] = 0;
+ buf[i + 1] = '(';
+ buf[i + 2] = 'v';
+ buf[i + 3] = 'o';
+ buf[i + 4] = 'i';
+ buf[i + 5] = 'd';
+ buf[i + 6] = ')';
+ buf[i + 7] = 0;
}
else {
buf[i] = ')';
- buf[i+1] = '(';
- buf[i+2] = ')';
- buf[i+3] = 0;
+ buf[i + 1] = '(';
+ buf[i + 2] = ')';
+ buf[i + 3] = 0;
}
/* now precede with buf*/
- if (debugSDNA > 3) printf("\t\t\t\t\tProposing fp name %s\n", buf);
+ if (debugSDNA > 3) printf("\t\t\t\t\tProposing fp name %s\n", buf);
name = buf;
}
else {
@@ -390,27 +390,27 @@ static int add_name(const char *str)
}
/* search name array */
- for (nr=0; nr<nr_names; nr++) {
- if (strcmp(name, names[nr])==0) {
+ for (nr = 0; nr < nr_names; nr++) {
+ if (strcmp(name, names[nr]) == 0) {
return nr;
}
}
/* append new type */
- if (nr_names==0) cp= namedata;
+ if (nr_names == 0) cp = namedata;
else {
- cp= names[nr_names-1]+strlen(names[nr_names-1])+1;
+ cp = names[nr_names - 1] + strlen(names[nr_names - 1]) + 1;
}
strcpy(cp, name);
- names[nr_names]= cp;
+ names[nr_names] = cp;
- if (nr_names>=maxnr) {
+ if (nr_names >= maxnr) {
printf("too many names\n");
- return nr_names-1;
+ return nr_names - 1;
}
nr_names++;
- return nr_names-1;
+ return nr_names - 1;
}
static short *add_struct(int namecode)
@@ -418,19 +418,19 @@ static short *add_struct(int namecode)
int len;
short *sp;
- if (nr_structs==0) {
- structs[0]= structdata;
+ if (nr_structs == 0) {
+ structs[0] = structdata;
}
else {
- sp= structs[nr_structs-1];
- len= sp[1];
- structs[nr_structs]= sp+ 2*len+2;
+ sp = structs[nr_structs - 1];
+ len = sp[1];
+ structs[nr_structs] = sp + 2 * len + 2;
}
- sp= structs[nr_structs];
- sp[0]= namecode;
+ sp = structs[nr_structs];
+ sp[0] = namecode;
- if (nr_structs>=maxnr) {
+ if (nr_structs >= maxnr) {
printf("too many structs\n");
return sp;
}
@@ -446,58 +446,58 @@ static int preprocess_include(char *maindata, int len)
/* note: len + 1, last character is a dummy to prevent
* comparisons using uninitialized memory */
- temp= MEM_mallocN(len + 1, "preprocess_include");
- temp[len]= ' ';
+ temp = MEM_mallocN(len + 1, "preprocess_include");
+ temp[len] = ' ';
memcpy(temp, maindata, len);
// remove all c++ comments
/* replace all enters/tabs/etc with spaces */
- cp= temp;
- a= len;
+ cp = temp;
+ a = len;
comment = 0;
while (a--) {
- if (cp[0]=='/' && cp[1]=='/') {
+ if (cp[0] == '/' && cp[1] == '/') {
comment = 1;
}
- else if (*cp<32) {
+ else if (*cp < 32) {
comment = 0;
}
- if (comment || *cp<32 || *cp>128 ) *cp= 32;
+ if (comment || *cp < 32 || *cp > 128) *cp = 32;
cp++;
}
/* data from temp copy to maindata, remove comments and double spaces */
- cp= temp;
- md= maindata;
- newlen= 0;
- comment= 0;
- a= len;
+ cp = temp;
+ md = maindata;
+ newlen = 0;
+ comment = 0;
+ a = len;
while (a--) {
- if (cp[0]=='/' && cp[1]=='*') {
- comment= 1;
- cp[0]=cp[1]= 32;
+ if (cp[0] == '/' && cp[1] == '*') {
+ comment = 1;
+ cp[0] = cp[1] = 32;
}
- if (cp[0]=='*' && cp[1]=='/') {
- comment= 0;
- cp[0]=cp[1]= 32;
+ if (cp[0] == '*' && cp[1] == '/') {
+ comment = 0;
+ cp[0] = cp[1] = 32;
}
/* do not copy when: */
- if (comment);
- else if ( cp[0]==' ' && cp[1]==' ' );
- else if ( cp[-1]=='*' && cp[0]==' ' ); /* pointers with a space */
+ if (comment) ;
+ else if (cp[0] == ' ' && cp[1] == ' ') ;
+ else if (cp[-1] == '*' && cp[0] == ' ') ; /* pointers with a space */
/* skip special keywords */
- else if (strncmp("DNA_DEPRECATED", cp, 14)==0) {
+ else if (strncmp("DNA_DEPRECATED", cp, 14) == 0) {
/* single values are skipped already, so decrement 1 less */
a -= 13;
cp += 13;
}
else {
- md[0]= cp[0];
+ md[0] = cp[0];
md++;
newlen++;
}
@@ -511,30 +511,30 @@ static int preprocess_include(char *maindata, int len)
static void *read_file_data(char *filename, int *len_r)
{
#ifdef WIN32
- FILE *fp= fopen(filename, "rb");
+ FILE *fp = fopen(filename, "rb");
#else
- FILE *fp= fopen(filename, "r");
+ FILE *fp = fopen(filename, "r");
#endif
void *data;
if (!fp) {
- *len_r= -1;
+ *len_r = -1;
return NULL;
}
fseek(fp, 0L, SEEK_END);
- *len_r= ftell(fp);
+ *len_r = ftell(fp);
fseek(fp, 0L, SEEK_SET);
- data= MEM_mallocN(*len_r, "read_file_data");
+ data = MEM_mallocN(*len_r, "read_file_data");
if (!data) {
- *len_r= -1;
+ *len_r = -1;
fclose(fp);
return NULL;
}
- if (fread(data, *len_r, 1, fp)!=1) {
- *len_r= -1;
+ if (fread(data, *len_r, 1, fp) != 1) {
+ *len_r = -1;
MEM_freeN(data);
fclose(fp);
return NULL;
@@ -553,38 +553,38 @@ static int convert_include(char *filename)
short *structpoin, *sp;
char *maindata, *mainend, *md, *md1;
- md= maindata= read_file_data(filename, &filelen);
- if (filelen==-1) {
+ md = maindata = read_file_data(filename, &filelen);
+ if (filelen == -1) {
printf("Can't read file %s\n", filename);
return 1;
}
- filelen= preprocess_include(maindata, filelen);
- mainend= maindata+filelen-1;
+ filelen = preprocess_include(maindata, filelen);
+ mainend = maindata + filelen - 1;
/* we look for '{' and then back to 'struct' */
- count= 0;
- overslaan= 0;
- while (count<filelen) {
+ count = 0;
+ overslaan = 0;
+ while (count < filelen) {
/* code for skipping a struct: two hashes on 2 lines. (preprocess added a space) */
- if (md[0]=='#' && md[1]==' ' && md[2]=='#') {
- overslaan= 1;
+ if (md[0] == '#' && md[1] == ' ' && md[2] == '#') {
+ overslaan = 1;
}
- if (md[0]=='{') {
- md[0]= 0;
+ if (md[0] == '{') {
+ md[0] = 0;
if (overslaan) {
- overslaan= 0;
+ overslaan = 0;
}
else {
- if (md[-1]==' ') md[-1]= 0;
- md1= md-2;
- while ( *md1!=32) md1--; /* to beginning of word */
+ if (md[-1] == ' ') md[-1] = 0;
+ md1 = md - 2;
+ while (*md1 != 32) md1--; /* to beginning of word */
md1++;
/* we've got a struct name when... */
- if ( strncmp(md1-7, "struct", 6)==0 ) {
+ if (strncmp(md1 - 7, "struct", 6) == 0) {
strct = add_type(md1, 0);
if (strct == -1) {
@@ -592,33 +592,33 @@ static int convert_include(char *filename)
return 1;
}
- structpoin= add_struct(strct);
- sp= structpoin+2;
+ structpoin = add_struct(strct);
+ sp = structpoin + 2;
if (debugSDNA > 1) printf("\t|\t|-- detected struct %s\n", types[strct]);
/* first lets make it all nice strings */
- md1= md+1;
+ md1 = md + 1;
while (*md1 != '}') {
- if (md1>mainend) break;
+ if (md1 > mainend) break;
- if (*md1==',' || *md1==' ') *md1= 0;
+ if (*md1 == ',' || *md1 == ' ') *md1 = 0;
md1++;
}
/* read types and names until first character that is not '}' */
- md1= md+1;
- while ( *md1 != '}' ) {
- if (md1>mainend) break;
+ md1 = md + 1;
+ while (*md1 != '}') {
+ if (md1 > mainend) break;
/* skip when it says 'struct' or 'unsigned' or 'const' */
if (*md1) {
- if ( strncmp(md1, "struct", 6)==0 ) md1+= 7;
- if ( strncmp(md1, "unsigned", 8)==0 ) md1+= 9;
- if ( strncmp(md1, "const", 5)==0 ) md1+= 6;
+ if (strncmp(md1, "struct", 6) == 0) md1 += 7;
+ if (strncmp(md1, "unsigned", 8) == 0) md1 += 9;
+ if (strncmp(md1, "const", 5) == 0) md1 += 6;
/* we've got a type! */
- type= add_type(md1, 0);
+ type = add_type(md1, 0);
if (type == -1) {
printf("File '%s' contains struct we can't parse \"%s\"\n", filename, md1);
return 1;
@@ -626,48 +626,48 @@ static int convert_include(char *filename)
if (debugSDNA > 1) printf("\t|\t|\tfound type %s (", md1);
- md1+= strlen(md1);
+ md1 += strlen(md1);
/* read until ';' */
- while ( *md1 != ';' ) {
- if (md1>mainend) break;
+ while (*md1 != ';') {
+ if (md1 > mainend) break;
if (*md1) {
/* We've got a name. slen needs
* correction for function
* pointers! */
- slen= (int) strlen(md1);
- if ( md1[slen-1]==';' ) {
- md1[slen-1]= 0;
+ slen = (int) strlen(md1);
+ if (md1[slen - 1] == ';') {
+ md1[slen - 1] = 0;
- name= add_name(md1);
+ name = add_name(md1);
slen += additional_slen_offset;
- sp[0]= type;
- sp[1]= name;
+ sp[0] = type;
+ sp[1] = name;
- if ((debugSDNA>1) && (names[name] != NULL)) printf("%s |", names[name]);
+ if ((debugSDNA > 1) && (names[name] != NULL)) printf("%s |", names[name]);
structpoin[1]++;
- sp+= 2;
+ sp += 2;
- md1+= slen;
+ md1 += slen;
break;
}
- name= add_name(md1);
+ name = add_name(md1);
slen += additional_slen_offset;
- sp[0]= type;
- sp[1]= name;
+ sp[0] = type;
+ sp[1] = name;
if ((debugSDNA > 1) && (names[name] != NULL)) printf("%s ||", names[name]);
structpoin[1]++;
- sp+= 2;
+ sp += 2;
- md1+= slen;
+ md1 += slen;
}
md1++;
}
@@ -691,20 +691,20 @@ static int convert_include(char *filename)
static int arraysize(char *astr, int len)
{
- int a, mul=1;
- char str[100], *cp=NULL;
+ int a, mul = 1;
+ char str[100], *cp = NULL;
- memcpy(str, astr, len+1);
+ memcpy(str, astr, len + 1);
- for (a=0; a<len; a++) {
- if ( str[a]== '[' ) {
- cp= &(str[a+1]);
+ for (a = 0; a < len; a++) {
+ if (str[a] == '[') {
+ cp = &(str[a + 1]);
}
- else if ( str[a]==']' && cp) {
- str[a]= 0;
+ else if (str[a] == ']' && cp) {
+ str[a] = 0;
/* if 'cp' is a preprocessor definition, it will evaluate to 0,
* the caller needs to check for this case and throw an error */
- mul*= atoi(cp);
+ mul *= atoi(cp);
}
}
@@ -713,40 +713,40 @@ static int arraysize(char *astr, int len)
static int calculate_structlens(int firststruct)
{
- int a, b, len, alphalen, unknown= nr_structs, lastunknown, structtype, type, mul, namelen;
+ int a, b, len, alphalen, unknown = nr_structs, lastunknown, structtype, type, mul, namelen;
short *sp, *structpoin;
char *cp;
int has_pointer, dna_error = 0;
while (unknown) {
- lastunknown= unknown;
- unknown= 0;
+ lastunknown = unknown;
+ unknown = 0;
/* check all structs... */
- for (a=0; a<nr_structs; a++) {
- structpoin= structs[a];
- structtype= structpoin[0];
+ for (a = 0; a < nr_structs; a++) {
+ structpoin = structs[a];
+ structtype = structpoin[0];
/* when length is not known... */
- if (typelens[structtype]==0) {
+ if (typelens[structtype] == 0) {
- sp= structpoin+2;
- len= 0;
+ sp = structpoin + 2;
+ len = 0;
alphalen = 0;
has_pointer = 0;
/* check all elements in struct */
- for (b=0; b<structpoin[1]; b++, sp+=2) {
- type= sp[0];
- cp= names[sp[1]];
+ for (b = 0; b < structpoin[1]; b++, sp += 2) {
+ type = sp[0];
+ cp = names[sp[1]];
- namelen= (int) strlen(cp);
+ namelen = (int) strlen(cp);
/* is it a pointer or function pointer? */
- if (cp[0]=='*' || cp[1]=='*') {
+ if (cp[0] == '*' || cp[1] == '*') {
has_pointer = 1;
/* has the name an extra length? (array) */
- mul= 1;
- if ( cp[namelen-1]==']') mul= arraysize(cp, namelen);
+ mul = 1;
+ if (cp[namelen - 1] == ']') mul = arraysize(cp, namelen);
if (mul == 0) {
printf("Zero array size found or could not parse %s: '%.*s'\n", types[structtype], namelen + 1, cp);
@@ -776,15 +776,15 @@ static int calculate_structlens(int firststruct)
alphalen += 8 * mul;
}
- else if (cp[0]=='[') {
+ else if (cp[0] == '[') {
/* parsing can cause names "var" and "[3]" to be found for "float var [3]" ... */
printf("Parse error in struct, invalid member name: %s %s\n", types[structtype], cp);
dna_error = 1;
}
- else if ( typelens[type] ) {
+ else if (typelens[type]) {
/* has the name an extra length? (array) */
- mul= 1;
- if ( cp[namelen-1]==']') mul= arraysize(cp, namelen);
+ mul = 1;
+ if (cp[namelen - 1] == ']') mul = arraysize(cp, namelen);
if (mul == 0) {
printf("Zero array size found or could not parse %s: '%.*s'\n", types[structtype], namelen + 1, cp);
@@ -793,50 +793,50 @@ static int calculate_structlens(int firststruct)
/* struct alignment */
if (type >= firststruct) {
- if (sizeof(void *)==8 && (len % 8) ) {
+ if (sizeof(void *) == 8 && (len % 8) ) {
printf("Align struct error: %s %s\n", types[structtype], cp);
dna_error = 1;
}
}
/* 2-4 aligned/ */
- if (typelens[type]>3 && (len % 4) ) {
- printf("Align 4 error in struct: %s %s (add %d padding bytes)\n", types[structtype], cp, len%4);
+ if (typelens[type] > 3 && (len % 4) ) {
+ printf("Align 4 error in struct: %s %s (add %d padding bytes)\n", types[structtype], cp, len % 4);
dna_error = 1;
}
- else if (typelens[type]==2 && (len % 2) ) {
- printf("Align 2 error in struct: %s %s (add %d padding bytes)\n", types[structtype], cp, len%2);
+ else if (typelens[type] == 2 && (len % 2) ) {
+ printf("Align 2 error in struct: %s %s (add %d padding bytes)\n", types[structtype], cp, len % 2);
dna_error = 1;
}
- len += mul*typelens[type];
+ len += mul * typelens[type];
alphalen += mul * alphalens[type];
}
else {
- len= 0;
+ len = 0;
alphalen = 0;
break;
}
}
- if (len==0) {
+ if (len == 0) {
unknown++;
}
else {
- typelens[structtype]= len;
- alphalens[structtype]= alphalen;
+ typelens[structtype] = len;
+ alphalens[structtype] = alphalen;
// two ways to detect if a struct contains a pointer:
// has_pointer is set or alphalen != len
if (has_pointer || alphalen != len) {
if (alphalen % 8) {
- printf("Sizeerror 8 in struct: %s (add %d bytes)\n", types[structtype], alphalen%8);
+ printf("Sizeerror 8 in struct: %s (add %d bytes)\n", types[structtype], alphalen % 8);
dna_error = 1;
}
}
if (len % 4) {
- printf("Sizeerror 4 in struct: %s (add %d bytes)\n", types[structtype], len%4);
+ printf("Sizeerror 4 in struct: %s (add %d bytes)\n", types[structtype], len % 4);
dna_error = 1;
}
@@ -844,7 +844,7 @@ static int calculate_structlens(int firststruct)
}
}
- if (unknown==lastunknown) break;
+ if (unknown == lastunknown) break;
}
if (unknown) {
@@ -853,12 +853,12 @@ static int calculate_structlens(int firststruct)
if (debugSDNA) {
printf("*** Known structs :\n");
- for (a=0; a<nr_structs; a++) {
- structpoin= structs[a];
- structtype= structpoin[0];
+ for (a = 0; a < nr_structs; a++) {
+ structpoin = structs[a];
+ structtype = structpoin[0];
/* length unknown */
- if (typelens[structtype]!=0) {
+ if (typelens[structtype] != 0) {
printf(" %s\n", types[structtype]);
}
}
@@ -867,12 +867,12 @@ static int calculate_structlens(int firststruct)
printf("*** Unknown structs :\n");
- for (a=0; a<nr_structs; a++) {
- structpoin= structs[a];
- structtype= structpoin[0];
+ for (a = 0; a < nr_structs; a++) {
+ structpoin = structs[a];
+ structtype = structpoin[0];
/* length unknown yet */
- if (typelens[structtype]==0) {
+ if (typelens[structtype] == 0) {
printf(" %s\n", types[structtype]);
}
}
@@ -893,7 +893,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) {
@@ -903,21 +903,21 @@ void dna_write(FILE *file, void *pntr, int size)
}
}
-void printStructLenghts(void)
+void printStructLengths(void)
{
- int a, unknown= nr_structs, structtype;
+ int a, unknown = nr_structs, structtype;
/*int lastunknown;*/ /*UNUSED*/
short *structpoin;
printf("\n\n*** All detected structs:\n");
while (unknown) {
/*lastunknown= unknown;*/ /*UNUSED*/
- unknown= 0;
+ unknown = 0;
/* check all structs... */
- for (a=0; a<nr_structs; a++) {
- structpoin= structs[a];
- structtype= structpoin[0];
+ for (a = 0; a < nr_structs; a++) {
+ structpoin = structs[a];
+ structtype = structpoin[0];
printf("\t%s\t:%d\n", types[structtype], typelens[structtype]);
}
}
@@ -942,32 +942,32 @@ static int make_structDNA(char *baseDirectory, FILE *file)
}
/* the longest known struct is 50k, so we assume 100k is sufficent! */
- namedata= MEM_callocN(maxdata, "namedata");
- typedata= MEM_callocN(maxdata, "typedata");
- structdata= MEM_callocN(maxdata, "structdata");
+ namedata = MEM_callocN(maxdata, "namedata");
+ typedata = MEM_callocN(maxdata, "typedata");
+ structdata = MEM_callocN(maxdata, "structdata");
/* a maximum of 5000 variables, must be sufficient? */
- names= MEM_callocN(sizeof(char *)*maxnr, "names");
- types= MEM_callocN(sizeof(char *)*maxnr, "types");
- typelens= MEM_callocN(sizeof(short)*maxnr, "typelens");
- alphalens= MEM_callocN(sizeof(short)*maxnr, "alphalens");
- structs= MEM_callocN(sizeof(short)*maxnr, "structs");
+ names = MEM_callocN(sizeof(char *) * maxnr, "names");
+ types = MEM_callocN(sizeof(char *) * maxnr, "types");
+ typelens = MEM_callocN(sizeof(short) * maxnr, "typelens");
+ alphalens = MEM_callocN(sizeof(short) * maxnr, "alphalens");
+ structs = MEM_callocN(sizeof(short) * maxnr, "structs");
/* insertion of all known types */
/* watch it: uint is not allowed! use in structs an unsigned int */
/* watch it: sizes must match DNA_elem_type_size() */
- add_type("char", 1); /* SDNA_TYPE_CHAR */
- add_type("uchar", 1); /* SDNA_TYPE_UCHAR */
- add_type("short", 2); /* SDNA_TYPE_SHORT */
- add_type("ushort", 2); /* SDNA_TYPE_USHORT */
- add_type("int", 4); /* SDNA_TYPE_INT */
- add_type("long", 4); /* SDNA_TYPE_LONG */ /* should it be 8 on 64 bits? */
- add_type("ulong", 4); /* SDNA_TYPE_ULONG */
- add_type("float", 4); /* SDNA_TYPE_FLOAT */
- add_type("double", 8); /* SDNA_TYPE_DOUBLE */
- add_type("int64_t", 8); /* SDNA_TYPE_INT64 */
+ add_type("char", 1); /* SDNA_TYPE_CHAR */
+ add_type("uchar", 1); /* SDNA_TYPE_UCHAR */
+ add_type("short", 2); /* SDNA_TYPE_SHORT */
+ add_type("ushort", 2); /* SDNA_TYPE_USHORT */
+ add_type("int", 4); /* SDNA_TYPE_INT */
+ add_type("long", 4); /* SDNA_TYPE_LONG */ /* should it be 8 on 64 bits? */
+ add_type("ulong", 4); /* SDNA_TYPE_ULONG */
+ add_type("float", 4); /* SDNA_TYPE_FLOAT */
+ add_type("double", 8); /* SDNA_TYPE_DOUBLE */
+ add_type("int64_t", 8); /* SDNA_TYPE_INT64 */
add_type("uint64_t", 8); /* SDNA_TYPE_UINT64 */
- add_type("void", 0); /* SDNA_TYPE_VOID */
+ add_type("void", 0); /* SDNA_TYPE_VOID */
// the defines above shouldn't be output in the padding file...
firststruct = nr_types;
@@ -979,7 +979,7 @@ static int make_structDNA(char *baseDirectory, FILE *file)
if (debugSDNA) printf("\tStart of header scan:\n");
for (i = 0; strlen(includefiles[i]); i++) {
sprintf(str, "%s%s", baseDirectory, includefiles[i]);
- if (debugSDNA) printf("\t|-- Converting %s\n", str);
+ if (debugSDNA) printf("\t|-- Converting %s\n", str);
if (convert_include(str)) {
return (1);
}
@@ -994,28 +994,28 @@ static int make_structDNA(char *baseDirectory, FILE *file)
/* FOR DEBUG */
if (debugSDNA > 1) {
int a, b;
-/* short *elem; */
+/* short *elem; */
short num_types;
printf("nr_names %d nr_types %d nr_structs %d\n", nr_names, nr_types, nr_structs);
- for (a=0; a<nr_names; a++) {
+ for (a = 0; a < nr_names; a++) {
printf(" %s\n", names[a]);
}
printf("\n");
- sp= typelens;
- for (a=0; a<nr_types; a++, sp++) {
+ sp = typelens;
+ for (a = 0; a < nr_types; a++, sp++) {
printf(" %s %d\n", types[a], *sp);
}
printf("\n");
- for (a=0; a<nr_structs; a++) {
- sp= structs[a];
+ for (a = 0; a < nr_structs; a++) {
+ sp = structs[a];
printf(" struct %s elems: %d size: %d\n", types[sp[0]], sp[1], typelens[sp[0]]);
num_types = sp[1];
- sp+= 2;
+ sp += 2;
/* ? num_types was elem? */
- for (b=0; b< num_types; b++, sp+= 2) {
+ for (b = 0; b < num_types; b++, sp += 2) {
printf(" %s %s\n", types[sp[0]], names[sp[1]]);
}
}
@@ -1025,7 +1025,7 @@ static int make_structDNA(char *baseDirectory, FILE *file)
if (debugSDNA > -1) printf("Writing file ... ");
- if (nr_names==0 || nr_structs==0);
+ if (nr_names == 0 || nr_structs == 0) ;
else {
strcpy(str, "SDNA");
dna_write(file, str, 4);
@@ -1033,27 +1033,27 @@ static int make_structDNA(char *baseDirectory, FILE *file)
/* write names */
strcpy(str, "NAME");
dna_write(file, str, 4);
- len= nr_names;
+ len = nr_names;
dna_write(file, &len, 4);
/* calculate size of datablock with strings */
- cp= names[nr_names-1];
- cp+= strlen(names[nr_names-1]) + 1; /* +1: null-terminator */
- len= (intptr_t) (cp - (char*) names[0]);
- len= (len+3) & ~3;
+ cp = names[nr_names - 1];
+ cp += strlen(names[nr_names - 1]) + 1; /* +1: null-terminator */
+ len = (intptr_t) (cp - (char *) names[0]);
+ len = (len + 3) & ~3;
dna_write(file, names[0], len);
/* write TYPES */
strcpy(str, "TYPE");
dna_write(file, str, 4);
- len= nr_types;
+ len = nr_types;
dna_write(file, &len, 4);
/* calculate datablock size */
- cp= types[nr_types-1];
- cp+= strlen(types[nr_types-1]) + 1; /* +1: null-terminator */
- len= (intptr_t) (cp - (char*) types[0]);
- len= (len+3) & ~3;
+ cp = types[nr_types - 1];
+ cp += strlen(types[nr_types - 1]) + 1; /* +1: null-terminator */
+ len = (intptr_t) (cp - (char *) types[0]);
+ len = (len + 3) & ~3;
dna_write(file, types[0], len);
@@ -1061,21 +1061,21 @@ static int make_structDNA(char *baseDirectory, FILE *file)
strcpy(str, "TLEN");
dna_write(file, str, 4);
- len= 2*nr_types;
- if (nr_types & 1) len+= 2;
+ len = 2 * nr_types;
+ if (nr_types & 1) len += 2;
dna_write(file, typelens, len);
/* WRITE STRUCTS */
strcpy(str, "STRC");
dna_write(file, str, 4);
- len= nr_structs;
+ len = nr_structs;
dna_write(file, &len, 4);
/* calc datablock size */
- sp= structs[nr_structs-1];
- sp+= 2+ 2*( sp[1] );
- len= (intptr_t) ((char*) sp - (char*) structs[0]);
- len= (len+3) & ~3;
+ sp = structs[nr_structs - 1];
+ sp += 2 + 2 * (sp[1]);
+ len = (intptr_t) ((char *) sp - (char *) structs[0]);
+ len = (len + 3) & ~3;
dna_write(file, structs[0], len);
@@ -1084,8 +1084,8 @@ static int make_structDNA(char *baseDirectory, FILE *file)
FILE *fp;
int a;
- fp= fopen("padding.c", "w");
- if (fp==NULL);
+ fp = fopen("padding.c", "w");
+ if (fp == NULL) ;
else {
// add all include files defined in the global array
@@ -1096,7 +1096,7 @@ static int make_structDNA(char *baseDirectory, FILE *file)
fprintf(fp, "main() {\n");
sp = typelens;
sp += firststruct;
- for (a=firststruct; a<nr_types; a++, sp++) {
+ for (a = firststruct; a < nr_types; a++, sp++) {
if (*sp) {
fprintf(fp, "\tif (sizeof(struct %s) - %d) printf(\"ALIGN ERROR:", types[a], *sp);
fprintf(fp, "%%d %s %d ", types[a], *sp);
@@ -1129,7 +1129,7 @@ static int make_structDNA(char *baseDirectory, FILE *file)
static void make_bad_file(const char *file, int line)
{
- FILE *fp= fopen(file, "w");
+ FILE *fp = fopen(file, "w");
fprintf(fp, "#error \"Error! can't make correct DNA.c file from %s:%d, STUPID!\"\n", __FILE__, line);
fclose(fp);
}
@@ -1138,32 +1138,32 @@ static void make_bad_file(const char *file, int line)
#define BASE_HEADER "../"
#endif
-int main(int argc, char ** argv)
+int main(int argc, char **argv)
{
FILE *file;
int return_status = 0;
- if (argc!=2 && argc!=3) {
+ if (argc != 2 && argc != 3) {
printf("Usage: %s outfile.c [base directory]\n", argv[0]);
return_status = 1;
}
else {
file = fopen(argv[1], "w");
if (!file) {
- printf ("Unable to open file: %s\n", argv[1]);
+ printf("Unable to open file: %s\n", argv[1]);
return_status = 1;
}
else {
char baseDirectory[256];
- if (argc==3) {
+ if (argc == 3) {
strcpy(baseDirectory, argv[2]);
}
else {
strcpy(baseDirectory, BASE_HEADER);
}
- fprintf (file, "unsigned char DNAstr[]= {\n");
+ fprintf(file, "unsigned char DNAstr[]= {\n");
if (make_structDNA(baseDirectory, file)) {
// error
fclose(file);
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index 47b25720373..348efaed8c6 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -80,15 +80,15 @@ typedef enum PropertyType {
/* also update rna_property_subtype_unit when you change this */
typedef enum PropertyUnit {
- PROP_UNIT_NONE = (0<<16),
- PROP_UNIT_LENGTH = (1<<16), /* m */
- PROP_UNIT_AREA = (2<<16), /* m^2 */
- PROP_UNIT_VOLUME = (3<<16), /* m^3 */
- PROP_UNIT_MASS = (4<<16), /* kg */
- PROP_UNIT_ROTATION = (5<<16), /* radians */
- PROP_UNIT_TIME = (6<<16), /* frame */
- PROP_UNIT_VELOCITY = (7<<16), /* m/s */
- PROP_UNIT_ACCELERATION = (8<<16) /* m/(s^2) */
+ PROP_UNIT_NONE = (0 << 16),
+ PROP_UNIT_LENGTH = (1 << 16), /* m */
+ PROP_UNIT_AREA = (2 << 16), /* m^2 */
+ PROP_UNIT_VOLUME = (3 << 16), /* m^3 */
+ PROP_UNIT_MASS = (4 << 16), /* kg */
+ PROP_UNIT_ROTATION = (5 << 16), /* radians */
+ PROP_UNIT_TIME = (6 << 16), /* frame */
+ PROP_UNIT_VELOCITY = (7 << 16), /* m/s */
+ PROP_UNIT_ACCELERATION = (8 << 16) /* m/(s^2) */
} PropertyUnit;
#define RNA_SUBTYPE_UNIT(subtype) ((subtype) & 0x00FF0000)
@@ -118,22 +118,22 @@ typedef enum PropertySubType {
PROP_UNSIGNED = 13,
PROP_PERCENTAGE = 14,
PROP_FACTOR = 15,
- PROP_ANGLE = 16|PROP_UNIT_ROTATION,
- PROP_TIME = 17|PROP_UNIT_TIME,
- PROP_DISTANCE = 18|PROP_UNIT_LENGTH,
+ PROP_ANGLE = 16 | PROP_UNIT_ROTATION,
+ PROP_TIME = 17 | PROP_UNIT_TIME,
+ PROP_DISTANCE = 18 | PROP_UNIT_LENGTH,
/* number arrays */
PROP_COLOR = 20,
- PROP_TRANSLATION = 21|PROP_UNIT_LENGTH,
+ PROP_TRANSLATION = 21 | PROP_UNIT_LENGTH,
PROP_DIRECTION = 22,
- PROP_VELOCITY = 23|PROP_UNIT_VELOCITY,
- PROP_ACCELERATION = 24|PROP_UNIT_ACCELERATION,
+ PROP_VELOCITY = 23 | PROP_UNIT_VELOCITY,
+ PROP_ACCELERATION = 24 | PROP_UNIT_ACCELERATION,
PROP_MATRIX = 25,
- PROP_EULER = 26|PROP_UNIT_ROTATION,
+ PROP_EULER = 26 | PROP_UNIT_ROTATION,
PROP_QUATERNION = 27,
PROP_AXISANGLE = 28,
PROP_XYZ = 29,
- PROP_XYZ_LENGTH = 29|PROP_UNIT_LENGTH,
+ PROP_XYZ_LENGTH = 29 | PROP_UNIT_LENGTH,
PROP_COLOR_GAMMA = 30,
PROP_COORDS = 31, /* generic array, no units applied, only that x/y/z/w are used (python vec) */
@@ -147,49 +147,49 @@ typedef enum PropertyFlag {
/* editable means the property is editable in the user
* interface, properties are editable by default except
* for pointers and collections. */
- PROP_EDITABLE = (1<<0),
+ PROP_EDITABLE = (1 << 0),
/* this property is editable even if it is lib linked,
* meaning it will get lost on reload, but it's useful
* for editing. */
- PROP_LIB_EXCEPTION = (1<<16),
+ PROP_LIB_EXCEPTION = (1 << 16),
/* animatable means the property can be driven by some
* other input, be it animation curves, expressions, ..
* properties are animatable by default except for pointers
* and collections */
- PROP_ANIMATABLE = (1<<1),
+ PROP_ANIMATABLE = (1 << 1),
/* icon */
- PROP_ICONS_CONSECUTIVE = (1<<12),
+ PROP_ICONS_CONSECUTIVE = (1 << 12),
/* hidden in the user interface */
- PROP_HIDDEN = (1<<19),
+ PROP_HIDDEN = (1 << 19),
/* do not write in presets */
- PROP_SKIP_SAVE = (1<<28),
+ PROP_SKIP_SAVE = (1 << 28),
/* function paramater flags */
- PROP_REQUIRED = (1<<2),
- PROP_OUTPUT = (1<<3),
- PROP_RNAPTR = (1<<11),
+ PROP_REQUIRED = (1 << 2),
+ PROP_OUTPUT = (1 << 3),
+ PROP_RNAPTR = (1 << 11),
/* registering */
- PROP_REGISTER = (1<<4),
- PROP_REGISTER_OPTIONAL = (1<<4)|(1<<5),
+ PROP_REGISTER = (1 << 4),
+ PROP_REGISTER_OPTIONAL = (1 << 4) | (1 << 5),
/* pointers */
- PROP_ID_REFCOUNT = (1<<6),
+ PROP_ID_REFCOUNT = (1 << 6),
/* disallow assigning a variable to its self, eg an object tracking its self
* only apply this to types that are derived from an ID ()*/
- PROP_ID_SELF_CHECK = (1<<20),
+ PROP_ID_SELF_CHECK = (1 << 20),
/* use for...
* - pointers: in the UI and python so unsetting or setting to None won't work
* - strings: so our internal generated get/length/set functions know to do NULL checks before access [#30865] */
- PROP_NEVER_NULL = (1<<18),
+ PROP_NEVER_NULL = (1 << 18),
/* currently only used for UI, this is similar to PROP_NEVER_NULL
* except that the value may be NULL at times, used for ObData, where an Empty's will be NULL
* but setting NULL on a mesh object is not possible. So, if its not NULL, setting NULL cant be done! */
- PROP_NEVER_UNLINK = (1<<25),
+ PROP_NEVER_UNLINK = (1 << 25),
/* flag contains multiple enums.
* note: not to be confused with prop->enumbitflags
@@ -197,32 +197,32 @@ typedef enum PropertyFlag {
*
* note: these can't be animated so use with care.
*/
- PROP_ENUM_FLAG = (1<<21),
+ PROP_ENUM_FLAG = (1 << 21),
/* need context for update function */
- PROP_CONTEXT_UPDATE = (1<<22),
- PROP_CONTEXT_PROPERTY_UPDATE = (1<<22)|(1<<27),
+ PROP_CONTEXT_UPDATE = (1 << 22),
+ PROP_CONTEXT_PROPERTY_UPDATE = (1 << 22) | (1 << 27),
/* Use for arrays or for any data that should not have a referene kept
* most common case is functions that return arrays where the array */
- PROP_THICK_WRAP = (1<<23),
+ PROP_THICK_WRAP = (1 << 23),
/* Reject values outside limits, use for python api only so far
* this is for use when silently clamping string length will give
* bad behavior later. Could also enforce this for INT's and other types.
* note: currently no support for function arguments or non utf8 paths (filepaths) */
- PROP_NEVER_CLAMP = (1<<26),
+ PROP_NEVER_CLAMP = (1 << 26),
/* internal flags */
- PROP_BUILTIN = (1<<7),
- PROP_EXPORT = (1<<8),
- PROP_RUNTIME = (1<<9),
- PROP_IDPROPERTY = (1<<10),
- PROP_RAW_ACCESS = (1<<13),
- PROP_RAW_ARRAY = (1<<14),
- PROP_FREE_POINTERS = (1<<15),
- PROP_DYNAMIC = (1<<17), /* for dynamic arrays, and retvals of type string */
- PROP_ENUM_NO_CONTEXT = (1<<24) /* for enum that shouldn't be contextual */
+ PROP_BUILTIN = (1 << 7),
+ PROP_EXPORT = (1 << 8),
+ PROP_RUNTIME = (1 << 9),
+ PROP_IDPROPERTY = (1 << 10),
+ PROP_RAW_ACCESS = (1 << 13),
+ PROP_RAW_ARRAY = (1 << 14),
+ PROP_FREE_POINTERS = (1 << 15),
+ PROP_DYNAMIC = (1 << 17), /* for dynamic arrays, and retvals of type string */
+ PROP_ENUM_NO_CONTEXT = (1 << 24) /* for enum that shouldn't be contextual */
} PropertyFlag;
typedef struct CollectionPropertyIterator {
@@ -245,7 +245,7 @@ typedef struct CollectionPointerLink {
} CollectionPointerLink;
typedef enum RawPropertyType {
- PROP_RAW_UNSET=-1,
+ PROP_RAW_UNSET = -1,
PROP_RAW_INT, // XXX - abused for types that are not set, eg. MFace.verts, needs fixing.
PROP_RAW_SHORT,
PROP_RAW_CHAR,
@@ -315,7 +315,7 @@ typedef enum FunctionFlag {
/* registering */
FUNC_REGISTER = 16,
- FUNC_REGISTER_OPTIONAL = 16|32,
+ FUNC_REGISTER_OPTIONAL = 16 | 32,
/* internal flags */
FUNC_BUILTIN = 128,
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 0e47a680553..e83173eb8bc 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -139,7 +139,7 @@ static int replace_if_different(char *tmpfile, const char *dep_files[])
/* dir only */
p1 = strrchr(from_path, '/');
p2 = strrchr(from_path, '\\');
- strcpy((p1 > p2 ? p1 : p2)+1, dep_files[pass]);
+ strcpy((p1 > p2 ? p1 : p2) + 1, dep_files[pass]);
/* account for build deps, if makesrna.c (this file) is newer */
if (file_older(orgfile, from_path)) {
REN_IF_DIFF;
@@ -170,8 +170,8 @@ static int replace_if_different(char *tmpfile, const char *dep_files[])
}
/* now compare the files... */
- arr_new = MEM_mallocN(sizeof(char)*len_new, "rna_cmp_file_new");
- arr_org = MEM_mallocN(sizeof(char)*len_org, "rna_cmp_file_org");
+ arr_new = MEM_mallocN(sizeof(char) * len_new, "rna_cmp_file_new");
+ arr_org = MEM_mallocN(sizeof(char) * len_org, "rna_cmp_file_org");
if (fread(arr_new, sizeof(char), len_new, fp_new) != len_new)
fprintf(stderr, "%s:%d, error reading file %s for comparison.\n", __FILE__, __LINE__, tmpfile);
@@ -213,16 +213,16 @@ static const char *rna_safe_id(const char *id)
static int cmp_struct(const void *a, const void *b)
{
- const StructRNA *structa = *(const StructRNA**)a;
- const StructRNA *structb = *(const StructRNA**)b;
+ const StructRNA *structa = *(const StructRNA **)a;
+ const StructRNA *structb = *(const StructRNA **)b;
return strcmp(structa->identifier, structb->identifier);
}
static int cmp_property(const void *a, const void *b)
{
- const PropertyRNA *propa = *(const PropertyRNA**)a;
- const PropertyRNA *propb = *(const PropertyRNA**)b;
+ const PropertyRNA *propa = *(const PropertyRNA **)a;
+ const PropertyRNA *propb = *(const PropertyRNA **)b;
if (strcmp(propa->identifier, "rna_type") == 0) return -1;
else if (strcmp(propb->identifier, "rna_type") == 0) return 1;
@@ -235,21 +235,21 @@ static int cmp_property(const void *a, const void *b)
static int cmp_def_struct(const void *a, const void *b)
{
- const StructDefRNA *dsa = *(const StructDefRNA**)a;
- const StructDefRNA *dsb = *(const StructDefRNA**)b;
+ const StructDefRNA *dsa = *(const StructDefRNA **)a;
+ const StructDefRNA *dsb = *(const StructDefRNA **)b;
return cmp_struct(&dsa->srna, &dsb->srna);
}
static int cmp_def_property(const void *a, const void *b)
{
- const PropertyDefRNA *dpa = *(const PropertyDefRNA**)a;
- const PropertyDefRNA *dpb = *(const PropertyDefRNA**)b;
+ const PropertyDefRNA *dpa = *(const PropertyDefRNA **)a;
+ const PropertyDefRNA *dpb = *(const PropertyDefRNA **)b;
return cmp_property(&dpa->prop, &dpb->prop);
}
-static void rna_sortlist(ListBase *listbase, int(*cmp)(const void*, const void*))
+static void rna_sortlist(ListBase *listbase, int (*cmp)(const void *, const void *))
{
Link *link;
void **array;
@@ -261,14 +261,14 @@ static void rna_sortlist(ListBase *listbase, int(*cmp)(const void*, const void*)
for (size = 0, link = listbase->first; link; link = link->next)
size++;
- array = MEM_mallocN(sizeof(void*)*size, "rna_sortlist");
+ array = MEM_mallocN(sizeof(void *) * size, "rna_sortlist");
for (a = 0, link = listbase->first; link; link = link->next, a++)
array[a] = link;
- qsort(array, size, sizeof(void*), cmp);
+ qsort(array, size, sizeof(void *), cmp);
listbase->first = listbase->last = NULL;
- for (a = 0; a<size; a++) {
+ for (a = 0; a < size; a++) {
link = array[a];
link->next = link->prev = NULL;
rna_addtail(listbase, link);
@@ -322,7 +322,7 @@ static char *rna_alloc_function_name(const char *structname, const char *propnam
char *result;
snprintf(buffer, sizeof(buffer), "%s_%s_%s", structname, propname, type);
- result = MEM_callocN(sizeof(char)*strlen(buffer)+1, "rna_alloc_function_name");
+ result = MEM_callocN(sizeof(char) * strlen(buffer) + 1, "rna_alloc_function_name");
strcpy(result, buffer);
alloc = MEM_callocN(sizeof(AllocDefRNA), "AllocDefRNA");
@@ -421,7 +421,7 @@ static const char *rna_parameter_type_name(PropertyRNA *parm)
switch (parm->type) {
case PROP_POINTER: {
- PointerPropertyRNA *pparm = (PointerPropertyRNA*)parm;
+ PointerPropertyRNA *pparm = (PointerPropertyRNA *)parm;
if (parm->flag & PROP_RNAPTR)
return "PointerRNA";
@@ -438,11 +438,11 @@ static const char *rna_parameter_type_name(PropertyRNA *parm)
static int rna_enum_bitmask(PropertyRNA *prop)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
int a, mask = 0;
if (eprop->item) {
- for (a = 0; a<eprop->totitem; a++)
+ for (a = 0; a < eprop->totitem; a++)
if (eprop->item[a].identifier[0])
mask |= eprop->item[a].value;
}
@@ -459,7 +459,7 @@ static int rna_color_quantize(PropertyRNA *prop, PropertyDefRNA *dp)
static const char *rna_function_string(void *func)
{
- return (func)? (const char*)func: "NULL";
+ return (func) ? (const char *)func : "NULL";
}
static void rna_float_print(FILE *f, float num)
@@ -524,7 +524,7 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
switch (prop->type) {
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
fprintf(f, "void %s(PointerRNA *ptr, char *value)\n", func);
fprintf(f, "{\n");
if (manualfunc) {
@@ -533,10 +533,10 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
else {
const PropertySubType subtype = prop->subtype;
const char *string_copy_func = (subtype == PROP_FILEPATH ||
- subtype == PROP_DIRPATH ||
- subtype == PROP_FILENAME ||
- subtype == PROP_BYTESTRING) ?
- "BLI_strncpy" : "BLI_strncpy_utf8";
+ subtype == PROP_DIRPATH ||
+ subtype == PROP_FILENAME ||
+ subtype == PROP_BYTESTRING) ?
+ "BLI_strncpy" : "BLI_strncpy_utf8";
rna_print_data_get(f, dp);
@@ -563,20 +563,20 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
fprintf(f, " return %s(ptr);\n", manualfunc);
}
else {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
rna_print_data_get(f, dp);
if (dp->dnapointerlevel == 0)
fprintf(f, " return rna_pointer_inherit_refine(ptr, &RNA_%s, &data->%s);\n",
- (const char*)pprop->type, dp->dnaname);
+ (const char *)pprop->type, dp->dnaname);
else
fprintf(f, " return rna_pointer_inherit_refine(ptr, &RNA_%s, data->%s);\n",
- (const char*)pprop->type, dp->dnaname);
+ (const char *)pprop->type, dp->dnaname);
}
fprintf(f, "}\n\n");
break;
}
case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
fprintf(f, "static PointerRNA %s(CollectionPropertyIterator *iter)\n", func);
fprintf(f, "{\n");
@@ -586,7 +586,7 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
strcmp(manualfunc, "rna_iterator_array_dereference_get") == 0)
{
fprintf(f, " return rna_pointer_inherit_refine(&iter->parent, &RNA_%s, %s(iter));\n",
- (cprop->item_type) ? (const char *)cprop->item_type: "UnknownType", manualfunc);
+ (cprop->item_type) ? (const char *)cprop->item_type : "UnknownType", manualfunc);
}
else {
fprintf(f, " return %s(iter);\n", manualfunc);
@@ -626,16 +626,16 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
if (dp->dnaarraylength == 1) {
if (prop->type == PROP_BOOLEAN && dp->booleanbit) {
fprintf(f, " values[i]= %s((data->%s & (%d<<i)) != 0);\n",
- (dp->booleannegative)? "!": "", dp->dnaname, dp->booleanbit);
+ (dp->booleannegative) ? "!" : "", dp->dnaname, dp->booleanbit);
}
else {
fprintf(f, " values[i]= (%s)%s((&data->%s)[i]);\n",
- rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname);
+ rna_type_type(prop), (dp->booleannegative) ? "!" : "", dp->dnaname);
}
}
else {
if (prop->type == PROP_BOOLEAN && dp->booleanbit) {
- fprintf(f, " values[i]= %s((data->%s[i] & ", (dp->booleannegative)? "!": "",
+ fprintf(f, " values[i]= %s((data->%s[i] & ", (dp->booleannegative) ? "!" : "",
dp->dnaname);
rna_int_print(f, dp->booleanbit);
fprintf(f, ") != 0);\n");
@@ -646,11 +646,11 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
}
else if (dp->dnatype) {
fprintf(f, " values[i]= (%s)%s(((%s*)data->%s)[i]);\n",
- rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnatype, dp->dnaname);
+ rna_type_type(prop), (dp->booleannegative) ? "!" : "", dp->dnatype, dp->dnaname);
}
else {
fprintf(f, " values[i]= (%s)%s((data->%s)[i]);\n",
- rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname);
+ rna_type_type(prop), (dp->booleannegative) ? "!" : "", dp->dnaname);
}
}
fprintf(f, " }\n");
@@ -667,7 +667,7 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
else {
rna_print_data_get(f, dp);
if (prop->type == PROP_BOOLEAN && dp->booleanbit) {
- fprintf(f, " return %s(((data->%s) & ", (dp->booleannegative)? "!": "", dp->dnaname);
+ fprintf(f, " return %s(((data->%s) & ", (dp->booleannegative) ? "!" : "", dp->dnaname);
rna_int_print(f, dp->booleanbit);
fprintf(f, ") != 0);\n");
}
@@ -678,7 +678,7 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
}
else
fprintf(f, " return (%s)%s(data->%s);\n", rna_type_type(prop),
- (dp->booleannegative)? "!": "", dp->dnaname);
+ (dp->booleannegative) ? "!" : "", dp->dnaname);
}
fprintf(f, "}\n\n");
@@ -693,7 +693,7 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
static void rna_clamp_value_range(FILE *f, PropertyRNA *prop)
{
if (prop->type == PROP_FLOAT) {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
if (fprop->range) {
fprintf(f,
" float prop_clamp_min = -FLT_MAX, prop_clamp_max = FLT_MAX, prop_soft_min, prop_soft_max;\n");
@@ -702,7 +702,7 @@ static void rna_clamp_value_range(FILE *f, PropertyRNA *prop)
}
}
else if (prop->type == PROP_INT) {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
if (iprop->range) {
fprintf(f, " int prop_clamp_min = INT_MIN, prop_clamp_max = INT_MAX, prop_soft_min, prop_soft_max;\n");
fprintf(f, " %s(ptr, &prop_clamp_min, &prop_clamp_max, &prop_soft_min, &prop_soft_max);\n",
@@ -714,7 +714,7 @@ static void rna_clamp_value_range(FILE *f, PropertyRNA *prop)
static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array)
{
if (prop->type == PROP_INT) {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
if (iprop->hardmin != INT_MIN || iprop->hardmax != INT_MAX) {
if (array) fprintf(f, "CLAMPIS(values[i], ");
@@ -730,7 +730,7 @@ static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array)
}
}
else if (prop->type == PROP_FLOAT) {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
if (fprop->hardmin != -FLT_MAX || fprop->hardmax != FLT_MAX) {
if (array) fprintf(f, "CLAMPIS(values[i], ");
@@ -777,7 +777,7 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
switch (prop->type) {
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
fprintf(f, "void %s(PointerRNA *ptr, const char *value)\n", func);
fprintf(f, "{\n");
if (manualfunc) {
@@ -786,10 +786,10 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
else {
const PropertySubType subtype = prop->subtype;
const char *string_copy_func = (subtype == PROP_FILEPATH ||
- subtype == PROP_DIRPATH ||
- subtype == PROP_FILENAME ||
- subtype == PROP_BYTESTRING) ?
- "BLI_strncpy" : "BLI_strncpy_utf8";
+ subtype == PROP_DIRPATH ||
+ subtype == PROP_FILENAME ||
+ subtype == PROP_BYTESTRING) ?
+ "BLI_strncpy" : "BLI_strncpy_utf8";
rna_print_data_get(f, dp);
@@ -829,8 +829,8 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
fprintf(f, " id_us_plus((ID*)value.data);\n\n");
}
else {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)dp->prop;
- StructRNA *type = rna_find_struct((const char*)pprop->type);
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop;
+ StructRNA *type = rna_find_struct((const char *)pprop->type);
if (type && (type->flag & STRUCT_ID)) {
fprintf(f, " if (value.data)\n");
fprintf(f, " id_lib_extern((ID*)value.data);\n\n");
@@ -876,7 +876,7 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
if (dp->dnaarraylength == 1) {
if (prop->type == PROP_BOOLEAN && dp->booleanbit) {
fprintf(f, " if (%svalues[i]) data->%s |= (%d<<i);\n",
- (dp->booleannegative)? "!": "", dp->dnaname, dp->booleanbit);
+ (dp->booleannegative) ? "!" : "", dp->dnaname, dp->booleanbit);
fprintf(f, " else data->%s &= ~(%d<<i);\n", dp->dnaname, dp->booleanbit);
}
else {
@@ -983,7 +983,7 @@ static char *rna_def_property_length_func(FILE *f, StructRNA *srna, PropertyRNA
}
else if (prop->type == PROP_COLLECTION) {
if (!manualfunc) {
- if (prop->type == PROP_COLLECTION && (!(dp->dnalengthname || dp->dnalengthfixed)|| !dp->dnaname)) {
+ if (prop->type == PROP_COLLECTION && (!(dp->dnalengthname || dp->dnalengthfixed) || !dp->dnaname)) {
fprintf(stderr, "%s: %s.%s has no valid dna info.\n",
__func__, srna->identifier, prop->identifier);
DefRNA.error = 1;
@@ -1088,8 +1088,8 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property
return NULL;
/* only supported in case of standard next functions */
- if (strcmp(nextfunc, "rna_iterator_array_next") == 0);
- else if (strcmp(nextfunc, "rna_iterator_listbase_next") == 0);
+ if (strcmp(nextfunc, "rna_iterator_array_next") == 0) ;
+ else if (strcmp(nextfunc, "rna_iterator_listbase_next") == 0) ;
else return NULL;
}
@@ -1153,7 +1153,7 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property
#if 0
rna_print_data_get(f, dp);
- item_type = (cprop->item_type)? (const char*)cprop->item_type: "UnknownType";
+ item_type = (cprop->item_type) ? (const char *)cprop->item_type : "UnknownType";
if (dp->dnalengthname || dp->dnalengthfixed) {
if (dp->dnalengthname)
@@ -1267,79 +1267,79 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp)
switch (prop->type) {
case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
if (!prop->arraydimension) {
if (!bprop->get && !bprop->set && !dp->booleanbit)
rna_set_raw_property(dp, prop);
- bprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)bprop->get);
- bprop->set = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)bprop->set);
+ bprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)bprop->get);
+ bprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)bprop->set);
}
else {
- bprop->getarray = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)bprop->getarray);
- bprop->setarray = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)bprop->setarray);
+ bprop->getarray = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)bprop->getarray);
+ bprop->setarray = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)bprop->setarray);
}
break;
}
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
if (!prop->arraydimension) {
if (!iprop->get && !iprop->set)
rna_set_raw_property(dp, prop);
- iprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)iprop->get);
- iprop->set = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)iprop->set);
+ iprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)iprop->get);
+ iprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)iprop->set);
}
else {
if (!iprop->getarray && !iprop->setarray)
rna_set_raw_property(dp, prop);
- iprop->getarray = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)iprop->getarray);
- iprop->setarray = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)iprop->setarray);
+ iprop->getarray = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)iprop->getarray);
+ iprop->setarray = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)iprop->setarray);
}
break;
}
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
if (!prop->arraydimension) {
if (!fprop->get && !fprop->set)
rna_set_raw_property(dp, prop);
- fprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)fprop->get);
- fprop->set = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)fprop->set);
+ fprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)fprop->get);
+ fprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)fprop->set);
}
else {
if (!fprop->getarray && !fprop->setarray)
rna_set_raw_property(dp, prop);
- fprop->getarray = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)fprop->getarray);
- fprop->setarray = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)fprop->setarray);
+ fprop->getarray = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)fprop->getarray);
+ fprop->setarray = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)fprop->setarray);
}
break;
}
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
- eprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)eprop->get);
- eprop->set = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)eprop->set);
+ eprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)eprop->get);
+ eprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)eprop->set);
break;
}
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
- sprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)sprop->get);
- sprop->length = (void*)rna_def_property_length_func(f, srna, prop, dp, (const char*)sprop->length);
- sprop->set = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)sprop->set);
+ sprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)sprop->get);
+ sprop->length = (void *)rna_def_property_length_func(f, srna, prop, dp, (const char *)sprop->length);
+ sprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)sprop->set);
break;
}
case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
- pprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)pprop->get);
- pprop->set = (void*)rna_def_property_set_func(f, srna, prop, dp, (const char*)pprop->set);
+ pprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)pprop->get);
+ pprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)pprop->set);
if (!pprop->type) {
fprintf(stderr, "%s: %s.%s, pointer must have a struct type.\n",
__func__, srna->identifier, prop->identifier);
@@ -1348,28 +1348,28 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp)
break;
}
case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
- const char *nextfunc = (const char*)cprop->next;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
+ const char *nextfunc = (const char *)cprop->next;
- if (dp->dnatype && strcmp(dp->dnatype, "ListBase") == 0);
+ if (dp->dnatype && strcmp(dp->dnatype, "ListBase") == 0) ;
else if (dp->dnalengthname || dp->dnalengthfixed)
- cprop->length = (void*)rna_def_property_length_func(f, srna, prop, dp, (const char*)cprop->length);
+ cprop->length = (void *)rna_def_property_length_func(f, srna, prop, dp, (const char *)cprop->length);
/* test if we can allow raw array access, if it is using our standard
* 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)
+ if (strcmp((const char *)cprop->next, "rna_iterator_array_next") == 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);
- cprop->next = (void*)rna_def_property_next_func(f, srna, prop, dp, (const char*)cprop->next);
- cprop->end = (void*)rna_def_property_end_func(f, srna, prop, dp, (const char*)cprop->end);
- cprop->lookupint = (void*)rna_def_property_lookup_int_func(f, srna, prop, dp,
- (const char*)cprop->lookupint, nextfunc);
+ 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);
+ cprop->next = (void *)rna_def_property_next_func(f, srna, prop, dp, (const char *)cprop->next);
+ cprop->end = (void *)rna_def_property_end_func(f, srna, prop, dp, (const char *)cprop->end);
+ cprop->lookupint = (void *)rna_def_property_lookup_int_func(f, srna, prop, dp,
+ (const char *)cprop->lookupint, nextfunc);
if (!(prop->flag & PROP_IDPROPERTY)) {
if (!cprop->begin) {
@@ -1405,7 +1405,7 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR
prop = dp->prop;
- if (prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN))
+ if (prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN))
return;
func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "");
@@ -1443,13 +1443,13 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR
break;
}
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
int i;
if (eprop->item) {
fprintf(f, "enum {\n");
- for (i = 0; i<eprop->totitem; i++)
+ for (i = 0; i < eprop->totitem; i++)
if (eprop->item[i].identifier[0])
fprintf(f, "\t%s_%s_%s = %d,\n", srna->identifier, prop->identifier,
eprop->item[i].identifier, eprop->item[i].value);
@@ -1463,7 +1463,7 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR
break;
}
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
if (sprop->maxlength) {
fprintf(f, "#define %s_%s_MAX %d\n\n", srna->identifier, prop->identifier, sprop->maxlength);
@@ -1500,7 +1500,7 @@ static void rna_def_property_funcs_header_cpp(FILE *f, StructRNA *srna, Property
prop = dp->prop;
- if (prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN))
+ if (prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN))
return;
if (prop->name && prop->description && prop->description[0] != '\0')
@@ -1533,13 +1533,13 @@ static void rna_def_property_funcs_header_cpp(FILE *f, StructRNA *srna, Property
break;
}
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
int i;
if (eprop->item) {
fprintf(f, "\tenum %s_enum {\n", rna_safe_id(prop->identifier));
- for (i = 0; i<eprop->totitem; i++)
+ for (i = 0; i < eprop->totitem; i++)
if (eprop->item[i].identifier[0])
fprintf(f, "\t\t%s_%s = %d,\n", rna_safe_id(prop->identifier), eprop->item[i].identifier,
eprop->item[i].value);
@@ -1555,19 +1555,19 @@ static void rna_def_property_funcs_header_cpp(FILE *f, StructRNA *srna, Property
break;
}
case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)dp->prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop;
if (pprop->type)
- fprintf(f, "\tinline %s %s(void);", (const char*)pprop->type, rna_safe_id(prop->identifier));
+ fprintf(f, "\tinline %s %s(void);", (const char *)pprop->type, rna_safe_id(prop->identifier));
else
fprintf(f, "\tinline %s %s(void);", "UnknownType", rna_safe_id(prop->identifier));
break;
}
case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)dp->prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)dp->prop;
if (cprop->item_type)
- fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s)", (const char*)cprop->item_type, srna->identifier,
+ fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s)", (const char *)cprop->item_type, srna->identifier,
rna_safe_id(prop->identifier));
else
fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s)", "UnknownType", srna->identifier,
@@ -1585,7 +1585,7 @@ static void rna_def_property_funcs_impl_cpp(FILE *f, StructRNA *srna, PropertyDe
prop = dp->prop;
- if (prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN))
+ if (prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN))
return;
switch (prop->type) {
@@ -1624,10 +1624,10 @@ static void rna_def_property_funcs_impl_cpp(FILE *f, StructRNA *srna, PropertyDe
break;
}
case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)dp->prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop;
if (pprop->type)
- fprintf(f, "\tPOINTER_PROPERTY(%s, %s, %s)", (const char*)pprop->type, srna->identifier,
+ fprintf(f, "\tPOINTER_PROPERTY(%s, %s, %s)", (const char *)pprop->type, srna->identifier,
rna_safe_id(prop->identifier));
else
fprintf(f, "\tPOINTER_PROPERTY(%s, %s, %s)", "UnknownType", srna->identifier,
@@ -1636,10 +1636,10 @@ static void rna_def_property_funcs_impl_cpp(FILE *f, StructRNA *srna, PropertyDe
}
case PROP_COLLECTION: {
#if 0
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)dp->prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)dp->prop;
if (cprop->type)
- fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s)", (const char*)cprop->type, srna->identifier,
+ fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s)", (const char *)cprop->type, srna->identifier,
prop->identifier);
else
fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s)", "UnknownType", srna->identifier, prop->identifier);
@@ -1869,23 +1869,23 @@ static void rna_auto_types(void)
if (dp->dnatype) {
if (dp->prop->type == PROP_POINTER) {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)dp->prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop;
StructRNA *type;
if (!pprop->type && !pprop->get)
- pprop->type = (StructRNA*)rna_find_type(dp->dnatype);
+ pprop->type = (StructRNA *)rna_find_type(dp->dnatype);
if (pprop->type) {
- type = rna_find_struct((const char*)pprop->type);
+ type = rna_find_struct((const char *)pprop->type);
if (type && (type->flag & STRUCT_ID_REFCOUNT))
pprop->property.flag |= PROP_ID_REFCOUNT;
}
}
else if (dp->prop->type == PROP_COLLECTION) {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)dp->prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)dp->prop;
if (!cprop->item_type && !cprop->get && strcmp(dp->dnatype, "ListBase") == 0)
- cprop->item_type = (StructRNA*)rna_find_type(dp->dnatype);
+ cprop->item_type = (StructRNA *)rna_find_type(dp->dnatype);
}
}
}
@@ -1965,16 +1965,16 @@ static const char *rna_property_subtypename(PropertySubType type)
static const char *rna_property_subtype_unit(PropertySubType type)
{
switch (RNA_SUBTYPE_UNIT(type)) {
- case PROP_UNIT_NONE: return "PROP_UNIT_NONE";
- case PROP_UNIT_LENGTH: return "PROP_UNIT_LENGTH";
- case PROP_UNIT_AREA: return "PROP_UNIT_AREA";
- case PROP_UNIT_VOLUME: return "PROP_UNIT_VOLUME";
- case PROP_UNIT_MASS: return "PROP_UNIT_MASS";
- case PROP_UNIT_ROTATION: return "PROP_UNIT_ROTATION";
- case PROP_UNIT_TIME: return "PROP_UNIT_TIME";
- case PROP_UNIT_VELOCITY: return "PROP_UNIT_VELOCITY";
- case PROP_UNIT_ACCELERATION:return "PROP_UNIT_ACCELERATION";
- default: return "PROP_UNIT_UNKNOWN";
+ case PROP_UNIT_NONE: return "PROP_UNIT_NONE";
+ case PROP_UNIT_LENGTH: return "PROP_UNIT_LENGTH";
+ case PROP_UNIT_AREA: return "PROP_UNIT_AREA";
+ case PROP_UNIT_VOLUME: return "PROP_UNIT_VOLUME";
+ case PROP_UNIT_MASS: return "PROP_UNIT_MASS";
+ case PROP_UNIT_ROTATION: return "PROP_UNIT_ROTATION";
+ case PROP_UNIT_TIME: return "PROP_UNIT_TIME";
+ case PROP_UNIT_VELOCITY: return "PROP_UNIT_VELOCITY";
+ case PROP_UNIT_ACCELERATION: return "PROP_UNIT_ACCELERATION";
+ default: return "PROP_UNIT_UNKNOWN";
}
}
@@ -2022,7 +2022,7 @@ static void rna_generate_property_prototypes(BlenderRNA *brna, StructRNA *srna,
fprintf(f, "\n");
for (prop = srna->cont.properties.first; prop; prop = prop->next)
- fprintf(f, "%s%s rna_%s_%s;\n", (prop->flag & PROP_EXPORT)? "": "", rna_property_structname(prop->type),
+ fprintf(f, "%s%s rna_%s_%s;\n", (prop->flag & PROP_EXPORT) ? "" : "", rna_property_structname(prop->type),
srna->identifier, prop->identifier);
fprintf(f, "\n");
}
@@ -2082,7 +2082,7 @@ static void rna_generate_static_parameter_prototypes(BlenderRNA *brna, StructRNA
for (dparm = dfunc->cont.properties.first; dparm; dparm = dparm->next) {
if (dparm->prop == func->c_ret) {
if (dparm->prop->arraydimension)
- fprintf(f, "XXX no array return types yet"); /* XXX not supported */
+ fprintf(f, "XXX no array return types yet"); /* XXX not supported */
else if (dparm->prop->type == PROP_POINTER && !(dparm->prop->flag & PROP_RNAPTR))
fprintf(f, "%s%s *", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
else
@@ -2199,8 +2199,8 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
if (nest != NULL) {
len = strlen(nest);
- strnest = MEM_mallocN(sizeof(char)*(len+2), "rna_generate_property -> strnest");
- errnest = MEM_mallocN(sizeof(char)*(len+2), "rna_generate_property -> errnest");
+ strnest = MEM_mallocN(sizeof(char) * (len + 2), "rna_generate_property -> strnest");
+ errnest = MEM_mallocN(sizeof(char) * (len + 2), "rna_generate_property -> errnest");
strcpy(strnest, "_"); strcat(strnest, nest);
strcpy(errnest, "."); strcat(errnest, nest);
@@ -2209,127 +2209,127 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
}
switch (prop->type) {
- case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
- int i, defaultfound = 0, totflag = 0;
-
- if (eprop->item) {
- fprintf(f, "static EnumPropertyItem rna_%s%s_%s_items[%d] = {\n\t", srna->identifier,
- strnest, prop->identifier, eprop->totitem+1);
-
- for (i = 0; i<eprop->totitem; i++) {
- fprintf(f, "{%d, ", eprop->item[i].value);
- rna_print_c_string(f, eprop->item[i].identifier); fprintf(f, ", ");
- fprintf(f, "%d, ", eprop->item[i].icon);
- rna_print_c_string(f, eprop->item[i].name); fprintf(f, ", ");
- rna_print_c_string(f, eprop->item[i].description); fprintf(f, "},\n\t");
-
- if (eprop->item[i].identifier[0]) {
- if (prop->flag & PROP_ENUM_FLAG) {
- totflag |= eprop->item[i].value;
- }
- else {
- if (eprop->defaultvalue == eprop->item[i].value) {
- defaultfound = 1;
- }
+ case PROP_ENUM: {
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
+ int i, defaultfound = 0, totflag = 0;
+
+ if (eprop->item) {
+ fprintf(f, "static EnumPropertyItem rna_%s%s_%s_items[%d] = {\n\t", srna->identifier,
+ strnest, prop->identifier, eprop->totitem + 1);
+
+ for (i = 0; i < eprop->totitem; i++) {
+ fprintf(f, "{%d, ", eprop->item[i].value);
+ rna_print_c_string(f, eprop->item[i].identifier); fprintf(f, ", ");
+ fprintf(f, "%d, ", eprop->item[i].icon);
+ rna_print_c_string(f, eprop->item[i].name); fprintf(f, ", ");
+ rna_print_c_string(f, eprop->item[i].description); fprintf(f, "},\n\t");
+
+ if (eprop->item[i].identifier[0]) {
+ if (prop->flag & PROP_ENUM_FLAG) {
+ totflag |= eprop->item[i].value;
+ }
+ else {
+ if (eprop->defaultvalue == eprop->item[i].value) {
+ defaultfound = 1;
}
}
}
+ }
- fprintf(f, "{0, NULL, 0, NULL, NULL}\n};\n\n");
+ fprintf(f, "{0, NULL, 0, NULL, NULL}\n};\n\n");
- if (prop->flag & PROP_ENUM_FLAG) {
- if (eprop->defaultvalue & ~totflag) {
- fprintf(stderr, "%s: %s%s.%s, enum default includes unused bits (%d).\n",
- __func__, srna->identifier, errnest, prop->identifier,
- eprop->defaultvalue & ~totflag);
- DefRNA.error = 1;
- }
- }
- else {
- if (!defaultfound) {
- fprintf(stderr, "%s: %s%s.%s, enum default is not in items.\n",
- __func__, srna->identifier, errnest, prop->identifier);
- DefRNA.error = 1;
- }
+ if (prop->flag & PROP_ENUM_FLAG) {
+ if (eprop->defaultvalue & ~totflag) {
+ fprintf(stderr, "%s: %s%s.%s, enum default includes unused bits (%d).\n",
+ __func__, srna->identifier, errnest, prop->identifier,
+ eprop->defaultvalue & ~totflag);
+ DefRNA.error = 1;
}
}
else {
- fprintf(stderr, "%s: %s%s.%s, enum must have items defined.\n",
- __func__, srna->identifier, errnest, prop->identifier);
- DefRNA.error = 1;
+ if (!defaultfound) {
+ fprintf(stderr, "%s: %s%s.%s, enum default is not in items.\n",
+ __func__, srna->identifier, errnest, prop->identifier);
+ DefRNA.error = 1;
+ }
}
- break;
}
- case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
- unsigned int i;
-
- if (prop->arraydimension && prop->totarraylength) {
- fprintf(f, "static int rna_%s%s_%s_default[%u] = {\n\t", srna->identifier, strnest,
- prop->identifier, prop->totarraylength);
-
- for (i = 0; i<prop->totarraylength; i++) {
- if (bprop->defaultarray)
- fprintf(f, "%d", bprop->defaultarray[i]);
- else
- fprintf(f, "%d", bprop->defaultvalue);
- if (i != prop->totarraylength-1)
- fprintf(f, ",\n\t");
- }
+ else {
+ fprintf(stderr, "%s: %s%s.%s, enum must have items defined.\n",
+ __func__, srna->identifier, errnest, prop->identifier);
+ DefRNA.error = 1;
+ }
+ break;
+ }
+ case PROP_BOOLEAN: {
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
+ unsigned int i;
- fprintf(f, "\n};\n\n");
+ if (prop->arraydimension && prop->totarraylength) {
+ fprintf(f, "static int rna_%s%s_%s_default[%u] = {\n\t", srna->identifier, strnest,
+ prop->identifier, prop->totarraylength);
+
+ for (i = 0; i < prop->totarraylength; i++) {
+ if (bprop->defaultarray)
+ fprintf(f, "%d", bprop->defaultarray[i]);
+ else
+ fprintf(f, "%d", bprop->defaultvalue);
+ if (i != prop->totarraylength - 1)
+ fprintf(f, ",\n\t");
}
- break;
+
+ fprintf(f, "\n};\n\n");
}
- case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
- unsigned int i;
-
- if (prop->arraydimension && prop->totarraylength) {
- fprintf(f, "static int rna_%s%s_%s_default[%u] = {\n\t", srna->identifier, strnest,
- prop->identifier, prop->totarraylength);
-
- for (i = 0; i<prop->totarraylength; i++) {
- if (iprop->defaultarray)
- fprintf(f, "%d", iprop->defaultarray[i]);
- else
- fprintf(f, "%d", iprop->defaultvalue);
- if (i != prop->totarraylength-1)
- fprintf(f, ",\n\t");
- }
+ break;
+ }
+ case PROP_INT: {
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
+ unsigned int i;
+
+ if (prop->arraydimension && prop->totarraylength) {
+ fprintf(f, "static int rna_%s%s_%s_default[%u] = {\n\t", srna->identifier, strnest,
+ prop->identifier, prop->totarraylength);
- fprintf(f, "\n};\n\n");
+ for (i = 0; i < prop->totarraylength; i++) {
+ if (iprop->defaultarray)
+ fprintf(f, "%d", iprop->defaultarray[i]);
+ else
+ fprintf(f, "%d", iprop->defaultvalue);
+ if (i != prop->totarraylength - 1)
+ fprintf(f, ",\n\t");
}
- break;
+
+ fprintf(f, "\n};\n\n");
}
- case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
- unsigned int i;
-
- if (prop->arraydimension && prop->totarraylength) {
- fprintf(f, "static float rna_%s%s_%s_default[%u] = {\n\t", srna->identifier, strnest,
- prop->identifier, prop->totarraylength);
-
- for (i = 0; i<prop->totarraylength; i++) {
- if (fprop->defaultarray)
- rna_float_print(f, fprop->defaultarray[i]);
- else
- rna_float_print(f, fprop->defaultvalue);
- if (i != prop->totarraylength-1)
- fprintf(f, ",\n\t");
- }
+ break;
+ }
+ case PROP_FLOAT: {
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
+ unsigned int i;
+
+ if (prop->arraydimension && prop->totarraylength) {
+ fprintf(f, "static float rna_%s%s_%s_default[%u] = {\n\t", srna->identifier, strnest,
+ prop->identifier, prop->totarraylength);
- fprintf(f, "\n};\n\n");
+ for (i = 0; i < prop->totarraylength; i++) {
+ if (fprop->defaultarray)
+ rna_float_print(f, fprop->defaultarray[i]);
+ else
+ rna_float_print(f, fprop->defaultvalue);
+ if (i != prop->totarraylength - 1)
+ fprintf(f, ",\n\t");
}
- break;
+
+ fprintf(f, "\n};\n\n");
}
- default:
- break;
+ break;
+ }
+ default:
+ break;
}
fprintf(f, "%s%s rna_%s%s_%s = {\n",
- (prop->flag & PROP_EXPORT) ? "": "",
+ (prop->flag & PROP_EXPORT) ? "" : "",
rna_property_structname(prop->type),
srna->identifier, strnest, prop->identifier);
@@ -2355,7 +2355,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
prop->arraylength[2],
prop->totarraylength);
fprintf(f, "\t%s%s, %d, %s, %s,\n",
- (prop->flag & PROP_CONTEXT_UPDATE) ? "(UpdateFunc)": "",
+ (prop->flag & PROP_CONTEXT_UPDATE) ? "(UpdateFunc)" : "",
rna_function_string(prop->update),
prop->noteflag,
rna_function_string(prop->editable),
@@ -2365,112 +2365,112 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
else fprintf(f, "\t0, -1");
/* our own type - collections/arrays only */
- if (prop->srna) fprintf(f, ", &RNA_%s", (const char*)prop->srna);
+ if (prop->srna) fprintf(f, ", &RNA_%s", (const char *)prop->srna);
else fprintf(f, ", NULL");
fprintf(f, "},\n");
switch (prop->type) {
- case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, %s, %d, ",
- rna_function_string(bprop->get),
- rna_function_string(bprop->set),
- rna_function_string(bprop->getarray),
- rna_function_string(bprop->setarray),
- bprop->defaultvalue);
- if (prop->arraydimension && prop->totarraylength)
- fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
- else fprintf(f, "NULL\n");
- break;
- }
- case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, %s, %s,\n\t",
- rna_function_string(iprop->get),
- rna_function_string(iprop->set),
- rna_function_string(iprop->getarray),
- rna_function_string(iprop->setarray),
- rna_function_string(iprop->range));
- rna_int_print(f, iprop->softmin); fprintf(f, ", ");
- rna_int_print(f, iprop->softmax); fprintf(f, ", ");
- rna_int_print(f, iprop->hardmin); fprintf(f, ", ");
- rna_int_print(f, iprop->hardmax); fprintf(f, ", ");
- rna_int_print(f, iprop->step); fprintf(f, ", ");
- rna_int_print(f, iprop->defaultvalue); fprintf(f, ", ");
- if (prop->arraydimension && prop->totarraylength)
- fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
- else fprintf(f, "NULL\n");
- break;
- }
- case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, %s, %s, ",
- rna_function_string(fprop->get),
- rna_function_string(fprop->set),
- rna_function_string(fprop->getarray),
- rna_function_string(fprop->setarray),
- rna_function_string(fprop->range));
- rna_float_print(f, fprop->softmin); fprintf(f, ", ");
- rna_float_print(f, fprop->softmax); fprintf(f, ", ");
- rna_float_print(f, fprop->hardmin); fprintf(f, ", ");
- rna_float_print(f, fprop->hardmax); fprintf(f, ", ");
- rna_float_print(f, fprop->step); fprintf(f, ", ");
- rna_int_print(f, (int)fprop->precision); fprintf(f, ", ");
- rna_float_print(f, fprop->defaultvalue); fprintf(f, ", ");
- if (prop->arraydimension && prop->totarraylength)
- fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
- else fprintf(f, "NULL\n");
- break;
- }
- case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, %d, ",
- rna_function_string(sprop->get),
- rna_function_string(sprop->length),
- rna_function_string(sprop->set),
- sprop->maxlength);
- rna_print_c_string(f, sprop->defaultvalue); fprintf(f, "\n");
- break;
- }
- case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, NULL, ",
- rna_function_string(eprop->get),
- rna_function_string(eprop->set),
- rna_function_string(eprop->itemf));
- if (eprop->item)
- fprintf(f, "rna_%s%s_%s_items, ", srna->identifier, strnest, prop->identifier);
- else
- fprintf(f, "NULL, ");
- fprintf(f, "%d, %d\n", eprop->totitem, eprop->defaultvalue);
- break;
- }
- case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, %s,", rna_function_string(pprop->get),
- rna_function_string(pprop->set),
- rna_function_string(pprop->typef),
- rna_function_string(pprop->poll));
- if (pprop->type) fprintf(f, "&RNA_%s\n", (const char*)pprop->type);
- else fprintf(f, "NULL\n");
- break;
- }
- case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, %s, ",
- rna_function_string(cprop->begin),
- rna_function_string(cprop->next),
- rna_function_string(cprop->end),
- rna_function_string(cprop->get),
- rna_function_string(cprop->length),
- rna_function_string(cprop->lookupint),
- rna_function_string(cprop->lookupstring),
- rna_function_string(cprop->assignint));
- if (cprop->item_type) fprintf(f, "&RNA_%s\n", (const char*)cprop->item_type);
- else fprintf(f, "NULL\n");
- break;
- }
+ case PROP_BOOLEAN: {
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, %s, %d, ",
+ rna_function_string(bprop->get),
+ rna_function_string(bprop->set),
+ rna_function_string(bprop->getarray),
+ rna_function_string(bprop->setarray),
+ bprop->defaultvalue);
+ if (prop->arraydimension && prop->totarraylength)
+ fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
+ else fprintf(f, "NULL\n");
+ break;
+ }
+ case PROP_INT: {
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, %s, %s,\n\t",
+ rna_function_string(iprop->get),
+ rna_function_string(iprop->set),
+ rna_function_string(iprop->getarray),
+ rna_function_string(iprop->setarray),
+ rna_function_string(iprop->range));
+ rna_int_print(f, iprop->softmin); fprintf(f, ", ");
+ rna_int_print(f, iprop->softmax); fprintf(f, ", ");
+ rna_int_print(f, iprop->hardmin); fprintf(f, ", ");
+ rna_int_print(f, iprop->hardmax); fprintf(f, ", ");
+ rna_int_print(f, iprop->step); fprintf(f, ", ");
+ rna_int_print(f, iprop->defaultvalue); fprintf(f, ", ");
+ if (prop->arraydimension && prop->totarraylength)
+ fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
+ else fprintf(f, "NULL\n");
+ break;
+ }
+ case PROP_FLOAT: {
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, %s, %s, ",
+ rna_function_string(fprop->get),
+ rna_function_string(fprop->set),
+ rna_function_string(fprop->getarray),
+ rna_function_string(fprop->setarray),
+ rna_function_string(fprop->range));
+ rna_float_print(f, fprop->softmin); fprintf(f, ", ");
+ rna_float_print(f, fprop->softmax); fprintf(f, ", ");
+ rna_float_print(f, fprop->hardmin); fprintf(f, ", ");
+ rna_float_print(f, fprop->hardmax); fprintf(f, ", ");
+ rna_float_print(f, fprop->step); fprintf(f, ", ");
+ rna_int_print(f, (int)fprop->precision); fprintf(f, ", ");
+ rna_float_print(f, fprop->defaultvalue); fprintf(f, ", ");
+ if (prop->arraydimension && prop->totarraylength)
+ fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
+ else fprintf(f, "NULL\n");
+ break;
+ }
+ case PROP_STRING: {
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, %d, ",
+ rna_function_string(sprop->get),
+ rna_function_string(sprop->length),
+ rna_function_string(sprop->set),
+ sprop->maxlength);
+ rna_print_c_string(f, sprop->defaultvalue); fprintf(f, "\n");
+ break;
+ }
+ case PROP_ENUM: {
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, NULL, ",
+ rna_function_string(eprop->get),
+ rna_function_string(eprop->set),
+ rna_function_string(eprop->itemf));
+ if (eprop->item)
+ fprintf(f, "rna_%s%s_%s_items, ", srna->identifier, strnest, prop->identifier);
+ else
+ fprintf(f, "NULL, ");
+ fprintf(f, "%d, %d\n", eprop->totitem, eprop->defaultvalue);
+ break;
+ }
+ case PROP_POINTER: {
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, %s,", rna_function_string(pprop->get),
+ rna_function_string(pprop->set),
+ rna_function_string(pprop->typef),
+ rna_function_string(pprop->poll));
+ if (pprop->type) fprintf(f, "&RNA_%s\n", (const char *)pprop->type);
+ else fprintf(f, "NULL\n");
+ break;
+ }
+ case PROP_COLLECTION: {
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
+ fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, %s, ",
+ rna_function_string(cprop->begin),
+ rna_function_string(cprop->next),
+ rna_function_string(cprop->end),
+ rna_function_string(cprop->get),
+ rna_function_string(cprop->length),
+ rna_function_string(cprop->lookupint),
+ rna_function_string(cprop->lookupstring),
+ rna_function_string(cprop->assignint));
+ if (cprop->item_type) fprintf(f, "&RNA_%s\n", (const char *)cprop->item_type);
+ else fprintf(f, "NULL\n");
+ break;
+ }
}
fprintf(f, "};\n\n");
@@ -2501,12 +2501,12 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
if (func->cont.next)
fprintf(f, "\t{(FunctionRNA*)&rna_%s_%s_func, ", srna->identifier,
- ((FunctionRNA*)func->cont.next)->identifier);
+ ((FunctionRNA *)func->cont.next)->identifier);
else
fprintf(f, "\t{NULL, ");
if (func->cont.prev)
fprintf(f, "(FunctionRNA*)&rna_%s_%s_func,\n", srna->identifier,
- ((FunctionRNA*)func->cont.prev)->identifier);
+ ((FunctionRNA *)func->cont.prev)->identifier);
else
fprintf(f, "NULL,\n");
@@ -2540,9 +2540,9 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
fprintf(f, "StructRNA RNA_%s = {\n", srna->identifier);
- if (srna->cont.next) fprintf(f, "\t{(ContainerRNA *)&RNA_%s, ", ((StructRNA*)srna->cont.next)->identifier);
+ if (srna->cont.next) fprintf(f, "\t{(ContainerRNA *)&RNA_%s, ", ((StructRNA *)srna->cont.next)->identifier);
else fprintf(f, "\t{NULL, ");
- if (srna->cont.prev) fprintf(f, "(ContainerRNA *)&RNA_%s,\n", ((StructRNA*)srna->cont.prev)->identifier);
+ if (srna->cont.prev) fprintf(f, "(ContainerRNA *)&RNA_%s,\n", ((StructRNA *)srna->cont.prev)->identifier);
else fprintf(f, "NULL,\n");
fprintf(f, "\tNULL,\n");
@@ -2680,7 +2680,8 @@ static RNAProcessItem PROCESS_ITEMS[] = {
{"rna_world.c", NULL, RNA_def_world},
{"rna_movieclip.c", NULL, RNA_def_movieclip},
{"rna_tracking.c", NULL, RNA_def_tracking},
- {NULL, NULL}};
+ {NULL, NULL}
+};
static void rna_generate(BlenderRNA *brna, FILE *f, const char *filename, const char *api_filename)
{
@@ -2779,7 +2780,7 @@ static void rna_generate_header(BlenderRNA *brna, FILE *f)
fprintf(f, " { \\\n");
fprintf(f, " CollectionPropertyIterator rna_macro_iter; \\\n");
fprintf(f, " for (property##_begin(&rna_macro_iter, sptr); rna_macro_iter.valid; "
- "property##_next(&rna_macro_iter)) { \\\n");
+ "property##_next(&rna_macro_iter)) { \\\n");
fprintf(f, " itemptr= rna_macro_iter.ptr;\n\n");
fprintf(f, "#define FOREACH_END(property) \\\n");
@@ -2956,12 +2957,12 @@ static void rna_generate_header_cpp(BlenderRNA *brna, FILE *f)
fprintf(f, "/**************** %s ****************/\n\n", srna->name);
- fprintf(f, "class %s : public %s {\n", srna->identifier, (srna->base)? srna->base->identifier: "Pointer");
+ fprintf(f, "class %s : public %s {\n", srna->identifier, (srna->base) ? srna->base->identifier : "Pointer");
fprintf(f, "public:\n");
fprintf(f, "\t%s(const PointerRNA& ptr) :\n\t\t%s(ptr)", srna->identifier,
- (srna->base)? srna->base->identifier: "Pointer");
+ (srna->base) ? srna->base->identifier : "Pointer");
for (dp = ds->cont.properties.first; dp; dp = dp->next)
- if (!(dp->prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN)))
+ if (!(dp->prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN)))
if (dp->prop->type == PROP_COLLECTION)
fprintf(f, ",\n\t\t%s(ptr)", dp->prop->identifier);
fprintf(f, "\n\t\t{}\n\n");
@@ -3047,7 +3048,7 @@ static int rna_preprocess(const char *outfile)
for (i = 0; PROCESS_ITEMS[i].filename; i++) {
strcpy(deffile, outfile);
strcat(deffile, PROCESS_ITEMS[i].filename);
- deffile[strlen(deffile)-2] = '\0';
+ deffile[strlen(deffile) - 2] = '\0';
strcat(deffile, "_gen.c" TMP_EXT);
if (status) {
@@ -3115,7 +3116,7 @@ int main(int argc, char **argv)
{
int totblock, return_status = 0;
- if (argc<2) {
+ if (argc < 2) {
fprintf(stderr, "Usage: %s outdirectory/\n", argv[0]);
return_status = 1;
}
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index e5b2d38de53..905afaabe3a 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -72,7 +72,8 @@ EnumPropertyItem id_type_items[] = {
{ID_TE, "TEXTURE", ICON_TEXTURE_DATA, "Texture", ""},
{ID_WO, "WORLD", ICON_WORLD_DATA, "World", ""},
{ID_WM, "WINDOWMANAGER", ICON_FULLSCREEN, "Window Manager", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -82,29 +83,31 @@ EnumPropertyItem id_type_items[] = {
#include "BKE_material.h"
#include "BKE_depsgraph.h"
+#include "WM_api.h"
+
/* name functions that ignore the first two ID characters */
void rna_ID_name_get(PointerRNA *ptr, char *value)
{
- ID *id = (ID*)ptr->data;
- BLI_strncpy(value, id->name+2, sizeof(id->name)-2);
+ ID *id = (ID *)ptr->data;
+ BLI_strncpy(value, id->name + 2, sizeof(id->name) - 2);
}
int rna_ID_name_length(PointerRNA *ptr)
{
- ID *id = (ID*)ptr->data;
- return strlen(id->name+2);
+ ID *id = (ID *)ptr->data;
+ return strlen(id->name + 2);
}
void rna_ID_name_set(PointerRNA *ptr, const char *value)
{
- ID *id = (ID*)ptr->data;
- BLI_strncpy_utf8(id->name+2, value, sizeof(id->name)-2);
- test_idbutton(id->name+2);
+ ID *id = (ID *)ptr->data;
+ BLI_strncpy_utf8(id->name + 2, value, sizeof(id->name) - 2);
+ test_idbutton(id->name + 2);
}
static int rna_ID_name_editable(PointerRNA *ptr)
{
- ID *id = (ID*)ptr->data;
+ ID *id = (ID *)ptr->data;
if (GS(id->name) == ID_VF) {
VFont *vf = (VFont *)id;
@@ -188,7 +191,7 @@ StructRNA *ID_code_to_RNA_type(short idcode)
StructRNA *rna_ID_refine(PointerRNA *ptr)
{
- ID *id = (ID*)ptr->data;
+ ID *id = (ID *)ptr->data;
return ID_code_to_RNA_type(GS(id->name));
}
@@ -200,7 +203,7 @@ IDProperty *rna_ID_idprops(PointerRNA *ptr, int create)
void rna_ID_fake_user_set(PointerRNA *ptr, int value)
{
- ID *id = (ID*)ptr->data;
+ ID *id = (ID *)ptr->data;
if (value && !(id->flag & LIB_FAKEUSER)) {
id->flag |= LIB_FAKEUSER;
@@ -241,14 +244,14 @@ StructRNA *rna_PropertyGroup_register(Main *UNUSED(bmain), ReportList *reports,
* is running. */
if (BLI_strnlen(identifier, MAX_IDPROP_NAME) == MAX_IDPROP_NAME) {
BKE_reportf(reports, RPT_ERROR, "registering id property class: '%s' is too long, maximum length is "
- STRINGIFY(MAX_IDPROP_NAME), identifier);
+ STRINGIFY(MAX_IDPROP_NAME), identifier);
return NULL;
}
return RNA_def_struct(&BLENDER_RNA, identifier, "PropertyGroup"); /* XXX */
}
-StructRNA* rna_PropertyGroup_refine(PointerRNA *ptr)
+StructRNA *rna_PropertyGroup_refine(PointerRNA *ptr)
{
return ptr->type;
}
@@ -282,24 +285,24 @@ static void rna_ID_update_tag(ID *id, ReportList *reports, int flag)
else {
/* ensure flag us correct for the type */
switch (GS(id->name)) {
- case ID_OB:
- if (flag & ~(OB_RECALC_ALL)) {
- BKE_report(reports, RPT_ERROR, "'refresh' incompatible with Object ID type");
- return;
- }
- break;
- /* Could add particle updates later */
+ case ID_OB:
+ if (flag & ~(OB_RECALC_ALL)) {
+ BKE_report(reports, RPT_ERROR, "'refresh' incompatible with Object ID type");
+ return;
+ }
+ break;
+ /* Could add particle updates later */
#if 0
- case ID_PA:
- if (flag & ~(OB_RECALC_ALL|PSYS_RECALC)) {
- BKE_report(reports, RPT_ERROR, "'refresh' incompatible with ParticleSettings ID type");
- return;
- }
- break;
+ case ID_PA:
+ if (flag & ~(OB_RECALC_ALL | PSYS_RECALC)) {
+ BKE_report(reports, RPT_ERROR, "'refresh' incompatible with ParticleSettings ID type");
+ return;
+ }
+ break;
#endif
- default:
- BKE_report(reports, RPT_ERROR, "This ID type is not compatible with any 'refresh' options");
- return;
+ default:
+ BKE_report(reports, RPT_ERROR, "This ID type is not compatible with any 'refresh' options");
+ return;
}
}
@@ -338,9 +341,28 @@ int rna_IDMaterials_assign_int(PointerRNA *ptr, int key, const PointerRNA *assig
}
}
+void rna_IDMaterials_append_id(ID *id, Material *ma)
+{
+ material_append_id(id, ma);
+
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
+ WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
+}
+
+Material *rna_IDMaterials_pop_id(ID *id, int index_i, int remove_material_slot)
+{
+ Material *ma = material_pop_id(id, index_i, remove_material_slot);
+
+ DAG_id_tag_update(id, OB_RECALC_DATA);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
+ WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
+
+ return ma;
+}
+
void rna_Library_filepath_set(PointerRNA *ptr, const char *value)
{
- Library *lib = (Library*)ptr->data;
+ Library *lib = (Library *)ptr->data;
BKE_library_filepath_set(lib, value);
}
@@ -359,52 +381,52 @@ static void rna_def_ID_properties(BlenderRNA *brna)
/* IDP_STRING */
prop = RNA_def_property(srna, "string", PROP_STRING, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
/* IDP_INT */
prop = RNA_def_property(srna, "int", PROP_INT, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
prop = RNA_def_property(srna, "int_array", PROP_INT, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
RNA_def_property_array(prop, 1);
/* IDP_FLOAT */
prop = RNA_def_property(srna, "float", PROP_FLOAT, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
prop = RNA_def_property(srna, "float_array", PROP_FLOAT, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
RNA_def_property_array(prop, 1);
/* IDP_DOUBLE */
prop = RNA_def_property(srna, "double", PROP_FLOAT, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
prop = RNA_def_property(srna, "double_array", PROP_FLOAT, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
RNA_def_property_array(prop, 1);
/* IDP_GROUP */
prop = RNA_def_property(srna, "group", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "PropertyGroup");
prop = RNA_def_property(srna, "collection", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
RNA_def_property_struct_type(prop, "PropertyGroup");
prop = RNA_def_property(srna, "idp_array", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, "PropertyGroup");
RNA_def_property_collection_funcs(prop, "rna_IDPArray_begin", "rna_iterator_array_next", "rna_iterator_array_end",
"rna_iterator_array_get", "rna_IDPArray_length", NULL, NULL, NULL);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
/* never tested, maybe its useful to have this? */
#if 0
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Name", "Unique name used in the code and scripting");
RNA_def_struct_name_property(srna, prop);
@@ -426,7 +448,7 @@ static void rna_def_ID_properties(BlenderRNA *brna)
* however this isn't prefect because it overrides how python would set the name
* when we only really want this so RNA_def_struct_name_property() is set to something useful */
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
+ RNA_def_property_flag(prop, PROP_EXPORT | PROP_IDPROPERTY);
/*RNA_def_property_clear_flag(prop, PROP_EDITABLE); */
RNA_def_property_ui_text(prop, "Name", "Unique name used in the code and scripting");
RNA_def_struct_name_property(srna, prop);
@@ -444,12 +466,12 @@ static void rna_def_ID_materials(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ID");
RNA_def_struct_ui_text(srna, "ID Materials", "Collection of materials");
- func = RNA_def_function(srna, "append", "material_append_id");
+ func = RNA_def_function(srna, "append", "rna_IDMaterials_append_id");
RNA_def_function_ui_description(func, "Add a new material to the data block");
parm = RNA_def_pointer(func, "material", "Material", "", "Material to add");
RNA_def_property_flag(parm, PROP_REQUIRED);
-
- func = RNA_def_function(srna, "pop", "material_pop_id");
+
+ func = RNA_def_function(srna, "pop", "rna_IDMaterials_pop_id");
RNA_def_function_ui_description(func, "Remove a material from the data block");
parm = RNA_def_int(func, "index", 0, 0, MAXMAT, "", "Index of material to remove", 0, MAXMAT);
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -468,22 +490,23 @@ static void rna_def_ID(BlenderRNA *brna)
{OB_RECALC_OB, "OBJECT", 0, "Object", ""},
{OB_RECALC_DATA, "DATA", 0, "Data", ""},
{OB_RECALC_TIME, "TIME", 0, "Time", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ID", NULL);
RNA_def_struct_ui_text(srna, "ID",
"Base type for datablocks, defining a unique name, linking from other libraries "
"and garbage collection");
- RNA_def_struct_flag(srna, STRUCT_ID|STRUCT_ID_REFCOUNT);
+ RNA_def_struct_flag(srna, STRUCT_ID | STRUCT_ID_REFCOUNT);
RNA_def_struct_refine_func(srna, "rna_ID_refine");
RNA_def_struct_idprops_func(srna, "rna_ID_idprops");
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "Unique datablock ID name");
RNA_def_property_string_funcs(prop, "rna_ID_name_get", "rna_ID_name_length", "rna_ID_name_set");
- RNA_def_property_string_maxlength(prop, MAX_ID_NAME-2);
+ RNA_def_property_string_maxlength(prop, MAX_ID_NAME - 2);
RNA_def_property_editable_func(prop, "rna_ID_name_editable");
- RNA_def_property_update(prop, NC_ID|NA_RENAME, NULL);
+ RNA_def_property_update(prop, NC_ID | NA_RENAME, NULL);
RNA_def_struct_name_property(srna, prop);
prop = RNA_def_property(srna, "users", PROP_INT, PROP_UNSIGNED);
@@ -511,6 +534,11 @@ static void rna_def_ID(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Is Updated Data", "Datablock data is tagged for recalculation");
+ prop = RNA_def_property(srna, "is_library_indirect", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", LIB_INDIRECT);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Is Indirect", "Is this ID block linked indirectly");
+
prop = RNA_def_property(srna, "library", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "lib");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -524,7 +552,7 @@ static void rna_def_ID(BlenderRNA *brna)
func = RNA_def_function(srna, "user_clear", "rna_ID_user_clear");
RNA_def_function_ui_description(func, "Clear the user count of a datablock so its not saved, "
- "on reload the data will be removed");
+ "on reload the data will be removed");
func = RNA_def_function(srna, "animation_data_create", "BKE_id_add_animdata");
RNA_def_function_ui_description(func, "Create animation data to this ID, note that not all ID types support this");
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 573d7216114..70f6afd664d 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -74,11 +74,11 @@ void RNA_init(void)
for (srna = BLENDER_RNA.structs.first; srna; srna = srna->cont.next) {
if (!srna->cont.prophash) {
- srna->cont.prophash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "RNA_init gh");
+ srna->cont.prophash = BLI_ghash_str_new("RNA_init gh");
for (prop = srna->cont.properties.first; prop; prop = prop->next)
if (!(prop->flag & PROP_BUILTIN))
- BLI_ghash_insert(srna->cont.prophash, (void*)prop->identifier, prop);
+ BLI_ghash_insert(srna->cont.prophash, (void *)prop->identifier, prop);
}
}
}
@@ -285,10 +285,10 @@ static int rna_ensure_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
{
if (prop->magic == RNA_MAGIC) {
int arraylen[RNA_MAX_ARRAY_DIMENSION];
- return (prop->getlength && ptr->data)? prop->getlength(ptr, arraylen): prop->totarraylength;
+ return (prop->getlength && ptr->data) ? prop->getlength(ptr, arraylen) : prop->totarraylength;
}
else {
- IDProperty *idprop = (IDProperty*)prop;
+ IDProperty *idprop = (IDProperty *)prop;
if (idprop->type == IDP_ARRAY)
return idprop->len;
@@ -300,12 +300,12 @@ static int rna_ensure_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
static int rna_ensure_property_array_check(PropertyRNA *prop)
{
if (prop->magic == RNA_MAGIC) {
- return (prop->getlength || prop->totarraylength) ? 1:0;
+ return (prop->getlength || prop->totarraylength) ? 1 : 0;
}
else {
- IDProperty *idprop = (IDProperty*)prop;
+ IDProperty *idprop = (IDProperty *)prop;
- return idprop->type == IDP_ARRAY ? 1:0;
+ return idprop->type == IDP_ARRAY ? 1 : 0;
}
}
@@ -315,10 +315,10 @@ static void rna_ensure_property_multi_array_length(PointerRNA *ptr, PropertyRNA
if (prop->getlength)
prop->getlength(ptr, length);
else
- memcpy(length, prop->arraylength, prop->arraydimension*sizeof(int));
+ memcpy(length, prop->arraylength, prop->arraydimension * sizeof(int));
}
else {
- IDProperty *idprop = (IDProperty*)prop;
+ IDProperty *idprop = (IDProperty *)prop;
if (idprop->type == IDP_ARRAY)
length[0] = idprop->len;
@@ -373,21 +373,23 @@ static int rna_idproperty_verify_valid(PointerRNA *ptr, PropertyRNA *prop, IDPro
return 1;
}
-static PropertyRNA *typemap[IDP_NUMTYPES] =
- {(PropertyRNA*)&rna_PropertyGroupItem_string,
- (PropertyRNA*)&rna_PropertyGroupItem_int,
- (PropertyRNA*)&rna_PropertyGroupItem_float,
- NULL, NULL, NULL,
- (PropertyRNA*)&rna_PropertyGroupItem_group, NULL,
- (PropertyRNA*)&rna_PropertyGroupItem_double,
- (PropertyRNA*)&rna_PropertyGroupItem_idp_array};
+static PropertyRNA *typemap[IDP_NUMTYPES] = {
+ (PropertyRNA *)&rna_PropertyGroupItem_string,
+ (PropertyRNA *)&rna_PropertyGroupItem_int,
+ (PropertyRNA *)&rna_PropertyGroupItem_float,
+ NULL, NULL, NULL,
+ (PropertyRNA *)&rna_PropertyGroupItem_group, NULL,
+ (PropertyRNA *)&rna_PropertyGroupItem_double,
+ (PropertyRNA *)&rna_PropertyGroupItem_idp_array
+};
-static PropertyRNA *arraytypemap[IDP_NUMTYPES] =
- {NULL, (PropertyRNA*)&rna_PropertyGroupItem_int_array,
- (PropertyRNA*)&rna_PropertyGroupItem_float_array,
- NULL, NULL, NULL,
- (PropertyRNA*)&rna_PropertyGroupItem_collection, NULL,
- (PropertyRNA*)&rna_PropertyGroupItem_double_array};
+static PropertyRNA *arraytypemap[IDP_NUMTYPES] = {
+ NULL, (PropertyRNA *)&rna_PropertyGroupItem_int_array,
+ (PropertyRNA *)&rna_PropertyGroupItem_float_array,
+ NULL, NULL, NULL,
+ (PropertyRNA *)&rna_PropertyGroupItem_collection, NULL,
+ (PropertyRNA *)&rna_PropertyGroupItem_double_array
+};
IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
{
@@ -418,7 +420,7 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
}
{
- IDProperty *idprop = (IDProperty*)(*prop);
+ IDProperty *idprop = (IDProperty *)(*prop);
if (idprop->type == IDP_ARRAY)
*prop = arraytypemap[(int)(idprop->subtype)];
@@ -437,7 +439,7 @@ static PropertyRNA *rna_ensure_property(PropertyRNA *prop)
return prop;
{
- IDProperty *idprop = (IDProperty*)prop;
+ IDProperty *idprop = (IDProperty *)prop;
if (idprop->type == IDP_ARRAY)
return arraytypemap[(int)(idprop->subtype)];
@@ -451,7 +453,7 @@ static const char *rna_ensure_property_identifier(PropertyRNA *prop)
if (prop->magic == RNA_MAGIC)
return prop->identifier;
else
- return ((IDProperty*)prop)->name;
+ return ((IDProperty *)prop)->name;
}
static const char *rna_ensure_property_description(PropertyRNA *prop)
@@ -471,7 +473,7 @@ static const char *rna_ensure_property_description(PropertyRNA *prop)
}
if (description == NULL)
- description = ((IDProperty*)prop)->name; /* XXX - not correct */
+ description = ((IDProperty *)prop)->name; /* XXX - not correct */
}
return TIP_(description);
@@ -484,7 +486,7 @@ static const char *rna_ensure_property_name(PropertyRNA *prop)
if (prop->magic == RNA_MAGIC)
name = prop->name;
else
- name = ((IDProperty*)prop)->name;
+ name = ((IDProperty *)prop)->name;
return CTX_IFACE_(prop->translation_context, name);
}
@@ -590,8 +592,8 @@ int RNA_struct_is_a(StructRNA *type, StructRNA *srna)
PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
{
- if (identifier[0] =='[' && identifier[1] =='"') { /* " (dummy comment to avoid confusing some
- * function lists in text editors) */
+ if (identifier[0] == '[' && identifier[1] == '"') { /* " (dummy comment to avoid confusing some
+ * function lists in text editors) */
/* id prop lookup, not so common */
PropertyRNA *r_prop = NULL;
PointerRNA r_ptr; /* only support single level props */
@@ -615,7 +617,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) {
@@ -638,7 +640,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) {
@@ -686,7 +688,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;
@@ -699,7 +701,7 @@ FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier)
#endif
}
-const struct ListBase *RNA_struct_type_functions(StructRNA *srna)
+const ListBase *RNA_struct_type_functions(StructRNA *srna)
{
return &srna->functions;
}
@@ -814,7 +816,7 @@ int RNA_property_array_dimension(PointerRNA *ptr, PropertyRNA *prop, int length[
PropertyRNA *rprop = rna_ensure_property(prop);
if (length)
- rna_ensure_property_multi_array_length(ptr, prop, length);
+ rna_ensure_property_multi_array_length(ptr, prop, length);
return rprop->arraydimension;
}
@@ -841,7 +843,7 @@ char RNA_property_array_item_char(PropertyRNA *prop, int index)
return quatitem[index];
}
else if ((index < 4) && ELEM8(subtype, PROP_TRANSLATION, PROP_DIRECTION, PROP_XYZ, PROP_XYZ_LENGTH,
- PROP_EULER, PROP_VELOCITY, PROP_ACCELERATION, PROP_COORDS))
+ PROP_EULER, PROP_VELOCITY, PROP_ACCELERATION, PROP_COORDS))
{
return vectoritem[index];
}
@@ -871,7 +873,7 @@ int RNA_property_array_item_index(PropertyRNA *prop, char name)
}
}
else if (ELEM6(subtype, PROP_TRANSLATION, PROP_DIRECTION, PROP_XYZ,
- PROP_EULER, PROP_VELOCITY, PROP_ACCELERATION))
+ PROP_EULER, PROP_VELOCITY, PROP_ACCELERATION))
{
switch (name) {
case 'x':
@@ -903,7 +905,7 @@ int RNA_property_array_item_index(PropertyRNA *prop, char name)
void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)rna_ensure_property(prop);
+ IntPropertyRNA *iprop = (IntPropertyRNA *)rna_ensure_property(prop);
int softmin, softmax;
if (prop->magic != RNA_MAGIC) {
@@ -937,7 +939,7 @@ void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, in
void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin, int *softmax, int *step)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)rna_ensure_property(prop);
+ IntPropertyRNA *iprop = (IntPropertyRNA *)rna_ensure_property(prop);
int hardmin, hardmax;
if (prop->magic != RNA_MAGIC) {
@@ -978,7 +980,7 @@ void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin,
void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin, float *hardmax)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)rna_ensure_property(prop);
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)rna_ensure_property(prop);
float softmin, softmax;
if (prop->magic != RNA_MAGIC) {
@@ -1013,7 +1015,7 @@ void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin
void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *softmin, float *softmax,
float *step, float *precision)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)rna_ensure_property(prop);
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)rna_ensure_property(prop);
float hardmin, hardmax;
if (prop->magic != RNA_MAGIC) {
@@ -1098,7 +1100,7 @@ int RNA_property_int_clamp(PointerRNA *ptr, PropertyRNA *prop, int *value)
* '0' used when their is no maximum */
int RNA_property_string_maxlength(PropertyRNA *prop)
{
- StringPropertyRNA *sprop = (StringPropertyRNA*)rna_ensure_property(prop);
+ StringPropertyRNA *sprop = (StringPropertyRNA *)rna_ensure_property(prop);
return sprop->maxlength;
}
@@ -1107,7 +1109,7 @@ StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
prop = rna_ensure_property(prop);
if (prop->type == PROP_POINTER) {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
if (pprop->typef)
return pprop->typef(ptr);
@@ -1115,7 +1117,7 @@ StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
return pprop->type;
}
else if (prop->type == PROP_COLLECTION) {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
if (cprop->item_type)
return cprop->item_type;
@@ -1130,7 +1132,7 @@ int RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *va
prop = rna_ensure_property(prop);
if (prop->type == PROP_POINTER) {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
if (pprop->poll)
return pprop->poll(ptr, *value);
@@ -1155,7 +1157,7 @@ EnumPropertyItem DummyRNA_DEFAULT_items[] = {
void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item,
int *totitem, int *free)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)rna_ensure_property(prop);
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)rna_ensure_property(prop);
*free = 0;
@@ -1169,7 +1171,7 @@ void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, En
if (totitem) {
if (*item) {
- for ( ; (*item)[tot].identifier; tot++);
+ for (; (*item)[tot].identifier; tot++) ;
}
*totitem = tot;
@@ -1204,7 +1206,7 @@ void RNA_property_enum_items_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA
for (i = 0; (*item)[i].identifier; i++)
totitem++;
- nitem = MEM_callocN(sizeof(EnumPropertyItem)*(totitem+1), "enum_items_gettexted");
+ nitem = MEM_callocN(sizeof(EnumPropertyItem) * (totitem + 1), "enum_items_gettexted");
for (i = 0; (*item)[i].identifier; i++)
nitem[i] = (*item)[i];
@@ -1213,13 +1215,13 @@ void RNA_property_enum_items_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA
}
for (i = 0; nitem[i].identifier; i++) {
- if ( nitem[i].name ) {
+ if (nitem[i].name) {
if (prop->translation_context)
nitem[i].name = BLF_pgettext(prop->translation_context, nitem[i].name);
else
nitem[i].name = BLF_gettext(nitem[i].name);
}
- if ( nitem[i].description )
+ if (nitem[i].description)
nitem[i].description = BLF_gettext(nitem[i].description);
}
@@ -1483,7 +1485,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
if (!is_rna || (prop->flag & PROP_IDPROPERTY)) {
/* WARNING! This is so property drivers update the display!
* not especially nice */
- DAG_id_tag_update(ptr->id.data, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME);
+ DAG_id_tag_update(ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
WM_main_add_notifier(NC_WINDOW, NULL);
}
}
@@ -1525,8 +1527,8 @@ void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, Proper
typedef struct tRnaUpdateCacheElem {
struct tRnaUpdateCacheElem *next, *prev;
- PointerRNA ptr; /* L1 key - id as primary, data secondary/ignored? */
- ListBase L2Funcs; /* L2 functions (LinkData<RnaUpdateFuncRef>) */
+ PointerRNA ptr; /* L1 key - id as primary, data secondary/ignored? */
+ ListBase L2Funcs; /* L2 functions (LinkData<RnaUpdateFuncRef>) */
} tRnaUpdateCacheElem;
/* cache global (tRnaUpdateCacheElem's) - only accessible using these API calls */
@@ -1617,7 +1619,7 @@ void RNA_property_update_cache_free(void)
int RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
{
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
@@ -1633,7 +1635,7 @@ int RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, int value)
{
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
@@ -1662,7 +1664,7 @@ void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
{
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
@@ -1672,16 +1674,16 @@ void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, int *val
if (prop->arraydimension == 0)
values[0] = RNA_property_boolean_get(ptr, prop);
else
- memcpy(values, IDP_Array(idprop), sizeof(int)*idprop->len);
+ memcpy(values, IDP_Array(idprop), sizeof(int) * idprop->len);
}
else if (prop->arraydimension == 0)
values[0] = RNA_property_boolean_get(ptr, prop);
else if (bprop->getarray)
bprop->getarray(ptr, values);
else if (bprop->defaultarray)
- memcpy(values, bprop->defaultarray, sizeof(int)*prop->totarraylength);
+ memcpy(values, bprop->defaultarray, sizeof(int) * prop->totarraylength);
else
- memset(values, 0, sizeof(int)*prop->totarraylength);
+ memset(values, 0, sizeof(int) * prop->totarraylength);
}
int RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -1699,7 +1701,7 @@ int RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index
else {
int *tmparray, value;
- tmparray = MEM_callocN(sizeof(int)*len, "RNA_property_boolean_get_index");
+ tmparray = MEM_callocN(sizeof(int) * len, "RNA_property_boolean_get_index");
RNA_property_boolean_get_array(ptr, prop, tmparray);
value = tmparray[index];
MEM_freeN(tmparray);
@@ -1710,7 +1712,7 @@ int RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index
void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *values)
{
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
@@ -1720,7 +1722,7 @@ void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const in
if (prop->arraydimension == 0)
IDP_Int(idprop) = values[0];
else
- memcpy(IDP_Array(idprop), values, sizeof(int)*idprop->len);
+ memcpy(IDP_Array(idprop), values, sizeof(int) * idprop->len);
rna_idproperty_touch(idprop);
}
@@ -1739,7 +1741,7 @@ void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const in
if (group) {
idprop = IDP_New(IDP_ARRAY, &val, prop->identifier);
IDP_AddToGroup(group, idprop);
- memcpy(IDP_Array(idprop), values, sizeof(int)*idprop->len);
+ memcpy(IDP_Array(idprop), values, sizeof(int) * idprop->len);
}
}
}
@@ -1760,7 +1762,7 @@ void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int inde
else {
int *tmparray;
- tmparray = MEM_callocN(sizeof(int)*len, "RNA_property_boolean_get_index");
+ tmparray = MEM_callocN(sizeof(int) * len, "RNA_property_boolean_get_index");
RNA_property_boolean_get_array(ptr, prop, tmparray);
tmparray[index] = value;
RNA_property_boolean_set_array(ptr, prop, tmparray);
@@ -1770,7 +1772,7 @@ void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int inde
int RNA_property_boolean_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
{
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
BLI_assert(RNA_property_array_check(prop) == 0);
@@ -1780,7 +1782,7 @@ int RNA_property_boolean_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
void RNA_property_boolean_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *prop, int *values)
{
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
BLI_assert(RNA_property_array_check(prop) != 0);
@@ -1788,9 +1790,9 @@ void RNA_property_boolean_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA
if (prop->arraydimension == 0)
values[0] = bprop->defaultvalue;
else if (bprop->defaultarray)
- memcpy(values, bprop->defaultarray, sizeof(int)*prop->totarraylength);
+ memcpy(values, bprop->defaultarray, sizeof(int) * prop->totarraylength);
else
- memset(values, 0, sizeof(int)*prop->totarraylength);
+ memset(values, 0, sizeof(int) * prop->totarraylength);
}
int RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -1808,7 +1810,7 @@ int RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, i
else {
int *tmparray, value;
- tmparray = MEM_callocN(sizeof(int)*len, "RNA_property_boolean_get_default_index");
+ tmparray = MEM_callocN(sizeof(int) * len, "RNA_property_boolean_get_default_index");
RNA_property_boolean_get_default_array(ptr, prop, tmparray);
value = tmparray[index];
MEM_freeN(tmparray);
@@ -1819,7 +1821,7 @@ int RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, i
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_INT);
@@ -1835,7 +1837,7 @@ int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_INT);
@@ -1865,7 +1867,7 @@ void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_INT);
@@ -1875,16 +1877,16 @@ void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
if (prop->arraydimension == 0)
values[0] = RNA_property_int_get(ptr, prop);
else
- memcpy(values, IDP_Array(idprop), sizeof(int)*idprop->len);
+ memcpy(values, IDP_Array(idprop), sizeof(int) * idprop->len);
}
else if (prop->arraydimension == 0)
values[0] = RNA_property_int_get(ptr, prop);
else if (iprop->getarray)
iprop->getarray(ptr, values);
else if (iprop->defaultarray)
- memcpy(values, iprop->defaultarray, sizeof(int)*prop->totarraylength);
+ memcpy(values, iprop->defaultarray, sizeof(int) * prop->totarraylength);
else
- memset(values, 0, sizeof(int)*prop->totarraylength);
+ memset(values, 0, sizeof(int) * prop->totarraylength);
}
void RNA_property_int_get_array_range(PointerRNA *ptr, PropertyRNA *prop, int values[2])
@@ -1939,7 +1941,7 @@ int RNA_property_int_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
else {
int *tmparray, value;
- tmparray = MEM_callocN(sizeof(int)*len, "RNA_property_int_get_index");
+ tmparray = MEM_callocN(sizeof(int) * len, "RNA_property_int_get_index");
RNA_property_int_get_array(ptr, prop, tmparray);
value = tmparray[index];
MEM_freeN(tmparray);
@@ -1950,7 +1952,7 @@ int RNA_property_int_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *values)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_INT);
@@ -1960,7 +1962,7 @@ void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *v
if (prop->arraydimension == 0)
IDP_Int(idprop) = values[0];
else
- memcpy(IDP_Array(idprop), values, sizeof(int)*idprop->len);
+ memcpy(IDP_Array(idprop), values, sizeof(int) * idprop->len);
rna_idproperty_touch(idprop);
}
@@ -1981,7 +1983,7 @@ void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *v
if (group) {
idprop = IDP_New(IDP_ARRAY, &val, prop->identifier);
IDP_AddToGroup(group, idprop);
- memcpy(IDP_Array(idprop), values, sizeof(int)*idprop->len);
+ memcpy(IDP_Array(idprop), values, sizeof(int) * idprop->len);
}
}
}
@@ -2002,7 +2004,7 @@ void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, i
else {
int *tmparray;
- tmparray = MEM_callocN(sizeof(int)*len, "RNA_property_int_get_index");
+ tmparray = MEM_callocN(sizeof(int) * len, "RNA_property_int_get_index");
RNA_property_int_get_array(ptr, prop, tmparray);
tmparray[index] = value;
RNA_property_int_set_array(ptr, prop, tmparray);
@@ -2012,13 +2014,13 @@ void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, i
int RNA_property_int_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
return iprop->defaultvalue;
}
void RNA_property_int_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *prop, int *values)
{
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_INT);
BLI_assert(RNA_property_array_check(prop) != 0);
@@ -2026,9 +2028,9 @@ void RNA_property_int_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *pr
if (prop->arraydimension == 0)
values[0] = iprop->defaultvalue;
else if (iprop->defaultarray)
- memcpy(values, iprop->defaultarray, sizeof(int)*prop->totarraylength);
+ memcpy(values, iprop->defaultarray, sizeof(int) * prop->totarraylength);
else
- memset(values, 0, sizeof(int)*prop->totarraylength);
+ memset(values, 0, sizeof(int) * prop->totarraylength);
}
int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -2043,7 +2045,7 @@ int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int i
else {
int *tmparray, value;
- tmparray = MEM_callocN(sizeof(int)*len, "RNA_property_int_get_default_index");
+ tmparray = MEM_callocN(sizeof(int) * len, "RNA_property_int_get_default_index");
RNA_property_int_get_default_array(ptr, prop, tmparray);
value = tmparray[index];
MEM_freeN(tmparray);
@@ -2054,7 +2056,7 @@ int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int i
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_FLOAT);
@@ -2074,7 +2076,7 @@ float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_FLOAT);
@@ -2109,7 +2111,7 @@ void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
IDProperty *idprop;
int i;
@@ -2120,11 +2122,11 @@ void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *val
if (prop->arraydimension == 0)
values[0] = RNA_property_float_get(ptr, prop);
else if (idprop->subtype == IDP_FLOAT) {
- memcpy(values, IDP_Array(idprop), sizeof(float)*idprop->len);
+ memcpy(values, IDP_Array(idprop), sizeof(float) * idprop->len);
}
else {
- for (i = 0; i<idprop->len; i++)
- values[i] = (float)(((double*)IDP_Array(idprop))[i]);
+ for (i = 0; i < idprop->len; i++)
+ values[i] = (float)(((double *)IDP_Array(idprop))[i]);
}
}
else if (prop->arraydimension == 0)
@@ -2132,9 +2134,9 @@ void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *val
else if (fprop->getarray)
fprop->getarray(ptr, values);
else if (fprop->defaultarray)
- memcpy(values, fprop->defaultarray, sizeof(float)*prop->totarraylength);
+ memcpy(values, fprop->defaultarray, sizeof(float) * prop->totarraylength);
else
- memset(values, 0, sizeof(float)*prop->totarraylength);
+ memset(values, 0, sizeof(float) * prop->totarraylength);
}
void RNA_property_float_get_array_range(PointerRNA *ptr, PropertyRNA *prop, float values[2])
@@ -2189,7 +2191,7 @@ float RNA_property_float_get_index(PointerRNA *ptr, PropertyRNA *prop, int index
else {
float *tmparray, value;
- tmparray = MEM_callocN(sizeof(float)*len, "RNA_property_float_get_index");
+ tmparray = MEM_callocN(sizeof(float) * len, "RNA_property_float_get_index");
RNA_property_float_get_array(ptr, prop, tmparray);
value = tmparray[index];
MEM_freeN(tmparray);
@@ -2201,7 +2203,7 @@ float RNA_property_float_get_index(PointerRNA *ptr, PropertyRNA *prop, int index
void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const float *values)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
IDProperty *idprop;
int i;
@@ -2216,11 +2218,11 @@ void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const floa
IDP_Double(idprop) = values[0];
}
else if (idprop->subtype == IDP_FLOAT) {
- memcpy(IDP_Array(idprop), values, sizeof(float)*idprop->len);
+ memcpy(IDP_Array(idprop), values, sizeof(float) * idprop->len);
}
else {
- for (i = 0; i<idprop->len; i++)
- ((double*)IDP_Array(idprop))[i] = values[i];
+ for (i = 0; i < idprop->len; i++)
+ ((double *)IDP_Array(idprop))[i] = values[i];
}
rna_idproperty_touch(idprop);
@@ -2243,7 +2245,7 @@ void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const floa
if (group) {
idprop = IDP_New(IDP_ARRAY, &val, prop->identifier);
IDP_AddToGroup(group, idprop);
- memcpy(IDP_Array(idprop), values, sizeof(float)*idprop->len);
+ memcpy(IDP_Array(idprop), values, sizeof(float) * idprop->len);
}
}
}
@@ -2264,7 +2266,7 @@ void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index,
else {
float *tmparray;
- tmparray = MEM_callocN(sizeof(float)*len, "RNA_property_float_get_index");
+ tmparray = MEM_callocN(sizeof(float) * len, "RNA_property_float_get_index");
RNA_property_float_get_array(ptr, prop, tmparray);
tmparray[index] = value;
RNA_property_float_set_array(ptr, prop, tmparray);
@@ -2274,7 +2276,7 @@ void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index,
float RNA_property_float_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_FLOAT);
BLI_assert(RNA_property_array_check(prop) == 0);
@@ -2284,7 +2286,7 @@ float RNA_property_float_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
void RNA_property_float_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *prop, float *values)
{
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_FLOAT);
BLI_assert(RNA_property_array_check(prop) != 0);
@@ -2292,9 +2294,9 @@ void RNA_property_float_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *
if (prop->arraydimension == 0)
values[0] = fprop->defaultvalue;
else if (fprop->defaultarray)
- memcpy(values, fprop->defaultarray, sizeof(float)*prop->totarraylength);
+ memcpy(values, fprop->defaultarray, sizeof(float) * prop->totarraylength);
else
- memset(values, 0, sizeof(float)*prop->totarraylength);
+ memset(values, 0, sizeof(float) * prop->totarraylength);
}
float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -2312,7 +2314,7 @@ float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, i
else {
float *tmparray, value;
- tmparray = MEM_callocN(sizeof(float)*len, "RNA_property_float_get_default_index");
+ tmparray = MEM_callocN(sizeof(float) * len, "RNA_property_float_get_default_index");
RNA_property_float_get_default_array(ptr, prop, tmparray);
value = tmparray[index];
MEM_freeN(tmparray);
@@ -2323,7 +2325,7 @@ float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, i
void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value)
{
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_STRING);
@@ -2357,10 +2359,10 @@ char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop,
length = RNA_property_string_length(ptr, prop);
- if (length+1 < fixedlen)
+ if (length + 1 < fixedlen)
buf = fixedbuf;
else
- buf = MEM_mallocN(sizeof(char)*(length+1), "RNA_string_get_alloc");
+ buf = MEM_mallocN(sizeof(char) * (length + 1), "RNA_string_get_alloc");
#ifndef NDEBUG
/* safety check to ensure the string is actually set */
@@ -2383,7 +2385,7 @@ char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop,
/* this is the length without \0 terminator */
int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop)
{
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_STRING);
@@ -2408,7 +2410,7 @@ int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value)
{
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_STRING);
@@ -2419,7 +2421,7 @@ void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *val
rna_idproperty_touch(idprop);
}
else if (sprop->set)
- sprop->set(ptr, value); /* set function needs to clamp its self */
+ sprop->set(ptr, value); /* set function needs to clamp its self */
else if (prop->flag & PROP_EDITABLE) {
IDProperty *group;
@@ -2431,7 +2433,7 @@ void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *val
void RNA_property_string_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop, char *value)
{
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_STRING);
@@ -2447,10 +2449,10 @@ char *RNA_property_string_get_default_alloc(PointerRNA *ptr, PropertyRNA *prop,
length = RNA_property_string_default_length(ptr, prop);
- if (length+1 < fixedlen)
+ if (length + 1 < fixedlen)
buf = fixedbuf;
else
- buf = MEM_callocN(sizeof(char)*(length+1), "RNA_string_get_alloc");
+ buf = MEM_callocN(sizeof(char) * (length + 1), "RNA_string_get_alloc");
RNA_property_string_get_default(ptr, prop, buf);
@@ -2460,7 +2462,7 @@ char *RNA_property_string_get_default_alloc(PointerRNA *ptr, PropertyRNA *prop,
/* this is the length without \0 terminator */
int RNA_property_string_default_length(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
{
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_STRING);
@@ -2469,7 +2471,7 @@ int RNA_property_string_default_length(PointerRNA *UNUSED(ptr), PropertyRNA *pro
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_ENUM);
@@ -2484,7 +2486,7 @@ int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_ENUM);
@@ -2510,7 +2512,7 @@ void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
int RNA_property_enum_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_ENUM);
@@ -2519,7 +2521,7 @@ int RNA_property_enum_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
void *RNA_property_enum_py_data_get(PropertyRNA *prop)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
BLI_assert(RNA_property_type(prop) == PROP_ENUM);
@@ -2528,13 +2530,13 @@ void *RNA_property_enum_py_data_get(PropertyRNA *prop)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
{
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_POINTER);
if ((idprop = rna_idproperty_check(&prop, ptr))) {
- pprop = (PointerPropertyRNA*)prop;
+ pprop = (PointerPropertyRNA *)prop;
/* for groups, data is idprop itself */
return rna_pointer_inherit_refine(ptr, pprop->type, idprop);
@@ -2564,12 +2566,12 @@ void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr
/* rna_idproperty_touch(idprop); */
}
else {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
- if ( pprop->set &&
- !((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL) &&
- !((prop->flag & PROP_ID_SELF_CHECK) && ptr->id.data == ptr_value.id.data)
- ) {
+ if (pprop->set &&
+ !((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL) &&
+ !((prop->flag & PROP_ID_SELF_CHECK) && ptr->id.data == ptr_value.id.data))
+ {
pprop->set(ptr, ptr_value);
}
}
@@ -2590,7 +2592,7 @@ void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop)
BLI_assert(RNA_property_type(prop) == PROP_POINTER);
- if ((/*idprop=*/rna_idproperty_check(&prop, ptr))) {
+ if ((/*idprop=*/ rna_idproperty_check(&prop, ptr))) {
/* already exists */
}
else if (prop->flag & PROP_IDPROPERTY) {
@@ -2628,7 +2630,7 @@ void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop)
static void rna_property_collection_get_idp(CollectionPropertyIterator *iter)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)iter->prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)iter->prop;
iter->ptr.data = rna_iterator_array_get(iter);
iter->ptr.type = cprop->item_type;
@@ -2658,14 +2660,14 @@ void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, Collectio
iter->idprop = 1;
}
else {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
cprop->begin(iter, ptr);
}
}
void RNA_property_collection_next(CollectionPropertyIterator *iter)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)rna_ensure_property(iter->prop);
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)rna_ensure_property(iter->prop);
if (iter->idprop) {
rna_iterator_array_next(iter);
@@ -2679,7 +2681,7 @@ void RNA_property_collection_next(CollectionPropertyIterator *iter)
void RNA_property_collection_end(CollectionPropertyIterator *iter)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)rna_ensure_property(iter->prop);
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)rna_ensure_property(iter->prop);
if (iter->idprop)
rna_iterator_array_end(iter);
@@ -2689,7 +2691,7 @@ void RNA_property_collection_end(CollectionPropertyIterator *iter)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
IDProperty *idprop;
BLI_assert(RNA_property_type(prop) == PROP_COLLECTION);
@@ -2756,14 +2758,14 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA
}
}
/*else
- printf("%s %s.%s: not implemented for this property.\n", __func__, ptr->type->identifier, prop->identifier);*/
+ printf("%s %s.%s: not implemented for this property.\n", __func__, ptr->type->identifier, prop->identifier);*/
#endif
if (r_ptr) {
if (idprop) {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
- r_ptr->data = IDP_GetIndexArray(idprop, idprop->len-1);
+ r_ptr->data = IDP_GetIndexArray(idprop, idprop->len - 1);
r_ptr->type = cprop->item_type;
rna_pointer_inherit_id(NULL, ptr, r_ptr);
}
@@ -2787,14 +2789,14 @@ int RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key)
array = IDP_IDPArray(idprop);
if (key >= 0 && key < len) {
- if (key+1 < len) {
+ if (key + 1 < len) {
/* move element to be removed to the back */
memcpy(&tmp, &array[key], sizeof(IDProperty));
- memmove(array+key, array+key+1, sizeof(IDProperty)*(len-(key+1)));
- memcpy(&array[len-1], &tmp, sizeof(IDProperty));
+ memmove(array + key, array + key + 1, sizeof(IDProperty) * (len - (key + 1)));
+ memcpy(&array[len - 1], &tmp, sizeof(IDProperty));
}
- IDP_ResizeIDPArray(idprop, len-1);
+ IDP_ResizeIDPArray(idprop, len - 1);
}
return 1;
@@ -2815,7 +2817,7 @@ int RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key)
return 0;
}
/*else
- printf("%s %s.%s: only supported for id properties.\n", __func__, ptr->type->identifier, prop->identifier);*/
+ printf("%s %s.%s: only supported for id properties.\n", __func__, ptr->type->identifier, prop->identifier);*/
#endif
return 0;
}
@@ -2836,9 +2838,9 @@ int RNA_property_collection_move(PointerRNA *ptr, PropertyRNA *prop, int key, in
if (key >= 0 && key < len && pos >= 0 && pos < len && key != pos) {
memcpy(&tmp, &array[key], sizeof(IDProperty));
if (pos < key)
- memmove(array+pos+1, array+pos, sizeof(IDProperty)*(key - pos));
+ memmove(array + pos + 1, array + pos, sizeof(IDProperty) * (key - pos));
else
- memmove(array+key, array+key+1, sizeof(IDProperty)*(pos - key));
+ memmove(array + key, array + key + 1, sizeof(IDProperty) * (pos - key));
memcpy(&array[pos], &tmp, sizeof(IDProperty));
}
@@ -2883,7 +2885,7 @@ int RNA_property_collection_lookup_index(PointerRNA *ptr, PropertyRNA *prop, Poi
int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)rna_ensure_property(prop);
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)rna_ensure_property(prop);
BLI_assert(RNA_property_type(prop) == PROP_COLLECTION);
@@ -2914,7 +2916,7 @@ int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int k
int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)rna_ensure_property(prop);
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)rna_ensure_property(prop);
BLI_assert(RNA_property_type(prop) == PROP_COLLECTION);
@@ -2962,7 +2964,7 @@ int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, co
/* zero return is an assignment error */
int RNA_property_collection_assign_int(PointerRNA *ptr, PropertyRNA *prop, const int key, const PointerRNA *assign_ptr)
{
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)rna_ensure_property(prop);
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)rna_ensure_property(prop);
BLI_assert(RNA_property_type(prop) == PROP_COLLECTION);
@@ -2979,7 +2981,7 @@ int RNA_property_collection_type_get(PointerRNA *ptr, PropertyRNA *prop, Pointer
BLI_assert(RNA_property_type(prop) == PROP_COLLECTION);
*r_ptr = *ptr;
- return ((r_ptr->type = rna_ensure_property(prop)->srna) ? 1:0);
+ return ((r_ptr->type = rna_ensure_property(prop)->srna) ? 1 : 0);
}
int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, PropertyRNA *itemprop, RawArray *array)
@@ -2998,7 +3000,7 @@ int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, Proper
if (iter.valid) {
/* get data from array iterator and item property */
internal = iter.internal;
- arrayp = (iter.valid)? iter.ptr.data: NULL;
+ arrayp = (iter.valid) ? iter.ptr.data : NULL;
if (internal->skip || !RNA_property_editable(&iter.ptr, itemprop)) {
/* we might skip some items, so it's not a proper array */
@@ -3008,7 +3010,7 @@ int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, Proper
array->array = arrayp + itemprop->rawoffset;
array->stride = internal->itemsize;
- array->len = ((char*)internal->endptr - arrayp)/internal->itemsize;
+ array->len = ((char *)internal->endptr - arrayp) / internal->itemsize;
array->type = itemprop->rawtype;
}
else
@@ -3095,7 +3097,7 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
/* try to access as raw array */
if (RNA_property_collection_raw_array(ptr, prop, itemprop, &out)) {
int arraylen = (itemlen == 0) ? 1 : itemlen;
- if (in.len != arraylen*out.len) {
+ if (in.len != arraylen * out.len) {
BKE_reportf(reports, RPT_ERROR, "Array length mismatch (expected %d, got %d)",
out.len * arraylen, in.len);
return 0;
@@ -3109,12 +3111,12 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
size = RNA_raw_type_sizeof(out.type) * arraylen;
- for (a = 0; a<out.len; a++) {
+ for (a = 0; a < out.len; a++) {
if (set) memcpy(outp, inp, size);
else memcpy(inp, outp, size);
- inp = (char*)inp + size;
- outp = (char*)outp + out.stride;
+ inp = (char *)inp + size;
+ outp = (char *)outp + out.stride;
}
return 1;
@@ -3132,14 +3134,14 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
int needconv = 1;
if (((itemtype == PROP_BOOLEAN || itemtype == PROP_INT) && in.type == PROP_RAW_INT) ||
- (itemtype == PROP_FLOAT && in.type == PROP_RAW_FLOAT))
+ (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)
+ RNA_PROP_BEGIN(ptr, itemptr, prop)
{
if (itemptr.data) {
if (itemprop) {
@@ -3169,7 +3171,7 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
/* editable check */
if (!set || RNA_property_editable(&itemptr, iprop)) {
- if (a+itemlen > in.len) {
+ if (a + itemlen > in.len) {
BKE_reportf(reports, RPT_ERROR, "Array length mismatch (got %d, expected more)", in.len);
err = 1;
break;
@@ -3231,7 +3233,7 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
tmparray = NULL;
}
if (!tmparray) {
- tmparray = MEM_callocN(sizeof(float)*itemlen, "RNA tmparray\n");
+ tmparray = MEM_callocN(sizeof(float) * itemlen, "RNA tmparray\n");
tmplen = itemlen;
}
@@ -3239,20 +3241,20 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
if (set) {
switch (itemtype) {
case PROP_BOOLEAN: {
- for (j = 0; j<itemlen; j++, a++)
- RAW_GET(int, ((int*)tmparray)[j], in, a);
+ for (j = 0; j < itemlen; j++, a++)
+ RAW_GET(int, ((int *)tmparray)[j], in, a);
RNA_property_boolean_set_array(&itemptr, iprop, tmparray);
break;
}
case PROP_INT: {
- for (j = 0; j<itemlen; j++, a++)
- RAW_GET(int, ((int*)tmparray)[j], in, a);
+ for (j = 0; j < itemlen; j++, a++)
+ RAW_GET(int, ((int *)tmparray)[j], in, a);
RNA_property_int_set_array(&itemptr, iprop, tmparray);
break;
}
case PROP_FLOAT: {
- for (j = 0; j<itemlen; j++, a++)
- RAW_GET(float, ((float*)tmparray)[j], in, a);
+ for (j = 0; j < itemlen; j++, a++)
+ RAW_GET(float, ((float *)tmparray)[j], in, a);
RNA_property_float_set_array(&itemptr, iprop, tmparray);
break;
}
@@ -3264,20 +3266,20 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
switch (itemtype) {
case PROP_BOOLEAN: {
RNA_property_boolean_get_array(&itemptr, iprop, tmparray);
- for (j = 0; j<itemlen; j++, a++)
- RAW_SET(int, in, a, ((int*)tmparray)[j]);
+ for (j = 0; j < itemlen; j++, a++)
+ RAW_SET(int, in, a, ((int *)tmparray)[j]);
break;
}
case PROP_INT: {
RNA_property_int_get_array(&itemptr, iprop, tmparray);
- for (j = 0; j<itemlen; j++, a++)
- RAW_SET(int, in, a, ((int*)tmparray)[j]);
+ for (j = 0; j < itemlen; j++, a++)
+ RAW_SET(int, in, a, ((int *)tmparray)[j]);
break;
}
case PROP_FLOAT: {
RNA_property_float_get_array(&itemptr, iprop, tmparray);
- for (j = 0; j<itemlen; j++, a++)
- RAW_SET(float, in, a, ((float*)tmparray)[j]);
+ for (j = 0; j < itemlen; j++, a++)
+ RAW_SET(float, in, a, ((float *)tmparray)[j]);
break;
}
default:
@@ -3289,17 +3291,17 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
if (set) {
switch (itemtype) {
case PROP_BOOLEAN: {
- RNA_property_boolean_set_array(&itemptr, iprop, &((int*)in.array)[a]);
+ RNA_property_boolean_set_array(&itemptr, iprop, &((int *)in.array)[a]);
a += itemlen;
break;
}
case PROP_INT: {
- RNA_property_int_set_array(&itemptr, iprop, &((int*)in.array)[a]);
+ RNA_property_int_set_array(&itemptr, iprop, &((int *)in.array)[a]);
a += itemlen;
break;
}
case PROP_FLOAT: {
- RNA_property_float_set_array(&itemptr, iprop, &((float*)in.array)[a]);
+ RNA_property_float_set_array(&itemptr, iprop, &((float *)in.array)[a]);
a += itemlen;
break;
}
@@ -3310,17 +3312,17 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
else {
switch (itemtype) {
case PROP_BOOLEAN: {
- RNA_property_boolean_get_array(&itemptr, iprop, &((int*)in.array)[a]);
+ RNA_property_boolean_get_array(&itemptr, iprop, &((int *)in.array)[a]);
a += itemlen;
break;
}
case PROP_INT: {
- RNA_property_int_get_array(&itemptr, iprop, &((int*)in.array)[a]);
+ RNA_property_int_get_array(&itemptr, iprop, &((int *)in.array)[a]);
a += itemlen;
break;
}
case PROP_FLOAT: {
- RNA_property_float_get_array(&itemptr, iprop, &((float*)in.array)[a]);
+ RNA_property_float_get_array(&itemptr, iprop, &((float *)in.array)[a]);
a += itemlen;
break;
}
@@ -3346,16 +3348,16 @@ RawPropertyType RNA_property_raw_type(PropertyRNA *prop)
if (prop->rawtype == PROP_RAW_UNSET) {
/* this property has no raw access, yet we try to provide a raw type to help building the array */
switch (prop->type) {
- case PROP_BOOLEAN:
- return PROP_RAW_INT;
- case PROP_INT:
- return PROP_RAW_INT;
- case PROP_FLOAT:
- return PROP_RAW_FLOAT;
- case PROP_ENUM:
- return PROP_RAW_INT;
- default:
- break;
+ case PROP_BOOLEAN:
+ return PROP_RAW_INT;
+ case PROP_INT:
+ return PROP_RAW_INT;
+ case PROP_FLOAT:
+ return PROP_RAW_FLOAT;
+ case PROP_ENUM:
+ return PROP_RAW_INT;
+ default:
+ break;
}
}
return prop->rawtype;
@@ -3380,7 +3382,7 @@ void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb,
ListBaseIterator *internal;
internal = MEM_callocN(sizeof(ListBaseIterator), "ListBaseIterator");
- internal->link = (lb)? lb->first: NULL;
+ internal->link = (lb) ? lb->first : NULL;
internal->skip = skip;
iter->internal = internal;
@@ -3439,8 +3441,8 @@ void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int i
internal = MEM_callocN(sizeof(ArrayIterator), "ArrayIterator");
internal->ptr = ptr;
- internal->free_ptr = free_ptr ? ptr:NULL;
- internal->endptr = ((char*)ptr)+length*itemsize;
+ internal->free_ptr = free_ptr ? ptr : NULL;
+ internal->endptr = ((char *)ptr) + length * itemsize;
internal->itemsize = itemsize;
internal->skip = skip;
internal->length = length;
@@ -3480,7 +3482,7 @@ void *rna_iterator_array_dereference_get(CollectionPropertyIterator *iter)
ArrayIterator *internal = iter->internal;
/* for ** arrays */
- return *(void**)(internal->ptr);
+ return *(void **)(internal->ptr);
}
void rna_iterator_array_end(CollectionPropertyIterator *iter)
@@ -3500,7 +3502,7 @@ PointerRNA rna_array_lookup_int(PointerRNA *ptr, StructRNA *type, void *data, in
if (index < 0 || index >= length)
return PointerRNA_NULL;
- return rna_pointer_inherit_refine(ptr, type, ((char*)data) + index*itemsize);
+ return rna_pointer_inherit_refine(ptr, type, ((char *)data) + index * itemsize);
}
/* RNA Path - Experiment */
@@ -3566,22 +3568,22 @@ static char *rna_path_token(const char **path, char *fixedbuf, int fixedlen, int
return NULL;
/* try to use fixed buffer if possible */
- if (len+1 < fixedlen)
+ if (len + 1 < fixedlen)
buf = fixedbuf;
else
- buf = MEM_callocN(sizeof(char)*(len+1), "rna_path_token");
+ buf = MEM_callocN(sizeof(char) * (len + 1), "rna_path_token");
/* copy string, taking into account escaped ] */
if (bracket) {
- for (p = *path, i = 0, j = 0; i<len; i++, p++) {
- if (*p == '\\' && *(p+1) == quote);
+ for (p = *path, i = 0, j = 0; i < len; i++, p++) {
+ if (*p == '\\' && *(p + 1) == quote) ;
else buf[j++] = *p;
}
buf[j] = 0;
}
else {
- memcpy(buf, *path, sizeof(char)*len);
+ memcpy(buf, *path, sizeof(char) * len);
buf[len] = '\0';
}
@@ -3595,11 +3597,11 @@ static char *rna_path_token(const char **path, char *fixedbuf, int fixedlen, int
static int rna_token_strip_quotes(char *token)
{
- if (token[0] =='"') {
+ if (token[0] == '"') {
int len = strlen(token);
- if (len >= 2 && token[len-1] =='"') {
+ if (len >= 2 && token[len - 1] == '"') {
/* strip away "" */
- token[len-1] = '\0';
+ token[len - 1] = '\0';
return 1;
}
}
@@ -3622,11 +3624,11 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
prop = NULL;
curptr = *ptr;
- if (path == NULL || *path =='\0')
+ if (path == NULL || *path == '\0')
return 0;
while (*path) {
- int use_id_prop = (*path =='[') ? 1:0;
+ int use_id_prop = (*path == '[') ? 1 : 0;
/* custom property lookup ?
* C.object["someprop"]
*/
@@ -3640,7 +3642,7 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
if (use_id_prop) { /* look up property name in current struct */
IDProperty *group = RNA_struct_idprops(&curptr, 0);
if (group && rna_token_strip_quotes(token))
- prop = (PropertyRNA *)IDP_GetPropertyFromGroup(group, token+1);
+ prop = (PropertyRNA *)IDP_GetPropertyFromGroup(group, token + 1);
}
else {
prop = RNA_struct_find_property(&curptr, token);
@@ -3658,143 +3660,143 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
* collection, otherwise return the property rna so that the
* caller can read the value of the property itself */
switch (type) {
- case PROP_POINTER:
- nextptr = RNA_property_pointer_get(&curptr, prop);
-
- if (nextptr.data) {
- curptr = nextptr;
- prop = NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
- if (index) *index = -1;
- }
- else
- return 0;
-
- break;
- case PROP_COLLECTION:
- if (*path) {
- if (*path == '[') {
- /* resolve the lookup with [] brackets */
- token = rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 1);
-
- if (!token)
- return 0;
-
- /* check for "" to see if it is a string */
- if (rna_token_strip_quotes(token)) {
- RNA_property_collection_lookup_string(&curptr, prop, token+1, &nextptr);
- }
- else {
- /* otherwise do int lookup */
- intkey = atoi(token);
- if (intkey == 0 && (token[0] != '0' || token[1] != '\0')) {
- return 0; /* we can be sure the fixedbuf was used in this case */
- }
- RNA_property_collection_lookup_int(&curptr, prop, intkey, &nextptr);
- }
-
- if (token != fixedbuf) {
- MEM_freeN(token);
- }
- }
- else {
- PointerRNA c_ptr;
-
- /* ensure we quit on invalid values */
- nextptr.data = NULL;
-
- if (RNA_property_collection_type_get(&curptr, prop, &c_ptr)) {
- nextptr = c_ptr;
- }
- }
+ case PROP_POINTER:
+ nextptr = RNA_property_pointer_get(&curptr, prop);
if (nextptr.data) {
curptr = nextptr;
- prop = NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
+ prop = NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
if (index) *index = -1;
}
else
return 0;
- }
- break;
- default:
- if (index == NULL)
break;
-
- *index = -1;
-
- if (*path) {
- int index_arr[RNA_MAX_ARRAY_DIMENSION] = {0};
- int len[RNA_MAX_ARRAY_DIMENSION];
- const int dim = RNA_property_array_dimension(&curptr, prop, len);
- int i, temp_index;
-
- for (i = 0; i<dim; i++) {
- temp_index = -1;
-
- /* multi index resolve */
- if (*path =='[') {
+ case PROP_COLLECTION:
+ if (*path) {
+ if (*path == '[') {
+ /* resolve the lookup with [] brackets */
token = rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 1);
- if (token == NULL) {
- /* invalid syntax blah[] */
+ if (!token)
return 0;
- }
+
/* check for "" to see if it is a string */
- else if (rna_token_strip_quotes(token)) {
- temp_index = RNA_property_array_item_index(prop, *(token+1));
+ if (rna_token_strip_quotes(token)) {
+ RNA_property_collection_lookup_string(&curptr, prop, token + 1, &nextptr);
}
else {
/* otherwise do int lookup */
- temp_index = atoi(token);
-
- if (temp_index == 0 && (token[0] != '0' || token[1] != '\0')) {
- if (token != fixedbuf) {
- MEM_freeN(token);
- }
-
- return 0;
+ intkey = atoi(token);
+ if (intkey == 0 && (token[0] != '0' || token[1] != '\0')) {
+ return 0; /* we can be sure the fixedbuf was used in this case */
}
+ RNA_property_collection_lookup_int(&curptr, prop, intkey, &nextptr);
}
- }
- else if (dim == 1) {
- /* location.x || scale.X, single dimension arrays only */
- token = rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 0);
- if (token == NULL) {
- /* invalid syntax blah.. */
- return 0;
+
+ if (token != fixedbuf) {
+ MEM_freeN(token);
}
- temp_index = RNA_property_array_item_index(prop, *token);
}
+ else {
+ PointerRNA c_ptr;
+
+ /* ensure we quit on invalid values */
+ nextptr.data = NULL;
- if (token != fixedbuf) {
- MEM_freeN(token);
+ if (RNA_property_collection_type_get(&curptr, prop, &c_ptr)) {
+ nextptr = c_ptr;
+ }
}
- /* out of range */
- if (temp_index < 0 || temp_index >= len[i])
+ if (nextptr.data) {
+ curptr = nextptr;
+ prop = NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
+ if (index) *index = -1;
+ }
+ else
return 0;
-
- index_arr[i] = temp_index;
- /* end multi index resolve */
}
- /* arrays always contain numbers so further values are not valid */
+ break;
+ default:
+ if (index == NULL)
+ break;
+
+ *index = -1;
+
if (*path) {
- return 0;
- }
- else {
- int totdim = 1;
- int flat_index = 0;
+ int index_arr[RNA_MAX_ARRAY_DIMENSION] = {0};
+ int len[RNA_MAX_ARRAY_DIMENSION];
+ const int dim = RNA_property_array_dimension(&curptr, prop, len);
+ int i, temp_index;
+
+ for (i = 0; i < dim; i++) {
+ temp_index = -1;
+
+ /* multi index resolve */
+ if (*path == '[') {
+ token = rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 1);
+
+ if (token == NULL) {
+ /* invalid syntax blah[] */
+ return 0;
+ }
+ /* check for "" to see if it is a string */
+ else if (rna_token_strip_quotes(token)) {
+ temp_index = RNA_property_array_item_index(prop, *(token + 1));
+ }
+ else {
+ /* otherwise do int lookup */
+ temp_index = atoi(token);
+
+ if (temp_index == 0 && (token[0] != '0' || token[1] != '\0')) {
+ if (token != fixedbuf) {
+ MEM_freeN(token);
+ }
- for (i = dim-1; i >= 0; i--) {
- flat_index += index_arr[i] * totdim;
- totdim *= len[i];
+ return 0;
+ }
+ }
+ }
+ else if (dim == 1) {
+ /* location.x || scale.X, single dimension arrays only */
+ token = rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 0);
+ if (token == NULL) {
+ /* invalid syntax blah.. */
+ return 0;
+ }
+ temp_index = RNA_property_array_item_index(prop, *token);
+ }
+
+ if (token != fixedbuf) {
+ MEM_freeN(token);
+ }
+
+ /* out of range */
+ if (temp_index < 0 || temp_index >= len[i])
+ return 0;
+
+ index_arr[i] = temp_index;
+ /* end multi index resolve */
}
- *index = flat_index;
+ /* arrays always contain numbers so further values are not valid */
+ if (*path) {
+ return 0;
+ }
+ else {
+ int totdim = 1;
+ int flat_index = 0;
+
+ for (i = dim - 1; i >= 0; i--) {
+ flat_index += index_arr[i] * totdim;
+ totdim *= len[i];
+ }
+
+ *index = flat_index;
+ }
}
- }
}
}
@@ -3815,7 +3817,7 @@ char *RNA_path_append(const char *path, PointerRNA *UNUSED(ptr), PropertyRNA *pr
/* add .identifier */
if (path) {
- BLI_dynstr_append(dynstr, (char*)path);
+ BLI_dynstr_append(dynstr, (char *)path);
if (*path)
BLI_dynstr_append(dynstr, ".");
}
@@ -3897,7 +3899,7 @@ char *RNA_path_back(const char *path)
i = previous - path;
result = BLI_strdup(path);
- if (i > 0 && result[i-1] == '.') i--;
+ if (i > 0 && result[i - 1] == '.') i--;
result[i] = 0;
return result;
@@ -3948,7 +3950,7 @@ static char *rna_idp_path_create(IDP_Chain *child_link)
path = BLI_dynstr_get_cstring(dynstr);
BLI_dynstr_free(dynstr);
- if (*path =='\0') {
+ if (*path == '\0') {
MEM_freeN(path);
path = NULL;
}
@@ -4068,7 +4070,7 @@ char *RNA_path_from_ID_to_struct(PointerRNA *ptr)
if (userprop)
ptrpath = BLI_strdup(RNA_property_identifier(userprop));
else
- return NULL; /* can't do anything about this case yet... */
+ return NULL; /* can't do anything about this case yet... */
}
else if (RNA_struct_is_a(ptr->type, &RNA_PropertyGroup)) {
/* special case, easier to deal with here then in ptr->type->path() */
@@ -4096,7 +4098,7 @@ char *RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop)
propname = RNA_property_identifier(prop);
if (ptrpath) {
- path = BLI_sprintfN(is_rna ? "%s.%s":"%s[\"%s\"]", ptrpath, propname);
+ path = BLI_sprintfN(is_rna ? "%s.%s" : "%s[\"%s\"]", ptrpath, propname);
MEM_freeN(ptrpath);
}
else {
@@ -4306,7 +4308,7 @@ int RNA_enum_is_equal(bContext *C, PointerRNA *ptr, const char *name, const char
int RNA_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value)
{
- for ( ; item->identifier; item++) {
+ for (; item->identifier; item++) {
if (strcmp(item->identifier, identifier) == 0) {
*value = item->value;
return 1;
@@ -4316,9 +4318,9 @@ int RNA_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *
return 0;
}
-int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **identifier)
+int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **identifier)
{
- for ( ; item->identifier; item++) {
+ for (; item->identifier; item++) {
if (item->value == value) {
*identifier = item->identifier;
return 1;
@@ -4330,7 +4332,7 @@ int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **ident
int RNA_enum_icon_from_value(EnumPropertyItem *item, int value, int *icon)
{
- for ( ; item->identifier; item++) {
+ for (; item->identifier; item++) {
if (item->value == value) {
*icon = item->icon;
return 1;
@@ -4342,8 +4344,8 @@ int RNA_enum_icon_from_value(EnumPropertyItem *item, int value, int *icon)
int RNA_enum_name_from_value(EnumPropertyItem *item, int value, const char **name)
{
- for( ; item->identifier; item++) {
- if(item->value==value) {
+ for (; item->identifier; item++) {
+ if (item->value == value) {
*name = item->name;
return 1;
}
@@ -4523,7 +4525,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);
@@ -4567,7 +4569,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;
@@ -4585,7 +4587,7 @@ char *RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, PointerRNA
if (as_function && (flag & PROP_REQUIRED)) {
/* required args don't have useful defaults */
- BLI_dynstr_appendf(dynstr, first_iter ? "%s":", %s", arg_name);
+ BLI_dynstr_appendf(dynstr, first_iter ? "%s" : ", %s", arg_name);
first_iter = FALSE;
}
else {
@@ -4614,13 +4616,13 @@ char *RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, PointerRNA
buf_default = RNA_property_as_string(C, ptr_default, prop_default);
if (strcmp(buf, buf_default) == 0)
- ok = FALSE; /* values match, don't bother printing */
+ ok = FALSE; /* values match, don't bother printing */
MEM_freeN(buf_default);
}
}
if (ok) {
- BLI_dynstr_appendf(dynstr, first_iter ? "%s=%s":", %s=%s", arg_name, buf);
+ BLI_dynstr_appendf(dynstr, first_iter ? "%s=%s" : ", %s=%s", arg_name, buf);
first_iter = FALSE;
}
@@ -4646,7 +4648,7 @@ char *RNA_pointer_as_string_keywords(bContext *C, PointerRNA *ptr, PointerRNA *p
}
char *RNA_function_as_string_keywords(bContext *C, FunctionRNA *func, PointerRNA *ptr_default,
- const short as_function, const short all_args)
+ const short as_function, const short all_args)
{
PointerRNA funcptr;
PropertyRNA *iterprop;
@@ -4673,144 +4675,144 @@ char *RNA_property_as_string(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
/* see if we can coorce into a python type - PropertyType */
switch (type) {
- case PROP_BOOLEAN:
- if (len == 0) {
- BLI_dynstr_append(dynstr, RNA_property_boolean_get(ptr, prop) ? "True" : "False");
- }
- else {
- BLI_dynstr_append(dynstr, "(");
- for (i = 0; i<len; i++) {
- BLI_dynstr_appendf(dynstr, i ? ", %s" : "%s",
- RNA_property_boolean_get_index(ptr, prop, i) ? "True" : "False");
+ case PROP_BOOLEAN:
+ if (len == 0) {
+ BLI_dynstr_append(dynstr, RNA_property_boolean_get(ptr, prop) ? "True" : "False");
}
- if (len == 1)
- BLI_dynstr_append(dynstr, ","); /* otherwise python wont see it as a tuple */
- BLI_dynstr_append(dynstr, ")");
- }
- break;
- case PROP_INT:
- if (len == 0) {
- BLI_dynstr_appendf(dynstr, "%d", RNA_property_int_get(ptr, prop));
- }
- else {
- BLI_dynstr_append(dynstr, "(");
- for (i = 0; i<len; i++) {
- BLI_dynstr_appendf(dynstr, i?", %d":"%d", RNA_property_int_get_index(ptr, prop, i));
+ else {
+ BLI_dynstr_append(dynstr, "(");
+ for (i = 0; i < len; i++) {
+ BLI_dynstr_appendf(dynstr, i ? ", %s" : "%s",
+ RNA_property_boolean_get_index(ptr, prop, i) ? "True" : "False");
+ }
+ if (len == 1)
+ BLI_dynstr_append(dynstr, ","); /* otherwise python wont see it as a tuple */
+ BLI_dynstr_append(dynstr, ")");
}
- if (len == 1)
- BLI_dynstr_append(dynstr, ","); /* otherwise python wont see it as a tuple */
- BLI_dynstr_append(dynstr, ")");
- }
- break;
- case PROP_FLOAT:
- if (len == 0) {
- BLI_dynstr_appendf(dynstr, "%g", RNA_property_float_get(ptr, prop));
- }
- else {
- BLI_dynstr_append(dynstr, "(");
- for (i = 0; i<len; i++) {
- BLI_dynstr_appendf(dynstr, i?", %g":"%g", RNA_property_float_get_index(ptr, prop, i));
+ break;
+ case PROP_INT:
+ if (len == 0) {
+ BLI_dynstr_appendf(dynstr, "%d", RNA_property_int_get(ptr, prop));
}
- if (len == 1)
- BLI_dynstr_append(dynstr, ","); /* otherwise python wont see it as a tuple */
- BLI_dynstr_append(dynstr, ")");
+ else {
+ BLI_dynstr_append(dynstr, "(");
+ for (i = 0; i < len; i++) {
+ BLI_dynstr_appendf(dynstr, i ? ", %d" : "%d", RNA_property_int_get_index(ptr, prop, i));
+ }
+ if (len == 1)
+ BLI_dynstr_append(dynstr, ","); /* otherwise python wont see it as a tuple */
+ BLI_dynstr_append(dynstr, ")");
+ }
+ break;
+ case PROP_FLOAT:
+ if (len == 0) {
+ BLI_dynstr_appendf(dynstr, "%g", RNA_property_float_get(ptr, prop));
+ }
+ else {
+ BLI_dynstr_append(dynstr, "(");
+ for (i = 0; i < len; i++) {
+ BLI_dynstr_appendf(dynstr, i ? ", %g" : "%g", RNA_property_float_get_index(ptr, prop, i));
+ }
+ if (len == 1)
+ BLI_dynstr_append(dynstr, ","); /* otherwise python wont see it as a tuple */
+ BLI_dynstr_append(dynstr, ")");
+ }
+ break;
+ case PROP_STRING:
+ {
+ char *buf_esc;
+ char *buf;
+ int length;
+
+ length = RNA_property_string_length(ptr, prop);
+ buf = MEM_mallocN(sizeof(char) * (length + 1), "RNA_property_as_string");
+ buf_esc = MEM_mallocN(sizeof(char) * (length * 2 + 1), "RNA_property_as_string esc");
+ RNA_property_string_get(ptr, prop, buf);
+ BLI_strescape(buf_esc, buf, length * 2 + 1);
+ MEM_freeN(buf);
+ BLI_dynstr_appendf(dynstr, "\"%s\"", buf_esc);
+ MEM_freeN(buf_esc);
+ break;
}
- break;
- case PROP_STRING:
- {
- char *buf_esc;
- char *buf;
- int length;
-
- length = RNA_property_string_length(ptr, prop);
- buf = MEM_mallocN(sizeof(char)*(length+1), "RNA_property_as_string");
- buf_esc = MEM_mallocN(sizeof(char)*(length*2+1), "RNA_property_as_string esc");
- RNA_property_string_get(ptr, prop, buf);
- BLI_strescape(buf_esc, buf, length*2+1);
- MEM_freeN(buf);
- BLI_dynstr_appendf(dynstr, "\"%s\"", buf_esc);
- MEM_freeN(buf_esc);
- break;
- }
- case PROP_ENUM:
- {
- /* string arrays don't exist */
- const char *identifier;
- int val = RNA_property_enum_get(ptr, prop);
-
- if (RNA_property_flag(prop) & PROP_ENUM_FLAG) {
- /* represent as a python set */
- if (val) {
- EnumPropertyItem *item = NULL;
- int free;
-
- BLI_dynstr_append(dynstr, "{");
-
- RNA_property_enum_items(C, ptr, prop, &item, NULL, &free);
- if (item) {
- short is_first = TRUE;
- for (; item->identifier; item++) {
- if (item->identifier[0] && item->value & val) {
- BLI_dynstr_appendf(dynstr, is_first ? "'%s'" : ", '%s'", item->identifier);
- is_first = FALSE;
+ case PROP_ENUM:
+ {
+ /* string arrays don't exist */
+ const char *identifier;
+ int val = RNA_property_enum_get(ptr, prop);
+
+ if (RNA_property_flag(prop) & PROP_ENUM_FLAG) {
+ /* represent as a python set */
+ if (val) {
+ EnumPropertyItem *item = NULL;
+ int free;
+
+ BLI_dynstr_append(dynstr, "{");
+
+ RNA_property_enum_items(C, ptr, prop, &item, NULL, &free);
+ if (item) {
+ short is_first = TRUE;
+ for (; item->identifier; item++) {
+ if (item->identifier[0] && item->value & val) {
+ BLI_dynstr_appendf(dynstr, is_first ? "'%s'" : ", '%s'", item->identifier);
+ is_first = FALSE;
+ }
}
- }
- if (free) {
- MEM_freeN(item);
+ if (free) {
+ MEM_freeN(item);
+ }
}
- }
- BLI_dynstr_append(dynstr, "}");
+ BLI_dynstr_append(dynstr, "}");
+ }
+ else {
+ /* annoying exception, don't confuse with dictionary syntax above: {} */
+ BLI_dynstr_append(dynstr, "set()");
+ }
+ }
+ else if (RNA_property_enum_identifier(C, ptr, prop, val, &identifier)) {
+ BLI_dynstr_appendf(dynstr, "'%s'", identifier);
}
else {
- /* annoying exception, don't confuse with dictionary syntax above: {} */
- BLI_dynstr_append(dynstr, "set()");
+ BLI_dynstr_append(dynstr, "'<UNKNOWN ENUM>'");
}
+ break;
}
- else if (RNA_property_enum_identifier(C, ptr, prop, val, &identifier)) {
- BLI_dynstr_appendf(dynstr, "'%s'", identifier);
- }
- else {
- BLI_dynstr_append(dynstr, "'<UNKNOWN ENUM>'");
- }
- break;
- }
- case PROP_POINTER:
- {
- PointerRNA tptr = RNA_property_pointer_get(ptr, prop);
- cstring = RNA_pointer_as_string(C, &tptr);
- BLI_dynstr_append(dynstr, cstring);
- MEM_freeN(cstring);
- break;
- }
- case PROP_COLLECTION:
- {
- int first_time = 1;
- CollectionPropertyIterator collect_iter;
- BLI_dynstr_append(dynstr, "[");
-
- for (RNA_property_collection_begin(ptr, prop, &collect_iter); collect_iter.valid;
- RNA_property_collection_next(&collect_iter)) {
- PointerRNA itemptr = collect_iter.ptr;
-
- if (first_time == 0)
- BLI_dynstr_append(dynstr, ", ");
- first_time = 0;
-
- /* now get every prop of the collection */
- cstring = RNA_pointer_as_string(C, &itemptr);
+ case PROP_POINTER:
+ {
+ PointerRNA tptr = RNA_property_pointer_get(ptr, prop);
+ cstring = RNA_pointer_as_string(C, &tptr);
BLI_dynstr_append(dynstr, cstring);
MEM_freeN(cstring);
+ break;
}
+ case PROP_COLLECTION:
+ {
+ int first_time = 1;
+ CollectionPropertyIterator collect_iter;
+ BLI_dynstr_append(dynstr, "[");
+
+ for (RNA_property_collection_begin(ptr, prop, &collect_iter); collect_iter.valid;
+ RNA_property_collection_next(&collect_iter)) {
+ PointerRNA itemptr = collect_iter.ptr;
+
+ if (first_time == 0)
+ BLI_dynstr_append(dynstr, ", ");
+ first_time = 0;
+
+ /* now get every prop of the collection */
+ cstring = RNA_pointer_as_string(C, &itemptr);
+ BLI_dynstr_append(dynstr, cstring);
+ MEM_freeN(cstring);
+ }
- RNA_property_collection_end(&collect_iter);
- BLI_dynstr_append(dynstr, "]");
- break;
- }
- default:
- BLI_dynstr_append(dynstr, "'<UNKNOWN TYPE>'"); /* TODO */
- break;
+ RNA_property_collection_end(&collect_iter);
+ BLI_dynstr_append(dynstr, "]");
+ break;
+ }
+ default:
+ BLI_dynstr_append(dynstr, "'<UNKNOWN TYPE>'"); /* TODO */
+ break;
}
cstring = BLI_dynstr_get_cstring(dynstr);
@@ -4850,7 +4852,7 @@ PropertyRNA *RNA_function_find_parameter(PointerRNA *UNUSED(ptr), FunctionRNA *f
return BLI_findstring(&func->cont.properties, identifier, offsetof(PropertyRNA, identifier));
}
-const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func)
+const ListBase *RNA_function_defined_parameters(FunctionRNA *func)
{
return &func->cont.properties;
}
@@ -4896,22 +4898,22 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *UNUSE
if (!(parm->flag & PROP_REQUIRED) && !(parm->flag & PROP_DYNAMIC)) {
switch (parm->type) {
case PROP_BOOLEAN:
- if (parm->arraydimension) memcpy(data, ((BoolPropertyRNA*)parm)->defaultarray, size);
- else memcpy(data, &((BoolPropertyRNA*)parm)->defaultvalue, size);
+ if (parm->arraydimension) memcpy(data, ((BoolPropertyRNA *)parm)->defaultarray, size);
+ else memcpy(data, &((BoolPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_INT:
- if (parm->arraydimension) memcpy(data, ((IntPropertyRNA*)parm)->defaultarray, size);
- else memcpy(data, &((IntPropertyRNA*)parm)->defaultvalue, size);
+ if (parm->arraydimension) memcpy(data, ((IntPropertyRNA *)parm)->defaultarray, size);
+ else memcpy(data, &((IntPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_FLOAT:
- if (parm->arraydimension) memcpy(data, ((FloatPropertyRNA*)parm)->defaultarray, size);
- else memcpy(data, &((FloatPropertyRNA*)parm)->defaultvalue, size);
+ if (parm->arraydimension) memcpy(data, ((FloatPropertyRNA *)parm)->defaultarray, size);
+ else memcpy(data, &((FloatPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_ENUM:
- memcpy(data, &((EnumPropertyRNA*)parm)->defaultvalue, size);
+ memcpy(data, &((EnumPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_STRING: {
- const char *defvalue = ((StringPropertyRNA*)parm)->defaultvalue;
+ const char *defvalue = ((StringPropertyRNA *)parm)->defaultvalue;
if (defvalue && defvalue[0]) {
/* causes bug [#29988], possibly this is only correct for thick wrapped
* need to look further into it - campbell */
@@ -4929,7 +4931,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *UNUSE
}
}
- data = ((char*)data) + rna_parameter_size_alloc(parm);
+ data = ((char *)data) + rna_parameter_size_alloc(parm);
}
return parms;
@@ -4943,7 +4945,7 @@ void RNA_parameter_list_free(ParameterList *parms)
parm = parms->func->cont.properties.first;
for (tot = 0; parm; parm = parm->next) {
if (parm->type == PROP_COLLECTION)
- BLI_freelistN((ListBase*)((char*)parms->data+tot));
+ BLI_freelistN((ListBase *)((char *)parms->data + tot));
else if (parm->flag & PROP_DYNAMIC) {
/* for dynamic arrays and strings, data is a pointer to an array */
ParameterDynAlloc *data_alloc = (void *)(((char *)parms->data) + tot);
@@ -4987,7 +4989,7 @@ void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter)
if (iter->valid) {
iter->size = rna_parameter_size_alloc(iter->parm);
- iter->data = (((char*)iter->parms->data)); /* +iter->offset, always 0 */
+ iter->data = (((char *)iter->parms->data)); /* +iter->offset, always 0 */
}
}
@@ -4999,7 +5001,7 @@ void RNA_parameter_list_next(ParameterIterator *iter)
if (iter->valid) {
iter->size = rna_parameter_size_alloc(iter->parm);
- iter->data = (((char*)iter->parms->data)+iter->offset);
+ iter->data = (((char *)iter->parms->data) + iter->offset);
}
}
@@ -5180,11 +5182,11 @@ static int rna_function_format_array_length(const char *format, int ofs, int fle
char lenbuf[16];
int idx = 0;
- if (format[ofs++] =='[')
- for (; ofs<flen && format[ofs] !=']' && idx<sizeof(*lenbuf)-1; idx++, ofs++)
+ if (format[ofs++] == '[')
+ for (; ofs < flen && format[ofs] != ']' && idx < sizeof(*lenbuf) - 1; idx++, ofs++)
lenbuf[idx] = format[ofs];
- if (ofs<flen && format[ofs+1] ==']') {
+ if (ofs < flen && format[ofs + 1] == ']') {
/* XXX put better error reporting for ofs>=flen or idx over lenbuf capacity */
lenbuf[idx] = '\0';
return atoi(lenbuf);
@@ -5200,75 +5202,75 @@ static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, Prop
/* ptr is always a function pointer, prop always a parameter */
switch (type) {
- case PROP_BOOLEAN:
+ case PROP_BOOLEAN:
{
- if (ftype !='b') {
+ if (ftype != 'b') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, a boolean was expected\n", tid, fid, pid);
return -1;
}
if (len == 0)
- *((int*)dest) = *((int*)src);
+ *((int *)dest) = *((int *)src);
else
- memcpy(dest, src, len*sizeof(int));
+ memcpy(dest, src, len * sizeof(int));
break;
}
- case PROP_INT:
+ case PROP_INT:
{
- if (ftype !='i') {
+ if (ftype != 'i') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, an integer was expected\n", tid, fid, pid);
return -1;
}
if (len == 0)
- *((int*)dest) = *((int*)src);
+ *((int *)dest) = *((int *)src);
else
- memcpy(dest, src, len*sizeof(int));
+ memcpy(dest, src, len * sizeof(int));
break;
}
- case PROP_FLOAT:
+ case PROP_FLOAT:
{
- if (ftype !='f') {
+ if (ftype != 'f') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, a float was expected\n", tid, fid, pid);
return -1;
}
if (len == 0)
- *((float*)dest) = *((float*)src);
+ *((float *)dest) = *((float *)src);
else
- memcpy(dest, src, len*sizeof(float));
+ memcpy(dest, src, len * sizeof(float));
break;
}
- case PROP_STRING:
+ case PROP_STRING:
{
- if (ftype !='s') {
+ if (ftype != 's') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, a string was expected\n", tid, fid, pid);
return -1;
}
- *((char**)dest) = *((char**)src);
+ *((char **)dest) = *((char **)src);
break;
}
- case PROP_ENUM:
+ case PROP_ENUM:
{
- if (ftype !='e') {
+ if (ftype != 'e') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, an enum was expected\n", tid, fid, pid);
return -1;
}
- *((int*)dest) = *((int*)src);
+ *((int *)dest) = *((int *)src);
break;
}
- case PROP_POINTER:
+ case PROP_POINTER:
{
StructRNA *ptype;
- if (ftype !='O') {
+ if (ftype != 'O') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, an object was expected\n", tid, fid, pid);
return -1;
}
@@ -5276,9 +5278,9 @@ static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, Prop
ptype = RNA_property_pointer_type(ptr, prop);
if (prop->flag & PROP_RNAPTR) {
- *((PointerRNA*)dest) = *((PointerRNA*)src);
+ *((PointerRNA *)dest) = *((PointerRNA *)src);
break;
- }
+ }
if (ptype != srna && !RNA_struct_is_a(srna, ptype)) {
fprintf(stderr, "%s.%s: wrong type for parameter %s, "
@@ -5287,18 +5289,18 @@ static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, Prop
return -1;
}
- *((void**)dest) = *((void**)src);
+ *((void **)dest) = *((void **)src);
break;
}
- case PROP_COLLECTION:
+ case PROP_COLLECTION:
{
StructRNA *ptype;
ListBase *lb, *clb;
Link *link;
CollectionPointerLink *clink;
- if (ftype !='C') {
+ if (ftype != 'C') {
fprintf(stderr, "%s.%s: wrong type for parameter %s, a collection was expected\n", tid, fid, pid);
return -1;
}
@@ -5323,7 +5325,7 @@ static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, Prop
break;
}
- default:
+ default:
{
if (len == 0)
fprintf(stderr, "%s.%s: unknown type for parameter %s\n", tid, fid, pid);
@@ -5374,7 +5376,7 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt
pid = RNA_property_identifier(parm);
- if (ofs >= flen || format[ofs] =='N') {
+ if (ofs >= flen || format[ofs] == 'N') {
if (flag & PROP_REQUIRED) {
err = -1;
fprintf(stderr, "%s.%s: missing required parameter %s\n", tid, fid, pid);
@@ -5399,46 +5401,46 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt
}
switch (type) {
- case PROP_BOOLEAN:
- case PROP_INT:
- case PROP_ENUM:
+ case PROP_BOOLEAN:
+ case PROP_INT:
+ case PROP_ENUM:
{
int arg = va_arg(args, int);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg,
NULL, tid, fid, pid);
break;
}
- case PROP_FLOAT:
+ case PROP_FLOAT:
{
double arg = va_arg(args, double);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg,
NULL, tid, fid, pid);
break;
}
- case PROP_STRING:
+ case PROP_STRING:
{
- char *arg = va_arg(args, char*);
+ char *arg = va_arg(args, char *);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg,
NULL, tid, fid, pid);
break;
}
- case PROP_POINTER:
+ case PROP_POINTER:
{
- StructRNA *srna = va_arg(args, StructRNA*);
- void *arg = va_arg(args, void*);
+ StructRNA *srna = va_arg(args, StructRNA *);
+ void *arg = va_arg(args, void *);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg,
srna, tid, fid, pid);
break;
}
- case PROP_COLLECTION:
+ case PROP_COLLECTION:
{
- StructRNA *srna = va_arg(args, StructRNA*);
- ListBase *arg = va_arg(args, ListBase*);
+ StructRNA *srna = va_arg(args, StructRNA *);
+ ListBase *arg = va_arg(args, ListBase *);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg,
srna, tid, fid, pid);
break;
}
- default:
+ default:
{
/* handle errors */
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, NULL,
@@ -5455,7 +5457,7 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt
err = RNA_function_call(C, reports, ptr, func, &parms);
/* XXX throw error when more parameters than those needed are passed or leave silent? */
- if (err == 0 && pret && ofs<flen && format[ofs++] =='R') {
+ if (err == 0 && pret && ofs < flen && format[ofs++] == 'R') {
parm = pret;
type = RNA_property_type(parm);
@@ -5471,46 +5473,46 @@ int RNA_function_call_direct_va(bContext *C, ReportList *reports, PointerRNA *pt
}
else {
switch (type) {
- case PROP_BOOLEAN:
- case PROP_INT:
- case PROP_ENUM:
+ case PROP_BOOLEAN:
+ case PROP_INT:
+ case PROP_ENUM:
{
- int *arg = va_arg(args, int*);
+ int *arg = va_arg(args, int *);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata,
NULL, tid, fid, pid);
break;
}
- case PROP_FLOAT:
+ case PROP_FLOAT:
{
- float *arg = va_arg(args, float*);
+ float *arg = va_arg(args, float *);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata,
NULL, tid, fid, pid);
break;
}
- case PROP_STRING:
+ case PROP_STRING:
{
- char **arg = va_arg(args, char**);
+ char **arg = va_arg(args, char **);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata,
NULL, tid, fid, pid);
break;
}
- case PROP_POINTER:
+ case PROP_POINTER:
{
- StructRNA *srna = va_arg(args, StructRNA*);
- void **arg = va_arg(args, void**);
+ StructRNA *srna = va_arg(args, StructRNA *);
+ void **arg = va_arg(args, void **);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata,
srna, tid, fid, pid);
break;
}
- case PROP_COLLECTION:
+ case PROP_COLLECTION:
{
- StructRNA *srna = va_arg(args, StructRNA*);
- ListBase **arg = va_arg(args, ListBase**);
+ StructRNA *srna = va_arg(args, StructRNA *);
+ ListBase **arg = va_arg(args, ListBase * *);
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata,
srna, tid, fid, pid);
break;
}
- default:
+ default:
{
/* handle errors */
err = rna_function_parameter_parse(&funcptr, parm, type, ftype, len, NULL, NULL,
@@ -5552,7 +5554,7 @@ int RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index)
case PROP_BOOLEAN:
if (len) {
if (index == -1) {
- int *tmparray = MEM_callocN(sizeof(int)*len, "reset_defaults - boolean");
+ int *tmparray = MEM_callocN(sizeof(int) * len, "reset_defaults - boolean");
RNA_property_boolean_get_default_array(ptr, prop, tmparray);
RNA_property_boolean_set_array(ptr, prop, tmparray);
@@ -5572,7 +5574,7 @@ int RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index)
case PROP_INT:
if (len) {
if (index == -1) {
- int *tmparray = MEM_callocN(sizeof(int)*len, "reset_defaults - int");
+ int *tmparray = MEM_callocN(sizeof(int) * len, "reset_defaults - int");
RNA_property_int_get_default_array(ptr, prop, tmparray);
RNA_property_int_set_array(ptr, prop, tmparray);
@@ -5592,7 +5594,7 @@ int RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index)
case PROP_FLOAT:
if (len) {
if (index == -1) {
- float *tmparray = MEM_callocN(sizeof(float)*len, "reset_defaults - float");
+ float *tmparray = MEM_callocN(sizeof(float) * len, "reset_defaults - float");
RNA_property_float_get_default_array(ptr, prop, tmparray);
RNA_property_float_set_array(ptr, prop, tmparray);
@@ -5653,7 +5655,7 @@ int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, i
case PROP_BOOLEAN:
if (len) {
if (index == -1) {
- int *tmparray = MEM_callocN(sizeof(int)*len, "copy - boolean");
+ int *tmparray = MEM_callocN(sizeof(int) * len, "copy - boolean");
RNA_property_boolean_get_array(fromptr, prop, tmparray);
RNA_property_boolean_set_array(ptr, prop, tmparray);
@@ -5673,7 +5675,7 @@ int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, i
case PROP_INT:
if (len) {
if (index == -1) {
- int *tmparray = MEM_callocN(sizeof(int)*len, "copy - int");
+ int *tmparray = MEM_callocN(sizeof(int) * len, "copy - int");
RNA_property_int_get_array(fromptr, prop, tmparray);
RNA_property_int_set_array(ptr, prop, tmparray);
@@ -5693,7 +5695,7 @@ int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, i
case PROP_FLOAT:
if (len) {
if (index == -1) {
- float *tmparray = MEM_callocN(sizeof(float)*len, "copy - float");
+ float *tmparray = MEM_callocN(sizeof(float) * len, "copy - float");
RNA_property_float_get_array(fromptr, prop, tmparray);
RNA_property_float_set_array(ptr, prop, tmparray);
diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c
index 299e1671394..5c9457bb8e2 100644
--- a/source/blender/makesrna/intern/rna_action.c
+++ b/source/blender/makesrna/intern/rna_action.c
@@ -51,12 +51,12 @@
static void rna_ActionGroup_channels_next(CollectionPropertyIterator *iter)
{
ListBaseIterator *internal = iter->internal;
- FCurve *fcu = (FCurve*)internal->link;
+ FCurve *fcu = (FCurve *)internal->link;
bActionGroup *grp = fcu->grp;
/* only continue if the next F-Curve (if existant) belongs in the same group */
if ((fcu->next) && (fcu->next->grp == grp))
- internal->link = (Link*)fcu->next;
+ internal->link = (Link *)fcu->next;
else
internal->link = NULL;
@@ -74,7 +74,7 @@ static void rna_Action_groups_remove(bAction *act, ReportList *reports, bActionG
/* try to remove the F-Curve from the action */
if (!BLI_remlink_safe(&act->groups, agrp)) {
- BKE_reportf(reports, RPT_ERROR, "ActionGroup '%s' not found in action '%s'", agrp->name, act->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "ActionGroup '%s' not found in action '%s'", agrp->name, act->id.name + 2);
return;
}
@@ -96,7 +96,7 @@ static void rna_Action_groups_remove(bAction *act, ReportList *reports, bActionG
static FCurve *rna_Action_fcurve_new(bAction *act, ReportList *reports, const char *data_path,
int index, const char *group)
{
- if (group && group[0] =='\0') group = NULL;
+ if (group && group[0] == '\0') group = NULL;
if (data_path[0] == '\0') {
BKE_report(reports, RPT_ERROR, "F-Curve data path empty, invalid argument");
@@ -106,7 +106,7 @@ static FCurve *rna_Action_fcurve_new(bAction *act, ReportList *reports, const ch
/* annoying, check if this exists */
if (verify_fcurve(act, group, data_path, index, 0)) {
BKE_reportf(reports, RPT_ERROR, "F-Curve '%s[%d]' already exists in action '%s'", data_path,
- index, act->id.name+2);
+ index, act->id.name + 2);
return NULL;
}
return verify_fcurve(act, group, data_path, index, 1);
@@ -117,7 +117,7 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, FCurve *
if (fcu->grp) {
if (BLI_findindex(&act->groups, fcu->grp) == -1) {
BKE_reportf(reports, RPT_ERROR, "F-Curve's ActionGroup '%s' not found in action '%s'",
- fcu->grp->name, act->id.name+2);
+ fcu->grp->name, act->id.name + 2);
return;
}
@@ -126,7 +126,7 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, FCurve *
}
else {
if (BLI_findindex(&act->curves, fcu) == -1) {
- BKE_reportf(reports, RPT_ERROR, "F-Curve not found in action '%s'", act->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "F-Curve not found in action '%s'", act->id.name + 2);
return;
}
@@ -148,7 +148,7 @@ static TimeMarker *rna_Action_pose_markers_new(bAction *act, const char name[])
static void rna_Action_pose_markers_remove(bAction *act, ReportList *reports, TimeMarker *marker)
{
if (!BLI_remlink_safe(&act->markers, marker)) {
- BKE_reportf(reports, RPT_ERROR, "TimelineMarker '%s' not found in Action '%s'", marker->name, act->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "TimelineMarker '%s' not found in Action '%s'", marker->name, act->id.name + 2);
return;
}
@@ -158,43 +158,43 @@ static void rna_Action_pose_markers_remove(bAction *act, ReportList *reports, Ti
static PointerRNA rna_Action_active_pose_marker_get(PointerRNA *ptr)
{
- bAction *act = (bAction*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_TimelineMarker, BLI_findlink(&act->markers, act->active_marker-1));
+ bAction *act = (bAction *)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_TimelineMarker, BLI_findlink(&act->markers, act->active_marker - 1));
}
static void rna_Action_active_pose_marker_set(PointerRNA *ptr, PointerRNA value)
{
- bAction *act = (bAction*)ptr->data;
+ bAction *act = (bAction *)ptr->data;
act->active_marker = BLI_findindex(&act->markers, value.data) + 1;
}
static int rna_Action_active_pose_marker_index_get(PointerRNA *ptr)
{
- bAction *act = (bAction*)ptr->data;
- return MAX2(act->active_marker-1, 0);
+ bAction *act = (bAction *)ptr->data;
+ return MAX2(act->active_marker - 1, 0);
}
static void rna_Action_active_pose_marker_index_set(PointerRNA *ptr, int value)
{
- bAction *act = (bAction*)ptr->data;
- act->active_marker = value+1;
+ bAction *act = (bAction *)ptr->data;
+ act->active_marker = value + 1;
}
static void rna_Action_active_pose_marker_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- bAction *act = (bAction*)ptr->data;
+ bAction *act = (bAction *)ptr->data;
*min = 0;
- *max = BLI_countlist(&act->markers)-1;
+ *max = BLI_countlist(&act->markers) - 1;
*max = MAX2(0, *max);
}
static void rna_Action_frame_range_get(PointerRNA *ptr, float *values)
-{ /* don't include modifiers because they too easily can have very large
+{ /* don't include modifiers because they too easily can have very large
* ranges: MINAFRAMEF to MAXFRAMEF. */
- calc_action_range(ptr->id.data, values, values+1, FALSE);
+ calc_action_range(ptr->id.data, values, values + 1, FALSE);
}
@@ -272,20 +272,20 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Datablock Filters",
"Show options for whether channels related to certain types of data are included");
RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, -1);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN, NULL);
/* General Filtering Settings */
prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYSEL);
RNA_def_property_ui_text(prop, "Only Selected", "Only include channels relating to selected objects and data");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_INCL_HIDDEN);
RNA_def_property_ui_text(prop, "Display Hidden", "Include channels from objects/bone that aren't visible");
RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
/* Object Group Filtering Settings */
prop = RNA_def_property(srna, "show_only_group_objects", PROP_BOOLEAN, PROP_NONE);
@@ -293,13 +293,13 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Only Objects in Group",
"Only include channels from Objects in the specified Group");
RNA_def_property_ui_icon(prop, ICON_GROUP, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "filter_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "filter_grp");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Filtering Group", "Group that included Object should be a member of");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
/* FCurve Display Name Search Settings */
prop = RNA_def_property(srna, "show_only_matching_fcurves", PROP_BOOLEAN, PROP_NONE);
@@ -307,12 +307,12 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Only Matching F-Curves",
"Only include F-Curves with names containing search text");
RNA_def_property_ui_icon(prop, ICON_VIEWZOOM, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "filter_fcurve_name", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "searchstr");
RNA_def_property_ui_text(prop, "F-Curve Name Filter", "F-Curve live filtering string");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
/* NLA Specific Settings */
prop = RNA_def_property(srna, "show_missing_nla", PROP_BOOLEAN, PROP_NONE);
@@ -320,20 +320,20 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Include Missing NLA",
"Include Animation Data blocks with no NLA data (NLA Editor only)");
RNA_def_property_ui_icon(prop, ICON_ACTION, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
/* Summary Settings (DopeSheet editors only) */
prop = RNA_def_property(srna, "show_summary", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_SUMMARY);
RNA_def_property_ui_text(prop, "Display Summary", "Display an additional 'summary' line (DopeSheet Editors only)");
RNA_def_property_ui_icon(prop, ICON_BORDERMOVE, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_expanded_summary", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ADS_FLAG_SUMMARY_COLLAPSED);
RNA_def_property_ui_text(prop, "Collapse Summary",
"Collapse summary when shown, so all other channels get hidden (DopeSheet Editors Only)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
/* General DataType Filtering Settings */
@@ -342,43 +342,43 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display Transforms",
"Include visualization of Object-level Animation data (mostly Transforms)");
RNA_def_property_ui_icon(prop, ICON_MANIPUL, 0); /* XXX? */
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_shapekeys", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSHAPEKEYS);
RNA_def_property_ui_text(prop, "Display Shapekeys", "Include visualization of ShapeKey related Animation data");
RNA_def_property_ui_icon(prop, ICON_SHAPEKEY_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_meshes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMESH);
RNA_def_property_ui_text(prop, "Display Meshes", "Include visualization of Mesh related Animation data");
RNA_def_property_ui_icon(prop, ICON_MESH_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_lattices", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOLAT);
RNA_def_property_ui_text(prop, "Display Lattices", "Include visualization of Lattice related Animation data");
RNA_def_property_ui_icon(prop, ICON_LATTICE_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_cameras", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCAM);
RNA_def_property_ui_text(prop, "Display Camera", "Include visualization of Camera related Animation data");
RNA_def_property_ui_icon(prop, ICON_CAMERA_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_materials", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMAT);
RNA_def_property_ui_text(prop, "Display Material", "Include visualization of Material related Animation data");
RNA_def_property_ui_icon(prop, ICON_MATERIAL_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_lamps", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOLAM);
RNA_def_property_ui_text(prop, "Display Lamp", "Include visualization of Lamp related Animation data");
RNA_def_property_ui_icon(prop, ICON_LAMP_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_linestyles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOLINESTYLE);
@@ -390,55 +390,55 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOTEX);
RNA_def_property_ui_text(prop, "Display Texture", "Include visualization of Texture related Animation data");
RNA_def_property_ui_icon(prop, ICON_TEXTURE_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_curves", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCUR);
RNA_def_property_ui_text(prop, "Display Curve", "Include visualization of Curve related Animation data");
RNA_def_property_ui_icon(prop, ICON_CURVE_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_worlds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOWOR);
RNA_def_property_ui_text(prop, "Display World", "Include visualization of World related Animation data");
RNA_def_property_ui_icon(prop, ICON_WORLD_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_scenes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSCE);
RNA_def_property_ui_text(prop, "Display Scene", "Include visualization of Scene related Animation data");
RNA_def_property_ui_icon(prop, ICON_SCENE_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOPART);
RNA_def_property_ui_text(prop, "Display Particle", "Include visualization of Particle related Animation data");
RNA_def_property_ui_icon(prop, ICON_PARTICLE_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_metaballs", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMBA);
RNA_def_property_ui_text(prop, "Display Metaball", "Include visualization of Metaball related Animation data");
RNA_def_property_ui_icon(prop, ICON_META_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_armatures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOARM);
RNA_def_property_ui_text(prop, "Display Armature", "Include visualization of Armature related Animation data");
RNA_def_property_ui_icon(prop, ICON_ARMATURE_DATA, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_nodes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NONTREE);
RNA_def_property_ui_text(prop, "Display Node", "Include visualization of Node related Animation data");
RNA_def_property_ui_icon(prop, ICON_NODETREE, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_speakers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSPK);
RNA_def_property_ui_text(prop, "Display Speaker", "Include visualization of Speaker related Animation data");
RNA_def_property_ui_icon(prop, ICON_SPEAKER, 0);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
}
static void rna_def_action_group(BlenderRNA *brna)
@@ -453,7 +453,7 @@ static void rna_def_action_group(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "");
RNA_def_struct_name_property(srna, prop);
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
/* WARNING: be very careful when working with this list, since the endpoint is not
* defined like a standard ListBase. Adding/removing channels from this list needs
@@ -474,22 +474,22 @@ static void rna_def_action_group(BlenderRNA *brna)
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_SELECTED);
RNA_def_property_ui_text(prop, "Select", "Action Group is selected");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_SELECTED, NULL);
prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_PROTECTED);
RNA_def_property_ui_text(prop, "Lock", "Action Group is locked");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "Action Group is expanded");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "custom_color", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "customCol");
RNA_def_property_ui_text(prop, "Custom Color", "Index of custom color set");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
}
/* fcurve.keyframe_points */
@@ -518,7 +518,7 @@ static void rna_def_action_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove action group");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "action_group", "ActionGroup", "", "Action group to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop)
@@ -549,7 +549,7 @@ static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove action group");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "fcurve", "FCurve", "", "F-Curve to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_action_pose_markers(BlenderRNA *brna, PropertyRNA *cprop)
@@ -577,7 +577,7 @@ static void rna_def_action_pose_markers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove a timeline marker");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "marker", "TimelineMarker", "", "Timeline marker to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "TimelineMarker");
diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c
index 3b89899702d..bb714043002 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -59,15 +59,16 @@ EnumPropertyItem actuator_type_items[] = {
{ACT_STATE, "STATE", 0, "State", ""},
{ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
{ACT_STEERING, "STEERING", 0, "Steering", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#include "BKE_sca.h"
-static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
+static StructRNA *rna_Actuator_refine(struct PointerRNA *ptr)
{
- bActuator *actuator = (bActuator*)ptr->data;
+ bActuator *actuator = (bActuator *)ptr->data;
switch (actuator->type) {
case ACT_ACTION:
@@ -139,185 +140,185 @@ static void rna_ConstraintActuator_type_set(struct PointerRNA *ptr, int value)
if (value != ca->type) {
ca->type = value;
switch (ca->type) {
- case ACT_CONST_TYPE_ORI:
- /* negative axis not supported in the orientation mode */
- if (ELEM3(ca->mode, ACT_CONST_DIRNX, ACT_CONST_DIRNY, ACT_CONST_DIRNZ))
- ca->mode = ACT_CONST_NONE;
- break;
-
- case ACT_CONST_TYPE_LOC:
- case ACT_CONST_TYPE_DIST:
- case ACT_CONST_TYPE_FH:
- default:
- break;
+ case ACT_CONST_TYPE_ORI:
+ /* negative axis not supported in the orientation mode */
+ if (ELEM3(ca->mode, ACT_CONST_DIRNX, ACT_CONST_DIRNY, ACT_CONST_DIRNZ))
+ ca->mode = ACT_CONST_NONE;
+ break;
+
+ case ACT_CONST_TYPE_LOC:
+ case ACT_CONST_TYPE_DIST:
+ case ACT_CONST_TYPE_FH:
+ default:
+ break;
}
}
}
static float rna_ConstraintActuator_limitmin_get(struct PointerRNA *ptr)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
if (ca->flag & ACT_CONST_LOCX) fp = ca->minloc;
- else if (ca->flag & ACT_CONST_LOCY) fp = ca->minloc+1;
- else if (ca->flag & ACT_CONST_LOCZ) fp = ca->minloc+2;
+ else if (ca->flag & ACT_CONST_LOCY) fp = ca->minloc + 1;
+ else if (ca->flag & ACT_CONST_LOCZ) fp = ca->minloc + 2;
else if (ca->flag & ACT_CONST_ROTX) fp = ca->minrot;
- else if (ca->flag & ACT_CONST_ROTY) fp = ca->minrot+1;
- else fp = ca->minrot+2;
+ else if (ca->flag & ACT_CONST_ROTY) fp = ca->minrot + 1;
+ else fp = ca->minrot + 2;
return *fp;
}
static void rna_ConstraintActuator_limitmin_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
if (ca->flag & ACT_CONST_LOCX) fp = ca->minloc;
- else if (ca->flag & ACT_CONST_LOCY) fp = ca->minloc+1;
- else if (ca->flag & ACT_CONST_LOCZ) fp = ca->minloc+2;
+ else if (ca->flag & ACT_CONST_LOCY) fp = ca->minloc + 1;
+ else if (ca->flag & ACT_CONST_LOCZ) fp = ca->minloc + 2;
else if (ca->flag & ACT_CONST_ROTX) fp = ca->minrot;
- else if (ca->flag & ACT_CONST_ROTY) fp = ca->minrot+1;
- else fp = ca->minrot+2;
+ else if (ca->flag & ACT_CONST_ROTY) fp = ca->minrot + 1;
+ else fp = ca->minrot + 2;
*fp = value;
}
static float rna_ConstraintActuator_limitmax_get(struct PointerRNA *ptr)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
if (ca->flag & ACT_CONST_LOCX) fp = ca->maxloc;
- else if (ca->flag & ACT_CONST_LOCY) fp = ca->maxloc+1;
- else if (ca->flag & ACT_CONST_LOCZ) fp = ca->maxloc+2;
+ else if (ca->flag & ACT_CONST_LOCY) fp = ca->maxloc + 1;
+ else if (ca->flag & ACT_CONST_LOCZ) fp = ca->maxloc + 2;
else if (ca->flag & ACT_CONST_ROTX) fp = ca->maxrot;
- else if (ca->flag & ACT_CONST_ROTY) fp = ca->maxrot+1;
- else fp = ca->maxrot+2;
+ else if (ca->flag & ACT_CONST_ROTY) fp = ca->maxrot + 1;
+ else fp = ca->maxrot + 2;
return *fp;
}
static void rna_ConstraintActuator_limitmax_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
if (ca->flag & ACT_CONST_LOCX) fp = ca->maxloc;
- else if (ca->flag & ACT_CONST_LOCY) fp = ca->maxloc+1;
- else if (ca->flag & ACT_CONST_LOCZ) fp = ca->maxloc+2;
+ else if (ca->flag & ACT_CONST_LOCY) fp = ca->maxloc + 1;
+ else if (ca->flag & ACT_CONST_LOCZ) fp = ca->maxloc + 2;
else if (ca->flag & ACT_CONST_ROTX) fp = ca->maxrot;
- else if (ca->flag & ACT_CONST_ROTY) fp = ca->maxrot+1;
- else fp = ca->maxrot+2;
+ else if (ca->flag & ACT_CONST_ROTY) fp = ca->maxrot + 1;
+ else fp = ca->maxrot + 2;
*fp = value;
}
static float rna_ConstraintActuator_distance_get(struct PointerRNA *ptr)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->minloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->minloc+1;
- else fp = ca->minloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->minloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->minloc + 1;
+ else fp = ca->minloc + 2;
return *fp;
}
static void rna_ConstraintActuator_distance_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->minloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->minloc+1;
- else fp = ca->minloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->minloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->minloc + 1;
+ else fp = ca->minloc + 2;
*fp = value;
}
static float rna_ConstraintActuator_range_get(struct PointerRNA *ptr)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->maxloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->maxloc+1;
- else fp = ca->maxloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->maxloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->maxloc + 1;
+ else fp = ca->maxloc + 2;
return *fp;
}
static void rna_ConstraintActuator_range_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->maxloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->maxloc+1;
- else fp = ca->maxloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->maxloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->maxloc + 1;
+ else fp = ca->maxloc + 2;
*fp = value;
}
static float rna_ConstraintActuator_fhheight_get(struct PointerRNA *ptr)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->minloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->minloc+1;
- else fp = ca->minloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->minloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->minloc + 1;
+ else fp = ca->minloc + 2;
return *fp;
}
static void rna_ConstraintActuator_fhheight_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->minloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->minloc+1;
- else fp = ca->minloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->minloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->minloc + 1;
+ else fp = ca->minloc + 2;
*fp = value;
}
static float rna_ConstraintActuator_spring_get(struct PointerRNA *ptr)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->maxloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->maxloc+1;
- else fp = ca->maxloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->maxloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->maxloc + 1;
+ else fp = ca->maxloc + 2;
return *fp;
}
static void rna_ConstraintActuator_spring_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
float *fp;
- if (ca->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp = ca->maxloc;
- else if (ca->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp = ca->maxloc+1;
- else fp = ca->maxloc+2;
+ if (ca->mode & (ACT_CONST_DIRPX | ACT_CONST_DIRNX)) fp = ca->maxloc;
+ else if (ca->mode & (ACT_CONST_DIRPY | ACT_CONST_DIRNY)) fp = ca->maxloc + 1;
+ else fp = ca->maxloc + 2;
*fp = value;
}
@@ -325,10 +326,10 @@ static void rna_ConstraintActuator_spring_set(struct PointerRNA *ptr, float valu
* Therefore we need to clear the property when "use_material_detect" mode changes */
static void rna_Actuator_constraint_detect_material_set(struct PointerRNA *ptr, int value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bConstraintActuator *ca = act->data;
- short old_value = (ca->flag & ACT_CONST_MATERIAL? 1:0);
+ short old_value = (ca->flag & ACT_CONST_MATERIAL ? 1 : 0);
if (old_value != value) {
ca->flag ^= ACT_CONST_MATERIAL;
@@ -371,51 +372,51 @@ static void rna_ObjectActuator_type_set(struct PointerRNA *ptr, int value)
if (value != oa->type) {
oa->type = value;
switch (oa->type) {
- case ACT_OBJECT_NORMAL:
- memset(oa, 0, sizeof(bObjectActuator));
- oa->flag = ACT_FORCE_LOCAL|ACT_TORQUE_LOCAL|ACT_DLOC_LOCAL|ACT_DROT_LOCAL;
- oa->type = ACT_OBJECT_NORMAL;
- break;
-
- case ACT_OBJECT_SERVO:
- memset(oa, 0, sizeof(bObjectActuator));
- oa->flag = ACT_LIN_VEL_LOCAL;
- oa->type = ACT_OBJECT_SERVO;
- oa->forcerot[0] = 30.0f;
- oa->forcerot[1] = 0.5f;
- oa->forcerot[2] = 0.0f;
- break;
+ case ACT_OBJECT_NORMAL:
+ memset(oa, 0, sizeof(bObjectActuator));
+ oa->flag = ACT_FORCE_LOCAL | ACT_TORQUE_LOCAL | ACT_DLOC_LOCAL | ACT_DROT_LOCAL;
+ oa->type = ACT_OBJECT_NORMAL;
+ break;
+
+ case ACT_OBJECT_SERVO:
+ memset(oa, 0, sizeof(bObjectActuator));
+ oa->flag = ACT_LIN_VEL_LOCAL;
+ oa->type = ACT_OBJECT_SERVO;
+ oa->forcerot[0] = 30.0f;
+ oa->forcerot[1] = 0.5f;
+ oa->forcerot[2] = 0.0f;
+ break;
}
}
}
static void rna_ObjectActuator_integralcoefficient_set(struct PointerRNA *ptr, float value)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bObjectActuator *oa = act->data;
oa->forcerot[1] = value;
- oa->forcerot[0] = 60.0f*oa->forcerot[1];
+ oa->forcerot[0] = 60.0f * oa->forcerot[1];
}
static void rna_StateActuator_state_set(PointerRNA *ptr, const int *values)
{
- bActuator *act = (bActuator*)ptr->data;
+ bActuator *act = (bActuator *)ptr->data;
bStateActuator *sa = act->data;
int i, tot = 0;
/* ensure we always have some state selected */
- for (i = 0; i<OB_MAX_STATES; i++)
+ for (i = 0; i < OB_MAX_STATES; i++)
if (values[i])
tot++;
if (tot == 0)
return;
- for (i = 0; i<OB_MAX_STATES; i++) {
- if (values[i]) sa->mask |= (1<<i);
- else sa->mask &= ~(1<<i);
+ for (i = 0; i < OB_MAX_STATES; i++) {
+ if (values[i]) sa->mask |= (1 << i);
+ else sa->mask &= ~(1 << i);
}
}
@@ -500,10 +501,10 @@ static void rna_Actuator_Armature_update(Main *UNUSED(bmain), Scene *UNUSED(scen
static void rna_SteeringActuator_navmesh_set(PointerRNA *ptr, PointerRNA value)
{
- bActuator *act = (bActuator*)ptr->data;
- bSteeringActuator *sa = (bSteeringActuator*) act->data;
+ bActuator *act = (bActuator *)ptr->data;
+ bSteeringActuator *sa = (bSteeringActuator *) act->data;
- Object* obj = value.data;
+ Object *obj = value.data;
if (obj && obj->body_type == OB_BODY_TYPE_NAVMESH)
sa->navmesh = obj;
else
@@ -579,7 +580,8 @@ static void rna_def_action_actuator(BlenderRNA *brna)
#ifdef __NLA_ACTION_BY_MOTION_ACTUATOR
{ACT_ACTION_MOTION, "MOTION", 0, "Displacement", ""},
#endif
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ActionActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Action Actuator", "Actuator to control the object movement");
@@ -691,12 +693,13 @@ static void rna_def_action_actuator(BlenderRNA *brna)
static void rna_def_object_actuator(BlenderRNA *brna)
{
StructRNA *srna;
- PropertyRNA* prop;
+ PropertyRNA *prop;
static EnumPropertyItem prop_type_items[] = {
{ACT_OBJECT_NORMAL, "OBJECT_NORMAL", 0, "Simple Motion", ""},
{ACT_OBJECT_SERVO, "OBJECT_SERVO", 0, "Servo Control", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ObjectActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Motion Actuator", "Actuator to control the object movement");
@@ -887,7 +890,8 @@ static void rna_def_camera_actuator(BlenderRNA *brna)
{OB_POSY, "POS_Y", 0, "+Y", "Camera tries to get behind the Y axis"},
{OB_NEGX, "NEG_X", 0, "-X", "Camera tries to get behind the -X axis"},
{OB_NEGY, "NEG_Y", 0, "-Y", "Camera tries to get behind the -Y axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "CameraActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Camera Actuator", "");
@@ -1310,15 +1314,17 @@ static void rna_def_edit_object_actuator(BlenderRNA *brna)
{ACT_EDOB_ENABLE_RB, "ENABLERIGIDBODY", 0, "Enable Rigid Body", ""},
{ACT_EDOB_DISABLE_RB, "DISABLERIGIDBODY", 0, "Disable Rigid Body", ""},
{ACT_EDOB_SET_MASS, "SETMASS", 0, "Set Mass", ""},
- {0, NULL, 0, NULL, NULL} };
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_type_items[] = {
- {ACT_EDOB_ADD_OBJECT, "ADDOBJECT", 0, "Add Object", ""},
- {ACT_EDOB_END_OBJECT, "ENDOBJECT", 0, "End Object", ""},
- {ACT_EDOB_REPLACE_MESH, "REPLACEMESH", 0, "Replace Mesh", ""},
- {ACT_EDOB_TRACK_TO, "TRACKTO", 0, "Track to", ""},
- {ACT_EDOB_DYNAMICS, "DYNAMICS", 0, "Dynamics", ""},
- {0, NULL, 0, NULL, NULL} };
+ {ACT_EDOB_ADD_OBJECT, "ADDOBJECT", 0, "Add Object", ""},
+ {ACT_EDOB_END_OBJECT, "ENDOBJECT", 0, "End Object", ""},
+ {ACT_EDOB_REPLACE_MESH, "REPLACEMESH", 0, "Replace Mesh", ""},
+ {ACT_EDOB_TRACK_TO, "TRACKTO", 0, "Track to", ""},
+ {ACT_EDOB_DYNAMICS, "DYNAMICS", 0, "Dynamics", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "EditObjectActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Edit Object Actuator", "Actuator used to edit objects");
@@ -1427,7 +1433,8 @@ static void rna_def_scene_actuator(BlenderRNA *brna)
{ACT_SCENE_REMOVE, "REMOVE", 0, "Remove Scene", ""},
{ACT_SCENE_SUSPEND, "SUSPEND", 0, "Suspend Scene", ""},
{ACT_SCENE_RESUME, "RESUME", 0, "Resume Scene", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SceneActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Scene Actuator", "");
@@ -1469,7 +1476,8 @@ static void rna_def_random_actuator(BlenderRNA *brna)
{ACT_RANDOM_FLOAT_UNIFORM, "FLOAT_UNIFORM", 0, "Float Uniform", ""},
{ACT_RANDOM_FLOAT_NORMAL, "FLOAT_NORMAL", 0, "Float Normal", ""},
{ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "FLOAT_NEGATIVE_EXPONENTIAL", 0, "Float Neg. Exp.", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "RandomActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Random Actuator", "");
@@ -1588,7 +1596,8 @@ static void rna_def_message_actuator(BlenderRNA *brna)
static EnumPropertyItem prop_body_type_items[] = {
{ACT_MESG_MESG, "TEXT", 0, "Text", ""},
{ACT_MESG_PROP, "PROPERTY", 0, "Property", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MessageActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Message Actuator", "");
@@ -1638,7 +1647,8 @@ static void rna_def_game_actuator(BlenderRNA *brna)
{ACT_GAME_QUIT, "QUIT", 0, "Quit Game", ""},
{ACT_GAME_SAVECFG, "SAVECFG", 0, "Save bge.logic.globalDict", ""},
{ACT_GAME_LOADCFG, "LOADCFG", 0, "Load bge.logic.globalDict", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "GameActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Game Actuator", "");
@@ -1711,7 +1721,8 @@ static void rna_def_twodfilter_actuator(BlenderRNA *brna)
{ACT_2DFILTER_INVERT, "INVERT", 0, "Invert", ""},
{ACT_2DFILTER_CUSTOMFILTER, "CUSTOMFILTER", 0, "Custom Filter", ""},
/* {ACT_2DFILTER_NUMBER_OF_FILTERS, "", 0, "Do not use it. Sentinel", ""}, */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Filter2DActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Filter 2D Actuator", "Actuator to apply screen graphic effects");
@@ -1757,7 +1768,8 @@ static void rna_def_parent_actuator(BlenderRNA *brna)
static EnumPropertyItem prop_type_items[] = {
{ACT_PARENT_SET, "SETPARENT", 0, "Set Parent", ""},
{ACT_PARENT_REMOVE, "REMOVEPARENT", 0, "Remove Parent", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ParentActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Parent Actuator", "");
@@ -1805,7 +1817,8 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
#ifdef __NLA_ACTION_BY_MOTION_ACTUATOR
{ACT_ACTION_MOTION, "MOTION", 0, "Displacement", ""},
#endif
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ShapeActionActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Shape Action Actuator", "Actuator to control shape key animations");
@@ -1886,7 +1899,8 @@ static void rna_def_state_actuator(BlenderRNA *brna)
{ACT_STATE_ADD, "ADD", 0, "Add State", ""},
{ACT_STATE_REMOVE, "REMOVE", 0, "Remove State", ""},
{ACT_STATE_CHANGE, "CHANGE", 0, "Change State", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "StateActuator", "Actuator");
RNA_def_struct_ui_text(srna, "State Actuator", "Actuator to handle states");
@@ -1908,7 +1922,7 @@ static void rna_def_state_actuator(BlenderRNA *brna)
static void rna_def_armature_actuator(BlenderRNA *brna)
{
StructRNA *srna;
- PropertyRNA* prop;
+ PropertyRNA *prop;
static EnumPropertyItem prop_type_items[] = {
{ACT_ARM_RUN, "RUN", 0, "Run Armature", ""},
@@ -1917,7 +1931,8 @@ static void rna_def_armature_actuator(BlenderRNA *brna)
{ACT_ARM_SETTARGET, "SETTARGET", 0, "Set Target", ""},
{ACT_ARM_SETWEIGHT, "SETWEIGHT", 0, "Set Weight", ""},
{ACT_ARM_SETINFLUENCE, "SETINFLUENCE", 0, "Set Influence", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ArmatureActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Armature Actuator", "");
@@ -1976,7 +1991,8 @@ static void rna_def_steering_actuator(BlenderRNA *brna)
{ACT_STEERING_SEEK, "SEEK", 0, "Seek", ""},
{ACT_STEERING_FLEE, "FLEE", 0, "Flee", ""},
{ACT_STEERING_PATHFOLLOWING, "PATHFOLLOWING", 0, "Path following", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem facingaxis_items[] = {
{1, "X", 0, "X", ""},
@@ -1985,7 +2001,8 @@ static void rna_def_steering_actuator(BlenderRNA *brna)
{4, "NEG_X", 0, "-X", ""},
{5, "NEG_Y", 0, "-Y", ""},
{6, "NEG_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SteeringActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Steering Actuator", "");
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c
index 7f52456355c..459482063b1 100644
--- a/source/blender/makesrna/intern/rna_animation.c
+++ b/source/blender/makesrna/intern/rna_animation.c
@@ -48,7 +48,8 @@ EnumPropertyItem keyingset_path_grouping_items[] = {
{KSP_GROUP_NAMED, "NAMED", 0, "Named Group", ""},
{KSP_GROUP_NONE, "NONE", 0, "None", ""},
{KSP_GROUP_KSNAME, "KEYINGSET", 0, "Keying Set Name", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -92,6 +93,7 @@ static int RKS_POLL_rna_internal(KeyingSetInfo *ksi, bContext *C)
func = &rna_KeyingSetInfo_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
RNA_parameter_list_create(&list, &ptr, func);
+ {
/* hook up arguments */
RNA_parameter_set_lookup(&list, "ksi", &ksi);
RNA_parameter_set_lookup(&list, "context", &C);
@@ -101,7 +103,8 @@ static int RKS_POLL_rna_internal(KeyingSetInfo *ksi, bContext *C)
/* read the result */
RNA_parameter_get_lookup(&list, "ok", &ret);
- ok = *(int*)ret;
+ ok = *(int *)ret;
+ }
RNA_parameter_list_free(&list);
return ok;
@@ -120,6 +123,7 @@ static void RKS_ITER_rna_internal(KeyingSetInfo *ksi, bContext *C, KeyingSet *ks
func = &rna_KeyingSetInfo_iterator_func; /* RNA_struct_find_function(&ptr, "poll"); */
RNA_parameter_list_create(&list, &ptr, func);
+ {
/* hook up arguments */
RNA_parameter_set_lookup(&list, "ksi", &ksi);
RNA_parameter_set_lookup(&list, "context", &C);
@@ -127,6 +131,7 @@ static void RKS_ITER_rna_internal(KeyingSetInfo *ksi, bContext *C, KeyingSet *ks
/* execute the function */
ksi->ext.call(C, &ptr, func, &list);
+ }
RNA_parameter_list_free(&list);
}
@@ -143,6 +148,7 @@ static void RKS_GEN_rna_internal(KeyingSetInfo *ksi, bContext *C, KeyingSet *ks,
func = &rna_KeyingSetInfo_generate_func; /* RNA_struct_find_generate(&ptr, "poll"); */
RNA_parameter_list_create(&list, &ptr, func);
+ {
/* hook up arguments */
RNA_parameter_set_lookup(&list, "ksi", &ksi);
RNA_parameter_set_lookup(&list, "context", &C);
@@ -151,6 +157,7 @@ static void RKS_GEN_rna_internal(KeyingSetInfo *ksi, bContext *C, KeyingSet *ks,
/* execute the function */
ksi->ext.call(C, &ptr, func, &list);
+ }
RNA_parameter_list_free(&list);
}
@@ -160,7 +167,7 @@ static void RKS_GEN_rna_internal(KeyingSetInfo *ksi, bContext *C, KeyingSet *ks,
static StructRNA *rna_KeyingSetInfo_refine(PointerRNA *ptr)
{
KeyingSetInfo *ksi = (KeyingSetInfo *)ptr->data;
- return (ksi->ext.srna)? ksi->ext.srna: &RNA_KeyingSetInfo;
+ return (ksi->ext.srna) ? ksi->ext.srna : &RNA_KeyingSetInfo;
}
static void rna_KeyingSetInfo_unregister(Main *bmain, StructRNA *type)
@@ -218,9 +225,9 @@ static StructRNA *rna_KeyingSetInfo_register(Main *bmain, ReportList *reports, v
/* set callbacks */
/* NOTE: we really should have all of these... */
- ksi->poll = (have_function[0])? RKS_POLL_rna_internal: NULL;
- ksi->iter = (have_function[1])? RKS_ITER_rna_internal: NULL;
- ksi->generate = (have_function[2])? RKS_GEN_rna_internal: NULL;
+ ksi->poll = (have_function[0]) ? RKS_POLL_rna_internal : NULL;
+ ksi->iter = (have_function[1]) ? RKS_ITER_rna_internal : NULL;
+ ksi->generate = (have_function[2]) ? RKS_GEN_rna_internal : NULL;
/* add and register with other info as needed */
ANIM_keyingset_info_register(ksi);
@@ -233,19 +240,19 @@ static StructRNA *rna_KeyingSetInfo_register(Main *bmain, ReportList *reports, v
static StructRNA *rna_ksPath_id_typef(PointerRNA *ptr)
{
- KS_Path *ksp = (KS_Path*)ptr->data;
+ KS_Path *ksp = (KS_Path *)ptr->data;
return ID_code_to_RNA_type(ksp->idtype);
}
static int rna_ksPath_id_editable(PointerRNA *ptr)
{
- KS_Path *ksp = (KS_Path*)ptr->data;
- return (ksp->idtype)? PROP_EDITABLE : 0;
+ KS_Path *ksp = (KS_Path *)ptr->data;
+ return (ksp->idtype) ? PROP_EDITABLE : 0;
}
static void rna_ksPath_id_type_set(PointerRNA *ptr, int value)
{
- KS_Path *data = (KS_Path*)(ptr->data);
+ KS_Path *data = (KS_Path *)(ptr->data);
/* set the driver type, then clear the id-block if the type is invalid */
data->idtype = value;
@@ -299,26 +306,26 @@ static int rna_KeyingSet_active_ksPath_editable(PointerRNA *ptr)
static PointerRNA rna_KeyingSet_active_ksPath_get(PointerRNA *ptr)
{
KeyingSet *ks = (KeyingSet *)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_KeyingSetPath, BLI_findlink(&ks->paths, ks->active_path-1));
+ return rna_pointer_inherit_refine(ptr, &RNA_KeyingSetPath, BLI_findlink(&ks->paths, ks->active_path - 1));
}
static void rna_KeyingSet_active_ksPath_set(PointerRNA *ptr, PointerRNA value)
{
KeyingSet *ks = (KeyingSet *)ptr->data;
- KS_Path *ksp = (KS_Path*)value.data;
+ KS_Path *ksp = (KS_Path *)value.data;
ks->active_path = BLI_findindex(&ks->paths, ksp) + 1;
}
static int rna_KeyingSet_active_ksPath_index_get(PointerRNA *ptr)
{
KeyingSet *ks = (KeyingSet *)ptr->data;
- return MAX2(ks->active_path-1, 0);
+ return MAX2(ks->active_path - 1, 0);
}
static void rna_KeyingSet_active_ksPath_index_set(PointerRNA *ptr, int value)
{
KeyingSet *ks = (KeyingSet *)ptr->data;
- ks->active_path = value+1;
+ ks->active_path = value + 1;
}
static void rna_KeyingSet_active_ksPath_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
@@ -326,7 +333,7 @@ static void rna_KeyingSet_active_ksPath_index_range(PointerRNA *ptr, int *min, i
KeyingSet *ks = (KeyingSet *)ptr->data;
*min = 0;
- *max = BLI_countlist(&ks->paths)-1;
+ *max = BLI_countlist(&ks->paths) - 1;
*max = MAX2(0, *max);
}
@@ -344,7 +351,7 @@ static PointerRNA rna_KeyingSet_typeinfo_get(PointerRNA *ptr)
static KS_Path *rna_KeyingSet_paths_add(KeyingSet *keyingset, ReportList *reports,
- ID *id, const char rna_path[], int index, int group_method, const char group_name[])
+ ID *id, const char rna_path[], int index, int group_method, const char group_name[])
{
KS_Path *ksp = NULL;
short flag = 0;
@@ -409,7 +416,7 @@ static NlaTrack *rna_NlaTrack_new(AnimData *adt, bContext *C, NlaTrack *track)
{
NlaTrack *new_track = add_nlatrack(adt, track);
- WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_ADDED, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_ADDED, NULL);
return new_track;
}
@@ -418,20 +425,20 @@ static void rna_NlaTrack_remove(AnimData *adt, bContext *C, NlaTrack *track)
{
free_nlatrack(&adt->nla_tracks, track);
- WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_REMOVED, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_REMOVED, NULL);
}
static PointerRNA rna_NlaTrack_active_get(PointerRNA *ptr)
{
- AnimData *adt = (AnimData*)ptr->data;
+ AnimData *adt = (AnimData *)ptr->data;
NlaTrack *track = BKE_nlatrack_find_active(&adt->nla_tracks);
return rna_pointer_inherit_refine(ptr, &RNA_NlaTrack, track);
}
static void rna_NlaTrack_active_set(PointerRNA *ptr, PointerRNA value)
{
- AnimData *adt = (AnimData*)ptr->data;
- NlaTrack *track = (NlaTrack*)value.data;
+ AnimData *adt = (AnimData *)ptr->data;
+ NlaTrack *track = (NlaTrack *)value.data;
BKE_nlatrack_set_active(&adt->nla_tracks, track);
}
@@ -461,29 +468,31 @@ static void rna_def_common_keying_flags(StructRNA *srna, short reg)
PropertyRNA *prop;
static EnumPropertyItem keying_flag_items[] = {
- {INSERTKEY_NEEDED, "INSERTKEY_NEEDED", 0, "Insert Keyframes - Only Needed",
- "Only insert keyframes where they're needed in the relevant F-Curves"},
- {INSERTKEY_MATRIX, "INSERTKEY_VISUAL", 0, "Insert Keyframes - Visual",
- "Insert keyframes based on 'visual transforms'"},
- {INSERTKEY_XYZ2RGB, "INSERTKEY_XYZ_TO_RGB", 0, "F-Curve Colors - XYZ to RGB",
- "Color for newly added transformation F-Curves (Location, Rotation, Scale) "
- "and also Color is based on the transform axis"},
- {0, NULL, 0, NULL, NULL}};
+ {INSERTKEY_NEEDED, "INSERTKEY_NEEDED", 0, "Only Needed",
+ "Only insert keyframes where they're needed in the relevant F-Curves"},
+ {INSERTKEY_MATRIX, "INSERTKEY_VISUAL", 0, "Visual Keying",
+ "Insert keyframes based on 'visual transforms'"},
+ {INSERTKEY_XYZ2RGB, "INSERTKEY_XYZ_TO_RGB", 0, "XYZ=RGB Colors",
+ "Color for newly added transformation F-Curves (Location, Rotation, Scale) "
+ "and also Color is based on the transform axis"},
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "keyingflag");
RNA_def_property_enum_items(prop, keying_flag_items);
- RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL|PROP_ENUM_FLAG);
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
RNA_def_property_ui_text(prop, "Options", "Keying set options");
}
/* --- */
/* To avoid repeating it twice! */
-#define KEYINGSET_IDNAME_DOC "If this is set, the Keying Set gets a custom ID, otherwise it takes " \
- "the name of the class used to define the Keying Set (for example, " \
- "if the class name is \"BUILTIN_KSI_location\", and bl_idname is not " \
- "set by the script, then bl_idname = \"BUILTIN_KSI_location\")"
+#define KEYINGSET_IDNAME_DOC \
+ "If this is set, the Keying Set gets a custom ID, otherwise it takes " \
+ "the name of the class used to define the Keying Set (for example, " \
+ "if the class name is \"BUILTIN_KSI_location\", and bl_idname is not " \
+ "set by the script, then bl_idname = \"BUILTIN_KSI_location\")"
static void rna_def_keyingset_info(BlenderRNA *brna)
@@ -505,7 +514,7 @@ static void rna_def_keyingset_info(BlenderRNA *brna)
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "idname");
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_property_ui_text(prop, "ID Name", KEYINGSET_IDNAME_DOC);
prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
@@ -525,7 +534,7 @@ static void rna_def_keyingset_info(BlenderRNA *brna)
RNA_define_verify_sdna(1);
/* Function Callbacks ------------- */
- /* poll */
+ /* poll */
func = RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "Test if Keying Set can be used or not");
RNA_def_function_flag(func, FUNC_REGISTER);
@@ -533,7 +542,7 @@ static void rna_def_keyingset_info(BlenderRNA *brna)
parm = RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
- /* iterator */
+ /* iterator */
func = RNA_def_function(srna, "iterator", NULL);
RNA_def_function_ui_description(func, "Call generate() on the structs which have properties to be keyframed");
RNA_def_function_flag(func, FUNC_REGISTER);
@@ -542,7 +551,7 @@ static void rna_def_keyingset_info(BlenderRNA *brna)
parm = RNA_def_pointer(func, "ks", "KeyingSet", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
- /* generate */
+ /* generate */
func = RNA_def_function(srna, "generate", NULL);
RNA_def_function_ui_description(func, "Add Paths to the Keying Set to keyframe the properties of the given data");
RNA_def_function_flag(func, FUNC_REGISTER);
@@ -551,7 +560,7 @@ static void rna_def_keyingset_info(BlenderRNA *brna)
parm = RNA_def_pointer(func, "ks", "KeyingSet", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_pointer(func, "data", "AnyType", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
}
static void rna_def_keyingset_path(BlenderRNA *brna)
@@ -572,7 +581,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "ID-Block",
"ID-Block that keyframes for Keying Set should be added to "
"(for Absolute Keying Sets only)");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
prop = RNA_def_property(srna, "id_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "idtype");
@@ -580,19 +589,19 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_enum_default(prop, ID_OB);
RNA_def_property_enum_funcs(prop, NULL, "rna_ksPath_id_type_set", NULL);
RNA_def_property_ui_text(prop, "ID Type", "Type of ID-block that can be used");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
/* Group */
prop = RNA_def_property(srna, "group", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Group Name", "Name of Action Group to assign setting(s) for this path to");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
/* Grouping */
prop = RNA_def_property(srna, "group_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "groupmode");
RNA_def_property_enum_items(prop, keyingset_path_grouping_items);
RNA_def_property_ui_text(prop, "Grouping Method", "Method used to define which Group-name to use");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
/* Path + Array Index */
prop = RNA_def_property(srna, "data_path", PROP_STRING, PROP_NONE);
@@ -600,12 +609,12 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
"rna_ksPath_RnaPath_set");
RNA_def_property_ui_text(prop, "Data Path", "Path to property setting");
RNA_def_struct_name_property(srna, prop); /* XXX this is the best indicator for now... */
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL);
/* called 'index' when given as function arg */
prop = RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific setting if applicable");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
/* Flags */
prop = RNA_def_property(srna, "use_entire_array", PROP_BOOLEAN, PROP_NONE);
@@ -613,7 +622,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Entire Array",
"When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), "
"entire array is to be used");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_EDITED, NULL); /* XXX: maybe a bit too noisy */
/* Keyframing Settings */
rna_def_common_keying_flags(srna, 0);
@@ -640,21 +649,21 @@ static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "add", "rna_KeyingSet_paths_add");
RNA_def_function_ui_description(func, "Add a new path for the Keying Set");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
- /* return arg */
+ /* return arg */
parm = RNA_def_pointer(func, "ksp", "KeyingSetPath", "New Path", "Path created and added to the Keying Set");
- RNA_def_function_return(func, parm);
- /* ID-block for target */
+ RNA_def_function_return(func, parm);
+ /* ID-block for target */
parm = RNA_def_pointer(func, "target_id", "ID", "Target ID", "ID-Datablock for the destination");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- /* rna-path */
- /* XXX hopefully this is long enough */
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ /* rna-path */
+ /* XXX hopefully this is long enough */
parm = RNA_def_string(func, "data_path", "", 256, "Data-Path", "RNA-Path to destination property");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- /* index (defaults to -1 for entire array) */
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ /* index (defaults to -1 for entire array) */
RNA_def_int(func, "index", -1, -1, INT_MAX, "Index",
"The index of the destination property (i.e. axis of Location/Rotation/etc.), "
"or -1 for the entire array", 0, INT_MAX);
- /* grouping */
+ /* grouping */
RNA_def_enum(func, "group_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME,
"Grouping Method", "Method used to define which Group-name to use");
RNA_def_string(func, "group_name", "", 64, "Group Name",
@@ -665,9 +674,9 @@ static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_KeyingSet_paths_remove");
RNA_def_function_ui_description(func, "Remove the given path from the Keying Set");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
- /* path to remove */
+ /* path to remove */
parm = RNA_def_pointer(func, "path", "KeyingSetPath", "Path", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* Remove All Paths */
@@ -701,9 +710,9 @@ static void rna_def_keyingset(BlenderRNA *brna)
/* Id/Label. */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "idname");
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_property_ui_text(prop, "ID Name", KEYINGSET_IDNAME_DOC);
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET|NA_RENAME, NULL);
+ RNA_def_property_update(prop, NC_SCENE | ND_KEYINGSET | NA_RENAME, NULL);
prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
@@ -775,7 +784,7 @@ static void rna_api_animdata_nla_tracks(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
RNA_def_function_ui_description(func, "Remove a NLA Track");
parm = RNA_def_pointer(func, "track", "NlaTrack", "", "NLA Track to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "NlaTrack");
@@ -783,7 +792,7 @@ static void rna_api_animdata_nla_tracks(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Constraint", "Active Object constraint");
/* XXX: should (but doesn't) update the active track in the NLA window */
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA | NA_SELECTED, NULL);
}
static void rna_api_animdata_drivers(BlenderRNA *brna, PropertyRNA *cprop)
@@ -836,8 +845,8 @@ void rna_def_animdata(BlenderRNA *brna)
/* Active Action */
prop = RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
- /* this flag as well as the dynamic test must be defined for this to be editable... */
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_REFCOUNT);
+ /* this flag as well as the dynamic test must be defined for this to be editable... */
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
RNA_def_property_pointer_funcs(prop, NULL, "rna_AnimData_action_set", NULL, "rna_Action_id_poll");
RNA_def_property_editable_func(prop, "rna_AnimData_action_editable");
RNA_def_property_ui_text(prop, "Action", "Active Action for this datablock");
@@ -849,14 +858,14 @@ void rna_def_animdata(BlenderRNA *brna)
RNA_def_property_enum_items(prop, nla_mode_extend_items);
RNA_def_property_ui_text(prop, "Action Extrapolation",
"Action to take for gaps past the Active Action's range (when evaluating with NLA)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "action_blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "act_blendmode");
RNA_def_property_enum_items(prop, nla_mode_blend_items);
RNA_def_property_ui_text(prop, "Action Blending",
"Method used for combining Active Action's result with result of NLA stack");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "action_influence", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "act_influence");
@@ -864,7 +873,7 @@ void rna_def_animdata(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Action Influence",
"Amount the Active Action contributes to the result of the NLA stack");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Drivers */
prop = RNA_def_property(srna, "drivers", PROP_COLLECTION, PROP_NONE);
@@ -878,7 +887,7 @@ void rna_def_animdata(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_nla", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ADT_NLA_EVAL_OFF);
RNA_def_property_ui_text(prop, "NLA Evaluation Enabled", "NLA stack is evaluated when evaluating this block");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
}
/* --- */
diff --git a/source/blender/makesrna/intern/rna_animation_api.c b/source/blender/makesrna/intern/rna_animation_api.c
index c3c4a1355fd..32472c8d415 100644
--- a/source/blender/makesrna/intern/rna_animation_api.c
+++ b/source/blender/makesrna/intern/rna_animation_api.c
@@ -77,7 +77,7 @@ void RNA_api_keyingset(StructRNA *srna)
RNA_def_function_ui_description(func,
"Refresh Keying Set to ensure that it is valid for the current context "
"(call before each use of one)");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
}
#endif
diff --git a/source/blender/makesrna/intern/rna_animviz.c b/source/blender/makesrna/intern/rna_animviz.c
index 167eb23c023..990d7c43309 100644
--- a/source/blender/makesrna/intern/rna_animviz.c
+++ b/source/blender/makesrna/intern/rna_animviz.c
@@ -45,7 +45,8 @@ EnumPropertyItem motionpath_bake_location_items[] = {
{MOTIONPATH_BAKE_HEADS, "HEADS", 0, "Heads", "Calculate bone paths from heads"},
{0, "TAILS", 0, "Tails", "Calculate bone paths from tails"},
//{MOTIONPATH_BAKE_CENTERS, "CENTROID", 0, "Centers", "Calculate bone paths from center of mass"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -61,7 +62,7 @@ static PointerRNA rna_AnimViz_motion_paths_get(PointerRNA *ptr)
static void rna_AnimViz_ghost_start_frame_set(PointerRNA *ptr, int value)
{
- bAnimVizSettings *data = (bAnimVizSettings*)ptr->data;
+ bAnimVizSettings *data = (bAnimVizSettings *)ptr->data;
CLAMP(value, 1, data->ghost_ef);
data->ghost_sf = value;
@@ -69,26 +70,26 @@ static void rna_AnimViz_ghost_start_frame_set(PointerRNA *ptr, int value)
static void rna_AnimViz_ghost_end_frame_set(PointerRNA *ptr, int value)
{
- bAnimVizSettings *data = (bAnimVizSettings*)ptr->data;
+ bAnimVizSettings *data = (bAnimVizSettings *)ptr->data;
- CLAMP(value, data->ghost_sf, (int)(MAXFRAMEF/2));
+ CLAMP(value, data->ghost_sf, (int)(MAXFRAMEF / 2));
data->ghost_ef = value;
}
static void rna_AnimViz_path_start_frame_set(PointerRNA *ptr, int value)
{
- bAnimVizSettings *data = (bAnimVizSettings*)ptr->data;
+ bAnimVizSettings *data = (bAnimVizSettings *)ptr->data;
- CLAMP(value, 1, data->path_ef-1);
+ CLAMP(value, 1, data->path_ef - 1);
data->path_sf = value;
}
static void rna_AnimViz_path_end_frame_set(PointerRNA *ptr, int value)
{
- bAnimVizSettings *data = (bAnimVizSettings*)ptr->data;
+ bAnimVizSettings *data = (bAnimVizSettings *)ptr->data;
/* XXX: watchit! Path Start > MAXFRAME/2 could be a problem... */
- CLAMP(value, data->path_sf+1, (int)(MAXFRAMEF/2));
+ CLAMP(value, data->path_sf + 1, (int)(MAXFRAMEF / 2));
data->path_ef = value;
}
@@ -175,7 +176,8 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
{GHOST_TYPE_ACFRA, "CURRENT_FRAME", 0, "Around Current Frame", "Show ghosts from around the current frame"},
{GHOST_TYPE_RANGE, "RANGE", 0, "In Range", "Show ghosts for the specified frame range"},
{GHOST_TYPE_KEYS, "KEYS", 0, "On Keyframes", "Show ghosts on keyframes"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "AnimVizOnionSkinning", NULL);
@@ -188,21 +190,21 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "ghost_type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Type", "Method used for determining what ghosts get drawn");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Settings */
prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ghost_flag", GHOST_FLAG_ONLYSEL);
RNA_def_property_ui_text(prop, "On Selected Bones Only",
"For Pose-Mode drawing, only draw ghosts for selected bones");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "frame_step", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ghost_step");
RNA_def_property_range(prop, 1, 20);
RNA_def_property_ui_text(prop, "Frame Step",
"Number of frames between ghosts shown (not for 'On Keyframes' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Playback Ranges */
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
@@ -211,7 +213,7 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Start Frame",
"Starting frame of range of Ghosts to display "
"(not for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "ghost_ef");
@@ -219,7 +221,7 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End Frame",
"End frame of range of Ghosts to display "
"(not for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Around Current Ranges */
prop = RNA_def_property(srna, "frame_before", PROP_INT, PROP_TIME);
@@ -228,7 +230,7 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Before Current",
"Number of frames to show before the current frame "
"(only for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "frame_after", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "ghost_ac");
@@ -236,7 +238,7 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "After Current",
"Number of frames to show after the current frame "
"(only for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
}
static void rna_def_animviz_paths(BlenderRNA *brna)
@@ -246,9 +248,10 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
static const EnumPropertyItem prop_type_items[] = {
{MOTIONPATH_TYPE_ACFRA, "CURRENT_FRAME", 0, "Around Frame",
- "Display Paths of poses within a fixed number of frames around the current frame"},
+ "Display Paths of poses within a fixed number of frames around the current frame"},
{MOTIONPATH_TYPE_RANGE, "RANGE", 0, "In Range", "Display Paths of poses within specified range"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "AnimVizMotionPaths", NULL);
RNA_def_struct_sdna(srna, "bAnimVizSettings");
@@ -260,43 +263,43 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "path_type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Paths Type", "Type of range to show for Motion Paths");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "bake_location", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "path_bakeflag");
RNA_def_property_enum_items(prop, motionpath_bake_location_items);
RNA_def_property_ui_text(prop, "Bake Location", "When calculating Bone Paths, use Head or Tips");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Settings */
prop = RNA_def_property(srna, "show_frame_numbers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_FNUMS);
RNA_def_property_ui_text(prop, "Show Frame Numbers", "Show frame numbers on Motion Paths");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "show_keyframe_highlight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_KFRAS);
RNA_def_property_ui_text(prop, "Highlight Keyframes", "Emphasize position of keyframes on Motion Paths");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "show_keyframe_numbers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_KFNOS);
RNA_def_property_ui_text(prop, "Show Keyframe Numbers", "Show frame numbers of Keyframes on Motion Paths");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "show_keyframe_action_all", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_KFACT);
RNA_def_property_ui_text(prop, "All Action Keyframes",
"For bone motion paths, search whole Action for keyframes instead of in group"
" with matching name only (is slower)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "frame_step", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "path_step");
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Frame Step",
"Number of frames between paths shown (not for 'On Keyframes' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Playback Ranges */
@@ -306,7 +309,7 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Start Frame",
"Starting frame of range of paths to display/calculate "
"(not for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "path_ef");
@@ -314,24 +317,24 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End Frame",
"End frame of range of paths to display/calculate "
"(not for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Around Current Ranges */
prop = RNA_def_property(srna, "frame_before", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "path_bc");
- RNA_def_property_range(prop, 1, MAXFRAMEF/2);
+ RNA_def_property_range(prop, 1, MAXFRAMEF / 2);
RNA_def_property_ui_text(prop, "Before Current",
"Number of frames to show before the current frame "
"(only for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
prop = RNA_def_property(srna, "frame_after", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "path_ac");
- RNA_def_property_range(prop, 1, MAXFRAMEF/2);
+ RNA_def_property_range(prop, 1, MAXFRAMEF / 2);
RNA_def_property_ui_text(prop, "After Current",
"Number of frames to show after the current frame "
"(only for 'Around Current Frame' Onion-skinning method)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
}
/* --- */
@@ -375,8 +378,8 @@ static void rna_def_animviz(BlenderRNA *brna)
void RNA_def_animviz(BlenderRNA *brna)
{
rna_def_animviz(brna);
- rna_def_animviz_ghosts(brna);
- rna_def_animviz_paths(brna);
+ rna_def_animviz_ghosts(brna);
+ rna_def_animviz_paths(brna);
rna_def_animviz_motion_path(brna);
rna_def_animviz_motionpath_vert(brna);
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index c97a4751135..f3742687fc5 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -55,14 +55,14 @@ static void rna_Armature_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene),
ID *id = ptr->id.data;
DAG_id_tag_update(id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, id);
/*WM_main_add_notifier(NC_OBJECT|ND_POSE, NULL); */
}
static void rna_Armature_act_bone_set(PointerRNA *ptr, PointerRNA value)
{
- bArmature *arm = (bArmature*)ptr->data;
+ bArmature *arm = (bArmature *)ptr->data;
if (value.id.data == NULL && value.data == NULL) {
arm->act_bone = NULL;
@@ -84,7 +84,7 @@ static void rna_Armature_act_bone_set(PointerRNA *ptr, PointerRNA value)
static void rna_Armature_act_edit_bone_set(PointerRNA *ptr, PointerRNA value)
{
- bArmature *arm = (bArmature*)ptr->data;
+ bArmature *arm = (bArmature *)ptr->data;
if (value.id.data == NULL && value.data == NULL) {
arm->act_edbone = NULL;
@@ -103,7 +103,7 @@ static void rna_Armature_act_edit_bone_set(PointerRNA *ptr, PointerRNA value)
EditBone *rna_Armature_edit_bone_new(bArmature *arm, ReportList *reports, const char *name)
{
if (arm->edbo == NULL) {
- BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in editmode, cant add an editbone", arm->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in editmode, cant add an editbone", arm->id.name + 2);
return NULL;
}
return ED_armature_edit_bone_add(arm, name);
@@ -112,12 +112,12 @@ EditBone *rna_Armature_edit_bone_new(bArmature *arm, ReportList *reports, const
void rna_Armature_edit_bone_remove(bArmature *arm, ReportList *reports, EditBone *ebone)
{
if (arm->edbo == NULL) {
- BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in editmode, cant remove an editbone", arm->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in editmode, cant remove an editbone", arm->id.name + 2);
return;
}
if (BLI_findindex(arm->edbo, ebone) == -1) {
- BKE_reportf(reports, RPT_ERROR, "Armature '%s' doesn't contain bone '%s'", arm->id.name+2, ebone->name);
+ BKE_reportf(reports, RPT_ERROR, "Armature '%s' doesn't contain bone '%s'", arm->id.name + 2, ebone->name);
return;
}
@@ -130,24 +130,24 @@ static void rna_Armature_update_layers(Main *bmain, Scene *UNUSED(scene), Pointe
Object *ob;
/* proxy lib exception, store it here so we can restore layers on file
- load, since it would otherwise get lost due to being linked data */
+ * load, since it would otherwise get lost due to being linked data */
for (ob = bmain->object.first; ob; ob = ob->id.next)
if (ob->data == arm && ob->pose)
ob->pose->proxy_layer = arm->layer;
- WM_main_add_notifier(NC_GEOM|ND_DATA, arm);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, arm);
}
static void rna_Armature_redraw_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
ID *id = ptr->id.data;
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
static char *rna_Bone_path(PointerRNA *ptr)
{
- Bone *bone = (Bone*)ptr->data;
+ Bone *bone = (Bone *)ptr->data;
/* special exception for trying to get the path where ID-block is Object
* - this will be assumed to be from a Pose Bone...
@@ -192,60 +192,60 @@ static void rna_bone_layer_set(int *layer, const int *values)
int i, tot = 0;
/* ensure we always have some layer selected */
- for (i = 0; i<32; i++)
+ for (i = 0; i < 32; i++)
if (values[i])
tot++;
if (tot == 0)
return;
- for (i = 0; i<32; i++) {
- if (values[i]) *layer |= (1<<i);
- else *layer &= ~(1<<i);
+ for (i = 0; i < 32; i++) {
+ if (values[i]) *layer |= (1 << i);
+ else *layer &= ~(1 << i);
}
}
static void rna_Bone_layer_set(PointerRNA *ptr, const int *values)
{
- Bone *bone = (Bone*)ptr->data;
+ Bone *bone = (Bone *)ptr->data;
rna_bone_layer_set(&bone->layer, values);
}
static void rna_Armature_layer_set(PointerRNA *ptr, const int *values)
{
- bArmature *arm = (bArmature*)ptr->data;
+ bArmature *arm = (bArmature *)ptr->data;
int i, tot = 0;
/* ensure we always have some layer selected */
- for (i = 0; i<32; i++)
+ for (i = 0; i < 32; i++)
if (values[i])
tot++;
if (tot == 0)
return;
- for (i = 0; i<32; i++) {
- if (values[i]) arm->layer |= (1<<i);
- else arm->layer &= ~(1<<i);
+ for (i = 0; i < 32; i++) {
+ if (values[i]) arm->layer |= (1 << i);
+ else arm->layer &= ~(1 << i);
}
}
/* XXX depreceated.... old armature only animviz */
static void rna_Armature_ghost_start_frame_set(PointerRNA *ptr, int value)
{
- bArmature *data = (bArmature*)ptr->data;
- CLAMP(value, 1, (int)(MAXFRAMEF/2));
+ bArmature *data = (bArmature *)ptr->data;
+ CLAMP(value, 1, (int)(MAXFRAMEF / 2));
data->ghostsf = value;
if (data->ghostsf >= data->ghostef) {
- data->ghostef = MIN2(data->ghostsf, (int)(MAXFRAMEF/2));
+ data->ghostef = MIN2(data->ghostsf, (int)(MAXFRAMEF / 2));
}
}
static void rna_Armature_ghost_end_frame_set(PointerRNA *ptr, int value)
{
- bArmature *data = (bArmature*)ptr->data;
- CLAMP(value, 1, (int)(MAXFRAMEF/2));
+ bArmature *data = (bArmature *)ptr->data;
+ CLAMP(value, 1, (int)(MAXFRAMEF / 2));
data->ghostef = value;
if (data->ghostsf >= data->ghostef) {
@@ -256,8 +256,8 @@ static void rna_Armature_ghost_end_frame_set(PointerRNA *ptr, int value)
static void rna_EditBone_name_set(PointerRNA *ptr, const char *value)
{
- bArmature *arm = (bArmature*)ptr->id.data;
- EditBone *ebone = (EditBone*)ptr->data;
+ bArmature *arm = (bArmature *)ptr->id.data;
+ EditBone *ebone = (EditBone *)ptr->data;
char oldname[sizeof(ebone->name)], newname[sizeof(ebone->name)];
/* need to be on the stack */
@@ -269,8 +269,8 @@ static void rna_EditBone_name_set(PointerRNA *ptr, const char *value)
static void rna_Bone_name_set(PointerRNA *ptr, const char *value)
{
- bArmature *arm = (bArmature*)ptr->id.data;
- Bone *bone = (Bone*)ptr->data;
+ bArmature *arm = (bArmature *)ptr->id.data;
+ Bone *bone = (Bone *)ptr->data;
char oldname[sizeof(bone->name)], newname[sizeof(bone->name)];
/* need to be on the stack */
@@ -282,7 +282,7 @@ static void rna_Bone_name_set(PointerRNA *ptr, const char *value)
static void rna_EditBone_layer_set(PointerRNA *ptr, const int values[])
{
- EditBone *data = (EditBone*)(ptr->data);
+ EditBone *data = (EditBone *)(ptr->data);
rna_bone_layer_set(&data->layer, values);
}
@@ -304,7 +304,7 @@ static void rna_EditBone_connected_check(EditBone *ebone)
static void rna_EditBone_connected_set(PointerRNA *ptr, int value)
{
- EditBone *ebone = (EditBone*)(ptr->data);
+ EditBone *ebone = (EditBone *)(ptr->data);
if (value) ebone->flag |= BONE_CONNECTED;
else ebone->flag &= ~BONE_CONNECTED;
@@ -314,14 +314,14 @@ static void rna_EditBone_connected_set(PointerRNA *ptr, int value)
static PointerRNA rna_EditBone_parent_get(PointerRNA *ptr)
{
- EditBone *data = (EditBone*)(ptr->data);
+ EditBone *data = (EditBone *)(ptr->data);
return rna_pointer_inherit_refine(ptr, &RNA_EditBone, data->parent);
}
static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value)
{
- EditBone *ebone = (EditBone*)(ptr->data);
- EditBone *pbone, *parbone = (EditBone*)value.data;
+ EditBone *ebone = (EditBone *)(ptr->data);
+ EditBone *pbone, *parbone = (EditBone *)value.data;
if (parbone == NULL) {
if (ebone->parent && !(ebone->parent->flag & BONE_ROOTSEL))
@@ -350,9 +350,9 @@ static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value)
static void rna_EditBone_matrix_get(PointerRNA *ptr, float *values)
{
- EditBone *ebone = (EditBone*)(ptr->data);
+ EditBone *ebone = (EditBone *)(ptr->data);
- float delta[3], tmat[3][3], mat[4][4];
+ float delta[3], tmat[3][3], mat[4][4];
/* Find the current bone matrix */
sub_v3_v3v3(delta, ebone->tail, ebone->head);
@@ -365,8 +365,8 @@ static void rna_EditBone_matrix_get(PointerRNA *ptr, float *values)
static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bArmature *arm = (bArmature*)ptr->id.data;
- EditBone *ebone = (EditBone*)ptr->data;
+ bArmature *arm = (bArmature *)ptr->id.data;
+ EditBone *ebone = (EditBone *)ptr->data;
EditBone *child, *eboflip;
/* update our parent */
@@ -394,7 +394,7 @@ static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, Po
/* update our children if necessary */
for (child = arm->edbo->first; child; child = child->next)
if (child->parent == eboflip && (child->flag & BONE_CONNECTED))
- copy_v3_v3 (child->head, eboflip->tail);
+ copy_v3_v3(child->head, eboflip->tail);
}
}
@@ -404,19 +404,19 @@ static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, Po
static void rna_Armature_bones_next(CollectionPropertyIterator *iter)
{
ListBaseIterator *internal = iter->internal;
- Bone *bone = (Bone*)internal->link;
+ Bone *bone = (Bone *)internal->link;
if (bone->childbase.first)
- internal->link = (Link*)bone->childbase.first;
+ internal->link = (Link *)bone->childbase.first;
else if (bone->next)
- internal->link = (Link*)bone->next;
+ internal->link = (Link *)bone->next;
else {
internal->link = NULL;
do {
bone = bone->parent;
if (bone && bone->next) {
- internal->link = (Link*)bone->next;
+ internal->link = (Link *)bone->next;
break;
}
} while (bone);
@@ -492,10 +492,12 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
"(useful for non-obstructive custom bone shapes)");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
+ /* XXX: use_cyclic_offset is deprecated in 2.5. May/may not return */
prop = RNA_def_property(srna, "use_cyclic_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET);
RNA_def_property_ui_text(prop, "Cyclic Offset",
- "When bone doesn't have a parent, it receives cyclic offset effects");
+ "When bone doesn't have a parent, it receives cyclic offset effects (Deprecated)");
+ // "When bone doesn't have a parent, it receives cyclic offset effects");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
prop = RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
@@ -504,7 +506,7 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* Number values */
- /* envelope deform settings */
+ /* envelope deform settings */
prop = RNA_def_property(srna, "envelope_distance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dist");
RNA_def_property_range(prop, 0.0f, 1000.0f);
@@ -521,7 +523,7 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
if (editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
else RNA_def_property_update(prop, 0, "rna_Armature_update_data");
RNA_def_property_float_sdna(prop, NULL, "rad_head");
- /* XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); */
+ /* XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); */
/*RNA_def_property_range(prop, 0, 1000); */
RNA_def_property_ui_range(prop, 0.01, 100, 0.1, 3);
RNA_def_property_ui_text(prop, "Envelope Head Radius", "Radius of head of bone (for Envelope deform only)");
@@ -530,12 +532,12 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
if (editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
else RNA_def_property_update(prop, 0, "rna_Armature_update_data");
RNA_def_property_float_sdna(prop, NULL, "rad_tail");
- /* XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); */
+ /* XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid); */
/*RNA_def_property_range(prop, 0, 1000); */
RNA_def_property_ui_range(prop, 0.01, 100, 0.1, 3);
RNA_def_property_ui_text(prop, "Envelope Tail Radius", "Radius of tail of bone (for Envelope deform only)");
- /* b-bones deform settings */
+ /* b-bones deform settings */
prop = RNA_def_property(srna, "bbone_segments", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "segments");
RNA_def_property_range(prop, 1, 32);
@@ -580,14 +582,14 @@ static void rna_def_bone(BlenderRNA *brna)
RNA_def_struct_idprops_func(srna, "rna_Bone_idprops");
/* pointers/collections */
- /* parent (pointer) */
+ /* parent (pointer) */
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Bone");
RNA_def_property_pointer_sdna(prop, NULL, "parent");
RNA_def_property_ui_text(prop, "Parent", "Parent bone (in same Armature)");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- /* children (collection) */
+ /* children (collection) */
prop = RNA_def_property(srna, "children", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "childbase", NULL);
RNA_def_property_struct_type(prop, "Bone");
@@ -595,8 +597,8 @@ static void rna_def_bone(BlenderRNA *brna)
rna_def_bone_common(srna, 0);
- /* XXX should we define this in PoseChannel wrapping code instead?
- * But PoseChannels directly get some of their flags from here... */
+ /* XXX should we define this in PoseChannel wrapping code instead?
+ * But PoseChannels directly get some of their flags from here... */
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_P);
RNA_def_property_ui_text(prop, "Hide",
@@ -745,7 +747,7 @@ static void rna_def_edit_bone(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_flag(prop, PROP_THICK_WRAP); /* no reference to original data */
RNA_def_property_ui_text(prop, "Editbone Matrix", "Read-only matrix calculated from the roll (armature space)");
- /* TODO - this could be made writable also */
+ /* TODO - this could be made writable also */
RNA_def_property_float_funcs(prop, "rna_EditBone_matrix_get", NULL, NULL);
RNA_api_armature_edit_bone(srna);
@@ -822,7 +824,7 @@ static void rna_def_armature_edit_bones(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove an existing bone from the armature");
/* target to remove*/
parm = RNA_def_pointer(func, "bone", "EditBone", "", "EditBone to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_armature(BlenderRNA *brna)
@@ -837,21 +839,25 @@ static void rna_def_armature(BlenderRNA *brna)
{ARM_ENVELOPE, "ENVELOPE", 0, "Envelope",
"Display bones as extruded spheres, showing deformation influence volume"},
{ARM_WIRE, "WIRE", 0, "Wire", "Display bones as thin wires, showing subdivision and B-Splines"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_vdeformer[] = {
{ARM_VDEF_BLENDER, "BLENDER", 0, "Blender", "Use Blender's armature vertex deformation"},
{ARM_VDEF_BGE_CPU, "BGE_CPU", 0, "BGE", "Use vertex deformation code optimized for the BGE"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_ghost_type_items[] = {
{ARM_GHOST_CUR, "CURRENT_FRAME", 0, "Around Frame",
"Display Ghosts of poses within a fixed number of frames around the current frame"},
{ARM_GHOST_RANGE, "RANGE", 0, "In Range", "Display Ghosts of poses within specified range"},
{ARM_GHOST_KEYS, "KEYS", 0, "On Keyframes", "Display Ghosts of poses on Keyframes"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_pose_position_items[] = {
{0, "POSE", 0, "Pose Position", "Show armature in posed state"},
{ARM_RESTPOS, "REST", 0, "Rest Position", "Show Armature in binding pose state (no posing possible)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Armature", "ID");
RNA_def_struct_ui_text(srna, "Armature",
@@ -908,16 +914,16 @@ static void rna_def_armature(BlenderRNA *brna)
/* XXX depreceated ....... old animviz for armatures only */
/* Boolean values */
- /* layer */
+ /* layer */
prop = RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
RNA_def_property_array(prop, 32);
RNA_def_property_ui_text(prop, "Visible Layers", "Armature layer visibility");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Armature_layer_set");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Armature_update_layers");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Armature_update_layers");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- /* layer protection */
+ /* layer protection */
prop = RNA_def_property(srna, "layers_protected", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "layer_protected", 1);
RNA_def_property_array(prop, 32);
@@ -926,7 +932,7 @@ static void rna_def_armature(BlenderRNA *brna)
"on file reload and undo");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- /* flag */
+ /* flag */
prop = RNA_def_property(srna, "show_axes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWAXES);
RNA_def_property_ui_text(prop, "Draw Axes", "Draw bone axes");
@@ -976,7 +982,7 @@ static void rna_def_armature(BlenderRNA *brna)
/* Number fields */
/* XXX depreceated ....... old animviz for armatures only */
- /* ghost/onionskining settings */
+ /* ghost/onionskining settings */
prop = RNA_def_property(srna, "ghost_step", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ghostep");
RNA_def_property_range(prop, 0, 30);
diff --git a/source/blender/makesrna/intern/rna_armature_api.c b/source/blender/makesrna/intern/rna_armature_api.c
index 4a872dca952..29dc23b7bef 100644
--- a/source/blender/makesrna/intern/rna_armature_api.c
+++ b/source/blender/makesrna/intern/rna_armature_api.c
@@ -76,7 +76,7 @@ void RNA_api_bone(StructRNA *srna)
func = RNA_def_function(srna, "evaluate_envelope", "rna_Bone_do_envelope");
RNA_def_function_ui_description(func, "Calculate bone envelope at given point");
parm = RNA_def_float_vector_xyz(func, "point", 3, NULL, -FLT_MAX, FLT_MAX, "Point",
- "Position in 3d space to evaluate", -FLT_MAX, FLT_MAX);
+ "Position in 3d space to evaluate", -FLT_MAX, FLT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
/* return value */
parm = RNA_def_float(func, "factor", 0, -FLT_MAX, FLT_MAX, "Factor", "Envelope factor", -FLT_MAX, FLT_MAX);
diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c
index 2f27c7a1e84..f803a8b67ea 100644
--- a/source/blender/makesrna/intern/rna_boid.c
+++ b/source/blender/makesrna/intern/rna_boid.c
@@ -65,7 +65,8 @@ EnumPropertyItem boidrule_type_items[] = {
{eBoidRuleType_FollowWall, "FOLLOW_WALL", 0, "Follow Wall",
"Move next to a deflector object's in direction of it's tangent"},
#endif
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem boidruleset_type_items[] = {
{eBoidRulesetType_Fuzzy, "FUZZY", 0, "Fuzzy",
@@ -73,7 +74,8 @@ EnumPropertyItem boidruleset_type_items[] = {
"fuzziness threshold is evaluated)"},
{eBoidRulesetType_Random, "RANDOM", 0, "Random", "A random rule is selected for each boid"},
{eBoidRulesetType_Average, "AVERAGE", 0, "Average", "All rules are averaged"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -85,37 +87,37 @@ EnumPropertyItem boidruleset_type_items[] = {
static void rna_Boids_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleSystem) {
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
psys->recalc = PSYS_RECALC_RESET;
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
else
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleSystem) {
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
psys->recalc = PSYS_RECALC_RESET;
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
else
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
DAG_scene_sort(bmain, scene);
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
-static StructRNA* rna_BoidRule_refine(struct PointerRNA *ptr)
+static StructRNA *rna_BoidRule_refine(struct PointerRNA *ptr)
{
- BoidRule *rule = (BoidRule*)ptr->data;
+ BoidRule *rule = (BoidRule *)ptr->data;
switch (rule->type) {
case eBoidRuleType_Goal:
@@ -137,13 +139,13 @@ static StructRNA* rna_BoidRule_refine(struct PointerRNA *ptr)
static char *rna_BoidRule_path(PointerRNA *ptr)
{
- return BLI_sprintfN("rules[\"%s\"]", ((BoidRule*)ptr->data)->name); /* XXX not unique */
+ return BLI_sprintfN("rules[\"%s\"]", ((BoidRule *)ptr->data)->name); /* XXX not unique */
}
static PointerRNA rna_BoidState_active_boid_rule_get(PointerRNA *ptr)
{
- BoidState *state = (BoidState*)ptr->data;
- BoidRule *rule = (BoidRule*)state->rules.first;
+ BoidState *state = (BoidState *)ptr->data;
+ BoidRule *rule = (BoidRule *)state->rules.first;
for (; rule; rule = rule->next) {
if (rule->flag & BOIDRULE_CURRENT)
@@ -153,16 +155,16 @@ static PointerRNA rna_BoidState_active_boid_rule_get(PointerRNA *ptr)
}
static void rna_BoidState_active_boid_rule_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- BoidState *state = (BoidState*)ptr->data;
+ BoidState *state = (BoidState *)ptr->data;
*min = 0;
- *max = BLI_countlist(&state->rules)-1;
+ *max = BLI_countlist(&state->rules) - 1;
*max = MAX2(0, *max);
}
static int rna_BoidState_active_boid_rule_index_get(PointerRNA *ptr)
{
- BoidState *state = (BoidState*)ptr->data;
- BoidRule *rule = (BoidRule*)state->rules.first;
+ BoidState *state = (BoidState *)ptr->data;
+ BoidRule *rule = (BoidRule *)state->rules.first;
int i = 0;
for (; rule; rule = rule->next, i++) {
@@ -174,8 +176,8 @@ static int rna_BoidState_active_boid_rule_index_get(PointerRNA *ptr)
static void rna_BoidState_active_boid_rule_index_set(struct PointerRNA *ptr, int value)
{
- BoidState *state = (BoidState*)ptr->data;
- BoidRule *rule = (BoidRule*)state->rules.first;
+ BoidState *state = (BoidState *)ptr->data;
+ BoidRule *rule = (BoidRule *)state->rules.first;
int i = 0;
for (; rule; rule = rule->next, i++) {
@@ -198,7 +200,7 @@ static char *rna_BoidSettings_path(PointerRNA *ptr)
BoidSettings *boids = (BoidSettings *)ptr->data;
if (particle_id_check(ptr)) {
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
if (part->boids == boids)
return BLI_sprintfN("boids");
@@ -208,8 +210,8 @@ static char *rna_BoidSettings_path(PointerRNA *ptr)
static PointerRNA rna_BoidSettings_active_boid_state_get(PointerRNA *ptr)
{
- BoidSettings *boids = (BoidSettings*)ptr->data;
- BoidState *state = (BoidState*)boids->states.first;
+ BoidSettings *boids = (BoidSettings *)ptr->data;
+ BoidState *state = (BoidState *)boids->states.first;
for (; state; state = state->next) {
if (state->flag & BOIDSTATE_CURRENT)
@@ -220,16 +222,16 @@ static PointerRNA rna_BoidSettings_active_boid_state_get(PointerRNA *ptr)
static void rna_BoidSettings_active_boid_state_index_range(PointerRNA *ptr, int *min, int *max,
int *softmin, int *softmax)
{
- BoidSettings *boids = (BoidSettings*)ptr->data;
+ BoidSettings *boids = (BoidSettings *)ptr->data;
*min = 0;
- *max = BLI_countlist(&boids->states)-1;
+ *max = BLI_countlist(&boids->states) - 1;
*max = MAX2(0, *max);
}
static int rna_BoidSettings_active_boid_state_index_get(PointerRNA *ptr)
{
- BoidSettings *boids = (BoidSettings*)ptr->data;
- BoidState *state = (BoidState*)boids->states.first;
+ BoidSettings *boids = (BoidSettings *)ptr->data;
+ BoidState *state = (BoidState *)boids->states.first;
int i = 0;
for (; state; state = state->next, i++) {
@@ -241,8 +243,8 @@ static int rna_BoidSettings_active_boid_state_index_get(PointerRNA *ptr)
static void rna_BoidSettings_active_boid_state_index_set(struct PointerRNA *ptr, int value)
{
- BoidSettings *boids = (BoidSettings*)ptr->data;
- BoidState *state = (BoidState*)boids->states.first;
+ BoidSettings *boids = (BoidSettings *)ptr->data;
+ BoidState *state = (BoidState *)boids->states.first;
int i = 0;
for (; state; state = state->next, i++) {
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 893dd7a9707..d14675b77c8 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -142,6 +142,14 @@ static int rna_SculptCapabilities_has_normal_weight_get(PointerRNA *ptr)
return ELEM(br->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_SNAKE_HOOK);
}
+static int rna_SculptCapabilities_has_overlay_get(PointerRNA *ptr)
+{
+ Brush *br = (Brush *)ptr->data;
+ return ELEM(br->mtex.brush_map_mode,
+ MTEX_MAP_MODE_VIEW,
+ MTEX_MAP_MODE_TILED);
+}
+
static int rna_SculptCapabilities_has_persistence_get(PointerRNA *ptr)
{
Brush *br = (Brush *)ptr->data;
@@ -164,7 +172,9 @@ static int rna_SculptCapabilities_has_plane_offset_get(PointerRNA *ptr)
static int rna_SculptCapabilities_has_random_texture_angle_get(PointerRNA *ptr)
{
Brush *br = (Brush *)ptr->data;
- return ((br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) &&
+ return (ELEM(br->mtex.brush_map_mode,
+ MTEX_MAP_MODE_VIEW,
+ MTEX_MAP_MODE_AREA) &&
!(br->flag & BRUSH_ANCHORED) &&
!ELEM4(br->sculpt_tool,
SCULPT_TOOL_GRAB, SCULPT_TOOL_ROTATE,
@@ -222,6 +232,23 @@ static int rna_SculptCapabilities_has_strength_get(PointerRNA *ptr)
return !ELEM(br->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_SNAKE_HOOK);
}
+static int rna_SculptCapabilities_has_texture_angle_get(PointerRNA *ptr)
+{
+ Brush *br = (Brush *)ptr->data;
+ return ELEM3(br->mtex.brush_map_mode,
+ MTEX_MAP_MODE_VIEW,
+ MTEX_MAP_MODE_AREA,
+ MTEX_MAP_MODE_TILED);
+}
+
+static int rna_SculptCapabilities_has_texture_angle_source_get(PointerRNA *ptr)
+{
+ Brush *br = (Brush *)ptr->data;
+ return ELEM(br->mtex.brush_map_mode,
+ MTEX_MAP_MODE_VIEW,
+ MTEX_MAP_MODE_AREA);
+}
+
static PointerRNA rna_Brush_sculpt_capabilities_get(PointerRNA *ptr)
{
return rna_pointer_inherit_refine(ptr, &RNA_SculptCapabilities, ptr->id.data);
@@ -353,6 +380,7 @@ static EnumPropertyItem *rna_Brush_direction_itemf(bContext *UNUSED(C), PointerR
case SCULPT_TOOL_BLOB:
case SCULPT_TOOL_LAYER:
case SCULPT_TOOL_CLAY:
+ case SCULPT_TOOL_CLAY_STRIPS:
return prop_direction_items;
case SCULPT_TOOL_MASK:
@@ -393,7 +421,8 @@ static void rna_def_brush_texture_slot(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_map_mode_items[] = {
- {MTEX_MAP_MODE_FIXED, "FIXED", 0, "Fixed", ""},
+ {MTEX_MAP_MODE_VIEW, "VIEW_PLANE", 0, "View Plane", ""},
+ {MTEX_MAP_MODE_AREA, "AREA_PLANE", 0, "Area Plane", ""},
{MTEX_MAP_MODE_TILED, "TILED", 0, "Tiled", ""},
{MTEX_MAP_MODE_3D, "3D", 0, "3D", ""},
{0, NULL, 0, NULL, NULL}
@@ -441,6 +470,7 @@ static void rna_def_sculpt_capabilities(BlenderRNA *brna)
BRUSH_CAPABILITY(has_height, "Has Height");
BRUSH_CAPABILITY(has_jitter, "Has Jitter");
BRUSH_CAPABILITY(has_normal_weight, "Has Crease/Pinch Factor");
+ BRUSH_CAPABILITY(has_overlay, "Has Overlay");
BRUSH_CAPABILITY(has_persistence, "Has Persistence");
BRUSH_CAPABILITY(has_pinch_factor, "Has Pinch Factor");
BRUSH_CAPABILITY(has_plane_offset, "Has Plane Offset");
@@ -451,6 +481,8 @@ static void rna_def_sculpt_capabilities(BlenderRNA *brna)
BRUSH_CAPABILITY(has_space_attenuation, "Has Space Attenuation");
BRUSH_CAPABILITY(has_spacing, "Has Spacing");
BRUSH_CAPABILITY(has_strength, "Has Strength");
+ BRUSH_CAPABILITY(has_texture_angle, "Has Texture Angle");
+ BRUSH_CAPABILITY(has_texture_angle_source, "Has Texture Angle Source");
#undef SCULPT_CAPABILITY
}
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index 70a33734c3f..ad926d6a08e 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -83,7 +83,7 @@ static void rna_Camera_angle_y_set(PointerRNA *ptr, float value)
static void rna_Camera_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Camera *camera = (Camera*)ptr->id.data;
+ Camera *camera = (Camera *)ptr->id.data;
DAG_id_tag_update(&camera->id, 0);
}
@@ -98,7 +98,8 @@ void RNA_def_camera(BlenderRNA *brna)
{CAM_PERSP, "PERSP", 0, "Perspective", ""},
{CAM_ORTHO, "ORTHO", 0, "Orthographic", ""},
{CAM_PANO, "PANO", 0, "Panoramic", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_draw_type_extra_items[] = {
{CAM_DTX_CENTER, "CENTER", 0, "Center", ""},
{CAM_DTX_CENTER_DIAG, "CENTER_DIAGONAL", 0, "Center Diagonal", ""},
@@ -108,16 +109,19 @@ void RNA_def_camera(BlenderRNA *brna)
{CAM_DTX_GOLDEN_TRI_B, "GOLDEN_TRIANGLE_B", 0, "Golden Triangle B", ""},
{CAM_DTX_HARMONY_TRI_A, "HARMONY_TRIANGLE_A", 0, "Harmonious Triangle A", ""},
{CAM_DTX_HARMONY_TRI_B, "HARMONY_TRIANGLE_B", 0, "Harmonious Triangle B", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_lens_unit_items[] = {
{0, "MILLIMETERS", 0, "Millimeters", ""},
{CAM_ANGLETOGGLE, "DEGREES", 0, "Degrees", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem sensor_fit_items[] = {
{CAMERA_SENSOR_FIT_AUTO, "AUTO", 0, "Auto", "Fit to the sensor width or height depending on image resolution"},
{CAMERA_SENSOR_FIT_HOR, "HORIZONTAL", 0, "Horizontal", "Fit to the sensor width"},
{CAMERA_SENSOR_FIT_VERT, "VERTICAL", 0, "Vertical", "Fit to the sensor height"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Camera", "ID");
RNA_def_struct_ui_text(srna, "Camera", "Camera datablock for storing camera settings");
@@ -127,145 +131,145 @@ void RNA_def_camera(BlenderRNA *brna)
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Type", "Camera types");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "show_guide", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "dtx");
RNA_def_property_enum_items(prop, prop_draw_type_extra_items);
RNA_def_property_flag(prop, PROP_ENUM_FLAG);
RNA_def_property_ui_text(prop, "Composition Guides", "Draw overlay");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "sensor_fit", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "sensor_fit");
RNA_def_property_enum_items(prop, sensor_fit_items);
RNA_def_property_ui_text(prop, "Sensor Fit", "Method to fit image and field of view angle inside the sensor");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
/* Number values */
prop = RNA_def_property(srna, "passepartout_alpha", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "passepartalpha");
RNA_def_property_ui_text(prop, "Passepartout Alpha", "Opacity (alpha) of the darkened overlay in Camera view");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "angle_x", PROP_FLOAT, PROP_ANGLE);
- RNA_def_property_range(prop, M_PI * (0.367/180.0), M_PI * (172.847/180.0));
+ RNA_def_property_range(prop, M_PI * (0.367 / 180.0), M_PI * (172.847 / 180.0));
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Horizontal FOV", "Camera lens horizontal field of view in degrees");
RNA_def_property_float_funcs(prop, "rna_Camera_angle_x_get", "rna_Camera_angle_x_set", NULL);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "angle_y", PROP_FLOAT, PROP_ANGLE);
- RNA_def_property_range(prop, M_PI * (0.367/180.0), M_PI * (172.847/180.0));
+ RNA_def_property_range(prop, M_PI * (0.367 / 180.0), M_PI * (172.847 / 180.0));
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Vertical FOV", "Camera lens vertical field of view in degrees");
RNA_def_property_float_funcs(prop, "rna_Camera_angle_y_get", "rna_Camera_angle_y_set", NULL);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
- RNA_def_property_range(prop, M_PI * (0.367/180.0), M_PI * (172.847/180.0));
+ RNA_def_property_range(prop, M_PI * (0.367 / 180.0), M_PI * (172.847 / 180.0));
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Field of View", "Camera lens field of view in degrees");
RNA_def_property_float_funcs(prop, "rna_Camera_angle_get", "rna_Camera_angle_set", NULL);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "clipsta");
RNA_def_property_range(prop, 0.001f, FLT_MAX);
RNA_def_property_ui_text(prop, "Clip Start", "Camera near clipping distance");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "clipend");
RNA_def_property_range(prop, 1.0f, FLT_MAX);
RNA_def_property_ui_text(prop, "Clip End", "Camera far clipping distance");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "lens", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "lens");
RNA_def_property_range(prop, 1.0f, 5000.0f);
RNA_def_property_ui_text(prop, "Focal Length", "Perspective Camera lens value in millimeters");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "sensor_width", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sensor_x");
RNA_def_property_range(prop, 1.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 1.0f, 100.f, 1, 2);
RNA_def_property_ui_text(prop, "Sensor Width", "Horizontal size of the image sensor area in millimeters");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "sensor_height", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sensor_y");
RNA_def_property_range(prop, 1.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 1.0f, 100.f, 1, 2);
RNA_def_property_ui_text(prop, "Sensor Height", "Vertical size of the image sensor area in millimeters");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "ortho_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ortho_scale");
RNA_def_property_range(prop, 0.01f, 4000.0f);
RNA_def_property_ui_text(prop, "Orthographic Scale", "Orthographic Camera scale (similar to zoom)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "draw_size", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "drawsize");
RNA_def_property_range(prop, 0.01f, 1000.0f);
RNA_def_property_ui_range(prop, 0.01, 100, 1, 2);
RNA_def_property_ui_text(prop, "Draw Size", "Apparent size of the Camera object in the 3D View");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "shift_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "shiftx");
RNA_def_property_range(prop, -10.0f, 10.0f);
RNA_def_property_ui_range(prop, -2.0, 2.0, 1, 3);
RNA_def_property_ui_text(prop, "Shift X", "Perspective Camera horizontal shift");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "shift_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "shifty");
RNA_def_property_range(prop, -10.0f, 10.0f);
RNA_def_property_ui_range(prop, -2.0, 2.0, 1, 3);
RNA_def_property_ui_text(prop, "Shift Y", "Perspective Camera vertical shift");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Camera_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_update");
prop = RNA_def_property(srna, "dof_distance", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "YF_dofdist");
RNA_def_property_range(prop, 0.0f, 5000.0f);
RNA_def_property_ui_text(prop, "DOF Distance", "Distance to the focus point for depth of field");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* flag */
prop = RNA_def_property(srna, "show_limits", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOWLIMITS);
RNA_def_property_ui_text(prop, "Show Limits", "Draw the clipping range and focus point on the camera");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_mist", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOWMIST);
RNA_def_property_ui_text(prop, "Show Mist", "Draw a line from the Camera to indicate the mist area");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_passepartout", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOWPASSEPARTOUT);
RNA_def_property_ui_text(prop, "Show Passepartout",
"Show a darkened overlay outside the image area in Camera view");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_title_safe", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOWTITLESAFE);
RNA_def_property_ui_text(prop, "Show Title Safe", "Show indicators for the title safe zone in Camera view");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_name", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOWNAME);
RNA_def_property_ui_text(prop, "Show Name", "Show the active Camera's name in Camera view");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_sensor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOWSENSOR);
RNA_def_property_ui_text(prop, "Show Sensor Size", "Show sensor size (film gate) in Camera view");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "lens_unit", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
@@ -280,7 +284,7 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "dof_ob");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "DOF Object", "Use this object to define the depth of field focal point");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* Camera API */
RNA_api_camera(srna);
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c
index 2f6a31ff8ee..37795edb884 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -49,39 +49,39 @@
static void rna_cloth_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
static void rna_cloth_pinning_changed(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
/* ClothSimSettings *settings = (ClothSimSettings*)ptr->data; */
- ClothModifierData *clmd = (ClothModifierData*)modifiers_findByType(ob, eModifierType_Cloth);
+ ClothModifierData *clmd = (ClothModifierData *)modifiers_findByType(ob, eModifierType_Cloth);
cloth_free_modifier(clmd);
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
static void rna_cloth_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- ClothSimSettings *settings = (ClothSimSettings*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
settings->reset = 1;
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
static void rna_ClothSettings_max_bend_set(struct PointerRNA *ptr, float value)
{
- ClothSimSettings *settings = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
/* check for clipping */
if (value < settings->bending)
@@ -92,7 +92,7 @@ static void rna_ClothSettings_max_bend_set(struct PointerRNA *ptr, float value)
static void rna_ClothSettings_max_struct_set(struct PointerRNA *ptr, float value)
{
- ClothSimSettings *settings = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
/* check for clipping */
if (value < settings->structural)
@@ -103,77 +103,77 @@ static void rna_ClothSettings_max_struct_set(struct PointerRNA *ptr, float value
static void rna_ClothSettings_mass_vgroup_get(PointerRNA *ptr, char *value)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
rna_object_vgroup_name_index_get(ptr, value, sim->vgroup_mass);
}
static int rna_ClothSettings_mass_vgroup_length(PointerRNA *ptr)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
return rna_object_vgroup_name_index_length(ptr, sim->vgroup_mass);
}
static void rna_ClothSettings_mass_vgroup_set(PointerRNA *ptr, const char *value)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
rna_object_vgroup_name_index_set(ptr, value, &sim->vgroup_mass);
}
static void rna_ClothSettings_struct_vgroup_get(PointerRNA *ptr, char *value)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
rna_object_vgroup_name_index_get(ptr, value, sim->vgroup_struct);
}
static int rna_ClothSettings_struct_vgroup_length(PointerRNA *ptr)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
return rna_object_vgroup_name_index_length(ptr, sim->vgroup_struct);
}
static void rna_ClothSettings_struct_vgroup_set(PointerRNA *ptr, const char *value)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
rna_object_vgroup_name_index_set(ptr, value, &sim->vgroup_struct);
}
static void rna_ClothSettings_bend_vgroup_get(PointerRNA *ptr, char *value)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
rna_object_vgroup_name_index_get(ptr, value, sim->vgroup_bend);
}
static int rna_ClothSettings_bend_vgroup_length(PointerRNA *ptr)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
return rna_object_vgroup_name_index_length(ptr, sim->vgroup_bend);
}
static void rna_ClothSettings_bend_vgroup_set(PointerRNA *ptr, const char *value)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
rna_object_vgroup_name_index_set(ptr, value, &sim->vgroup_bend);
}
static PointerRNA rna_ClothSettings_rest_shape_key_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
return rna_object_shapekey_index_get(ob->data, sim->shapekey_rest);
}
static void rna_ClothSettings_rest_shape_key_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->id.data;
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
sim->shapekey_rest = rna_object_shapekey_index_set(ob->data, value, sim->shapekey_rest);
}
static void rna_ClothSettings_gravity_get(PointerRNA *ptr, float *values)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
values[0] = sim->gravity[0];
values[1] = sim->gravity[1];
@@ -182,7 +182,7 @@ static void rna_ClothSettings_gravity_get(PointerRNA *ptr, float *values)
static void rna_ClothSettings_gravity_set(PointerRNA *ptr, const float *values)
{
- ClothSimSettings *sim = (ClothSimSettings*)ptr->data;
+ ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
sim->gravity[0] = values[0];
sim->gravity[1] = values[1];
@@ -191,7 +191,7 @@ static void rna_ClothSettings_gravity_set(PointerRNA *ptr, const float *values)
static char *rna_ClothSettings_path(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth);
return md ? BLI_sprintfN("modifiers[\"%s\"].settings", md->name) : NULL;
@@ -199,7 +199,7 @@ static char *rna_ClothSettings_path(PointerRNA *ptr)
static char *rna_ClothCollisionSettings_path(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth);
return md ? BLI_sprintfN("modifiers[\"%s\"].collision_settings", md->name) : NULL;
@@ -398,40 +398,47 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
/* unused */
- /* unused still
+ /* unused still */
+#if 0
prop= RNA_def_property(srna, "shear_stiffness", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "shear");
RNA_def_property_range(prop, 0.0f, 1000.0f);
- RNA_def_property_ui_text(prop, "Shear Stiffness", "Shear spring stiffness"); */
-
- /* unused still
+ RNA_def_property_ui_text(prop, "Shear Stiffness", "Shear spring stiffness");
+#endif
+ /* unused still */
+#if 0
prop= RNA_def_property(srna, "shear_stiffness_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max_shear");
RNA_def_property_range(prop, 0.0f, upperLimitf);
- RNA_def_property_ui_text(prop, "Shear Stiffness Maximum", "Maximum shear scaling value"); */
-
- /* unused still
+ RNA_def_property_ui_text(prop, "Shear Stiffness Maximum", "Maximum shear scaling value");
+#endif
+ /* unused still */
+#if 0
prop= RNA_def_property(srna, "effector_force_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "eff_force_scale");
RNA_def_property_range(prop, 0.0f, 100.0f);
- RNA_def_property_ui_text(prop, "Effector Force Scale", ""); */
-
- /* unused still
+ RNA_def_property_ui_text(prop, "Effector Force Scale", "");
+#endif
+ /* unused still */
+#if 0
prop= RNA_def_property(srna, "effector_wind_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "eff_wind_scale");
RNA_def_property_range(prop, 0.0f, 100.0f);
- RNA_def_property_ui_text(prop, "Effector Wind Scale", ""); */
-
- /* unused still
+ RNA_def_property_ui_text(prop, "Effector Wind Scale", "");
+#endif
+ /* unused still */
+#if 0
prop= RNA_def_property(srna, "tearing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_SIMSETTINGS_FLAG_TEARING);
- RNA_def_property_ui_text(prop, "Tearing", "");*/
-
- /* unused still
+ RNA_def_property_ui_text(prop, "Tearing", "");
+#endif
+ /* unused still */
+#if 0
prop= RNA_def_property(srna, "max_spring_extensions", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxspringlen");
RNA_def_property_range(prop, 1.0, 1000.0);
- RNA_def_property_ui_text(prop, "Maximum Spring Extension", "Maximum extension before spring gets cut"); */
+ RNA_def_property_ui_text(prop, "Maximum Spring Extension", "Maximum extension before spring gets cut");
+#endif
}
static void rna_def_cloth_collision_settings(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index 4793310e192..3b7a8330d10 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -56,10 +56,10 @@
static int rna_CurveMapping_curves_length(PointerRNA *ptr)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
int len;
- for (len = 0; len<CM_TOT; len++)
+ for (len = 0; len < CM_TOT; len++)
if (!cumap->cm[len].curve)
break;
@@ -68,14 +68,14 @@ static int rna_CurveMapping_curves_length(PointerRNA *ptr)
static void rna_CurveMapping_curves_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
rna_iterator_array_begin(iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), 0, NULL);
}
static void rna_CurveMapping_clip_set(PointerRNA *ptr, int value)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
if (value) cumap->flag |= CUMA_DO_CLIP;
else cumap->flag &= ~CUMA_DO_CLIP;
@@ -85,7 +85,7 @@ static void rna_CurveMapping_clip_set(PointerRNA *ptr, int value)
static void rna_CurveMapping_black_level_set(PointerRNA *ptr, const float *values)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
cumap->black[0] = values[0];
cumap->black[1] = values[1];
cumap->black[2] = values[2];
@@ -94,7 +94,7 @@ static void rna_CurveMapping_black_level_set(PointerRNA *ptr, const float *value
static void rna_CurveMapping_white_level_set(PointerRNA *ptr, const float *values)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
cumap->white[0] = values[0];
cumap->white[1] = values[1];
cumap->white[2] = values[2];
@@ -103,7 +103,7 @@ static void rna_CurveMapping_white_level_set(PointerRNA *ptr, const float *value
static void rna_CurveMapping_clipminx_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
*min = -100.0f;
*max = cumap->clipr.xmax;
@@ -111,7 +111,7 @@ static void rna_CurveMapping_clipminx_range(PointerRNA *ptr, float *min, float *
static void rna_CurveMapping_clipminy_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
*min = -100.0f;
*max = cumap->clipr.ymax;
@@ -119,7 +119,7 @@ static void rna_CurveMapping_clipminy_range(PointerRNA *ptr, float *min, float *
static void rna_CurveMapping_clipmaxx_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
*min = cumap->clipr.xmin;
*max = 100.0f;
@@ -127,7 +127,7 @@ static void rna_CurveMapping_clipmaxx_range(PointerRNA *ptr, float *min, float *
static void rna_CurveMapping_clipmaxy_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- CurveMapping *cumap = (CurveMapping*)ptr->data;
+ CurveMapping *cumap = (CurveMapping *)ptr->data;
*min = cumap->clipr.ymin;
*max = 100.0f;
@@ -141,16 +141,16 @@ static char *rna_ColorRamp_path(PointerRNA *ptr)
ID *id = ptr->id.data;
switch (GS(id->name)) {
- case ID_MA: /* material has 2 cases - diffuse and specular */
+ case ID_MA: /* material has 2 cases - diffuse and specular */
{
- Material *ma = (Material*)id;
+ Material *ma = (Material *)id;
if (ptr->data == ma->ramp_col)
return BLI_strdup("diffuse_ramp");
else if (ptr->data == ma->ramp_spec)
return BLI_strdup("specular_ramp");
}
- break;
+ break;
case ID_LS:
{
@@ -211,9 +211,9 @@ static char *rna_ColorRampElement_path(PointerRNA *ptr)
COLRAMP_GETPATH;
}
}
- break;
+ break;
- /* TODO: node trees need special attention */
+ /* TODO: node trees need special attention */
case ID_NT:
{
bNodeTree *ntree = (bNodeTree *)id;
@@ -226,7 +226,7 @@ static char *rna_ColorRampElement_path(PointerRNA *ptr)
}
}
}
- break;
+ break;
case ID_LS:
{
@@ -270,9 +270,9 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
Material *ma = ptr->id.data;
DAG_id_tag_update(&ma->id, 0);
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, ma);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
}
- break;
+ break;
case ID_NT:
{
bNodeTree *ntree = (bNodeTree *)id;
@@ -284,7 +284,7 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
}
}
}
- break;
+ break;
case ID_TE:
{
Tex *tex = ptr->id.data;
@@ -292,7 +292,7 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
DAG_id_tag_update(&tex->id, 0);
WM_main_add_notifier(NC_TEXTURE, tex);
}
- break;
+ break;
case ID_LS:
{
FreestyleLineStyle *linestyle= ptr->id.data;
@@ -331,7 +331,7 @@ static void rna_ColorRampElement_remove(struct ColorBand *coba, ReportList *repo
static void rna_Scopes_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scopes *s = (Scopes*)ptr->data;
+ Scopes *s = (Scopes *)ptr->data;
s->ok = 0;
}
@@ -350,18 +350,14 @@ static void rna_def_curvemappoint(BlenderRNA *brna)
srna = RNA_def_struct(brna, "CurveMapPoint", NULL);
RNA_def_struct_ui_text(srna, "CurveMapPoint", "Point of a curve used for a curve mapping");
- /* not editable for now, need to have CurveMapping to do curvemapping_changed */
-
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "x");
RNA_def_property_array(prop, 2);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Location", "X/Y coordinates of the curve point");
prop = RNA_def_property(srna, "handle_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_handle_type_items);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Handle Type", "Curve interpolation at this point: Bezier or vector");
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
@@ -369,10 +365,38 @@ static void rna_def_curvemappoint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Select", "Selection state of the curve point");
}
+static void rna_def_curvemap_points_api(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *parm;
+ FunctionRNA *func;
+
+ RNA_def_property_srna(cprop, "CurveMapPoints");
+ srna = RNA_def_struct(brna, "CurveMapPoints", NULL);
+ RNA_def_struct_sdna(srna, "CurveMap");
+ RNA_def_struct_ui_text(srna, "Curve Map Point", "Collection of Curve Map Points");
+
+ func = RNA_def_function(srna, "new", "curvemap_insert");
+ RNA_def_function_ui_description(func, "Add point to CurveMap");
+ parm = RNA_def_float(func, "position", 0.0f, -FLT_MAX, FLT_MAX, "Position", "Position to add point", -FLT_MAX, FLT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm = RNA_def_float(func, "value", 0.0f, -FLT_MAX, FLT_MAX, "Value", "Value of point", -FLT_MAX, FLT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "New point");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "curvemap_remove_point");
+ RNA_def_function_ui_description(func, "Delete point from CurveMap");
+ parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "PointElement to remove");
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+}
+
static void rna_def_curvemap(BlenderRNA *brna)
{
StructRNA *srna;
- PropertyRNA *prop;
+ PropertyRNA *prop, *parm;
+ FunctionRNA *func;
+
static EnumPropertyItem prop_extend_items[] = {
{0, "HORIZONTAL", 0, "Horizontal", ""},
{CUMA_EXTEND_EXTRAPOLATE, "EXTRAPOLATED", 0, "Extrapolated", ""},
@@ -382,24 +406,30 @@ static void rna_def_curvemap(BlenderRNA *brna)
srna = RNA_def_struct(brna, "CurveMap", NULL);
RNA_def_struct_ui_text(srna, "CurveMap", "Curve in a curve mapping");
- /* not editable for now, need to have CurveMapping to do curvemapping_changed */
-
prop = RNA_def_property(srna, "extend", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_extend_items);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Extend", "Extrapolate the curve or extend it horizontally");
prop = RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "curve", "totpoint");
RNA_def_property_struct_type(prop, "CurveMapPoint");
RNA_def_property_ui_text(prop, "Points", "");
+ rna_def_curvemap_points_api(brna, prop);
+
+ func = RNA_def_function(srna, "evaluate", "curvemap_evaluateF");
+ RNA_def_function_ui_description(func, "Evaluate curve at given location");
+ parm = RNA_def_float(func, "position", 0.0f, -FLT_MAX, FLT_MAX, "Position", "Position to evaluate curve at", -FLT_MAX, FLT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm = RNA_def_float(func, "value", 0.0f, -FLT_MAX, FLT_MAX, "Value", "Value of curve at given location", -FLT_MAX, FLT_MAX);
+ RNA_def_function_return(func, parm);
}
static void rna_def_curvemapping(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
+ FunctionRNA *func;
srna = RNA_def_struct(brna, "CurveMapping", NULL);
RNA_def_struct_ui_text(srna, "CurveMapping",
@@ -453,6 +483,9 @@ static void rna_def_curvemapping(BlenderRNA *brna)
RNA_def_property_range(prop, -1000.0f, 1000.0f);
RNA_def_property_ui_text(prop, "White Level", "For RGB curves, the color that white is mapped to");
RNA_def_property_float_funcs(prop, NULL, "rna_CurveMapping_white_level_set", NULL);
+
+ func = RNA_def_function(srna, "update", "curvemapping_changed_all");
+ RNA_def_function_ui_description(func, "Update curve mapping after making changes");
}
static void rna_def_color_ramp_element(BlenderRNA *brna)
@@ -504,7 +537,7 @@ static void rna_def_color_ramp_element_api(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Delete element from ColorRamp");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "Element to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_color_ramp(BlenderRNA *brna)
@@ -519,7 +552,8 @@ static void rna_def_color_ramp(BlenderRNA *brna)
{0, "LINEAR", 0, "Linear", ""},
{2, "B_SPLINE", 0, "B-Spline", ""},
{4, "CONSTANT", 0, "Constant", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ColorRamp", NULL);
RNA_def_struct_sdna(srna, "ColorBand");
@@ -571,7 +605,8 @@ static void rna_def_histogram(BlenderRNA *brna)
{HISTO_MODE_R, "R", ICON_COLOR, "Red", ""},
{HISTO_MODE_G, "G", ICON_COLOR, "Green", ""},
{HISTO_MODE_B, "B", ICON_COLOR, "Blue", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Histogram", NULL);
RNA_def_struct_ui_text(srna, "Histogram", "Statistical view of the levels of color in an image");
@@ -594,7 +629,8 @@ static void rna_def_scopes(BlenderRNA *brna)
{SCOPES_WAVEFRM_YCC_601, "YCBCR601", ICON_COLOR, "YCbCr (ITU 601)", ""},
{SCOPES_WAVEFRM_YCC_709, "YCBCR709", ICON_COLOR, "YCbCr (ITU 709)", ""},
{SCOPES_WAVEFRM_YCC_JPEG, "YCBCRJPG", ICON_COLOR, "YCbCr (Jpeg)", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Scopes", NULL);
RNA_def_struct_ui_text(srna, "Scopes", "Scopes for statistical view of an image");
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index b812c574a01..e1f1ab97726 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -80,7 +80,8 @@ EnumPropertyItem constraint_type_items[] = {
{CONSTRAINT_TYPE_RIGIDBODYJOINT, "RIGID_BODY_JOINT", ICON_CONSTRAINT_DATA, "Rigid Body Joint", ""},
{CONSTRAINT_TYPE_PYTHON, "SCRIPT", ICON_CONSTRAINT_DATA, "Script", ""},
{CONSTRAINT_TYPE_SHRINKWRAP, "SHRINKWRAP", ICON_CONSTRAINT_DATA, "Shrinkwrap", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem target_space_pchan_items[] = {
{CONSTRAINT_SPACE_WORLD, "WORLD", 0, "World Space",
@@ -95,7 +96,8 @@ static EnumPropertyItem target_space_pchan_items[] = {
{CONSTRAINT_SPACE_LOCAL, "LOCAL", 0, "Local Space",
"The transformation of the target is evaluated relative to its local "
"coordinate system"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem owner_space_pchan_items[] = {
{CONSTRAINT_SPACE_WORLD, "WORLD", 0, "World Space",
@@ -107,7 +109,8 @@ static EnumPropertyItem owner_space_pchan_items[] = {
"with the parent transformation added"},
{CONSTRAINT_SPACE_LOCAL, "LOCAL", 0, "Local Space",
"The constraint is applied relative to the local coordinate sytem of the object"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -116,7 +119,8 @@ static EnumPropertyItem space_object_items[] = {
"The transformation of the target is evaluated relative to the world coordinate system"},
{CONSTRAINT_SPACE_LOCAL, "LOCAL", 0, "Local Space",
"The transformation of the target is evaluated relative to its local coordinate system"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#include "BKE_animsys.h"
#include "BKE_action.h"
@@ -127,7 +131,7 @@ static EnumPropertyItem space_object_items[] = {
static StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr)
{
- bConstraint *con = (bConstraint*)ptr->data;
+ bConstraint *con = (bConstraint *)ptr->data;
switch (con->type) {
case CONSTRAINT_TYPE_CHILDOF:
@@ -249,7 +253,7 @@ static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRN
Object *ob = ptr->id.data;
if (ob->pose)
- ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK);
+ ob->pose->flag |= (POSE_LOCKED | POSE_DO_UNLOCK);
rna_Constraint_update(bmain, scene, ptr);
}
@@ -263,10 +267,10 @@ static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value)
/* the type of IK constraint has changed, set suitable default values */
/* in case constraints reuse same fields incompatible */
switch (value) {
- case CONSTRAINT_IK_COPYPOSE:
- break;
- case CONSTRAINT_IK_DISTANCE:
- break;
+ case CONSTRAINT_IK_COPYPOSE:
+ break;
+ case CONSTRAINT_IK_DISTANCE:
+ break;
}
ikdata->type = value;
}
@@ -275,8 +279,8 @@ static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value)
static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *UNUSED(free))
{
- Object *ob = (Object*)ptr->id.data;
- bConstraint *con = (bConstraint*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ bConstraint *con = (bConstraint *)ptr->data;
if (BLI_findindex(&ob->constraints, con) == -1)
return owner_space_pchan_items;
@@ -287,7 +291,7 @@ static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *UNUSED(C), P
static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *UNUSED(free))
{
- bConstraint *con = (bConstraint*)ptr->data;
+ bConstraint *con = (bConstraint *)ptr->data;
bConstraintTypeInfo *cti = constraint_get_typeinfo(con);
ListBase targets = {NULL, NULL};
bConstraintTarget *ct;
@@ -311,7 +315,7 @@ static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *UNUSED(C),
static void rna_ActionConstraint_minmax_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- bConstraint *con = (bConstraint*)ptr->data;
+ bConstraint *con = (bConstraint *)ptr->data;
bActionConstraint *acon = (bActionConstraint *)con->data;
/* 0, 1, 2 = magic numbers for rotX, rotY, rotZ */
@@ -327,20 +331,20 @@ static void rna_ActionConstraint_minmax_range(PointerRNA *ptr, float *min, float
static int rna_SplineIKConstraint_joint_bindings_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- bConstraint *con = (bConstraint*)ptr->data;
+ bConstraint *con = (bConstraint *)ptr->data;
bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data;
if (ikData)
length[0] = ikData->numpoints;
else
- length[0] = 256; /* for raw_access, untested */
+ length[0] = 256; /* for raw_access, untested */
return length[0];
}
static void rna_SplineIKConstraint_joint_bindings_get(PointerRNA *ptr, float *values)
{
- bConstraint *con = (bConstraint*)ptr->data;
+ bConstraint *con = (bConstraint *)ptr->data;
bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data;
memcpy(values, ikData->points, ikData->numpoints * sizeof(float));
@@ -348,7 +352,7 @@ static void rna_SplineIKConstraint_joint_bindings_get(PointerRNA *ptr, float *va
static void rna_SplineIKConstraint_joint_bindings_set(PointerRNA *ptr, const float *values)
{
- bConstraint *con = (bConstraint*)ptr->data;
+ bConstraint *con = (bConstraint *)ptr->data;
bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data;
memcpy(ikData->points, values, ikData->numpoints * sizeof(float));
@@ -356,10 +360,10 @@ static void rna_SplineIKConstraint_joint_bindings_set(PointerRNA *ptr, const flo
static int rna_Constraint_cameraObject_poll(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)value.data;
+ Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_CAMERA && ob != (Object*)ptr->id.data) {
+ if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
return 1;
}
}
@@ -369,12 +373,12 @@ static int rna_Constraint_cameraObject_poll(PointerRNA *ptr, PointerRNA value)
static void rna_Constraint_followTrack_camera_set(PointerRNA *ptr, PointerRNA value)
{
- bConstraint *con = (bConstraint*)ptr->data;
- bFollowTrackConstraint *data = (bFollowTrackConstraint*)con->data;
- Object *ob = (Object*)value.data;
+ bConstraint *con = (bConstraint *)ptr->data;
+ bFollowTrackConstraint *data = (bFollowTrackConstraint *)con->data;
+ Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_CAMERA && ob != (Object*)ptr->id.data) {
+ if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
data->camera = ob;
}
}
@@ -385,12 +389,12 @@ static void rna_Constraint_followTrack_camera_set(PointerRNA *ptr, PointerRNA va
static void rna_Constraint_followTrack_depthObject_set(PointerRNA *ptr, PointerRNA value)
{
- bConstraint *con = (bConstraint*)ptr->data;
- bFollowTrackConstraint *data = (bFollowTrackConstraint*)con->data;
- Object *ob = (Object*)value.data;
+ bConstraint *con = (bConstraint *)ptr->data;
+ bFollowTrackConstraint *data = (bFollowTrackConstraint *)con->data;
+ Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_MESH && ob != (Object*)ptr->id.data) {
+ if (ob->type == OB_MESH && ob != (Object *)ptr->id.data) {
data->depth_ob = ob;
}
}
@@ -401,10 +405,10 @@ static void rna_Constraint_followTrack_depthObject_set(PointerRNA *ptr, PointerR
static int rna_Constraint_followTrack_depthObject_poll(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)value.data;
+ Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_MESH && ob != (Object*)ptr->id.data) {
+ if (ob->type == OB_MESH && ob != (Object *)ptr->id.data) {
return 1;
}
}
@@ -414,12 +418,12 @@ static int rna_Constraint_followTrack_depthObject_poll(PointerRNA *ptr, PointerR
static void rna_Constraint_objectSolver_camera_set(PointerRNA *ptr, PointerRNA value)
{
- bConstraint *con = (bConstraint*)ptr->data;
- bObjectSolverConstraint *data = (bObjectSolverConstraint*)con->data;
- Object *ob = (Object*)value.data;
+ bConstraint *con = (bConstraint *)ptr->data;
+ bObjectSolverConstraint *data = (bObjectSolverConstraint *)con->data;
+ Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_CAMERA && ob != (Object*)ptr->id.data) {
+ if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
data->camera = ob;
}
}
@@ -457,12 +461,12 @@ static void rna_def_constrainttarget(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* space, flag and type still to do */
}
@@ -481,57 +485,57 @@ static void rna_def_constraint_childof(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_location_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCX);
RNA_def_property_ui_text(prop, "Location X", "Use X Location of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_location_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCY);
RNA_def_property_ui_text(prop, "Location Y", "Use Y Location of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_location_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCZ);
RNA_def_property_ui_text(prop, "Location Z", "Use Z Location of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_rotation_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTX);
RNA_def_property_ui_text(prop, "Rotation X", "Use X Rotation of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_rotation_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTY);
RNA_def_property_ui_text(prop, "Rotation Y", "Use Y Rotation of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_rotation_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTZ);
RNA_def_property_ui_text(prop, "Rotation Z", "Use Z Rotation of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_scale_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEX);
RNA_def_property_ui_text(prop, "Scale X", "Use X Scale of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_scale_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEY);
RNA_def_property_ui_text(prop, "Scale Y", "Use Y Scale of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_scale_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEZ);
RNA_def_property_ui_text(prop, "Scale Z", "Use Z Scale of Parent");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "inverse_matrix", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "invmat");
@@ -558,17 +562,17 @@ static void rna_def_constraint_python(BlenderRNA *brna)
prop = RNA_def_property(srna, "target_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "tarnum");
RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Script", "The text object that contains the Python script");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_REFCOUNT);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_targets", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_USETARGETS);
RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "has_script_error", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
@@ -601,34 +605,34 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 10000);
RNA_def_property_ui_text(prop, "Iterations", "Maximum number of solving iterations");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "pole_target", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "poletar");
RNA_def_property_ui_text(prop, "Pole Target", "Object for pole rotation");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "pole_subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "polesubtarget");
RNA_def_property_ui_text(prop, "Pole Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "pole_angle", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "poleangle");
RNA_def_property_range(prop, -M_PI, M_PI);
RNA_def_property_ui_text(prop, "Pole Angle", "Pole rotation offset");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.01, 1.f);
@@ -638,94 +642,94 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "orientweight");
RNA_def_property_range(prop, 0.01, 1.f);
RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "rootbone");
RNA_def_property_range(prop, 0, 255);
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_tail", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_TIP);
RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "reference_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, constraint_ik_axisref_items);
RNA_def_property_ui_text(prop, "Axis Reference",
"Constraint axis Lock options relative to Bone or Target reference");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_POS);
RNA_def_property_ui_text(prop, "Position", "Chain follows position of target");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "lock_location_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_X);
RNA_def_property_ui_text(prop, "Lock X Pos", "Constraint position along X axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "lock_location_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Y);
RNA_def_property_ui_text(prop, "Lock Y Pos", "Constraint position along Y axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "lock_location_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Z);
RNA_def_property_ui_text(prop, "Lock Z Pos", "Constraint position along Z axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_ROT);
RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "lock_rotation_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_X);
RNA_def_property_ui_text(prop, "Lock X Rot", "Constraint rotation along X axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "lock_rotation_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Y);
RNA_def_property_ui_text(prop, "Lock Y Rot", "Constraint rotation along Y axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "lock_rotation_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Z);
RNA_def_property_ui_text(prop, "Lock Z Rot", "Constraint rotation along Z axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_target", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_AUTO);
RNA_def_property_ui_text(prop, "Target", "Disable for targetless IK");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_stretch", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_STRETCH);
RNA_def_property_ui_text(prop, "Stretch", "Enable IK Stretching");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "ik_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_funcs(prop, NULL, "rna_Constraint_ik_type_set", NULL);
RNA_def_property_enum_items(prop, constraint_ik_type_items);
RNA_def_property_ui_text(prop, "IK Type", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, constraint_distance_items);
RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dist");
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_track_to(BlenderRNA *brna)
@@ -740,13 +744,15 @@ static void rna_def_constraint_track_to(BlenderRNA *brna)
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem up_items[] = {
{TRACK_X, "UP_X", 0, "X", ""},
{TRACK_Y, "UP_Y", 0, "Y", ""},
{TRACK_Z, "UP_Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "TrackToConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Track To Constraint", "Aim the constrained object toward the target");
@@ -754,7 +760,7 @@ static void rna_def_constraint_track_to(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bTrackToConstraint", "data");
@@ -762,29 +768,29 @@ static void rna_def_constraint_track_to(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "reserved1");
RNA_def_property_enum_items(prop, track_items);
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "reserved2");
RNA_def_property_enum_items(prop, up_items);
RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_target_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_locate_like(BlenderRNA *brna)
@@ -798,7 +804,7 @@ static void rna_def_constraint_locate_like(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "data");
@@ -807,47 +813,47 @@ static void rna_def_constraint_locate_like(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);
RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z);
RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X_INVERT);
RNA_def_property_ui_text(prop, "Invert X", "Invert the X location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y_INVERT);
RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z_INVERT);
RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_rotate_like(BlenderRNA *brna)
@@ -863,47 +869,47 @@ static void rna_def_constraint_rotate_like(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y);
RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z);
RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X_INVERT);
RNA_def_property_ui_text(prop, "Invert X", "Invert the X rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y_INVERT);
RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z_INVERT);
RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET);
RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_size_like(BlenderRNA *brna)
@@ -920,32 +926,32 @@ static void rna_def_constraint_size_like(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_X);
RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X scale");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Y);
RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y scale");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Z);
RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z scale");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET);
RNA_def_property_ui_text(prop, "Offset", "Add original scale into copied scale");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_same_volume(BlenderRNA *brna)
@@ -954,10 +960,11 @@ static void rna_def_constraint_same_volume(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem volume_items[] = {
- {SAMEVOL_X, "SAMEVOL_X", 0, "X", ""},
- {SAMEVOL_Y, "SAMEVOL_Y", 0, "Y", ""},
- {SAMEVOL_Z, "SAMEVOL_Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {SAMEVOL_X, "SAMEVOL_X", 0, "X", ""},
+ {SAMEVOL_Y, "SAMEVOL_Y", 0, "Y", ""},
+ {SAMEVOL_Z, "SAMEVOL_Z", 0, "Z", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MaintainVolumeConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Maintain Volume Constraint",
@@ -968,12 +975,12 @@ static void rna_def_constraint_same_volume(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, volume_items);
RNA_def_property_ui_text(prop, "Free Axis", "The free scaling axis of the object");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "volume", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_range(prop, 0.001, 100.f);
RNA_def_property_ui_text(prop, "Volume", "Volume of the bone at rest");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
@@ -988,7 +995,7 @@ static void rna_def_constraint_transform_like(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bTransLikeConstraint", "data");
@@ -996,12 +1003,12 @@ static void rna_def_constraint_transform_like(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
}
static void rna_def_constraint_minmax(BlenderRNA *brna)
@@ -1016,7 +1023,8 @@ static void rna_def_constraint_minmax(BlenderRNA *brna)
{TRACK_nX, "FLOOR_NEGATIVE_X", 0, "-X", ""},
{TRACK_nY, "FLOOR_NEGATIVE_Y", 0, "-Y", ""},
{TRACK_nZ, "FLOOR_NEGATIVE_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FloorConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Floor Constraint", "Use the target object for location limitation");
@@ -1026,33 +1034,33 @@ static void rna_def_constraint_minmax(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "floor_location", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "minmaxflag");
RNA_def_property_enum_items(prop, minmax_items);
RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_sticky", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_USEROT);
RNA_def_property_ui_text(prop, "Use Rotation", "Use the target's rotation to determine floor");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Offset", "Offset of floor from object origin");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_action(BlenderRNA *brna)
@@ -1070,7 +1078,8 @@ static void rna_def_constraint_action(BlenderRNA *brna)
{10, "SCALE_X", 0, "X Scale", ""},
{11, "SCALE_Y", 0, "Y Scale", ""},
{12, "SCALE_Z", 0, "Z Scale", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ActionConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Action Constraint", "Map an action to the transform axes of a bone");
@@ -1080,50 +1089,51 @@ static void rna_def_constraint_action(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "transform_channel", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, transform_channel_items);
RNA_def_property_ui_text(prop, "Transform Channel",
"Transformation channel from the target that is used to key the Action");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "act");
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Action_id_poll");
RNA_def_property_ui_text(prop, "Action", "The constraining action");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_REFCOUNT);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "start");
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "end");
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_range(prop, -1000.f, 1000.f);
RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
prop = RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_range(prop, -1000.f, 1000.f);
RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
}
@@ -1139,13 +1149,15 @@ static void rna_def_constraint_locked_track(BlenderRNA *brna)
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem lock_items[] = {
{TRACK_X, "LOCK_X", 0, "X", ""},
{TRACK_Y, "LOCK_Y", 0, "Y", ""},
{TRACK_Z, "LOCK_Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "LockedTrackConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Locked Track Constraint",
@@ -1154,7 +1166,7 @@ static void rna_def_constraint_locked_track(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bLockTrackConstraint", "data");
@@ -1162,24 +1174,24 @@ static void rna_def_constraint_locked_track(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
RNA_def_property_enum_items(prop, locktrack_items);
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "lock_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "lockflag");
RNA_def_property_enum_items(prop, lock_items);
RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_follow_path(BlenderRNA *brna)
@@ -1194,13 +1206,15 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem pathup_items[] = {
{TRACK_X, "UP_X", 0, "X", ""},
{TRACK_Y, "UP_Y", 0, "Y", ""},
{TRACK_Z, "UP_Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FollowPathConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Follow Path Constraint", "Lock motion to the target path");
@@ -1211,47 +1225,47 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TIME);
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Offset", "Offset from the position corresponding to the time frame");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "offset_factor", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "offset_fac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Offset Factor", "Percentage value defining target position along length of bone");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
RNA_def_property_enum_items(prop, forwardpath_items);
RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "upflag");
RNA_def_property_enum_items(prop, pathup_items);
RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_curve_follow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_FOLLOW);
RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_fixed_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_STATIC);
RNA_def_property_ui_text(prop, "Fixed Position",
"Object will stay locked to a single point somewhere along the length of the curve "
"regardless of time");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_curve_radius", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_RADIUS);
RNA_def_property_ui_text(prop, "Curve Radius", "Object is scaled by the curve radius");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_stretch_to(BlenderRNA *brna)
@@ -1264,12 +1278,14 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
{VOLUME_X, "VOLUME_X", 0, "X", ""},
{VOLUME_Z, "VOLUME_Z", 0, "Z", ""},
{NO_VOLUME, "NO_VOLUME", 0, "None", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem plane_items[] = {
{PLANE_X, "PLANE_X", 0, "X", "Keep X Axis"},
{PLANE_Z, "PLANE_Z", 0, "Z", "Keep Z Axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "StretchToConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Stretch To Constraint", "Stretch to meet the target object");
@@ -1277,7 +1293,7 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bStretchToConstraint", "data");
@@ -1285,35 +1301,35 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "volume", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "volmode");
RNA_def_property_enum_items(prop, volume_items);
RNA_def_property_ui_text(prop, "Maintain Volume", "Maintain the object's volume as it stretches");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "plane");
RNA_def_property_enum_items(prop, plane_items);
RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "orglength");
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Original Length", "Length at rest position");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "bulge", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Volume Variation", "Factor between volume variation and stretching");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
@@ -1328,7 +1344,8 @@ static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
"Allow rotations around all axes with limits for the cone and twist axes"},
{CONSTRAINT_RB_GENERIC6DOF, "GENERIC_6_DOF", 0, "Generic 6 DoF",
"No constraints by default, limits can be set individually"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "RigidBodyJointConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Rigid Body Joint Constraint", "For use with the Game Engine");
@@ -1338,64 +1355,64 @@ static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Child Object", "Child object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "pivot_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, pivot_items);
RNA_def_property_ui_text(prop, "Pivot Type", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "pivX");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Pivot X", "Offset pivot on X");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "pivY");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Pivot Y", "Offset pivot on Y");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "pivot_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "pivZ");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Pivot Z", "Offset pivot on Z");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "axX");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Axis X", "Rotate pivot on X axis in degrees");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "axY");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Axis Y", "Rotate pivot on Y axis in degrees");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "axZ");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Axis Z", "Rotate pivot on Z axis in degrees");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_linked_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "show_pivot", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
/* Limits */
@@ -1427,64 +1444,64 @@ static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
/* Limit Min/Max for angle */
prop = RNA_def_property(srna, "limit_angle_min_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "minLimit[3]");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Minimum Angular Limit X", "");
prop = RNA_def_property(srna, "limit_angle_min_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "minLimit[4]");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Minimum Angular Limit Y", "");
prop = RNA_def_property(srna, "limit_angle_min_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "minLimit[5]");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Minimum Angular Limit Z", "");
prop = RNA_def_property(srna, "limit_angle_max_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "maxLimit[3]");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Maximum Angular Limit X", "");
prop = RNA_def_property(srna, "limit_angle_max_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "maxLimit[4]");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Maximum Angular Limit Y", "");
prop = RNA_def_property(srna, "limit_angle_max_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "maxLimit[5]");
- RNA_def_property_range(prop, -M_PI*2, M_PI*2);
+ RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
RNA_def_property_ui_text(prop, "Maximum Angular Limit Z", "");
/* Limit Booleans */
prop = RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
RNA_def_property_ui_text(prop, "Limit X", "Use minimum/maximum X limit");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 2);
RNA_def_property_ui_text(prop, "Limit Y", "Use minimum/maximum y limit");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 4);
RNA_def_property_ui_text(prop, "Limit Z", "Use minimum/maximum z limit");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_angular_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 8);
RNA_def_property_ui_text(prop, "Angular X Limit", "Use minimum/maximum X angular limit");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_angular_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 16);
RNA_def_property_ui_text(prop, "Angular Y Limit", "Use minimum/maximum Y angular limit");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_angular_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 32);
RNA_def_property_ui_text(prop, "Angular Z Limit", "Use minimum/maximum Z angular limit");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_clamp_to(BlenderRNA *brna)
@@ -1497,7 +1514,8 @@ static void rna_def_constraint_clamp_to(BlenderRNA *brna)
{CLAMPTO_X, "CLAMPTO_X", 0, "X", ""},
{CLAMPTO_Y, "CLAMPTO_Y", 0, "Y", ""},
{CLAMPTO_Z, "CLAMPTO_Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ClampToConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Clamp To Constraint",
@@ -1509,18 +1527,18 @@ static void rna_def_constraint_clamp_to(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "main_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, clamp_items);
RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box)");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_transform(BlenderRNA *brna)
@@ -1532,13 +1550,15 @@ static void rna_def_constraint_transform(BlenderRNA *brna)
{0, "LOCATION", 0, "Loc", ""},
{1, "ROTATION", 0, "Rot", ""},
{2, "SCALE", 0, "Scale", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem axis_map_items[] = {
{0, "X", 0, "X", ""},
{1, "Y", 0, "Y", ""},
{2, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "TransformConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Transformation Constraint", "Map transformations of the target to the object");
@@ -1548,119 +1568,119 @@ static void rna_def_constraint_transform(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "map_from", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "from");
RNA_def_property_enum_items(prop, transform_items);
RNA_def_property_ui_text(prop, "Map From", "The transformation type to use from the target");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "map_to", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "to");
RNA_def_property_enum_items(prop, transform_items);
RNA_def_property_ui_text(prop, "Map To", "The transformation type to affect of the constrained object");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "map_to_x_from", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "map[0]");
RNA_def_property_enum_items(prop, axis_map_items);
RNA_def_property_ui_text(prop, "Map To X From", "The source axis constrained object's X axis uses");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "map_to_y_from", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "map[1]");
RNA_def_property_enum_items(prop, axis_map_items);
RNA_def_property_ui_text(prop, "Map To Y From", "The source axis constrained object's Y axis uses");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "map_to_z_from", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "map[2]");
RNA_def_property_enum_items(prop, axis_map_items);
RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_motion_extrapolate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "from_min[0]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "from_min_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "from_min[1]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "from_min_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "from_min[2]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "from_max_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "from_max[0]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "from_max_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "from_max[1]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "from_max_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "from_max[2]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "to_min_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "to_min[0]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "To Minimum X", "Bottom range of X axis destination motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "to_min_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "to_min[1]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "To Minimum Y", "Bottom range of Y axis destination motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "to_min_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "to_min[2]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "To Minimum Z", "Bottom range of Z axis destination motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "to_max_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "to_max[0]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "To Maximum X", "Top range of X axis destination motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "to_max_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "to_max[1]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "To Maximum Y", "Top range of Y axis destination motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "to_max_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "to_max[2]");
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_location_limit(BlenderRNA *brna)
@@ -1675,73 +1695,73 @@ static void rna_def_constraint_location_limit(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "xmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "ymin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "zmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "xmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "ymax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "zmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
@@ -1756,58 +1776,58 @@ static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XROT);
RNA_def_property_ui_text(prop, "Limit X", "Use the minimum X value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YROT);
RNA_def_property_ui_text(prop, "Limit Y", "Use the minimum Y value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZROT);
RNA_def_property_ui_text(prop, "Limit Z", "Use the minimum Z value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "xmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "ymin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "zmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "xmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "ymax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "zmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_size_limit(BlenderRNA *brna)
@@ -1822,73 +1842,73 @@ static void rna_def_constraint_size_limit(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ymin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ymax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_distance_limit(BlenderRNA *brna)
@@ -1902,7 +1922,7 @@ static void rna_def_constraint_distance_limit(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bDistLimitConstraint", "data");
@@ -1910,29 +1930,29 @@ static void rna_def_constraint_distance_limit(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "dist");
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, constraint_distance_items);
RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMITDIST_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
@@ -1947,7 +1967,8 @@ static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
"Shrink the location to the nearest target surface along a given axis"},
{MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex",
"Shrink the location to the nearest target vertex"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ShrinkwrapConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Shrinkwrap Constraint", "Create constraint-based shrinkwrap relationship");
@@ -1958,34 +1979,34 @@ static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "shrinkwrap_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
RNA_def_property_enum_items(prop, type_items);
RNA_def_property_ui_text(prop, "Shrinkwrap Type", "Select type of shrinkwrap algorithm for target position");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "dist");
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Distance", "Distance to Target");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
RNA_def_property_ui_text(prop, "Axis X", "Projection over X Axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
RNA_def_property_ui_text(prop, "Axis Y", "Projection over Y Axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
RNA_def_property_ui_text(prop, "Axis Z", "Projection over Z Axis");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_damped_track(BlenderRNA *brna)
@@ -2000,7 +2021,8 @@ static void rna_def_constraint_damped_track(BlenderRNA *brna)
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "DampedTrackConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Damped Track Constraint",
@@ -2009,7 +2031,7 @@ static void rna_def_constraint_damped_track(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bDampTrackConstraint", "data");
@@ -2017,18 +2039,18 @@ static void rna_def_constraint_damped_track(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
RNA_def_property_enum_items(prop, damptrack_items);
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_spline_ik(BlenderRNA *brna)
@@ -2042,7 +2064,8 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
"Use the original scaling of the bones"},
{CONSTRAINT_SPLINEIK_XZS_VOLUMETRIC, "VOLUME_PRESERVE", 0, "Volume Preservation",
"Scale of the X and Z axes is the inverse of the Y-Scale"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SplineIKConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Spline IK Constraint", "Align 'n' bones along a curve");
@@ -2053,15 +2076,15 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Curve that controls this relationship");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "chainlen");
- /* TODO: this should really check the max length of the chain the constraint is attached to */
+ /* TODO: this should really check the max length of the chain the constraint is attached to */
RNA_def_property_range(prop, 1, 255);
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the chain");
- /* XXX: this update goes wrong... needs extra flush? */
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ /* XXX: this update goes wrong... needs extra flush? */
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* direct access to bindings */
/* NOTE: only to be used by experienced users */
@@ -2074,38 +2097,38 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Joint Bindings",
"(EXPERIENCED USERS ONLY) The relative positions of the joints along the chain, "
"as percentages");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
/* settings */
prop = RNA_def_property(srna, "use_chain_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_ROOT);
RNA_def_property_ui_text(prop, "Chain Offset", "Offset the entire chain relative to the root joint");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_even_divisions", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_EVENSPLITS);
RNA_def_property_ui_text(prop, "Even Divisions",
"Ignore the relative lengths of the bones when fitting to the curve");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_y_stretch", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_SCALE_LIMITED);
RNA_def_property_ui_text(prop, "Y Stretch", "Stretch the Y axis of the bones to fit the curve");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "use_curve_radius", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_CURVERAD);
RNA_def_property_ui_text(prop, "Use Curve Radius",
"Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, "
"on top of XZ Scale mode");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "xz_scale_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "xzScaleMode");
RNA_def_property_enum_items(prop, splineik_xz_scale_mode);
RNA_def_property_ui_text(prop, "XZ Scale Mode",
"Method used for determining the scaling of the X and Z axes of the bones");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_pivot(BlenderRNA *brna)
@@ -2124,7 +2147,8 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
{PIVOTCON_AXIS_X, "X", 0, "X Rot", "Use the pivot point in the positive rotation range around the X-axis"},
{PIVOTCON_AXIS_Y, "Y", 0, "Y Rot", "Use the pivot point in the positive rotation range around the Y-axis"},
{PIVOTCON_AXIS_Z, "Z", 0, "Z Rot", "Use the pivot point in the positive rotation range around the Z-axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "PivotConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Pivot Constraint", "Rotate around a different point");
@@ -2132,7 +2156,7 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_struct_sdna_from(srna, "bPivotConstraint", "data");
@@ -2141,33 +2165,33 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tar");
RNA_def_property_ui_text(prop, "Target", "Target Object, defining the position of the pivot when defined");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "subtarget");
RNA_def_property_ui_text(prop, "Sub-Target", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* pivot offset */
prop = RNA_def_property(srna, "use_relative_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", PIVOTCON_FLAG_OFFSET_ABS);
RNA_def_property_ui_text(prop, "Use Relative Offset",
"Offset will be an absolute point in space instead of relative to the target");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_ui_text(prop, "Offset",
"Offset of pivot from target (when set), or from owner's location "
"(when Fixed Position is off), or the absolute pivot point");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
/* rotation-based activation */
prop = RNA_def_property(srna, "rotation_range", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "rotAxis");
RNA_def_property_enum_items(prop, pivot_rotAxis_items);
RNA_def_property_ui_text(prop, "Enabled Rotation Range", "Rotation range on which pivoting should occur");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_follow_track(BlenderRNA *brna)
@@ -2184,31 +2208,31 @@ static void rna_def_constraint_follow_track(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "clip");
RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* track */
prop = RNA_def_property(srna, "track", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "track");
RNA_def_property_ui_text(prop, "Track", "Movie tracking track to follow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* use default clip */
prop = RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FOLLOWTRACK_ACTIVECLIP);
RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
/* use 3d position */
prop = RNA_def_property(srna, "use_3d_position", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FOLLOWTRACK_USE_3D_POSITION);
RNA_def_property_ui_text(prop, "3D Position", "Use 3D position of track to parent to");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
/* object */
prop = RNA_def_property(srna, "object", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "object");
RNA_def_property_ui_text(prop, "Object", "Movie tracking object to follow (if empty, camera object is used)");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* camera */
prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
@@ -2216,7 +2240,7 @@ static void rna_def_constraint_follow_track(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Camera",
"Camera to which motion is parented (if empty active scene camera is used)");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
RNA_def_property_pointer_funcs(prop, NULL, "rna_Constraint_followTrack_camera_set", NULL,
"rna_Constraint_cameraObject_poll");
@@ -2226,7 +2250,7 @@ static void rna_def_constraint_follow_track(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Depth Object",
"Object used to define depth in camera space by projecting onto surface of this object");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
RNA_def_property_pointer_funcs(prop, NULL, "rna_Constraint_followTrack_depthObject_set", NULL,
"rna_Constraint_followTrack_depthObject_poll");
}
@@ -2245,13 +2269,13 @@ static void rna_def_constraint_camera_solver(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "clip");
RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* use default clip */
prop = RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAMERASOLVER_ACTIVECLIP);
RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
}
static void rna_def_constraint_object_solver(BlenderRNA *brna)
@@ -2268,19 +2292,19 @@ static void rna_def_constraint_object_solver(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "clip");
RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* use default clip */
prop = RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAMERASOLVER_ACTIVECLIP);
RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
/* object */
prop = RNA_def_property(srna, "object", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "object");
RNA_def_property_ui_text(prop, "Object", "Movie tracking object to follow");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* camera */
prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
@@ -2288,7 +2312,7 @@ static void rna_def_constraint_object_solver(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Camera",
"Camera to which motion is parented (if empty active scene camera is used)");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
RNA_def_property_pointer_funcs(prop, NULL, "rna_Constraint_objectSolver_camera_set", NULL,
"rna_Constraint_cameraObject_poll");
}
@@ -2300,7 +2324,7 @@ void RNA_def_constraint(BlenderRNA *brna)
PropertyRNA *prop;
/* data */
- srna = RNA_def_struct(brna, "Constraint", NULL );
+ srna = RNA_def_struct(brna, "Constraint", NULL);
RNA_def_struct_ui_text(srna, "Constraint", "Constraint modifying the transformation of objects and bones");
RNA_def_struct_refine_func(srna, "rna_ConstraintType_refine");
RNA_def_struct_path_func(srna, "rna_Constraint_path");
@@ -2311,7 +2335,7 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Constraint_name_set");
RNA_def_property_ui_text(prop, "Name", "Constraint name");
RNA_def_struct_name_property(srna, prop);
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT|NA_RENAME, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT | NA_RENAME, NULL);
/* enums */
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
@@ -2342,13 +2366,13 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
- /* XXX this is really an internal flag, but it may be useful for some tools to be able to access this... */
+ /* XXX this is really an internal flag, but it may be useful for some tools to be able to access this... */
prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
RNA_def_property_ui_text(prop, "Valid", "Constraint has valid settings and can be evaluated");
- /* TODO: setting this to true must ensure that all others in stack are turned off too... */
+ /* TODO: setting this to true must ensure that all others in stack are turned off too... */
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
@@ -2363,7 +2387,7 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "enforce");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Influence", "Amount of influence constraint will have on the final solution");
- RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_influence_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_influence_update");
/* readonly values */
prop = RNA_def_property(srna, "error_location", PROP_FLOAT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index bd149b1f1f3..4204506e67b 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -41,54 +41,54 @@
static PointerRNA rna_Context_manager_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_WindowManager, CTX_wm_manager(C));
}
static PointerRNA rna_Context_window_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C));
}
static PointerRNA rna_Context_screen_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_Screen, CTX_wm_screen(C));
}
static PointerRNA rna_Context_area_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
PointerRNA newptr;
- RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_Area, CTX_wm_area(C), &newptr);
+ RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Area, CTX_wm_area(C), &newptr);
return newptr;
}
static PointerRNA rna_Context_space_data_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
PointerRNA newptr;
- RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_Space, CTX_wm_space_data(C), &newptr);
+ RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Space, CTX_wm_space_data(C), &newptr);
return newptr;
}
static PointerRNA rna_Context_region_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
PointerRNA newptr;
- RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_Region, CTX_wm_region(C), &newptr);
+ RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Region, CTX_wm_region(C), &newptr);
return newptr;
}
static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
/* only exists for one space still, no generic system yet */
if (CTX_wm_view3d(C)) {
PointerRNA newptr;
- RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_RegionView3D, CTX_wm_region_data(C), &newptr);
+ RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_RegionView3D, CTX_wm_region_data(C), &newptr);
return newptr;
}
@@ -97,19 +97,19 @@ static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
static PointerRNA rna_Context_main_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_BlendData, CTX_data_main(C));
}
static PointerRNA rna_Context_scene_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_Scene, CTX_data_scene(C));
}
static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
ptr->id.data = CTX_data_scene(C);
return rna_pointer_inherit_refine(ptr, &RNA_ToolSettings, CTX_data_tool_settings(C));
}
@@ -123,7 +123,7 @@ static PointerRNA rna_Context_user_preferences_get(PointerRNA *UNUSED(ptr))
static int rna_Context_mode_get(PointerRNA *ptr)
{
- bContext *C = (bContext*)ptr->data;
+ bContext *C = (bContext *)ptr->data;
return CTX_data_mode_enum(C);
}
@@ -149,7 +149,8 @@ void RNA_def_context(BlenderRNA *brna)
{CTX_MODE_PAINT_TEXTURE, "PAINT_TEXTURE", 0, "Texture Paint", ""},
{CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""},
{CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Context", NULL);
RNA_def_struct_ui_text(srna, "Context", "Current windowmanager and data context");
diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c
index fa18c92b86a..44c8a2b412b 100644
--- a/source/blender/makesrna/intern/rna_controller.c
+++ b/source/blender/makesrna/intern/rna_controller.c
@@ -43,36 +43,37 @@ EnumPropertyItem controller_type_items[] = {
{CONT_LOGIC_XNOR, "LOGIC_XNOR", 0, "Xnor", "Logic Xnor"},
{CONT_EXPRESSION, "EXPRESSION", 0, "Expression", ""},
{CONT_PYTHON, "PYTHON", 0, "Python", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#include "BKE_sca.h"
#include "DNA_actuator_types.h"
-static struct StructRNA* rna_Controller_refine(struct PointerRNA *ptr)
+static StructRNA *rna_Controller_refine(struct PointerRNA *ptr)
{
- bController *controller = (bController*)ptr->data;
+ bController *controller = (bController *)ptr->data;
switch (controller->type) {
- case CONT_LOGIC_AND:
- return &RNA_AndController;
- case CONT_LOGIC_OR:
- return &RNA_OrController;
- case CONT_LOGIC_NAND:
- return &RNA_NandController;
- case CONT_LOGIC_NOR:
- return &RNA_NorController;
- case CONT_LOGIC_XOR:
- return &RNA_XorController;
- case CONT_LOGIC_XNOR:
- return &RNA_XnorController;
- case CONT_EXPRESSION:
- return &RNA_ExpressionController;
- case CONT_PYTHON:
- return &RNA_PythonController;
- default:
- return &RNA_Controller;
+ case CONT_LOGIC_AND:
+ return &RNA_AndController;
+ case CONT_LOGIC_OR:
+ return &RNA_OrController;
+ case CONT_LOGIC_NAND:
+ return &RNA_NandController;
+ case CONT_LOGIC_NOR:
+ return &RNA_NorController;
+ case CONT_LOGIC_XOR:
+ return &RNA_XorController;
+ case CONT_LOGIC_XNOR:
+ return &RNA_XnorController;
+ case CONT_EXPRESSION:
+ return &RNA_ExpressionController;
+ case CONT_PYTHON:
+ return &RNA_PythonController;
+ default:
+ return &RNA_Controller;
}
}
@@ -116,9 +117,9 @@ static int rna_Controller_state_number_get(struct PointerRNA *ptr)
bController *cont = (bController *)ptr->data;
int bit;
- for (bit = 0; bit<32; bit++) {
- if (cont->state_mask & (1<<bit))
- return bit+1;
+ for (bit = 0; bit < 32; bit++) {
+ if (cont->state_mask & (1 << bit))
+ return bit + 1;
}
return 0;
}
@@ -150,9 +151,9 @@ static void rna_Controller_state_get(PointerRNA *ptr, int *values)
bController *cont = (bController *)ptr->data;
int i;
- memset(values, 0, sizeof(int)*OB_MAX_STATES);
- for (i = 0; i<OB_MAX_STATES; i++)
- values[i] = (cont->state_mask & (1<<i));
+ memset(values, 0, sizeof(int) * OB_MAX_STATES);
+ for (i = 0; i < OB_MAX_STATES; i++)
+ values[i] = (cont->state_mask & (1 << i));
}
static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
@@ -161,7 +162,7 @@ static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
int i, tot = 0;
/* ensure we always have some state selected */
- for (i = 0; i<OB_MAX_STATES; i++)
+ for (i = 0; i < OB_MAX_STATES; i++)
if (values[i])
tot++;
@@ -169,12 +170,12 @@ static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
return;
/* only works for one state at once */
- if (tot>1)
+ if (tot > 1)
return;
- for (i = 0; i<OB_MAX_STATES; i++) {
- if (values[i]) cont->state_mask |= (1<<i);
- else cont->state_mask &= ~(1<<i);
+ for (i = 0; i < OB_MAX_STATES; i++) {
+ if (values[i]) cont->state_mask |= (1 << i);
+ else cont->state_mask &= ~(1 << i);
}
}
#endif
@@ -189,7 +190,8 @@ void RNA_def_controller(BlenderRNA *brna)
static EnumPropertyItem python_controller_modes[] = {
{CONT_PY_SCRIPT, "SCRIPT", 0, "Script", ""},
{CONT_PY_MODULE, "MODULE", 0, "Module", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* Controller */
srna = RNA_def_struct(brna, "Controller", NULL);
@@ -265,7 +267,7 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* Python Controller */
- srna = RNA_def_struct(brna, "PythonController", "Controller" );
+ srna = RNA_def_struct(brna, "PythonController", "Controller");
RNA_def_struct_sdna_from(srna, "bPythonCont", "data");
RNA_def_struct_ui_text(srna, "Python Controller", "Controller executing a python script");
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index 96ec37d8fa0..f70fe9082af 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -44,25 +44,28 @@
#include "ED_curve.h"
EnumPropertyItem beztriple_handle_type_items[] = {
- {HD_FREE, "FREE", 0, "Free", ""},
- {HD_VECT, "VECTOR", 0, "Vector", ""},
- {HD_ALIGN, "ALIGNED", 0, "Aligned", ""},
- {HD_AUTO, "AUTO", 0, "Auto", ""},
- {0, NULL, 0, NULL, NULL}};
+ {HD_FREE, "FREE", 0, "Free", ""},
+ {HD_VECT, "VECTOR", 0, "Vector", ""},
+ {HD_ALIGN, "ALIGNED", 0, "Aligned", ""},
+ {HD_AUTO, "AUTO", 0, "Auto", ""},
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem keyframe_handle_type_items[] = {
- {HD_FREE, "FREE", 0, "Free", ""},
- {HD_VECT, "VECTOR", 0, "Vector", ""},
- {HD_ALIGN, "ALIGNED", 0, "Aligned", ""},
- {HD_AUTO, "AUTO", 0, "Automatic", ""},
- {HD_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto Clamped", "Auto handles clamped to not overshoot"},
- {0, NULL, 0, NULL, NULL}};
+ {HD_FREE, "FREE", 0, "Free", ""},
+ {HD_VECT, "VECTOR", 0, "Vector", ""},
+ {HD_ALIGN, "ALIGNED", 0, "Aligned", ""},
+ {HD_AUTO, "AUTO", 0, "Automatic", ""},
+ {HD_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto Clamped", "Auto handles clamped to not overshoot"},
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem beztriple_interpolation_mode_items[] = {
- {BEZT_IPO_CONST, "CONSTANT", 0, "Constant", ""},
- {BEZT_IPO_LIN, "LINEAR", 0, "Linear", ""},
- {BEZT_IPO_BEZ, "BEZIER", 0, "Bezier", ""},
- {0, NULL, 0, NULL, NULL}};
+ {BEZT_IPO_CONST, "CONSTANT", 0, "Constant", ""},
+ {BEZT_IPO_LIN, "LINEAR", 0, "Linear", ""},
+ {BEZT_IPO_BEZ, "BEZIER", 0, "Bezier", ""},
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem curve_type_items[] = {
{CU_POLY, "POLY", 0, "Poly", ""},
@@ -70,21 +73,24 @@ EnumPropertyItem curve_type_items[] = {
{CU_BSPLINE, "BSPLINE", 0, "BSpline", ""},
{CU_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
{CU_NURBS, "NURBS", 0, "Ease", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static const EnumPropertyItem curve3d_fill_mode_items[] = {
{0, "FULL", 0, "Full", ""},
{CU_BACK, "BACK", 0, "Back", ""},
{CU_FRONT, "FRONT", 0, "Front", ""},
- {CU_FRONT|CU_BACK, "HALF", 0, "Half", ""},
- {0, NULL, 0, NULL, NULL}};
+ {CU_FRONT | CU_BACK, "HALF", 0, "Half", ""},
+ {0, NULL, 0, NULL, NULL}
+};
static const EnumPropertyItem curve2d_fill_mode_items[] = {
{0, "NONE", 0, "None", ""},
{CU_BACK, "BACK", 0, "Back", ""},
{CU_FRONT, "FRONT", 0, "Front", ""},
- {CU_FRONT|CU_BACK, "BOTH", 0, "Both", ""},
- {0, NULL, 0, NULL, NULL}};
+ {CU_FRONT | CU_BACK, "BOTH", 0, "Both", ""},
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -128,8 +134,8 @@ static Nurb *curve_nurb_from_point(Curve *cu, const void *point, int *nu_index,
}
if (pt_index) {
- if (nu->type == CU_BEZIER) *pt_index = (int)((BezTriple *)point - nu->bezt);
- else *pt_index = (int)((BPoint *)point - nu->bp);
+ if (nu->type == CU_BEZIER) *pt_index = (int)((BezTriple *)point - nu->bezt);
+ else *pt_index = (int)((BPoint *)point - nu->bp);
}
}
@@ -138,7 +144,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;
+ Curve *cu = (Curve *)ptr->data;
short obtype = BKE_curve_type_get(cu);
if (obtype == OB_FONT) return &RNA_TextCurve;
@@ -148,7 +154,7 @@ static StructRNA *rna_Curve_refine(PointerRNA *ptr)
static void rna_BezTriple_handle1_get(PointerRNA *ptr, float *values)
{
- BezTriple *bt = (BezTriple*)ptr->data;
+ BezTriple *bt = (BezTriple *)ptr->data;
values[0] = bt->vec[0][0];
values[1] = bt->vec[0][1];
@@ -157,7 +163,7 @@ static void rna_BezTriple_handle1_get(PointerRNA *ptr, float *values)
static void rna_BezTriple_handle1_set(PointerRNA *ptr, const float *values)
{
- BezTriple *bt = (BezTriple*)ptr->data;
+ BezTriple *bt = (BezTriple *)ptr->data;
bt->vec[0][0] = values[0];
bt->vec[0][1] = values[1];
@@ -166,7 +172,7 @@ static void rna_BezTriple_handle1_set(PointerRNA *ptr, const float *values)
static void rna_BezTriple_handle2_get(PointerRNA *ptr, float *values)
{
- BezTriple *bt = (BezTriple*)ptr->data;
+ BezTriple *bt = (BezTriple *)ptr->data;
values[0] = bt->vec[2][0];
values[1] = bt->vec[2][1];
@@ -175,7 +181,7 @@ static void rna_BezTriple_handle2_get(PointerRNA *ptr, float *values)
static void rna_BezTriple_handle2_set(PointerRNA *ptr, const float *values)
{
- BezTriple *bt = (BezTriple*)ptr->data;
+ BezTriple *bt = (BezTriple *)ptr->data;
bt->vec[2][0] = values[0];
bt->vec[2][1] = values[1];
@@ -184,7 +190,7 @@ static void rna_BezTriple_handle2_set(PointerRNA *ptr, const float *values)
static void rna_BezTriple_ctrlpoint_get(PointerRNA *ptr, float *values)
{
- BezTriple *bt = (BezTriple*)ptr->data;
+ BezTriple *bt = (BezTriple *)ptr->data;
values[0] = bt->vec[1][0];
values[1] = bt->vec[1][1];
@@ -193,7 +199,7 @@ static void rna_BezTriple_ctrlpoint_get(PointerRNA *ptr, float *values)
static void rna_BezTriple_ctrlpoint_set(PointerRNA *ptr, const float *values)
{
- BezTriple *bt = (BezTriple*)ptr->data;
+ BezTriple *bt = (BezTriple *)ptr->data;
bt->vec[1][0] = values[0];
bt->vec[1][1] = values[1];
@@ -202,7 +208,7 @@ static void rna_BezTriple_ctrlpoint_set(PointerRNA *ptr, const float *values)
static void rna_Curve_texspace_set(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->data;
+ Curve *cu = (Curve *)ptr->data;
if (cu->texflag & CU_AUTOSPACE)
BKE_curve_texspace_calc(cu);
@@ -210,8 +216,8 @@ static void rna_Curve_texspace_set(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
static int rna_Curve_texspace_editable(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->data;
- return (cu->texflag & CU_AUTOSPACE)? 0: PROP_EDITABLE;
+ Curve *cu = (Curve *)ptr->data;
+ return (cu->texflag & CU_AUTOSPACE) ? 0 : PROP_EDITABLE;
}
static void rna_Curve_texspace_loc_get(PointerRNA *ptr, float *values)
@@ -250,24 +256,24 @@ static void rna_Curve_texspace_size_set(PointerRNA *ptr, const float *values)
static void rna_Curve_material_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
*min = 0;
- *max = cu->totcol-1;
+ *max = cu->totcol - 1;
*max = MAX2(0, *max);
}
static void rna_Curve_active_textbox_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
*min = 0;
- *max = cu->totbox-1;
+ *max = cu->totbox - 1;
*max = MAX2(0, *max);
}
static void rna_Curve_dimension_set(PointerRNA *ptr, int value)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
if (value == CU_3D) cu->flag |= CU_3D;
else cu->flag &= ~CU_3D;
@@ -277,7 +283,7 @@ static void rna_Curve_dimension_set(PointerRNA *ptr, int value)
static EnumPropertyItem *rna_Curve_fill_mode_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *UNUSED(free))
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
/* cast to quiet warning it IS a const still */
return (EnumPropertyItem *)((cu->flag & CU_3D) ? curve3d_fill_mode_items : curve2d_fill_mode_items);
@@ -285,28 +291,28 @@ static EnumPropertyItem *rna_Curve_fill_mode_itemf(bContext *UNUSED(C), PointerR
static int rna_Nurb_length(PointerRNA *ptr)
{
- Nurb *nu = (Nurb*)ptr->data;
+ Nurb *nu = (Nurb *)ptr->data;
if (nu->type == CU_BEZIER) return 0;
- return nu->pntsv>0 ? nu->pntsu*nu->pntsv : nu->pntsu;
+ return nu->pntsv > 0 ? nu->pntsu * nu->pntsv : nu->pntsu;
}
static void rna_Nurb_type_set(PointerRNA *ptr, int value)
{
- Nurb *nu = (Nurb*)ptr->data;
+ Nurb *nu = (Nurb *)ptr->data;
ED_nurb_set_spline_type(nu, value);
}
static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Nurb *nu = (Nurb*)ptr->data;
- rna_iterator_array_begin(iter, (void*)nu->bp, sizeof(BPoint),
- nu->pntsv > 0 ? nu->pntsu*nu->pntsv : nu->pntsu, 0, NULL);
+ Nurb *nu = (Nurb *)ptr->data;
+ rna_iterator_array_begin(iter, (void *)nu->bp, sizeof(BPoint),
+ nu->pntsv > 0 ? nu->pntsu * nu->pntsv : nu->pntsu, 0, NULL);
}
static void rna_Curve_update_data_id(Main *UNUSED(bmain), Scene *UNUSED(scene), ID *id)
{
DAG_id_tag_update(id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -322,7 +328,7 @@ static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Curve_update_points(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
Nurb *nu = curve_nurb_from_point(cu, ptr->data, NULL, NULL);
if (nu)
@@ -333,7 +339,7 @@ static void rna_Curve_update_points(Main *bmain, Scene *scene, PointerRNA *ptr)
static PointerRNA rna_Curve_bevelObject_get(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
Object *ob = cu->bevobj;
if (ob)
@@ -344,8 +350,8 @@ static PointerRNA rna_Curve_bevelObject_get(PointerRNA *ptr)
static void rna_Curve_bevelObject_set(PointerRNA *ptr, PointerRNA value)
{
- Curve *cu = (Curve*)ptr->id.data;
- Object *ob = (Object*)value.data;
+ Curve *cu = (Curve *)ptr->id.data;
+ Object *ob = (Object *)value.data;
if (ob) {
/* if bevel object has got the save curve, as object, for which it's */
@@ -361,8 +367,8 @@ static void rna_Curve_bevelObject_set(PointerRNA *ptr, PointerRNA value)
static int rna_Curve_otherObject_poll(PointerRNA *ptr, PointerRNA value)
{
- Curve *cu = (Curve*)ptr->id.data;
- Object *ob = (Object*)value.data;
+ Curve *cu = (Curve *)ptr->id.data;
+ Object *ob = (Object *)value.data;
if (ob) {
if (ob->type == OB_CURVE && ob->data != cu) {
@@ -375,7 +381,7 @@ static int rna_Curve_otherObject_poll(PointerRNA *ptr, PointerRNA value)
static PointerRNA rna_Curve_taperObject_get(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
Object *ob = cu->taperobj;
if (ob)
@@ -386,8 +392,8 @@ static PointerRNA rna_Curve_taperObject_get(PointerRNA *ptr)
static void rna_Curve_taperObject_set(PointerRNA *ptr, PointerRNA value)
{
- Curve *cu = (Curve*)ptr->id.data;
- Object *ob = (Object*)value.data;
+ Curve *cu = (Curve *)ptr->id.data;
+ Object *ob = (Object *)value.data;
if (ob) {
/* if taper object has got the save curve, as object, for which it's */
@@ -403,7 +409,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;
+ Curve *cu = (Curve *)ptr->id.data;
ListBase *nurbs = BKE_curve_nurbs_get(cu);
Nurb *nu = nurbs->first;
@@ -417,7 +423,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;
+ Curve *cu = (Curve *)ptr->id.data;
ListBase *nurbs = BKE_curve_nurbs_get(cu);
Nurb *nu = nurbs->first;
@@ -432,26 +438,26 @@ static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, Pointe
static float rna_Curve_offset_get(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
return cu->width - 1.0f;
}
static void rna_Curve_offset_set(PointerRNA *ptr, float value)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
cu->width = 1.0f + value;
}
/* name functions that ignore the first two ID characters */
void rna_Curve_body_get(PointerRNA *ptr, char *value)
{
- Curve *cu = (Curve*)ptr->id.data;
- BLI_strncpy(value, cu->str, cu->len+1);
+ Curve *cu = (Curve *)ptr->id.data;
+ BLI_strncpy(value, cu->str, cu->len + 1);
}
int rna_Curve_body_length(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
return cu->len;
}
@@ -459,7 +465,7 @@ int rna_Curve_body_length(PointerRNA *ptr)
void rna_Curve_body_set(PointerRNA *ptr, const char *value)
{
int len = strlen(value);
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
cu->len = cu->pos = len;
@@ -470,15 +476,15 @@ void rna_Curve_body_set(PointerRNA *ptr, const char *value)
cu->str = MEM_callocN(len + sizeof(wchar_t), "str");
/* don't know why this is +4, just duplicating load_editText() */
- cu->strinfo = MEM_callocN((len+4) *sizeof(CharInfo), "strinfo");
+ cu->strinfo = MEM_callocN((len + 4) * sizeof(CharInfo), "strinfo");
/*BLI_strncpy_wchar_as_utf8(cu->str, value, len+1); *//* value is not wchar_t */
- BLI_strncpy(cu->str, value, len+1);
+ BLI_strncpy(cu->str, value, len + 1);
}
static void rna_Nurb_update_cyclic_u(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Nurb *nu = (Nurb*)ptr->data;
+ Nurb *nu = (Nurb *)ptr->data;
if (nu->type == CU_BEZIER) {
BKE_nurb_handles_calc(nu);
@@ -492,7 +498,7 @@ static void rna_Nurb_update_cyclic_u(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Nurb_update_cyclic_v(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Nurb *nu = (Nurb*)ptr->data;
+ Nurb *nu = (Nurb *)ptr->data;
BKE_nurb_knot_calc_v(nu);
@@ -501,7 +507,7 @@ static void rna_Nurb_update_cyclic_v(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Nurb_update_knot_u(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Nurb *nu = (Nurb*)ptr->data;
+ Nurb *nu = (Nurb *)ptr->data;
BKE_nurb_order_clamp_u(nu);
BKE_nurb_knot_calc_u(nu);
@@ -511,7 +517,7 @@ static void rna_Nurb_update_knot_u(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Nurb_update_knot_v(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Nurb *nu = (Nurb*)ptr->data;
+ Nurb *nu = (Nurb *)ptr->data;
BKE_nurb_order_clamp_v(nu);
BKE_nurb_knot_calc_v(nu);
@@ -558,7 +564,7 @@ static void rna_Curve_spline_bezpoints_add(ID *id, Nurb *nu, ReportList *reports
static Nurb *rna_Curve_spline_new(Curve *cu, int type)
{
- Nurb *nu = (Nurb *) MEM_callocN(sizeof( Nurb ), "spline.new" );
+ Nurb *nu = (Nurb *) MEM_callocN(sizeof(Nurb), "spline.new");
if (type == CU_BEZIER) {
BezTriple *bezt = (BezTriple *)MEM_callocN(sizeof(BezTriple), "spline.new.bezt");
@@ -592,7 +598,7 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu)
found = BLI_remlink_safe(nurbs, nu);
if (!found) {
- BKE_reportf(reports, RPT_ERROR, "Curve \"%s\" does not contain spline given", cu->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Curve \"%s\" does not contain spline given", cu->id.name + 2);
return;
}
@@ -600,7 +606,7 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu)
/* invalidate pointer!, no can do */
DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_GEOM|ND_DATA, NULL);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
}
static void rna_Curve_spline_clear(Curve *cu)
@@ -610,12 +616,12 @@ static void rna_Curve_spline_clear(Curve *cu)
BKE_nurbList_free(nurbs);
DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_GEOM|ND_DATA, NULL);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
}
static PointerRNA rna_Curve_active_spline_get(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->data;
+ Curve *cu = (Curve *)ptr->data;
Nurb *nu;
ListBase *nurbs = BKE_curve_nurbs_get(cu);
@@ -630,7 +636,7 @@ static PointerRNA rna_Curve_active_spline_get(PointerRNA *ptr)
static void rna_Curve_active_spline_set(PointerRNA *ptr, PointerRNA value)
{
- Curve *cu = (Curve*)ptr->data;
+ Curve *cu = (Curve *)ptr->data;
Nurb *nu = value.data;
ListBase *nubase = BKE_curve_nurbs_get(cu);
@@ -643,7 +649,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;
+ Curve *cu = (Curve *)ptr->id.data;
ListBase *nubase = BKE_curve_nurbs_get(cu);
Nurb *nu = ptr->data;
int index = BLI_findindex(nubase, nu);
@@ -657,7 +663,7 @@ static char *rna_Curve_spline_path(PointerRNA *ptr)
/* use for both bezier and nurbs */
static char *rna_Curve_spline_point_path(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
Nurb *nu;
void *point = ptr->data;
int nu_index, pt_index;
@@ -680,7 +686,7 @@ static char *rna_Curve_spline_point_path(PointerRNA *ptr)
static char *rna_TextBox_path(PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
TextBox *tb = ptr->data;
int index = (int)(tb - cu->tb);
@@ -692,7 +698,7 @@ static char *rna_TextBox_path(PointerRNA *ptr)
static void rna_Curve_splines_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Curve *cu = (Curve*)ptr->id.data;
+ Curve *cu = (Curve *)ptr->id.data;
rna_iterator_listbase_begin(iter, BKE_curve_nurbs_get(cu), NULL);
}
@@ -909,7 +915,8 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
{CU_RIGHT, "RIGHT", 0, "Right", "Align text to the right"},
{CU_JUSTIFY, "JUSTIFY", 0, "Justify", "Align to the left and the right"},
{CU_FLUSH, "FLUSH", 0, "Flush", "Align to the left and the right, with equal character spacing"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* Enums */
prop = RNA_def_property(srna, "align", PROP_ENUM, PROP_NONE);
@@ -992,7 +999,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
/* strings */
prop = RNA_def_property(srna, "family", PROP_STRING, PROP_NONE);
- RNA_def_property_string_maxlength(prop, MAX_ID_NAME-2);
+ RNA_def_property_string_maxlength(prop, MAX_ID_NAME - 2);
RNA_def_property_ui_text(prop, "Object Font",
"Use Blender Objects as font characters (give font objects a common name "
"followed by the character they represent, eg. familya, familyb, etc, "
@@ -1117,10 +1124,12 @@ static void rna_def_charinfo(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* probably there is no reason to expose this */
- /* prop= RNA_def_property(srna, "wrap", PROP_BOOLEAN, PROP_NONE);
+#if 0
+ prop= RNA_def_property(srna, "wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_WRAP);
RNA_def_property_ui_text(prop, "Wrap", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data"); */
+#endif
prop = RNA_def_property(srna, "use_small_caps", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_SMALLCAPS);
@@ -1170,16 +1179,16 @@ static void rna_def_curve_spline_points(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "add", "rna_Curve_spline_points_add");
RNA_def_function_ui_description(func, "Add a number of points to this spline");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_REPORTS);
RNA_def_int(func, "count", 1, 1, INT_MAX, "Number", "Number of points to add to the spline", 1, INT_MAX);
- /*
+#if 0
func= RNA_def_function(srna, "remove", "rna_Curve_spline_remove");
RNA_def_function_ui_description(func, "Remove a spline from a curve");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm= RNA_def_pointer(func, "spline", "Spline", "", "The spline to remove");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
- */
+#endif
}
static void rna_def_curve_spline_bezpoints(BlenderRNA *brna, PropertyRNA *cprop)
@@ -1197,15 +1206,15 @@ static void rna_def_curve_spline_bezpoints(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "add", "rna_Curve_spline_bezpoints_add");
RNA_def_function_ui_description(func, "Add a number of points to this spline");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_REPORTS);
RNA_def_int(func, "count", 1, INT_MIN, INT_MAX, "Number", "Number of points to add to the spline", 0, INT_MAX);
#if 0
- func= RNA_def_function(srna, "remove", "rna_Curve_spline_remove");
+ func = RNA_def_function(srna, "remove", "rna_Curve_spline_remove");
RNA_def_function_ui_description(func, "Remove a spline from a curve");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm= RNA_def_pointer(func, "spline", "Spline", "", "The spline to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ parm = RNA_def_pointer(func, "spline", "Spline", "", "The spline to remove");
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
#endif
}
@@ -1234,7 +1243,7 @@ static void rna_def_curve_splines(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove a spline from a curve");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "spline", "Spline", "", "The spline to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "clear", "rna_Curve_spline_clear");
RNA_def_function_ui_description(func, "Remove all spline from a curve");
@@ -1246,7 +1255,7 @@ static void rna_def_curve_splines(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_ui_text(prop, "Active Spline", "Active curve spline");
/* Could call: ED_base_object_activate(C, scene->basact);
* but would be a bad level call and it seems the notifier is enough */
- RNA_def_property_update(prop, NC_SCENE|ND_OB_ACTIVE, NULL);
+ RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, NULL);
}
@@ -1256,16 +1265,18 @@ static void rna_def_curve(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem curve_twist_mode_items[] = {
- {CU_TWIST_Z_UP, "Z_UP", 0, "Z-Up", "Use Z-Up axis to calculate the curve twist at each point"},
- {CU_TWIST_MINIMUM, "MINIMUM", 0, "Minimum", "Use the least twist over the entire curve"},
- {CU_TWIST_TANGENT, "TANGENT", 0, "Tangent", "Use the tangent to calculate twist"},
- {0, NULL, 0, NULL, NULL}};
+ {CU_TWIST_Z_UP, "Z_UP", 0, "Z-Up", "Use Z-Up axis to calculate the curve twist at each point"},
+ {CU_TWIST_MINIMUM, "MINIMUM", 0, "Minimum", "Use the least twist over the entire curve"},
+ {CU_TWIST_TANGENT, "TANGENT", 0, "Tangent", "Use the tangent to calculate twist"},
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem curve_axis_items[] = {
{0, "2D", 0, "2D", "Clamp the Z axis of the curve"},
{CU_3D, "3D", 0, "3D",
- "Allow editing on the Z axis of this curve, also allows tilt and curve radius to be used"},
- {0, NULL, 0, NULL, NULL}};
+ "Allow editing on the Z axis of this curve, also allows tilt and curve radius to be used"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Curve", "ID");
RNA_def_struct_ui_text(srna, "Curve", "Curve datablock storing curves, splines and NURBS");
@@ -1295,12 +1306,12 @@ static void rna_def_curve(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "drawflag", CU_HIDE_HANDLES);
RNA_def_property_ui_text(prop, "Draw Handles", "Display Bezier handles in editmode");
- RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL);
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, NULL);
prop = RNA_def_property(srna, "show_normal_face", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "drawflag", CU_HIDE_NORMALS);
RNA_def_property_ui_text(prop, "Draw Normals", "Display 3D curve normals in editmode");
- RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL);
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, NULL);
rna_def_path(brna, srna);
@@ -1313,21 +1324,21 @@ static void rna_def_curve(BlenderRNA *brna)
"Bevel resolution when depth is non-zero and no specific bevel object has been defined");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "width");
RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
RNA_def_property_float_funcs(prop, "rna_Curve_offset_get", "rna_Curve_offset_set", NULL);
RNA_def_property_ui_text(prop, "Offset", "Offset the curve to adjust the width of a text");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop = RNA_def_property(srna, "extrude", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "extrude", PROP_FLOAT, PROP_NONE | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "ext1");
RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 3);
RNA_def_property_range(prop, 0.0, FLT_MAX);
RNA_def_property_ui_text(prop, "Extrude", "Amount of curve extrusion when not using a bevel object");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop = RNA_def_property(srna, "bevel_depth", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "bevel_depth", PROP_FLOAT, PROP_NONE | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "ext2");
RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 3);
RNA_def_property_ui_text(prop, "Bevel Depth", "Bevel depth when not using a bevel object");
@@ -1432,7 +1443,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "texflag", CU_AUTOSPACE);
RNA_def_property_ui_text(prop, "Auto Texture Space",
"Adjust active object's texture space automatically when transforming object");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Curve_texspace_set");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Curve_texspace_set");
prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
@@ -1451,7 +1462,7 @@ static void rna_def_curve(BlenderRNA *brna)
/* not supported yet */
#if 0
- prop= RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
+ prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
RNA_def_property_float(prop, NULL, "rot");
RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
RNA_def_property_editable_func(prop, texspace_editable);
@@ -1491,7 +1502,8 @@ static void rna_def_curve_nurb(BlenderRNA *brna)
{KEY_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
{KEY_BSPLINE, "BSPLINE", 0, "BSpline", ""},
{KEY_CU_EASE, "EASE", 0, "Ease", ""}, /* todo, define somewhere, not one of BEZT_IPO_* */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 4c2af854f67..09cbf8bd90a 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -51,8 +51,8 @@ BlenderDefRNA DefRNA = {NULL, {NULL, NULL}, {NULL, NULL}, NULL, 0, 0, 0, 1};
/* Duplicated code since we can't link in blenkernel or blenlib */
#ifndef MIN2
-#define MIN2(x,y) ((x)<(y)? (x): (y))
-#define MAX2(x,y) ((x)>(y)? (x): (y))
+#define MIN2(x, y) ((x) < (y) ? (x) : (y))
+#define MAX2(x, y) ((x) > (y) ? (x) : (y))
#endif
/* pedantic check for '.', do this since its a hassle for translators */
@@ -268,11 +268,11 @@ static ContainerDefRNA *rna_find_container_def(ContainerRNA *cont)
return NULL;
}
- ds = rna_find_struct_def((StructRNA*)cont);
+ ds = rna_find_struct_def((StructRNA *)cont);
if (ds)
return &ds->cont;
- dfunc = rna_find_function_def((FunctionRNA*)cont);
+ dfunc = rna_find_function_def((FunctionRNA *)cont);
if (dfunc)
return &dfunc->cont;
@@ -293,20 +293,20 @@ static int rna_member_cmp(const char *name, const char *oname)
int a = 0;
/* compare without pointer or array part */
- while (name[0] =='*')
+ while (name[0] == '*')
name++;
- while (oname[0] =='*')
+ while (oname[0] == '*')
oname++;
while (1) {
- if (name[a] =='[' && oname[a] == 0) return 1;
- if (name[a] =='[' && oname[a] =='[') return 1;
+ if (name[a] == '[' && oname[a] == 0) return 1;
+ if (name[a] == '[' && oname[a] == '[') return 1;
if (name[a] == 0) break;
if (name[a] != oname[a]) return 0;
a++;
}
if (name[a] == 0 && oname[a] == '.') return 2;
- if (name[a] == 0 && oname[a] == '-' && oname[a+1] == '>') return 3;
+ if (name[a] == 0 && oname[a] == '-' && oname[a + 1] == '>') return 3;
return (name[a] == oname[a]);
}
@@ -325,7 +325,7 @@ static int rna_find_sdna_member(SDNA *sdna, const char *structname, const char *
totmember = sp[1];
sp += 2;
- for (a = 0; a<totmember; a++, sp += 2) {
+ for (a = 0; a < totmember; a++, sp += 2) {
dnaname = sdna->names[sp[1]];
cmp = rna_member_cmp(dnaname, membername);
@@ -400,11 +400,11 @@ static int rna_validate_identifier(const char *identifier, char *error, int prop
}
}
- if (identifier[a] =='_') {
+ if (identifier[a] == '_') {
continue;
}
- if (identifier[a] ==' ') {
+ if (identifier[a] == ' ') {
strcpy(error, "spaces are not okay in identifier names");
return 0;
}
@@ -492,9 +492,9 @@ void RNA_define_verify_sdna(int verify)
void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *ext)
{
#ifdef RNA_RUNTIME
- ext->free(ext->data); /* decref's the PyObject that the srna owns */
- RNA_struct_blender_type_set(srna, NULL); /* this gets accessed again - XXX fixme */
- RNA_struct_py_type_set(srna, NULL); /* NULL the srna's value so RNA_struct_free wont complain of a leak */
+ ext->free(ext->data); /* decref's the PyObject that the srna owns */
+ RNA_struct_blender_type_set(srna, NULL); /* this gets accessed again - XXX fixme */
+ RNA_struct_py_type_set(srna, NULL); /* NULL the srna's value so RNA_struct_free wont complain of a leak */
#endif
}
@@ -505,12 +505,13 @@ void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
PropertyRNA *prop, *nextprop;
PropertyRNA *parm, *nextparm;
- /*
+#if 0
if (srna->flag & STRUCT_RUNTIME) {
if (RNA_struct_py_type_get(srna)) {
fprintf(stderr, "%s '%s' freed while holding a python reference\n", __func__, srna->identifier);
}
- } */
+ }
+#endif
for (prop = srna->cont.properties.first; prop; prop = nextprop) {
nextprop = prop->next;
@@ -691,7 +692,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
}
else {
#ifdef RNA_RUNTIME
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
cprop->begin = rna_builtin_properties_begin;
cprop->next = rna_builtin_properties_next;
cprop->get = rna_builtin_properties_get;
@@ -709,7 +710,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
}
else {
#ifdef RNA_RUNTIME
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
pprop->get = rna_builtin_type_get;
pprop->type = &RNA_Struct;
#endif
@@ -920,20 +921,20 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
}
break;
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
- iprop->hardmin = (subtype == PROP_UNSIGNED)? 0: INT_MIN;
+ iprop->hardmin = (subtype == PROP_UNSIGNED) ? 0 : INT_MIN;
iprop->hardmax = INT_MAX;
- iprop->softmin = (subtype == PROP_UNSIGNED)? 0: -10000; /* rather arbitrary .. */
+ iprop->softmin = (subtype == PROP_UNSIGNED) ? 0 : -10000; /* rather arbitrary .. */
iprop->softmax = 10000;
iprop->step = 1;
break;
}
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
- fprop->hardmin = (subtype == PROP_UNSIGNED)? 0.0f: -FLT_MAX;
+ fprop->hardmin = (subtype == PROP_UNSIGNED) ? 0.0f : -FLT_MAX;
fprop->hardmax = FLT_MAX;
if (ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA)) {
@@ -945,7 +946,7 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
fprop->softmax = fprop->hardmax = 1.0f;
}
else {
- fprop->softmin = (subtype == PROP_UNSIGNED)? 0.0f: -10000.0f; /* rather arbitrary .. */
+ fprop->softmin = (subtype == PROP_UNSIGNED) ? 0.0f : -10000.0f; /* rather arbitrary .. */
fprop->softmax = 10000.0f;
}
fprop->step = 10;
@@ -953,7 +954,7 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
break;
}
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
sprop->defaultvalue = "";
break;
@@ -1038,10 +1039,10 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
}
}
else {
- prop->flag |= PROP_IDPROPERTY|PROP_RUNTIME;
+ prop->flag |= PROP_IDPROPERTY | PROP_RUNTIME;
#ifdef RNA_RUNTIME
if (cont->prophash)
- BLI_ghash_insert(cont->prophash, (void*)prop->identifier, prop);
+ BLI_ghash_insert(cont->prophash, (void *)prop->identifier, prop);
#endif
}
@@ -1069,14 +1070,14 @@ void RNA_def_property_array(PropertyRNA *prop, int length)
{
StructRNA *srna = DefRNA.laststruct;
- if (length<0) {
+ if (length < 0) {
fprintf(stderr, "%s: \"%s.%s\", array length must be zero of greater.\n", __func__,
srna->identifier, prop->identifier);
DefRNA.error = 1;
return;
}
- if (length>RNA_MAX_ARRAY_LENGTH) {
+ if (length > RNA_MAX_ARRAY_LENGTH) {
fprintf(stderr, "%s: \"%s.%s\", array length must be smaller than %d.\n", __func__,
srna->identifier, prop->identifier, RNA_MAX_ARRAY_LENGTH);
DefRNA.error = 1;
@@ -1134,10 +1135,10 @@ void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int le
prop->totarraylength = 0;
if (length) {
- memcpy(prop->arraylength, length, sizeof(int)*dimension);
+ memcpy(prop->arraylength, length, sizeof(int) * dimension);
prop->totarraylength = length[0];
- for (i = 1; i<dimension; i++)
+ for (i = 1; i < dimension; i++)
prop->totarraylength *= length[i];
}
else
@@ -1167,14 +1168,14 @@ void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double
switch (prop->type) {
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
iprop->softmin = (int)min;
iprop->softmax = (int)max;
iprop->step = (int)step;
break;
}
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
fprop->softmin = (float)min;
fprop->softmax = (float)max;
fprop->step = (float)step;
@@ -1195,7 +1196,7 @@ void RNA_def_property_range(PropertyRNA *prop, double min, double max)
switch (prop->type) {
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
iprop->hardmin = (int)min;
iprop->hardmax = (int)max;
iprop->softmin = MAX2((int)min, iprop->hardmin);
@@ -1203,7 +1204,7 @@ void RNA_def_property_range(PropertyRNA *prop, double min, double max)
break;
}
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
fprop->hardmin = (float)min;
fprop->hardmax = (float)max;
fprop->softmin = MAX2((float)min, fprop->hardmin);
@@ -1228,13 +1229,13 @@ void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
switch (prop->type) {
case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
- pprop->type = (StructRNA*)type;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
+ pprop->type = (StructRNA *)type;
break;
}
case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
- cprop->item_type = (StructRNA*)type;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
+ cprop->item_type = (StructRNA *)type;
break;
}
default:
@@ -1256,7 +1257,7 @@ void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type)
switch (prop->type) {
case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
pprop->type = type;
if (type && (type->flag & STRUCT_ID_REFCOUNT))
@@ -1265,7 +1266,7 @@ void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type)
break;
}
case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
cprop->item_type = type;
break;
}
@@ -1284,8 +1285,8 @@ void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item
switch (prop->type) {
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
- eprop->item = (EnumPropertyItem*)item;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
+ eprop->item = (EnumPropertyItem *)item;
eprop->totitem = 0;
for (i = 0; item[i].identifier; i++) {
eprop->totitem++;
@@ -1319,7 +1320,7 @@ void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
switch (prop->type) {
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
sprop->maxlength = maxlength;
break;
}
@@ -1336,7 +1337,7 @@ void RNA_def_property_boolean_default(PropertyRNA *prop, int value)
switch (prop->type) {
case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
bprop->defaultvalue = value;
break;
}
@@ -1353,7 +1354,7 @@ void RNA_def_property_boolean_array_default(PropertyRNA *prop, const int *array)
switch (prop->type) {
case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
bprop->defaultarray = array;
break;
}
@@ -1370,7 +1371,7 @@ void RNA_def_property_int_default(PropertyRNA *prop, int value)
switch (prop->type) {
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
iprop->defaultvalue = value;
break;
}
@@ -1387,7 +1388,7 @@ void RNA_def_property_int_array_default(PropertyRNA *prop, const int *array)
switch (prop->type) {
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
iprop->defaultarray = array;
break;
}
@@ -1404,7 +1405,7 @@ void RNA_def_property_float_default(PropertyRNA *prop, float value)
switch (prop->type) {
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
fprop->defaultvalue = value;
break;
}
@@ -1421,7 +1422,7 @@ void RNA_def_property_float_array_default(PropertyRNA *prop, const float *array)
switch (prop->type) {
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
fprop->defaultarray = array; /* WARNING, this array must not come from the stack and lost */
break;
}
@@ -1438,7 +1439,7 @@ void RNA_def_property_string_default(PropertyRNA *prop, const char *value)
switch (prop->type) {
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
sprop->defaultvalue = value;
break;
}
@@ -1456,13 +1457,13 @@ void RNA_def_property_enum_default(PropertyRNA *prop, int value)
switch (prop->type) {
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
eprop->defaultvalue = value;
if (prop->flag & PROP_ENUM_FLAG) {
/* check all bits are accounted for */
int totflag = 0;
- for (i = 0; i<eprop->totitem; i++) {
+ for (i = 0; i < eprop->totitem; i++) {
if (eprop->item[i].identifier[0]) {
totflag |= eprop->item[i].value;
}
@@ -1475,7 +1476,7 @@ void RNA_def_property_enum_default(PropertyRNA *prop, int value)
}
}
else {
- for (i = 0; i<eprop->totitem; i++) {
+ for (i = 0; i < eprop->totitem; i++) {
if (eprop->item[i].identifier[0] && eprop->item[i].value == eprop->defaultvalue)
defaultfound = 1;
}
@@ -1512,7 +1513,7 @@ static PropertyDefRNA *rna_def_property_sdna(PropertyRNA *prop, const char *stru
dp = rna_find_struct_property_def(DefRNA.laststruct, prop);
if (dp == NULL) return NULL;
- ds = rna_find_struct_def((StructRNA*)dp->cont);
+ ds = rna_find_struct_def((StructRNA *)dp->cont);
if (!structname)
structname = ds->dnaname;
@@ -1610,7 +1611,7 @@ void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *struc
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
{
PropertyDefRNA *dp;
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
StructRNA *srna = DefRNA.laststruct;
if (!DefRNA.preprocess) {
@@ -1661,7 +1662,7 @@ void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
{
PropertyDefRNA *dp;
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
StructRNA *srna = DefRNA.laststruct;
if (!DefRNA.preprocess) {
@@ -1714,7 +1715,7 @@ void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const
return;
}
- if (( /* dp= */ rna_def_property_sdna(prop, structname, propname))) {
+ if ((/* dp= */ rna_def_property_sdna(prop, structname, propname))) {
if (prop->arraydimension) {
prop->arraydimension = 0;
prop->totarraylength = 0;
@@ -1743,7 +1744,7 @@ void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structnam
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
{
/* PropertyDefRNA *dp; */
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
StructRNA *srna = DefRNA.laststruct;
if (!DefRNA.preprocess) {
@@ -1800,7 +1801,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
const char *lengthpropname)
{
PropertyDefRNA *dp;
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
StructRNA *srna = DefRNA.laststruct;
if (!DefRNA.preprocess) {
@@ -1835,7 +1836,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
if (dp && lengthpropname) {
DNAStructMember smember;
- StructDefRNA *ds = rna_find_struct_def((StructRNA*)dp->cont);
+ StructDefRNA *ds = rna_find_struct_def((StructRNA *)dp->cont);
if (!structname)
structname = ds->dnaname;
@@ -1939,7 +1940,7 @@ void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const ch
switch (prop->type) {
case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
if (prop->arraydimension) {
if (get) bprop->getarray = (PropBooleanArrayGetFunc)get;
@@ -1969,7 +1970,7 @@ void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *
switch (prop->type) {
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
if (prop->arraydimension) {
if (get) iprop->getarray = (PropIntArrayGetFunc)get;
@@ -2000,7 +2001,7 @@ void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char
switch (prop->type) {
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
if (prop->arraydimension) {
if (get) fprop->getarray = (PropFloatArrayGetFunc)get;
@@ -2031,7 +2032,7 @@ void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char
switch (prop->type) {
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
if (get) eprop->get = (PropEnumGetFunc)get;
if (set) eprop->set = (PropEnumSetFunc)set;
@@ -2056,7 +2057,7 @@ void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const cha
switch (prop->type) {
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
if (get) sprop->get = (PropStringGetFunc)get;
if (length) sprop->length = (PropStringLengthFunc)length;
@@ -2082,7 +2083,7 @@ void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const ch
switch (prop->type) {
case PROP_POINTER: {
- PointerPropertyRNA *pprop = (PointerPropertyRNA*)prop;
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
if (get) pprop->get = (PropPointerGetFunc)get;
if (set) pprop->set = (PropPointerSetFunc)set;
@@ -2110,7 +2111,7 @@ void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, con
switch (prop->type) {
case PROP_COLLECTION: {
- CollectionPropertyRNA *cprop = (CollectionPropertyRNA*)prop;
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
if (begin) cprop->begin = (PropCollectionBeginFunc)begin;
if (next) cprop->next = (PropCollectionNextFunc)next;
@@ -2131,7 +2132,7 @@ void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, con
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
{
- prop->srna = (StructRNA*)type;
+ prop->srna = (StructRNA *)type;
}
void RNA_def_py_data(PropertyRNA *prop, void *py_data)
@@ -2371,13 +2372,13 @@ PropertyRNA *RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifie
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
eprop->itemf = itemfunc;
}
void RNA_def_enum_py_data(PropertyRNA *prop, void *py_data)
{
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
eprop->py_data = py_data;
}
@@ -2707,9 +2708,9 @@ int rna_parameter_size(PropertyRNA *parm)
switch (ptype) {
case PROP_BOOLEAN:
case PROP_INT:
- return sizeof(int)*len;
+ return sizeof(int) * len;
case PROP_FLOAT:
- return sizeof(float)*len;
+ return sizeof(float) * len;
default:
break;
}
@@ -2725,7 +2726,7 @@ int rna_parameter_size(PropertyRNA *parm)
case PROP_STRING:
/* return values don't store a pointer to the original */
if (parm->flag & PROP_THICK_WRAP) {
- StringPropertyRNA *sparm = (StringPropertyRNA*)parm;
+ StringPropertyRNA *sparm = (StringPropertyRNA *)parm;
return sizeof(char) * sparm->maxlength;
}
else
@@ -2771,18 +2772,18 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropert
int tot = *totitem;
if (tot == 0) {
- *items = MEM_callocN(sizeof(EnumPropertyItem)*8, "RNA_enum_items_add");
+ *items = MEM_callocN(sizeof(EnumPropertyItem) * 8, "RNA_enum_items_add");
}
- else if (tot >= 8 && (tot&(tot-1)) == 0) {
+ else if (tot >= 8 && (tot & (tot - 1)) == 0) {
/* power of two > 8 */
- newitems = MEM_callocN(sizeof(EnumPropertyItem)*tot*2, "RNA_enum_items_add");
- memcpy(newitems, *items, sizeof(EnumPropertyItem)*tot);
+ newitems = MEM_callocN(sizeof(EnumPropertyItem) * tot * 2, "RNA_enum_items_add");
+ memcpy(newitems, *items, sizeof(EnumPropertyItem) * tot);
MEM_freeN(*items);
*items = newitems;
}
(*items)[tot] = *item;
- *totitem = tot+1;
+ *totitem = tot + 1;
}
void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem)
@@ -2830,9 +2831,9 @@ void RNA_def_struct_duplicate_pointers(StructRNA *srna)
void RNA_def_struct_free_pointers(StructRNA *srna)
{
if (srna->flag & STRUCT_FREE_POINTERS) {
- if (srna->identifier) MEM_freeN((void*)srna->identifier);
- if (srna->name) MEM_freeN((void*)srna->name);
- if (srna->description) MEM_freeN((void*)srna->description);
+ if (srna->identifier) MEM_freeN((void *)srna->identifier);
+ if (srna->name) MEM_freeN((void *)srna->name);
+ if (srna->description) MEM_freeN((void *)srna->description);
}
}
@@ -2847,8 +2848,8 @@ void RNA_def_func_duplicate_pointers(FunctionRNA *func)
void RNA_def_func_free_pointers(FunctionRNA *func)
{
if (func->flag & FUNC_FREE_POINTERS) {
- if (func->identifier) MEM_freeN((void*)func->identifier);
- if (func->description) MEM_freeN((void*)func->description);
+ if (func->identifier) MEM_freeN((void *)func->identifier);
+ if (func->description) MEM_freeN((void *)func->description);
}
}
@@ -2864,9 +2865,9 @@ void RNA_def_property_duplicate_pointers(StructOrFunctionRNA *cont_, PropertyRNA
* in the first place */
if (prop->identifier) {
if (cont->prophash) {
- BLI_ghash_remove(cont->prophash, (void*)prop->identifier, NULL, NULL);
+ BLI_ghash_remove(cont->prophash, (void *)prop->identifier, NULL, NULL);
prop->identifier = BLI_strdup(prop->identifier);
- BLI_ghash_insert(cont->prophash, (void*)prop->identifier, prop);
+ BLI_ghash_insert(cont->prophash, (void *)prop->identifier, prop);
}
else {
prop->identifier = BLI_strdup(prop->identifier);
@@ -2878,34 +2879,34 @@ void RNA_def_property_duplicate_pointers(StructOrFunctionRNA *cont_, PropertyRNA
switch (prop->type) {
case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
if (bprop->defaultarray) {
- iarray = MEM_callocN(sizeof(int)*prop->totarraylength, "RNA_def_property_store");
- memcpy(iarray, bprop->defaultarray, sizeof(int)*prop->totarraylength);
+ iarray = MEM_callocN(sizeof(int) * prop->totarraylength, "RNA_def_property_store");
+ memcpy(iarray, bprop->defaultarray, sizeof(int) * prop->totarraylength);
bprop->defaultarray = iarray;
}
break;
}
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
if (iprop->defaultarray) {
- iarray = MEM_callocN(sizeof(int)*prop->totarraylength, "RNA_def_property_store");
- memcpy(iarray, iprop->defaultarray, sizeof(int)*prop->totarraylength);
+ iarray = MEM_callocN(sizeof(int) * prop->totarraylength, "RNA_def_property_store");
+ memcpy(iarray, iprop->defaultarray, sizeof(int) * prop->totarraylength);
iprop->defaultarray = iarray;
}
break;
}
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
if (eprop->item) {
- earray = MEM_callocN(sizeof(EnumPropertyItem)*(eprop->totitem+1), "RNA_def_property_store"),
- memcpy(earray, eprop->item, sizeof(EnumPropertyItem)*(eprop->totitem+1));
+ earray = MEM_callocN(sizeof(EnumPropertyItem) * (eprop->totitem + 1), "RNA_def_property_store"),
+ memcpy(earray, eprop->item, sizeof(EnumPropertyItem) * (eprop->totitem + 1));
eprop->item = earray;
- for (a = 0; a<eprop->totitem; a++) {
+ for (a = 0; a < eprop->totitem; a++) {
if (eprop->item[a].identifier)
eprop->item[a].identifier = BLI_strdup(eprop->item[a].identifier);
if (eprop->item[a].name)
@@ -2917,17 +2918,17 @@ void RNA_def_property_duplicate_pointers(StructOrFunctionRNA *cont_, PropertyRNA
break;
}
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
if (fprop->defaultarray) {
- farray = MEM_callocN(sizeof(float)*prop->totarraylength, "RNA_def_property_store");
- memcpy(farray, fprop->defaultarray, sizeof(float)*prop->totarraylength);
+ farray = MEM_callocN(sizeof(float) * prop->totarraylength, "RNA_def_property_store");
+ memcpy(farray, fprop->defaultarray, sizeof(float) * prop->totarraylength);
fprop->defaultarray = farray;
}
break;
}
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
if (sprop->defaultvalue)
sprop->defaultvalue = BLI_strdup(sprop->defaultvalue);
break;
@@ -2945,52 +2946,52 @@ void RNA_def_property_free_pointers(PropertyRNA *prop)
int a;
if (prop->identifier)
- MEM_freeN((void*)prop->identifier);
+ MEM_freeN((void *)prop->identifier);
if (prop->name)
- MEM_freeN((void*)prop->name);
+ MEM_freeN((void *)prop->name);
if (prop->description)
- MEM_freeN((void*)prop->description);
+ MEM_freeN((void *)prop->description);
if (prop->py_data)
MEM_freeN(prop->py_data);
switch (prop->type) {
case PROP_BOOLEAN: {
- BoolPropertyRNA *bprop = (BoolPropertyRNA*)prop;
+ BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
if (bprop->defaultarray)
- MEM_freeN((void*)bprop->defaultarray);
+ MEM_freeN((void *)bprop->defaultarray);
break;
}
case PROP_INT: {
- IntPropertyRNA *iprop = (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
if (iprop->defaultarray)
- MEM_freeN((void*)iprop->defaultarray);
+ MEM_freeN((void *)iprop->defaultarray);
break;
}
case PROP_FLOAT: {
- FloatPropertyRNA *fprop = (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
if (fprop->defaultarray)
- MEM_freeN((void*)fprop->defaultarray);
+ MEM_freeN((void *)fprop->defaultarray);
break;
}
case PROP_ENUM: {
- EnumPropertyRNA *eprop = (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop;
- for (a = 0; a<eprop->totitem; a++) {
+ for (a = 0; a < eprop->totitem; a++) {
if (eprop->item[a].identifier)
- MEM_freeN((void*)eprop->item[a].identifier);
+ MEM_freeN((void *)eprop->item[a].identifier);
if (eprop->item[a].name)
- MEM_freeN((void*)eprop->item[a].name);
+ MEM_freeN((void *)eprop->item[a].name);
if (eprop->item[a].description)
- MEM_freeN((void*)eprop->item[a].description);
+ MEM_freeN((void *)eprop->item[a].description);
}
- if (eprop->item) MEM_freeN((void*)eprop->item);
+ if (eprop->item) MEM_freeN((void *)eprop->item);
break;
}
case PROP_STRING: {
- StringPropertyRNA *sprop = (StringPropertyRNA*)prop;
+ StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
if (sprop->defaultvalue)
- MEM_freeN((void*)sprop->defaultvalue);
+ MEM_freeN((void *)sprop->defaultvalue);
break;
}
default:
@@ -3005,7 +3006,7 @@ static void rna_def_property_free(StructOrFunctionRNA *cont_, PropertyRNA *prop)
if (prop->flag & PROP_RUNTIME) {
if (cont->prophash)
- BLI_ghash_remove(cont->prophash, (void*)prop->identifier, NULL, NULL);
+ BLI_ghash_remove(cont->prophash, (void *)prop->identifier, NULL, NULL);
RNA_def_property_free_pointers(prop);
rna_freelinkN(&cont->properties, prop);
diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c
index b3e89a4e5f8..a38c769c26a 100644
--- a/source/blender/makesrna/intern/rna_dynamicpaint.c
+++ b/source/blender/makesrna/intern/rna_dynamicpaint.c
@@ -44,9 +44,10 @@
#include "WM_types.h"
EnumPropertyItem prop_dynamicpaint_type_items[] = {
- {MOD_DYNAMICPAINT_TYPE_CANVAS, "CANVAS", 0, "Canvas", ""},
- {MOD_DYNAMICPAINT_TYPE_BRUSH, "BRUSH", 0, "Brush", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DYNAMICPAINT_TYPE_CANVAS, "CANVAS", 0, "Canvas", ""},
+ {MOD_DYNAMICPAINT_TYPE_BRUSH, "BRUSH", 0, "Brush", ""},
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -58,7 +59,7 @@ EnumPropertyItem prop_dynamicpaint_type_items[] = {
static char *rna_DynamicPaintCanvasSettings_path(PointerRNA *ptr)
{
- DynamicPaintCanvasSettings *settings = (DynamicPaintCanvasSettings*)ptr->data;
+ DynamicPaintCanvasSettings *settings = (DynamicPaintCanvasSettings *)ptr->data;
ModifierData *md = (ModifierData *)settings->pmd;
return BLI_sprintfN("modifiers[\"%s\"].canvas_settings", md->name);
@@ -66,7 +67,7 @@ static char *rna_DynamicPaintCanvasSettings_path(PointerRNA *ptr)
static char *rna_DynamicPaintBrushSettings_path(PointerRNA *ptr)
{
- DynamicPaintBrushSettings *settings = (DynamicPaintBrushSettings*)ptr->data;
+ DynamicPaintBrushSettings *settings = (DynamicPaintBrushSettings *)ptr->data;
ModifierData *md = (ModifierData *)settings->pmd;
return BLI_sprintfN("modifiers[\"%s\"].brush_settings", md->name);
@@ -74,7 +75,7 @@ static char *rna_DynamicPaintBrushSettings_path(PointerRNA *ptr)
static char *rna_DynamicPaintSurface_path(PointerRNA *ptr)
{
- DynamicPaintSurface *surface = (DynamicPaintSurface*)ptr->data;
+ DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
ModifierData *md = (ModifierData *)surface->canvas->pmd;
return BLI_sprintfN("modifiers[\"%s\"].canvas_settings.canvas_surfaces[\"%s\"]", md->name, surface->name);
@@ -92,18 +93,18 @@ static void rna_DynamicPaint_redoModifier(Main *bmain, Scene *scene, PointerRNA
static void rna_DynamicPaintSurfaces_updateFrames(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- dynamicPaint_cacheUpdateFrames((DynamicPaintSurface*)ptr->data);
+ dynamicPaint_cacheUpdateFrames((DynamicPaintSurface *)ptr->data);
}
static void rna_DynamicPaintSurface_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- dynamicPaint_resetSurface((DynamicPaintSurface*)ptr->data);
+ dynamicPaint_resetSurface((DynamicPaintSurface *)ptr->data);
rna_DynamicPaint_redoModifier(bmain, scene, ptr);
}
static void rna_DynamicPaintSurface_initialcolortype(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DynamicPaintSurface *surface = (DynamicPaintSurface*)ptr->data;
+ DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
surface->init_layername[0] = '\0';
dynamicPaint_clearSurface(surface);
@@ -112,7 +113,7 @@ static void rna_DynamicPaintSurface_initialcolortype(Main *bmain, Scene *scene,
static void rna_DynamicPaintSurface_changePreview(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DynamicPaintSurface *act_surface = (DynamicPaintSurface*)ptr->data;
+ DynamicPaintSurface *act_surface = (DynamicPaintSurface *)ptr->data;
DynamicPaintSurface *surface = act_surface->canvas->surfaces.first;
/* since only one color surface can show preview at time
@@ -126,23 +127,23 @@ static void rna_DynamicPaintSurface_changePreview(Main *bmain, Scene *scene, Poi
static void rna_DynamicPaintSurface_uniqueName(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- dynamicPaintSurface_setUniqueName((DynamicPaintSurface*)ptr->data, ((DynamicPaintSurface*)ptr->data)->name);
+ dynamicPaintSurface_setUniqueName((DynamicPaintSurface *)ptr->data, ((DynamicPaintSurface *)ptr->data)->name);
}
static void rna_DynamicPaintSurface_changeType(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- dynamicPaintSurface_updateType((DynamicPaintSurface*)ptr->data);
- dynamicPaint_resetSurface((DynamicPaintSurface*)ptr->data);
+ dynamicPaintSurface_updateType((DynamicPaintSurface *)ptr->data);
+ dynamicPaint_resetSurface((DynamicPaintSurface *)ptr->data);
rna_DynamicPaintSurface_reset(bmain, scene, ptr);
}
static void rna_DynamicPaintSurfaces_changeFormat(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DynamicPaintSurface *surface = (DynamicPaintSurface*)ptr->data;
+ DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
surface->type = MOD_DPAINT_SURFACE_T_PAINT;
- dynamicPaintSurface_updateType((DynamicPaintSurface*)ptr->data);
+ dynamicPaintSurface_updateType((DynamicPaintSurface *)ptr->data);
rna_DynamicPaintSurface_reset(bmain, scene, ptr);
}
@@ -154,7 +155,7 @@ static void rna_DynamicPaint_resetDependancy(Main *bmain, Scene *scene, PointerR
static PointerRNA rna_PaintSurface_active_get(PointerRNA *ptr)
{
- DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings*)ptr->data;
+ DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
DynamicPaintSurface *surface = canvas->surfaces.first;
int id = 0;
@@ -168,36 +169,36 @@ static PointerRNA rna_PaintSurface_active_get(PointerRNA *ptr)
static void rna_DynamicPaint_surfaces_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings*)ptr->data;
+ DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
/*rna_iterator_array_begin(iter, (void*)canvas->surfaces, sizeof(PaintSurface), canvas->totsur, 0, 0); */
rna_iterator_listbase_begin(iter, &canvas->surfaces, NULL);
}
static int rna_Surface_active_point_index_get(PointerRNA *ptr)
{
- DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings*)ptr->data;
+ DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
return canvas->active_sur;
}
static void rna_Surface_active_point_index_set(struct PointerRNA *ptr, int value)
{
- DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings*)ptr->data;
+ DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
canvas->active_sur = value;
return;
}
static void rna_Surface_active_point_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings*)ptr->data;
+ DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
*min = 0;
- *max = BLI_countlist(&canvas->surfaces)-1;
+ *max = BLI_countlist(&canvas->surfaces) - 1;
}
/* uvlayer */
static void rna_DynamicPaint_uvlayer_set(PointerRNA *ptr, const char *value)
{
- DynamicPaintCanvasSettings *canvas = ((DynamicPaintSurface*)ptr->data)->canvas;
+ DynamicPaintCanvasSettings *canvas = ((DynamicPaintSurface *)ptr->data)->canvas;
DynamicPaintSurface *surface = canvas->surfaces.first;
int id = 0;
@@ -213,7 +214,7 @@ static void rna_DynamicPaint_uvlayer_set(PointerRNA *ptr, const char *value)
/* is point cache used */
static int rna_DynamicPaint_is_cache_user_get(PointerRNA *ptr)
{
- DynamicPaintSurface *surface = (DynamicPaintSurface*)ptr->data;
+ DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
return (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ) ? 1 : 0;
}
@@ -228,7 +229,7 @@ static int rna_DynamicPaint_is_output_exists(DynamicPaintSurface *surface, Objec
static EnumPropertyItem *rna_DynamicPaint_surface_type_itemf(bContext *C, PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- DynamicPaintSurface *surface = (DynamicPaintSurface*)ptr->data;
+ DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
EnumPropertyItem *item = NULL;
EnumPropertyItem tmp = {0, "", 0, "", ""};
@@ -242,7 +243,7 @@ static EnumPropertyItem *rna_DynamicPaint_surface_type_itemf(bContext *C, Pointe
/* Displace */
if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX ||
- surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
+ surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
tmp.value = MOD_DPAINT_SURFACE_T_DISPLACE;
tmp.identifier = "DISPLACE";
tmp.name = "Displace";
@@ -294,7 +295,7 @@ static void rna_def_canvas_surfaces(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_struct_type(prop, "DynamicPaintSurface");
RNA_def_property_pointer_funcs(prop, "rna_PaintSurface_active_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Surface", "Active Dynamic Paint surface being displayed");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
}
@@ -307,51 +308,58 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
/* Surface format */
static EnumPropertyItem prop_dynamicpaint_surface_format[] = {
- /*{MOD_DPAINT_SURFACE_F_PTEX, "PTEX", ICON_TEXTURE_SHADED, "Ptex", ""}, */
- {MOD_DPAINT_SURFACE_F_VERTEX, "VERTEX", ICON_OUTLINER_DATA_MESH, "Vertex", ""},
- {MOD_DPAINT_SURFACE_F_IMAGESEQ, "IMAGE", ICON_FILE_IMAGE, "Image Sequence", ""},
- {0, NULL, 0, NULL, NULL}};
+ /*{MOD_DPAINT_SURFACE_F_PTEX, "PTEX", ICON_TEXTURE_SHADED, "Ptex", ""}, */
+ {MOD_DPAINT_SURFACE_F_VERTEX, "VERTEX", ICON_OUTLINER_DATA_MESH, "Vertex", ""},
+ {MOD_DPAINT_SURFACE_F_IMAGESEQ, "IMAGE", ICON_FILE_IMAGE, "Image Sequence", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
/* Surface type - generated dynamically based on surface format */
static EnumPropertyItem prop_dynamicpaint_surface_type[] = {
- {MOD_DPAINT_SURFACE_T_PAINT, "PAINT", 0, "Paint", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_SURFACE_T_PAINT, "PAINT", 0, "Paint", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
/* Surface output preview. currently only paint has multiple outputs */
static EnumPropertyItem prop_dynamicpaint_surface_preview[] = {
- {MOD_DPAINT_SURFACE_PREV_PAINT, "PAINT", 0, "Paint", ""},
- {MOD_DPAINT_SURFACE_PREV_WETMAP, "WETMAP", 0, "Wetmap", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_SURFACE_PREV_PAINT, "PAINT", 0, "Paint", ""},
+ {MOD_DPAINT_SURFACE_PREV_WETMAP, "WETMAP", 0, "Wetmap", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
/* Initial color setting */
static EnumPropertyItem prop_dynamicpaint_init_color_type[] = {
- {MOD_DPAINT_INITIAL_NONE, "NONE", 0, "None", ""},
- {MOD_DPAINT_INITIAL_COLOR, "COLOR", ICON_COLOR, "Color", ""},
- {MOD_DPAINT_INITIAL_TEXTURE, "TEXTURE", ICON_TEXTURE, "UV Texture", ""},
- {MOD_DPAINT_INITIAL_VERTEXCOLOR, "VERTEX_COLOR", ICON_GROUP_VCOL, "Vertex Color", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_INITIAL_NONE, "NONE", 0, "None", ""},
+ {MOD_DPAINT_INITIAL_COLOR, "COLOR", ICON_COLOR, "Color", ""},
+ {MOD_DPAINT_INITIAL_TEXTURE, "TEXTURE", ICON_TEXTURE, "UV Texture", ""},
+ {MOD_DPAINT_INITIAL_VERTEXCOLOR, "VERTEX_COLOR", ICON_GROUP_VCOL, "Vertex Color", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
/* Effect type
* Only used by ui to view per effect settings */
static EnumPropertyItem prop_dynamicpaint_effecttype[] = {
- {1, "SPREAD", 0, "Spread", ""},
- {2, "DRIP", 0, "Drip", ""},
- {3, "SHRINK", 0, "Shrink", ""},
- {0, NULL, 0, NULL, NULL}};
+ {1, "SPREAD", 0, "Spread", ""},
+ {2, "DRIP", 0, "Drip", ""},
+ {3, "SHRINK", 0, "Shrink", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
/* Displacemap file format */
static EnumPropertyItem prop_dynamicpaint_image_fileformat[] = {
- {MOD_DPAINT_IMGFORMAT_PNG, "PNG", 0, "PNG", ""},
+ {MOD_DPAINT_IMGFORMAT_PNG, "PNG", 0, "PNG", ""},
#ifdef WITH_OPENEXR
- {MOD_DPAINT_IMGFORMAT_OPENEXR, "OPENEXR", 0, "OpenEXR", ""},
+ {MOD_DPAINT_IMGFORMAT_OPENEXR, "OPENEXR", 0, "OpenEXR", ""},
#endif
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* Displacemap type */
static EnumPropertyItem prop_dynamicpaint_displace_type[] = {
- {MOD_DPAINT_DISP_DISPLACE, "DISPLACE", 0, "Displacement", ""},
- {MOD_DPAINT_DISP_DEPTH, "DEPTH", 0, "Depth", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_DISP_DISPLACE, "DISPLACE", 0, "Displacement", ""},
+ {MOD_DPAINT_DISP_DEPTH, "DEPTH", 0, "Depth", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
@@ -366,7 +374,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "format");
RNA_def_property_enum_items(prop, prop_dynamicpaint_surface_format);
RNA_def_property_ui_text(prop, "Format", "Surface Format");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurfaces_changeFormat");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurfaces_changeFormat");
prop = RNA_def_property(srna, "surface_type", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -374,17 +382,17 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_dynamicpaint_surface_type);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_DynamicPaint_surface_type_itemf");
RNA_def_property_ui_text(prop, "Surface Type", "Surface Type");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_changeType");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_changeType");
prop = RNA_def_property(srna, "is_active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ACTIVE);
RNA_def_property_ui_text(prop, "Is Active", "Toggle whether surface is processed or ignored");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "show_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_PREVIEW);
RNA_def_property_ui_text(prop, "Show Preview", "Display surface preview in 3D-views");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_changePreview");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_changePreview");
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "Surface name");
@@ -395,7 +403,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Group");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Brush Group", "Only use brush objects from this group");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_resetDependancy");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_resetDependancy");
/*
@@ -441,7 +449,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_range(prop, 1.0, 9999.0);
RNA_def_property_ui_range(prop, 1.0, 9999, 1, 0);
RNA_def_property_ui_text(prop, "Start Frame", "Simulation start frame");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurfaces_updateFrames");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurfaces_updateFrames");
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "end_frame");
@@ -449,7 +457,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_range(prop, 1.0, 9999.0);
RNA_def_property_ui_range(prop, 1.0, 9999.0, 1, 0);
RNA_def_property_ui_text(prop, "End Frame", "Simulation end frame");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurfaces_updateFrames");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurfaces_updateFrames");
prop = RNA_def_property(srna, "frame_substeps", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "substeps");
@@ -461,21 +469,21 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ANTIALIAS);
RNA_def_property_ui_text(prop, "Anti-aliasing", "Use 5x multisampling to smoothen paint edges");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
prop = RNA_def_property(srna, "brush_influence_scale", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "influence_scale");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Influence Scale", "Adjust influence brush objects have on this surface");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "brush_radius_scale", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "radius_scale");
RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Radius Scale", "Adjust radius of proximity brushes or particles for this surface");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
/*
* Initial Color
@@ -485,22 +493,22 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_items(prop, prop_dynamicpaint_init_color_type);
RNA_def_property_ui_text(prop, "Initial Color", "");
- RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW|ND_MODIFIER, "rna_DynamicPaintSurface_initialcolortype");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_initialcolortype");
prop = RNA_def_property(srna, "init_color", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Color", "Initial color of the surface");
- RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
prop = RNA_def_property(srna, "init_texture", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Texture", "");
- RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
prop = RNA_def_property(srna, "init_layername", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Data Layer", "");
- RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
/*
* Effect Settings
@@ -523,7 +531,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "effect", MOD_DPAINT_EFFECT_DO_SPREAD);
RNA_def_property_ui_text(prop, "Use Spread", "Process spread effect (spread wet paint around surface)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
prop = RNA_def_property(srna, "spread_speed", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "spread_speed");
@@ -547,13 +555,13 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "effect", MOD_DPAINT_EFFECT_DO_DRIP);
RNA_def_property_ui_text(prop, "Use Drip", "Process drip effect (drip wet paint to gravity direction)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
prop = RNA_def_property(srna, "use_shrink", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "effect", MOD_DPAINT_EFFECT_DO_SHRINK);
RNA_def_property_ui_text(prop, "Use Shrink", "Process shrink effect (shrink paint areas)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
prop = RNA_def_property(srna, "shrink_speed", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "shrink_speed");
@@ -613,13 +621,13 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "preview_id");
RNA_def_property_enum_items(prop, prop_dynamicpaint_surface_preview);
RNA_def_property_ui_text(prop, "Preview", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
/* to check if output name exists */
func = RNA_def_function(srna, "output_exists", "rna_DynamicPaint_is_output_exists");
RNA_def_function_ui_description(func, "Checks if surface output layer of given name exists");
parm = RNA_def_pointer(func, "object", "Object", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_int(func, "index", 0, 0, 1, "Index", "", 0, 1);
RNA_def_property_flag(parm, PROP_REQUIRED);
/* return type */
@@ -632,7 +640,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.00, 5.0, 1, 2);
RNA_def_property_ui_text(prop, "Max Displace",
"Maximum level of depth intersection in object space (use 0.0 to disable)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "displace_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "disp_factor");
@@ -640,7 +648,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_range(prop, -50.0, 50.0);
RNA_def_property_ui_range(prop, -5.0, 5.0, 1, 2);
RNA_def_property_ui_text(prop, "Displace Factor", "Strength of displace when applied to the mesh");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "image_fileformat", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -657,7 +665,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_DISP_INCREMENTAL);
RNA_def_property_ui_text(prop, "Incremental", "New displace is added cumulatively on top of existing");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaintSurface_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
/* wave simulator settings */
prop = RNA_def_property(srna, "wave_damping", PROP_FLOAT, PROP_NONE);
@@ -695,7 +703,7 @@ static void rna_def_canvas_surface(BlenderRNA *brna)
prop = RNA_def_property(srna, "is_cache_user", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_DynamicPaint_is_cache_user_get", NULL);
RNA_def_property_ui_text(prop, "Use Cache", "");
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE|PROP_EDITABLE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
}
static void rna_def_dynamic_paint_canvas_settings(BlenderRNA *brna)
@@ -727,31 +735,35 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
/* paint collision type */
static EnumPropertyItem prop_dynamicpaint_collisiontype[] = {
- {MOD_DPAINT_COL_PSYS, "PARTICLE_SYSTEM", ICON_PARTICLES, "Particle System", ""},
- {MOD_DPAINT_COL_POINT, "POINT", ICON_META_EMPTY, "Object Center", ""},
- {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_META_EMPTY, "Proximity", ""},
- {MOD_DPAINT_COL_VOLDIST, "VOLUME_DISTANCE", ICON_META_CUBE, "Mesh Volume + Proximity", ""},
- {MOD_DPAINT_COL_VOLUME, "VOLUME", ICON_MESH_CUBE, "Mesh Volume", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_COL_PSYS, "PARTICLE_SYSTEM", ICON_PARTICLES, "Particle System", ""},
+ {MOD_DPAINT_COL_POINT, "POINT", ICON_META_EMPTY, "Object Center", ""},
+ {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_META_EMPTY, "Proximity", ""},
+ {MOD_DPAINT_COL_VOLDIST, "VOLUME_DISTANCE", ICON_META_CUBE, "Mesh Volume + Proximity", ""},
+ {MOD_DPAINT_COL_VOLUME, "VOLUME", ICON_MESH_CUBE, "Mesh Volume", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_dynamicpaint_prox_falloff[] = {
- {MOD_DPAINT_PRFALL_SMOOTH, "SMOOTH", ICON_SPHERECURVE, "Smooth", ""},
- {MOD_DPAINT_PRFALL_CONSTANT, "CONSTANT", ICON_NOCURVE, "Constant", ""},
- {MOD_DPAINT_PRFALL_RAMP, "RAMP", ICON_COLOR, "Color Ramp", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_PRFALL_SMOOTH, "SMOOTH", ICON_SPHERECURVE, "Smooth", ""},
+ {MOD_DPAINT_PRFALL_CONSTANT, "CONSTANT", ICON_NOCURVE, "Constant", ""},
+ {MOD_DPAINT_PRFALL_RAMP, "RAMP", ICON_COLOR, "Color Ramp", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_dynamicpaint_brush_wave_type[] = {
- {MOD_DPAINT_WAVEB_CHANGE, "CHANGE", 0, "Depth Change", ""},
- {MOD_DPAINT_WAVEB_DEPTH, "DEPTH", 0, "Obstacle", ""},
- {MOD_DPAINT_WAVEB_FORCE, "FORCE", 0, "Force", ""},
- {MOD_DPAINT_WAVEB_REFLECT, "REFLECT", 0, "Reflect Only", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_WAVEB_CHANGE, "CHANGE", 0, "Depth Change", ""},
+ {MOD_DPAINT_WAVEB_DEPTH, "DEPTH", 0, "Obstacle", ""},
+ {MOD_DPAINT_WAVEB_FORCE, "FORCE", 0, "Force", ""},
+ {MOD_DPAINT_WAVEB_REFLECT, "REFLECT", 0, "Reflect Only", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_dynamicpaint_brush_ray_dir[] = {
- {MOD_DPAINT_RAY_CANVAS, "CANVAS", 0, "Canvas Normal", ""},
- {MOD_DPAINT_RAY_BRUSH_AVG, "BRUSH", 0, "Brush Normal", ""},
- {MOD_DPAINT_RAY_ZPLUS, "Z_AXIS", 0, "Z-Axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {MOD_DPAINT_RAY_CANVAS, "CANVAS", 0, "Canvas Normal", ""},
+ {MOD_DPAINT_RAY_BRUSH_AVG, "BRUSH", 0, "Brush Normal", ""},
+ {MOD_DPAINT_RAY_ZPLUS, "Z_AXIS", 0, "Z-Axis", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "DynamicPaintBrushSettings", NULL);
RNA_def_struct_ui_text(srna, "Brush Settings", "Brush settings");
@@ -765,26 +777,26 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "r");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Paint Color", "Color of the paint");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "paint_alpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "alpha");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 2);
RNA_def_property_ui_text(prop, "Paint Alpha", "Paint alpha");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_USE_MATERIAL);
RNA_def_property_ui_text(prop, "Use object material", "Use object material to define color and influence");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "mat");
RNA_def_property_ui_text(prop, "Material",
"Material to use (if not defined, material linked to the mesh is used)");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_absolute_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ABS_ALPHA);
@@ -797,12 +809,12 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 2);
RNA_def_property_ui_text(prop, "Paint Wetness",
"Paint wetness, visible in wetmap (some effects only affect wet paint)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_paint_erase", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ERASE);
RNA_def_property_ui_text(prop, "Erase Paint", "Erase / remove paint instead of adding it");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "wave_type", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -839,28 +851,28 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_velocity_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_VELOCITY_ALPHA);
RNA_def_property_ui_text(prop, "Multiply Alpha", "Multiply brush influence by velocity color ramp alpha");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_velocity_depth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_VELOCITY_DEPTH);
RNA_def_property_ui_text(prop, "Multiply Depth",
"Multiply brush intersection depth (displace, waves) by velocity ramp alpha");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_velocity_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_VELOCITY_COLOR);
RNA_def_property_ui_text(prop, "Replace Color", "Replace brush color by velocity color ramp");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
/*
- * Paint Area / Collision
- */
+ * Paint Area / Collision
+ */
prop = RNA_def_property(srna, "paint_source", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_sdna(prop, NULL, "collision");
RNA_def_property_enum_items(prop, prop_dynamicpaint_collisiontype);
RNA_def_property_ui_text(prop, "Paint Source", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "paint_distance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "paint_distance");
@@ -868,25 +880,25 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.0, 500.0, 10, 3);
RNA_def_property_ui_text(prop, "Proximity Distance",
"Maximum distance from brush to mesh surface to affect paint");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_proximity_ramp_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_RAMP_ALPHA);
RNA_def_property_ui_text(prop, "Only Use Alpha", "Only read color ramp alpha");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "proximity_falloff", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_sdna(prop, NULL, "proximity_falloff");
RNA_def_property_enum_items(prop, prop_dynamicpaint_prox_falloff);
RNA_def_property_ui_text(prop, "Falloff", "Proximity falloff type");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_proximity_project", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_PROX_PROJECT);
RNA_def_property_ui_text(prop, "Project",
"Brush is projected to canvas from defined direction within brush proximity");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "ray_direction", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ray_dir");
@@ -894,17 +906,17 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Ray Direction",
"Ray direction to use for projection (if brush object is located in that direction "
"it's painted)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "invert_proximity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_INVERSE_PROX);
RNA_def_property_ui_text(prop, "Inner Proximity", "Proximity falloff is applied inside the volume");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "use_negative_volume", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_NEGATE_VOLUME);
RNA_def_property_ui_text(prop, "Negate Volume", "Negate influence inside the volume");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
/*
@@ -915,27 +927,27 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "ParticleSystem");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Particle Systems", "The particle system to paint with");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_resetDependancy");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_resetDependancy");
prop = RNA_def_property(srna, "use_particle_radius", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_PART_RAD);
RNA_def_property_ui_text(prop, "Use Particle Radius", "Use radius from particle settings");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "solid_radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "particle_radius");
RNA_def_property_range(prop, 0.01, 10.0);
RNA_def_property_ui_range(prop, 0.01, 2.0, 5, 3);
RNA_def_property_ui_text(prop, "Solid Radius", "Radius that will be painted solid");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "smooth_radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "particle_smooth");
RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 0);
RNA_def_property_ui_text(prop, "Smooth Radius", "Smooth falloff added after solid radius");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
/*
@@ -945,13 +957,13 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "paint_ramp");
RNA_def_property_struct_type(prop, "ColorRamp");
RNA_def_property_ui_text(prop, "Paint Color Ramp", "Color ramp used to define proximity falloff");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
prop = RNA_def_property(srna, "velocity_ramp", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "vel_ramp");
RNA_def_property_struct_type(prop, "ColorRamp");
RNA_def_property_ui_text(prop, "Velocity Color Ramp", "Color ramp used to define brush velocity effect");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_DynamicPaint_redoModifier");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
}
void RNA_def_dynamic_paint(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
index 122e42e29e7..333f6878413 100644
--- a/source/blender/makesrna/intern/rna_fcurve.c
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -59,14 +59,16 @@ EnumPropertyItem fmodifier_type_items[] = {
/*{FMODIFIER_TYPE_PYTHON, "PYTHON", 0, "Python", ""}, *//* FIXME: not implemented yet! */
{FMODIFIER_TYPE_LIMITS, "LIMITS", 0, "Limits", ""},
{FMODIFIER_TYPE_STEPPED, "STEPPED", 0, "Stepped Interpolation", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem beztriple_keyframe_type_items[] = {
{BEZT_KEYTYPE_KEYFRAME, "KEYFRAME", 0, "Keyframe", ""},
{BEZT_KEYTYPE_BREAKDOWN, "BREAKDOWN", 0, "Breakdown", ""},
{BEZT_KEYTYPE_EXTREME, "EXTREME", 0, "Extreme", ""},
{BEZT_KEYTYPE_JITTER, "JITTER", 0, "Jitter", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -115,9 +117,9 @@ static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA
/* TODO: this really needs an update guard... */
DAG_scene_sort(bmain, scene);
- DAG_id_tag_update(id, OB_RECALC_OB|OB_RECALC_DATA);
+ DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
- WM_main_add_notifier(NC_SCENE|ND_FRAME, scene);
+ WM_main_add_notifier(NC_SCENE | ND_FRAME, scene);
}
static void rna_ChannelDriver_update_expr(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -163,25 +165,25 @@ static void rna_DriverTarget_update_name(Main *bmain, Scene *scene, PointerRNA *
/* note: this function exists only to avoid id refcounting */
static void rna_DriverTarget_id_set(PointerRNA *ptr, PointerRNA value)
{
- DriverTarget *dtar = (DriverTarget*)ptr->data;
+ DriverTarget *dtar = (DriverTarget *)ptr->data;
dtar->id = value.data;
}
static StructRNA *rna_DriverTarget_id_typef(PointerRNA *ptr)
{
- DriverTarget *dtar = (DriverTarget*)ptr->data;
+ DriverTarget *dtar = (DriverTarget *)ptr->data;
return ID_code_to_RNA_type(dtar->idtype);
}
static int rna_DriverTarget_id_editable(PointerRNA *ptr)
{
- DriverTarget *dtar = (DriverTarget*)ptr->data;
- return (dtar->idtype)? PROP_EDITABLE : 0;
+ DriverTarget *dtar = (DriverTarget *)ptr->data;
+ return (dtar->idtype) ? PROP_EDITABLE : 0;
}
static int rna_DriverTarget_id_type_editable(PointerRNA *ptr)
{
- DriverTarget *dtar = (DriverTarget*)ptr->data;
+ DriverTarget *dtar = (DriverTarget *)ptr->data;
/* when the id-type can only be object, don't allow editing
* otherwise, there may be strange crashes
@@ -191,7 +193,7 @@ static int rna_DriverTarget_id_type_editable(PointerRNA *ptr)
static void rna_DriverTarget_id_type_set(PointerRNA *ptr, int value)
{
- DriverTarget *data = (DriverTarget*)(ptr->data);
+ DriverTarget *data = (DriverTarget *)(ptr->data);
/* check if ID-type is settable */
if ((data->flag & DTAR_FLAG_ID_OB_ONLY) == 0) {
@@ -254,7 +256,7 @@ static void rna_DriverVariable_type_set(PointerRNA *ptr, int value)
static void rna_FKeyframe_handle1_get(PointerRNA *ptr, float *values)
{
- BezTriple *bezt = (BezTriple*)ptr->data;
+ BezTriple *bezt = (BezTriple *)ptr->data;
values[0] = bezt->vec[0][0];
values[1] = bezt->vec[0][1];
@@ -262,7 +264,7 @@ static void rna_FKeyframe_handle1_get(PointerRNA *ptr, float *values)
static void rna_FKeyframe_handle1_set(PointerRNA *ptr, const float *values)
{
- BezTriple *bezt = (BezTriple*)ptr->data;
+ BezTriple *bezt = (BezTriple *)ptr->data;
bezt->vec[0][0] = values[0];
bezt->vec[0][1] = values[1];
@@ -270,7 +272,7 @@ static void rna_FKeyframe_handle1_set(PointerRNA *ptr, const float *values)
static void rna_FKeyframe_handle2_get(PointerRNA *ptr, float *values)
{
- BezTriple *bezt = (BezTriple*)ptr->data;
+ BezTriple *bezt = (BezTriple *)ptr->data;
values[0] = bezt->vec[2][0];
values[1] = bezt->vec[2][1];
@@ -278,7 +280,7 @@ static void rna_FKeyframe_handle2_get(PointerRNA *ptr, float *values)
static void rna_FKeyframe_handle2_set(PointerRNA *ptr, const float *values)
{
- BezTriple *bezt = (BezTriple*)ptr->data;
+ BezTriple *bezt = (BezTriple *)ptr->data;
bezt->vec[2][0] = values[0];
bezt->vec[2][1] = values[1];
@@ -286,7 +288,7 @@ static void rna_FKeyframe_handle2_set(PointerRNA *ptr, const float *values)
static void rna_FKeyframe_ctrlpoint_get(PointerRNA *ptr, float *values)
{
- BezTriple *bezt = (BezTriple*)ptr->data;
+ BezTriple *bezt = (BezTriple *)ptr->data;
values[0] = bezt->vec[1][0];
values[1] = bezt->vec[1][1];
@@ -294,7 +296,7 @@ static void rna_FKeyframe_ctrlpoint_get(PointerRNA *ptr, float *values)
static void rna_FKeyframe_ctrlpoint_set(PointerRNA *ptr, const float *values)
{
- BezTriple *bezt = (BezTriple*)ptr->data;
+ BezTriple *bezt = (BezTriple *)ptr->data;
bezt->vec[1][0] = values[0];
bezt->vec[1][1] = values[1];
@@ -362,7 +364,7 @@ static void rna_FCurve_group_set(PointerRNA *ptr, PointerRNA value)
else {
/* the ID given is the owner of the F-Curve (for drivers) */
AnimData *adt = BKE_animdata_from_id(ptr->id.data);
- act = (adt)? adt->action : NULL;
+ act = (adt) ? adt->action : NULL;
}
/* already belongs to group? */
@@ -420,14 +422,14 @@ void rna_Driver_remove_variable(ChannelDriver *driver, ReportList *reports, Driv
static PointerRNA rna_FCurve_active_modifier_get(PointerRNA *ptr)
{
- FCurve *fcu = (FCurve*)ptr->data;
+ FCurve *fcu = (FCurve *)ptr->data;
FModifier *fcm = find_active_fmodifier(&fcu->modifiers);
return rna_pointer_inherit_refine(ptr, &RNA_FModifier, fcm);
}
static void rna_FCurve_active_modifier_set(PointerRNA *ptr, PointerRNA value)
{
- FCurve *fcu = (FCurve*)ptr->data;
+ FCurve *fcu = (FCurve *)ptr->data;
set_active_fmodifier(&fcu->modifiers, (FModifier *)value.data);
}
@@ -447,7 +449,7 @@ static void rna_FCurve_modifiers_remove(FCurve *fcu, ReportList *reports, FModif
static void rna_FModifier_active_set(PointerRNA *ptr, int UNUSED(value))
{
- FModifier *fm = (FModifier*)ptr->data;
+ FModifier *fm = (FModifier *)ptr->data;
/* don't toggle, always switch on */
fm->flag |= FMODIFIER_FLAG_ACTIVE;
@@ -455,23 +457,23 @@ static void rna_FModifier_active_set(PointerRNA *ptr, int UNUSED(value))
static void rna_FModifier_start_frame_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
*min = MINAFRAMEF;
- *max = (fcm->flag & FMODIFIER_FLAG_RANGERESTRICT)? fcm->efra : MAXFRAMEF;
+ *max = (fcm->flag & FMODIFIER_FLAG_RANGERESTRICT) ? fcm->efra : MAXFRAMEF;
}
static void rna_FModifier_end_frame_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
- *min = (fcm->flag & FMODIFIER_FLAG_RANGERESTRICT)? fcm->sfra : MINAFRAMEF;
+ *min = (fcm->flag & FMODIFIER_FLAG_RANGERESTRICT) ? fcm->sfra : MINAFRAMEF;
*max = MAXFRAMEF;
}
static void rna_FModifier_blending_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
*min = 0.0f;
*max = fcm->efra - fcm->sfra;
@@ -479,7 +481,7 @@ static void rna_FModifier_blending_range(PointerRNA *ptr, float *min, float *max
static void rna_FModifier_active_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- FModifier *fm, *fmo = (FModifier*)ptr->data;
+ FModifier *fm, *fmo = (FModifier *)ptr->data;
/* clear active state of other FModifiers in this list */
for (fm = fmo->prev; fm; fm = fm->prev) {
@@ -493,64 +495,64 @@ static void rna_FModifier_active_update(Main *UNUSED(bmain), Scene *UNUSED(scene
static int rna_FModifierGenerator_coefficients_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Generator *gen = fcm->data;
if (gen)
length[0] = gen->arraysize;
else
- length[0] = 100; /* for raw_access, untested */
+ length[0] = 100; /* for raw_access, untested */
return length[0];
}
static void rna_FModifierGenerator_coefficients_get(PointerRNA *ptr, float *values)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Generator *gen = fcm->data;
memcpy(values, gen->coefficients, gen->arraysize * sizeof(float));
}
static void rna_FModifierGenerator_coefficients_set(PointerRNA *ptr, const float *values)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Generator *gen = fcm->data;
memcpy(gen->coefficients, values, gen->arraysize * sizeof(float));
}
static void rna_FModifierLimits_minx_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Limits *data = fcm->data;
*min = MINAFRAMEF;
- *max = (data->flag & FCM_LIMIT_XMAX)? data->rect.xmax : MAXFRAMEF;
+ *max = (data->flag & FCM_LIMIT_XMAX) ? data->rect.xmax : MAXFRAMEF;
}
static void rna_FModifierLimits_maxx_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Limits *data = fcm->data;
- *min = (data->flag & FCM_LIMIT_XMIN)? data->rect.xmin : MINAFRAMEF;
+ *min = (data->flag & FCM_LIMIT_XMIN) ? data->rect.xmin : MINAFRAMEF;
*max = MAXFRAMEF;
}
static void rna_FModifierLimits_miny_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Limits *data = fcm->data;
*min = -FLT_MAX;
- *max = (data->flag & FCM_LIMIT_YMAX)? data->rect.ymax : FLT_MAX;
+ *max = (data->flag & FCM_LIMIT_YMAX) ? data->rect.ymax : FLT_MAX;
}
static void rna_FModifierLimits_maxy_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Limits *data = fcm->data;
- *min = (data->flag & FCM_LIMIT_YMIN)? data->rect.ymin : -FLT_MAX;
+ *min = (data->flag & FCM_LIMIT_YMIN) ? data->rect.ymin : -FLT_MAX;
*max = FLT_MAX;
}
@@ -558,27 +560,27 @@ static void rna_FModifierLimits_maxy_range(PointerRNA *ptr, float *min, float *m
static void rna_FModifierStepped_start_frame_range(PointerRNA *ptr, float *min, float *max,
float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Stepped *data = fcm->data;
*min = MINAFRAMEF;
- *max = (data->flag & FCM_STEPPED_NO_AFTER)? data->end_frame : MAXFRAMEF;
+ *max = (data->flag & FCM_STEPPED_NO_AFTER) ? data->end_frame : MAXFRAMEF;
}
static void rna_FModifierStepped_end_frame_range(PointerRNA *ptr, float *min, float *max,
float *softmin, float *softmax)
{
- FModifier *fcm = (FModifier*)ptr->data;
+ FModifier *fcm = (FModifier *)ptr->data;
FMod_Stepped *data = fcm->data;
- *min = (data->flag & FCM_STEPPED_NO_BEFORE)? data->start_frame : MINAFRAMEF;
+ *min = (data->flag & FCM_STEPPED_NO_BEFORE) ? data->start_frame : MINAFRAMEF;
*max = MAXFRAMEF;
}
static BezTriple *rna_FKeyframe_points_insert(FCurve *fcu, float frame, float value, int flag)
{
int index = insert_vert_fcurve(fcu, frame, value, flag);
- return ((fcu->bezt) && (index >= 0))? (fcu->bezt + index) : NULL;
+ return ((fcu->bezt) && (index >= 0)) ? (fcu->bezt + index) : NULL;
}
static void rna_FKeyframe_points_add(FCurve *fcu, int tot)
@@ -621,7 +623,7 @@ static void rna_FKeyframe_points_remove(FCurve *fcu, ReportList *reports, BezTri
static void rna_fcurve_range(FCurve *fcu, float range[2])
{
- calc_fcurve_range(fcu, range, range+1, FALSE, FALSE);
+ calc_fcurve_range(fcu, range, range + 1, FALSE, FALSE);
}
#else
@@ -634,7 +636,8 @@ static void rna_def_fmodifier_generator(BlenderRNA *brna)
static EnumPropertyItem generator_mode_items[] = {
{FCM_GENERATOR_POLYNOMIAL, "POLYNOMIAL", 0, "Expanded Polynomial", ""},
{FCM_GENERATOR_POLYNOMIAL_FACTORISED, "POLYNOMIAL_FACTORISED", 0, "Factorized Polynomial", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FModifierGenerator", "FModifier");
RNA_def_struct_ui_text(srna, "Generator F-Modifier", "Deterministically generate values for the modified F-Curve");
@@ -646,21 +649,21 @@ static void rna_def_fmodifier_generator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Additive",
"Values generated by this modifier are applied on top of "
"the existing values instead of overwriting them");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
- /* XXX this has a special validation func */
+ /* XXX this has a special validation func */
prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, generator_mode_items);
RNA_def_property_ui_text(prop, "Mode", "Type of generator to use");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* order of the polynomial */
- /* XXX this has a special validation func */
+ /* XXX this has a special validation func */
prop = RNA_def_property(srna, "poly_order", PROP_INT, PROP_NONE);
RNA_def_property_ui_text(prop, "Polynomial Order",
"The highest power of 'x' for this polynomial (number of coefficients - 1)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* coefficients array */
prop = RNA_def_property(srna, "coefficients", PROP_FLOAT, PROP_NONE);
@@ -686,7 +689,8 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna)
{3, "SQRT", 0, "Square Root", ""},
{4, "LN", 0, "Natural Logarithm", ""},
{5, "SINC", 0, "Normalised Sine", "sin(x) / x"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FModifierFunctionGenerator", "FModifier");
RNA_def_struct_ui_text(srna, "Built-In Function F-Modifier", "Generate values using a Built-In Function");
@@ -695,19 +699,19 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna)
/* coefficients */
prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Amplitude", "Scale factor determining the maximum/minimum values");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "phase_multiplier", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Phase Multiplier", "Scale factor determining the 'speed' of the function");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "phase_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Phase Offset", "Constant factor to offset time by for function");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "value_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Value Offset", "Constant factor to offset values by");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* flags */
prop = RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
@@ -715,13 +719,13 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Additive",
"Values generated by this modifier are applied on top of "
"the existing values instead of overwriting them");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "function_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Type", "Type of built-in function to use");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
/* --------- */
@@ -742,18 +746,18 @@ static void rna_def_fmodifier_envelope_ctrl(BlenderRNA *brna)
prop = RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Minimum Value", "Lower bound of envelope at this control-point");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Maximum Value", "Upper bound of envelope at this control-point");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* Frame */
prop = RNA_def_property(srna, "frame", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "time");
RNA_def_property_ui_text(prop, "Frame", "Frame this control-point occurs on");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* TODO: */
/* - selection flags (not implemented in UI yet though) */
@@ -778,17 +782,17 @@ static void rna_def_fmodifier_envelope(BlenderRNA *brna)
prop = RNA_def_property(srna, "reference_value", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "midval");
RNA_def_property_ui_text(prop, "Reference Value", "Value that envelope's influence is centered around / based on");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "default_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Default Minimum", "Lower distance from Reference Value for 1:1 default influence");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "default_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Default Maximum", "Upper distance from Reference Value for 1:1 default influence");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
/* --------- */
@@ -806,7 +810,8 @@ static void rna_def_fmodifier_cycles(BlenderRNA *brna)
"start and end values"},
{FCM_EXTRAPOLATE_MIRROR, "MIRROR", 0, "Repeat Mirrored",
"Alternate between forward and reverse playback of keyframe range"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FModifierCycles", "FModifier");
RNA_def_struct_ui_text(srna, "Cycles F-Modifier", "Repeat the values of the modified F-Curve");
@@ -817,26 +822,26 @@ static void rna_def_fmodifier_cycles(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "before_mode");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Before Mode", "Cycling mode to use before first keyframe");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "cycles_before", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "before_cycles");
RNA_def_property_ui_text(prop, "Before Cycles",
"Maximum number of cycles to allow before first keyframe (0 = infinite)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* after */
prop = RNA_def_property(srna, "mode_after", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "after_mode");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "After Mode", "Cycling mode to use after last keyframe");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "cycles_after", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "after_cycles");
RNA_def_property_ui_text(prop, "After Cycles",
"Maximum number of cycles to allow after last keyframe (0 = infinite)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
/* --------- */
@@ -865,46 +870,46 @@ static void rna_def_fmodifier_limits(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_XMIN);
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_YMIN);
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_XMAX);
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_YMAX);
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.xmin");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_minx_range");
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.ymin");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_miny_range");
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.xmax");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_maxx_range");
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.ymax");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_maxy_range");
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
/* --------- */
@@ -919,7 +924,8 @@ static void rna_def_fmodifier_noise(BlenderRNA *brna)
{FCM_NOISE_MODIF_ADD, "ADD", 0, "Add", ""},
{FCM_NOISE_MODIF_SUBTRACT, "SUBTRACT", 0, "Subtract", ""},
{FCM_NOISE_MODIF_MULTIPLY, "MULTIPLY", 0, "Multiply", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FModifierNoise", "FModifier");
RNA_def_struct_ui_text(srna, "Noise F-Modifier", "Give randomness to the modified F-Curve");
@@ -929,28 +935,28 @@ static void rna_def_fmodifier_noise(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "modification");
RNA_def_property_enum_items(prop, prop_modification_items);
RNA_def_property_ui_text(prop, "Blend Type", "Method of modifying the existing F-Curve");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "size");
RNA_def_property_ui_text(prop, "Scale", "Scaling (in time) of the noise");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "strength");
RNA_def_property_ui_text(prop, "Strength",
"Amplitude of the noise - the amount that it modifies the underlying curve");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "phase");
RNA_def_property_ui_text(prop, "Phase", "A random seed for the noise effect");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "depth", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "depth");
RNA_def_property_ui_text(prop, "Depth", "Amount of fine level detail present in the noise");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
@@ -971,36 +977,36 @@ static void rna_def_fmodifier_stepped(BlenderRNA *brna)
prop = RNA_def_property(srna, "frame_step", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "step_size");
RNA_def_property_ui_text(prop, "Step Size", "Number of frames to hold each value");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "frame_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_ui_text(prop, "Offset",
"Reference number of frames before frames get held "
"(use to get hold for '1-3' vs '5-7' holding patterns)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "use_frame_start", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_STEPPED_NO_BEFORE);
RNA_def_property_ui_text(prop, "Use Start Frame", "Restrict modifier to only act after its 'start' frame");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "use_frame_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_STEPPED_NO_AFTER);
RNA_def_property_ui_text(prop, "Use End Frame", "Restrict modifier to only act before its 'end' frame");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "start_frame");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierStepped_start_frame_range");
RNA_def_property_ui_text(prop, "Start Frame", "Frame that modifier's influence starts (if applicable)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "frame_end", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "end_frame");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierStepped_end_frame_range");
RNA_def_property_ui_text(prop, "End Frame", "Frame that modifier's influence ends (if applicable)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
/* --------- */
@@ -1017,7 +1023,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "F-Modifier", "Modifier for values of F-Curve");
#if 0 /* XXX not used yet */
- /* name */
+ /* name */
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_struct_name_property(srna, prop);
RNA_def_property_ui_text(prop, "Name", "Short description of F-Curve Modifier");
@@ -1038,21 +1044,21 @@ static void rna_def_fmodifier(BlenderRNA *brna)
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED);
RNA_def_property_ui_text(prop, "Muted", "F-Curve Modifier will not be evaluated");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
RNA_def_property_ui_icon(prop, ICON_MUTE_IPO_OFF, 1);
prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED);
RNA_def_property_ui_text(prop, "Disabled", "F-Curve Modifier has invalid settings and will not be evaluated");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
- /* TODO: setting this to true must ensure that all others in stack are turned off too... */
+ /* TODO: setting this to true must ensure that all others in stack are turned off too... */
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "F-Curve Modifier is the one being edited ");
RNA_def_property_boolean_funcs(prop, NULL, "rna_FModifier_active_set");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, "rna_FModifier_active_update");
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, "rna_FModifier_active_update");
RNA_def_property_ui_icon(prop, ICON_RADIOBUT_OFF, 1);
/* restricted range */
@@ -1061,7 +1067,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Restrict Frame Range",
"F-Curve Modifier is only applied for the specified frame range to help "
"mask off effects in order to chain them");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); /* XXX: depends on UI implementation */
prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
@@ -1069,32 +1075,32 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifier_start_frame_range");
RNA_def_property_ui_text(prop, "Start Frame",
"Frame that modifier's influence starts (if Restrict Frame Range is in use)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
prop = RNA_def_property(srna, "frame_end", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "efra");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifier_end_frame_range");
RNA_def_property_ui_text(prop, "End Frame",
"Frame that modifier's influence ends (if Restrict Frame Range is in use)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
prop = RNA_def_property(srna, "blend_in", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "blendin");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifier_blending_range");
RNA_def_property_ui_text(prop, "Blend In", "Number of frames from start frame for influence to take effect");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
prop = RNA_def_property(srna, "blend_out", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "blendout");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifier_blending_range");
RNA_def_property_ui_text(prop, "Blend Out", "Number of frames from end frame for influence to fade out");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
/* influence */
prop = RNA_def_property(srna, "use_influence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_USEINFLUENCE);
RNA_def_property_ui_text(prop, "Use Influence", "F-Curve Modifier's effects will be tempered by a default factor");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); /* XXX: depends on UI implementation */
prop = RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR);
@@ -1103,7 +1109,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_property_float_default(prop, 1.0f);
RNA_def_property_ui_text(prop, "Influence",
"Amount of influence F-Curve Modifier will have when not fading in/out");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
}
/* *********************** */
@@ -1123,7 +1129,8 @@ static void rna_def_drivertarget(BlenderRNA *brna)
{DTAR_TRANSCHAN_SCALEX, "SCALE_X", 0, "X Scale", ""},
{DTAR_TRANSCHAN_SCALEY, "SCALE_Y", 0, "Y Scale", ""},
{DTAR_TRANSCHAN_SCALEZ, "SCALE_Z", 0, "Z Scale", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_local_space_items[] = {
{0, "WORLD_SPACE", 0, "World Space", "Transforms include effects of parenting/restpose and constraints"},
@@ -1132,7 +1139,8 @@ static void rna_def_drivertarget(BlenderRNA *brna)
{DTAR_FLAG_LOCALSPACE|DTAR_FLAG_LOCAL_CONSTS, "LOCAL_SPACE", 0, "Local Space",
"Transforms include effects of constraints but not "
"parenting/restpose"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "DriverTarget", NULL);
RNA_def_struct_ui_text(srna, "Driver Target", "Source of input values for driver variables");
@@ -1194,7 +1202,8 @@ static void rna_def_drivervar(BlenderRNA *brna)
"Final transformation value of object or bone"},
{DVAR_TYPE_ROT_DIFF, "ROTATION_DIFF", 0, "Rotational Difference", "Use the angle between two bones"},
{DVAR_TYPE_LOC_DIFF, "LOC_DIFF", 0, "Distance", "Distance between two bones or objects"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "DriverVariable", NULL);
@@ -1244,9 +1253,9 @@ static void rna_def_channeldriver_variables(BlenderRNA *brna, PropertyRNA *cprop
/* add variable */
func = RNA_def_function(srna, "new", "rna_Driver_new_variable");
RNA_def_function_ui_description(func, "Add a new variable for the driver");
- /* return type */
+ /* return type */
parm = RNA_def_pointer(func, "var", "DriverVariable", "", "Newly created Driver Variable");
- RNA_def_function_return(func, parm);
+ RNA_def_function_return(func, parm);
/* remove variable */
func = RNA_def_function(srna, "remove", "rna_Driver_remove_variable");
@@ -1254,7 +1263,7 @@ static void rna_def_channeldriver_variables(BlenderRNA *brna, PropertyRNA *cprop
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* target to remove */
parm = RNA_def_pointer(func, "variable", "DriverVariable", "", "Variable to remove from the driver");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_channeldriver(BlenderRNA *brna)
@@ -1268,7 +1277,8 @@ static void rna_def_channeldriver(BlenderRNA *brna)
{DRIVER_TYPE_PYTHON, "SCRIPTED", 0, "Scripted Expression", ""},
{DRIVER_TYPE_MIN, "MIN", 0, "Minimum Value", ""},
{DRIVER_TYPE_MAX, "MAX", 0, "Maximum Value", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Driver", NULL);
RNA_def_struct_sdna(srna, "ChannelDriver");
@@ -1324,14 +1334,14 @@ static void rna_def_fpoint(BlenderRNA *brna)
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
RNA_def_property_ui_text(prop, "Select", "Selection status");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
/* Vector value */
prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_COORDS); /* keyframes are dimensionless */
RNA_def_property_float_sdna(prop, NULL, "vec");
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Point", "Point coordinates");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
@@ -1351,30 +1361,30 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
prop = RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
RNA_def_property_ui_text(prop, "Handle 1 selected", "Left handle selection status");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
prop = RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f3", 0);
RNA_def_property_ui_text(prop, "Handle 2 selected", "Right handle selection status");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
prop = RNA_def_property(srna, "select_control_point", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f2", 0);
RNA_def_property_ui_text(prop, "Select", "Control point selection status");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
/* Enums */
prop = RNA_def_property(srna, "handle_left_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h1");
RNA_def_property_enum_items(prop, keyframe_handle_type_items);
RNA_def_property_ui_text(prop, "Left Handle Type", "Handle types");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
prop = RNA_def_property(srna, "handle_right_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h2");
RNA_def_property_enum_items(prop, keyframe_handle_type_items);
RNA_def_property_ui_text(prop, "Right Handle Type", "Handle types");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
prop = RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ipo");
@@ -1382,32 +1392,32 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Interpolation",
"Interpolation method to use for segment of the F-Curve from "
"this Keyframe until the next Keyframe");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "hide");
RNA_def_property_enum_items(prop, beztriple_keyframe_type_items);
RNA_def_property_ui_text(prop, "Type", "Type of keyframe (for visual purposes only)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
/* Vector values */
prop = RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_COORDS); /* keyframes are dimensionless */
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_FKeyframe_handle1_get", "rna_FKeyframe_handle1_set", NULL);
RNA_def_property_ui_text(prop, "Left Handle", "Coordinates of the left handle (before the control point)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_COORDS); /* keyframes are dimensionless */
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_FKeyframe_ctrlpoint_get", "rna_FKeyframe_ctrlpoint_set", NULL);
RNA_def_property_ui_text(prop, "Control Point", "Coordinates of the control point");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
prop = RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_COORDS); /* keyframes are dimensionless */
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_FKeyframe_handle2_get", "rna_FKeyframe_handle2_set", NULL);
RNA_def_property_ui_text(prop, "Right Handle", "Coordinates of the right handle (after the control point)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
}
static void rna_def_fcurve_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
@@ -1448,7 +1458,7 @@ static void rna_def_fcurve_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove a modifier from this F-Curve");
/* modifier to remove */
parm = RNA_def_pointer(func, "modifier", "FModifier", "", "Removed modifier");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
/* fcurve.keyframe_points */
@@ -1463,7 +1473,8 @@ static void rna_def_fcurve_keyframe_points(BlenderRNA *brna, PropertyRNA *cprop)
{INSERTKEY_REPLACE, "REPLACE", 0, "Replace", "Don't add any new keyframes, but just replace existing ones"},
{INSERTKEY_NEEDED, "NEEDED", 0, "Needed", "Only adds keyframes that are needed"},
{INSERTKEY_FAST, "FAST", 0, "Fast", "Fast keyframe insertion to avoid recalculating the curve each time"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
RNA_def_property_srna(cprop, "FCurveKeyframePoints");
srna = RNA_def_struct(brna, "FCurveKeyframePoints", NULL);
@@ -1492,7 +1503,7 @@ static void rna_def_fcurve_keyframe_points(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove keyframe from an F-Curve");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "keyframe", "Keyframe", "", "Keyframe to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* optional */
RNA_def_boolean(func, "fast", 0, "Fast", "Fast keyframe removal to avoid recalculating the curve each time");
}
@@ -1507,12 +1518,14 @@ static void rna_def_fcurve(BlenderRNA *brna)
static EnumPropertyItem prop_mode_extend_items[] = {
{FCURVE_EXTRAPOLATE_CONSTANT, "CONSTANT", 0, "Constant", ""},
{FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", 0, "Linear", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_mode_color_items[] = {
{FCURVE_COLOR_AUTO_RAINBOW, "AUTO_RAINBOW", 0, "Auto Rainbow", ""},
{FCURVE_COLOR_AUTO_RGB, "AUTO_RGB", 0, "Auto XYZ to RGB", ""},
{FCURVE_COLOR_CUSTOM, "CUSTOM", 0, "User Defined", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FCurve", NULL);
RNA_def_struct_ui_text(srna, "F-Curve", "F-Curve defining values of a period of time");
@@ -1523,7 +1536,7 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "extend");
RNA_def_property_enum_items(prop, prop_mode_extend_items);
RNA_def_property_ui_text(prop, "Extrapolation", "");
- /* XXX need an update callback for this so that animation gets evaluated */
+ /* XXX need an update callback for this so that animation gets evaluated */
RNA_def_property_update(prop, NC_ANIMATION, NULL);
/* Pointers */
@@ -1543,14 +1556,14 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, "rna_FCurve_RnaPath_get", "rna_FCurve_RnaPath_length",
"rna_FCurve_RnaPath_set");
RNA_def_property_ui_text(prop, "Data Path", "RNA Path to property affected by F-Curve");
- /* XXX need an update callback for this to that animation gets evaluated */
+ /* XXX need an update callback for this to that animation gets evaluated */
RNA_def_property_update(prop, NC_ANIMATION, NULL);
/* called 'index' when given as function arg */
prop = RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
RNA_def_property_ui_text(prop, "RNA Array Index",
"Index to the specific property affected by F-Curve if applicable");
- /* XXX need an update callback for this so that animation gets evaluated */
+ /* XXX need an update callback for this so that animation gets evaluated */
RNA_def_property_update(prop, NC_ANIMATION, NULL);
/* Color */
@@ -1569,22 +1582,22 @@ static void rna_def_fcurve(BlenderRNA *brna)
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_SELECTED);
RNA_def_property_ui_text(prop, "Select", "F-Curve is selected for editing");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_PROTECTED);
RNA_def_property_ui_text(prop, "Lock", "F-Curve's settings cannot be edited");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_MUTED);
RNA_def_property_ui_text(prop, "Muted", "F-Curve is not evaluated");
- RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FCURVE_VISIBLE);
RNA_def_property_ui_text(prop, "Hide", "F-Curve and its keyframes are hidden in the Graph Editor graphs");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
/* State Info (for Debugging) */
prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
@@ -1592,7 +1605,7 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Valid",
"False when F-Curve could not be evaluated in past, so should be skipped "
"when evaluating");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
/* Collections */
prop = RNA_def_property(srna, "sampled_points", PROP_COLLECTION, PROP_NONE);
@@ -1635,8 +1648,8 @@ static void rna_def_fcurve(BlenderRNA *brna)
void RNA_def_fcurve(BlenderRNA *brna)
{
rna_def_fcurve(brna);
- rna_def_fkeyframe(brna);
- rna_def_fpoint(brna);
+ rna_def_fkeyframe(brna);
+ rna_def_fpoint(brna);
rna_def_drivertarget(brna);
rna_def_drivervar(brna);
@@ -1646,8 +1659,10 @@ void RNA_def_fcurve(BlenderRNA *brna)
rna_def_fmodifier_generator(brna);
rna_def_fmodifier_function_generator(brna);
+
rna_def_fmodifier_envelope(brna);
- rna_def_fmodifier_envelope_ctrl(brna);
+ rna_def_fmodifier_envelope_ctrl(brna);
+
rna_def_fmodifier_cycles(brna);
rna_def_fmodifier_python(brna);
rna_def_fmodifier_limits(brna);
diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c
index 003b4ae4fbc..8dd1bc86ca1 100644
--- a/source/blender/makesrna/intern/rna_fluidsim.c
+++ b/source/blender/makesrna/intern/rna_fluidsim.c
@@ -51,9 +51,9 @@
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-static StructRNA* rna_FluidSettings_refine(struct PointerRNA *ptr)
+static StructRNA *rna_FluidSettings_refine(struct PointerRNA *ptr)
{
- FluidsimSettings *fss = (FluidsimSettings*)ptr->data;
+ FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
switch (fss->type) {
case OB_FLUIDSIM_DOMAIN:
@@ -80,7 +80,7 @@ static void rna_fluid_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
Object *ob = ptr->id.data;
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
static int fluidsim_find_lastframe(Object *ob, FluidsimSettings *fss)
@@ -103,7 +103,7 @@ static int fluidsim_find_lastframe(Object *ob, FluidsimSettings *fss)
static void rna_fluid_find_enframe(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Object *ob = ptr->id.data;
- FluidsimModifierData *fluidmd = (FluidsimModifierData*)modifiers_findByType(ob, eModifierType_Fluidsim);
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
if (fluidmd->fss->flag & OB_FLUIDSIM_REVERSE) {
fluidmd->fss->lastgoodframe = fluidsim_find_lastframe(ob, fluidmd->fss);
@@ -116,13 +116,13 @@ static void rna_fluid_find_enframe(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_FluidSettings_update_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
FluidsimModifierData *fluidmd;
ParticleSystemModifierData *psmd;
ParticleSystem *psys;
ParticleSettings *part;
- fluidmd = (FluidsimModifierData*)modifiers_findByType(ob, eModifierType_Fluidsim);
+ fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
fluidmd->fss->flag &= ~OB_FLUIDSIM_REVERSE; /* clear flag */
/* remove fluidsim particle system */
@@ -144,7 +144,7 @@ static void rna_FluidSettings_update_type(Main *bmain, Scene *scene, PointerRNA
BLI_addtail(&ob->particlesystem, psys);
/* add modifier */
- psmd = (ParticleSystemModifierData*)modifier_new(eModifierType_ParticleSystem);
+ psmd = (ParticleSystemModifierData *)modifier_new(eModifierType_ParticleSystem);
BLI_strncpy(psmd->modifier.name, "FluidParticleSystem", sizeof(psmd->modifier.name));
psmd->psys = psys;
BLI_addtail(&ob->modifiers, psmd);
@@ -175,8 +175,8 @@ static void rna_DomainFluidSettings_memory_estimate_get(PointerRNA *ptr, char *v
(void)ptr;
value[0] = '\0';
#else
- Object *ob = (Object*)ptr->id.data;
- FluidsimSettings *fss = (FluidsimSettings*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
fluid_estimate_memory(ob, fss, value);
#endif
@@ -193,7 +193,7 @@ static int rna_DomainFluidSettings_memory_estimate_length(PointerRNA *UNUSED(ptr
static char *rna_FluidSettings_path(PointerRNA *ptr)
{
- FluidsimSettings *fss = (FluidsimSettings*)ptr->data;
+ FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
ModifierData *md = (ModifierData *)fss->fmd;
return BLI_sprintfN("modifiers[\"%s\"].settings", md->name);
@@ -201,13 +201,13 @@ static char *rna_FluidSettings_path(PointerRNA *ptr)
static void rna_FluidMeshVertex_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- FluidsimSettings *fss = (FluidsimSettings*)ptr->data;
- rna_iterator_array_begin(iter, fss->meshVelocities, sizeof(float)*3, fss->totvert, 0, NULL);
+ FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
+ rna_iterator_array_begin(iter, fss->meshVelocities, sizeof(float) * 3, fss->totvert, 0, NULL);
}
static int rna_FluidMeshVertex_data_length(PointerRNA *ptr)
{
- FluidsimSettings *fss = (FluidsimSettings*)ptr->data;
+ FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
return fss->totvert;
}
@@ -225,7 +225,8 @@ static void rna_def_fluidsim_slip(StructRNA *srna)
"Mix between no-slip and free-slip (non moving objects only!)"},
{OB_FSBND_FREESLIP, "FREESLIP", 0, "Free Slip",
"Obstacle only causes zero normal velocity (=not sticky, non moving objects only!)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "slip_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "typeFlags");
@@ -267,7 +268,8 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
{OB_FSDOM_GEOM, "GEOMETRY", 0, "Geometry", "Display geometry"},
{OB_FSDOM_PREVIEW, "PREVIEW", 0, "Preview", "Display preview quality results"},
{OB_FSDOM_FINAL, "FINAL", 0, "Final", "Display final quality results"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "DomainFluidSettings", "FluidSettings");
RNA_def_struct_sdna(srna, "FluidsimSettings");
@@ -446,7 +448,8 @@ static void rna_def_fluidsim_volume(StructRNA *srna)
{1, "VOLUME", 0, "Volume", "Use only the inner volume of the mesh"},
{2, "SHELL", 0, "Shell", "Use only the outer shell of the mesh"},
{3, "BOTH", 0, "Both", "Use both the inner volume and the outer shell of the mesh"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "volume_initialization", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "volumeInitType");
@@ -675,8 +678,9 @@ void RNA_def_fluidsim(BlenderRNA *brna)
"Object is made a particle system to display particles generated by a "
"fluidsim domain object"},
{OB_FLUIDSIM_CONTROL, "CONTROL", 0, "Control",
- "Object is made a fluid control mesh, which influences the fluid"},
- {0, NULL, 0, NULL, NULL}};
+ "Object is made a fluid control mesh, which influences the fluid"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FluidSettings", NULL);
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index 53ef1bdbf82..e246c6975b5 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -116,13 +116,13 @@ static void rna_def_gpencil_stroke_point(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "x");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Coordinates", "");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
prop = RNA_def_property(srna, "pressure", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pressure");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Pressure", "Pressure of tablet at point when drawing it");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
}
static void rna_def_gpencil_stroke(BlenderRNA *brna)
@@ -207,26 +207,26 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_array(prop, 3);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Color", "Color for all strokes in this layer");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "color[3]");
RNA_def_property_range(prop, 0.3, 1.0f);
RNA_def_property_ui_text(prop, "Opacity", "Layer Opacity");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
/* Line Thickness */
prop = RNA_def_property(srna, "line_width", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "thickness");
RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Thickness", "Thickness of strokes (in pixels)");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
/* Onion-Skinning */
prop = RNA_def_property(srna, "use_onion_skinning", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_ONIONSKIN);
RNA_def_property_ui_text(prop, "Onion Skinning", "Ghost frames on either side of frame");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
prop = RNA_def_property(srna, "ghost_range_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gstep");
@@ -234,23 +234,23 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Max Ghost Range",
"Maximum number of frames on either side of the active frame to show "
"(0 = show the 'first' available sketch on either side)");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
/* Flags */
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_HIDE);
RNA_def_property_ui_text(prop, "Hide", "Set layer Visibility");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_LOCKED);
RNA_def_property_ui_text(prop, "Locked", "Protect layer from further editing and/or frame changes");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
prop = RNA_def_property(srna, "lock_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_FRAMELOCK);
RNA_def_property_ui_text(prop, "Frame Locked", "Lock current frame displayed by layer");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
/* expose as layers.active */
#if 0
@@ -258,25 +258,25 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_ACTIVE);
RNA_def_property_boolean_funcs(prop, NULL, "rna_GPencilLayer_active_set");
RNA_def_property_ui_text(prop, "Active", "Set active layer for editing");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
#endif
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_SELECT);
RNA_def_property_ui_text(prop, "Select", "Layer is selected for editing in the DopeSheet");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
- /* XXX keep this option? */
+ /* XXX keep this option? */
prop = RNA_def_property(srna, "show_points", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_DRAWDEBUG);
RNA_def_property_ui_text(prop, "Show Points", "Draw the points which make up the strokes (for debugging purposes)");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
/* X-Ray */
prop = RNA_def_property(srna, "show_x_ray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GP_LAYER_NO_XRAY);
RNA_def_property_ui_text(prop, "X Ray", "Make the layer draw in front of objects");
- RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
+ RNA_def_property_update(prop, NC_SCREEN | ND_GPENCIL, NULL);
}
static void rna_def_gpencil_layers(BlenderRNA *brna, PropertyRNA *cprop)
@@ -304,7 +304,7 @@ static void rna_def_gpencil_layers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove a spline from a curve");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "spline", "Spline", "", "The spline to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
#endif
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
@@ -322,9 +322,10 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
static EnumPropertyItem draw_mode_items[] = {
{GP_DATA_VIEWALIGN, "CURSOR", 0, "Cursor", "Draw stroke at the 3D cursor"},
{0, "VIEW", 0, "View", "Stick stroke to the view "}, /* weird, GP_DATA_VIEWALIGN is inverted */
- {GP_DATA_VIEWALIGN|GP_DATA_DEPTH_VIEW, "SURFACE", 0, "Surface", "Stick stroke to surfaces"},
- {GP_DATA_VIEWALIGN|GP_DATA_DEPTH_STROKE, "STROKE", 0, "Stroke", "Stick stroke to other strokes"},
- {0, NULL, 0, NULL, NULL}};
+ {GP_DATA_VIEWALIGN | GP_DATA_DEPTH_VIEW, "SURFACE", 0, "Surface", "Stick stroke to surfaces"},
+ {GP_DATA_VIEWALIGN | GP_DATA_DEPTH_STROKE, "STROKE", 0, "Stroke", "Stick stroke to other strokes"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "GreasePencil", "ID");
RNA_def_struct_sdna(srna, "bGPdata");
diff --git a/source/blender/makesrna/intern/rna_group.c b/source/blender/makesrna/intern/rna_group.c
index 773daaa6742..586b71aa2da 100644
--- a/source/blender/makesrna/intern/rna_group.c
+++ b/source/blender/makesrna/intern/rna_group.c
@@ -48,27 +48,27 @@ static PointerRNA rna_Group_objects_get(CollectionPropertyIterator *iter)
ListBaseIterator *internal = iter->internal;
/* we are actually iterating a GroupObject list, so override get */
- return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((GroupObject*)internal->link)->ob);
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((GroupObject *)internal->link)->ob);
}
static void rna_Group_objects_link(Group *group, bContext *C, ReportList *reports, Object *object)
{
if (!add_to_group(group, object, CTX_data_scene(C), NULL)) {
- BKE_reportf(reports, RPT_ERROR, "Object \"%s\" already in group \"%s\"", object->id.name+2, group->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Object \"%s\" already in group \"%s\"", object->id.name + 2, group->id.name + 2);
return;
}
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, &object->id);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, &object->id);
}
static void rna_Group_objects_unlink(Group *group, bContext *C, ReportList *reports, Object *object)
{
if (!rem_from_group(group, object, CTX_data_scene(C), NULL)) {
- BKE_reportf(reports, RPT_ERROR, "Object \"%s\" not in group \"%s\"", object->id.name+2, group->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Object \"%s\" not in group \"%s\"", object->id.name + 2, group->id.name + 2);
return;
}
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, &object->id);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, &object->id);
}
#else
@@ -89,16 +89,16 @@ static void rna_def_group_objects(BlenderRNA *brna, PropertyRNA *cprop)
/* add object */
func = RNA_def_function(srna, "link", "rna_Group_objects_link");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Add this object to a group");
/* object to add */
parm = RNA_def_pointer(func, "object", "Object", "", "Object to add");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* remove object */
func = RNA_def_function(srna, "unlink", "rna_Group_objects_unlink");
RNA_def_function_ui_description(func, "Remove this object to a group");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
/* object to remove */
parm = RNA_def_pointer(func, "object", "Object", "", "Object to remove");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -113,7 +113,7 @@ void RNA_def_group(BlenderRNA *brna)
srna = RNA_def_struct(brna, "Group", "ID");
RNA_def_struct_ui_text(srna, "Group", "Group of Object datablocks");
RNA_def_struct_ui_icon(srna, ICON_GROUP);
- /* this is done on save/load in readfile.c, removed if no objects are in the group */
+ /* this is done on save/load in readfile.c, removed if no objects are in the group */
RNA_def_struct_clear_flag(srna, STRUCT_ID_REFCOUNT);
prop = RNA_def_property(srna, "dupli_offset", PROP_FLOAT, PROP_TRANSLATION);
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 7052bfa8225..b022da97630 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -48,7 +48,8 @@ static EnumPropertyItem image_source_items[] = {
{IMA_SRC_MOVIE, "MOVIE", 0, "Movie", "Movie file"},
{IMA_SRC_GENERATED, "GENERATED", 0, "Generated", "Generated image"},
{IMA_SRC_VIEWER, "VIEWER", 0, "Viewer", "Compositing node viewer"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -56,20 +57,20 @@ static EnumPropertyItem image_source_items[] = {
static void rna_Image_animated_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Image *ima = (Image*)ptr->data;
- int nr;
+ Image *ima = (Image *)ptr->data;
+ int nr;
if (ima->flag & IMA_TWINANIM) {
- nr = ima->xrep*ima->yrep;
+ nr = ima->xrep * ima->yrep;
if (ima->twsta >= nr) ima->twsta = 1;
- if (ima->twend >= nr) ima->twend = nr-1;
- if (ima->twsta>ima->twend) ima->twsta = 1;
+ if (ima->twend >= nr) ima->twend = nr - 1;
+ if (ima->twsta > ima->twend) ima->twsta = 1;
}
}
static int rna_Image_dirty_get(PointerRNA *ptr)
{
- Image *ima = (Image*)ptr->data;
+ Image *ima = (Image *)ptr->data;
ImBuf *ibuf;
for (ibuf = ima->ibufs.first; ibuf; ibuf = ibuf->next)
@@ -111,7 +112,7 @@ static void rna_Image_free_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
{
Image *ima = ptr->id.data;
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
- WM_main_add_notifier(NC_IMAGE|NA_EDITED, &ima->id);
+ WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
DAG_id_tag_update(&ima->id, 0);
}
@@ -120,7 +121,7 @@ static void rna_Image_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene), P
{
Image *ima = ptr->id.data;
BKE_image_signal(ima, NULL, IMA_SIGNAL_RELOAD);
- WM_main_add_notifier(NC_IMAGE|NA_EDITED, &ima->id);
+ WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
DAG_id_tag_update(&ima->id, 0);
}
@@ -144,8 +145,8 @@ char *rna_ImageUser_path(PointerRNA *ptr)
/* ImageUser *iuser= ptr->data; */
switch (GS(((ID *)ptr->id.data)->name)) {
- case ID_TE:
- return BLI_strdup("image_user");
+ case ID_TE:
+ return BLI_strdup("image_user");
}
}
@@ -155,7 +156,7 @@ char *rna_ImageUser_path(PointerRNA *ptr)
static EnumPropertyItem *rna_Image_source_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- Image *ima = (Image*)ptr->data;
+ Image *ima = (Image *)ptr->data;
EnumPropertyItem *item = NULL;
int totitem = 0;
@@ -177,22 +178,22 @@ static EnumPropertyItem *rna_Image_source_itemf(bContext *UNUSED(C), PointerRNA
static int rna_Image_file_format_get(PointerRNA *ptr)
{
- Image *image = (Image*)ptr->data;
+ Image *image = (Image *)ptr->data;
ImBuf *ibuf = BKE_image_get_ibuf(image, NULL);
return BKE_ftype_to_imtype(ibuf ? ibuf->ftype : 0);
}
static void rna_Image_file_format_set(PointerRNA *ptr, int value)
{
- Image *image = (Image*)ptr->data;
+ Image *image = (Image *)ptr->data;
if (BKE_imtype_is_movie(value) == 0) { /* should be able to throw an error here */
ImBuf *ibuf;
int ftype = BKE_imtype_to_ftype(value);
#if 0
- ibuf= BKE_image_get_ibuf(image, NULL);
+ ibuf = BKE_image_get_ibuf(image, NULL);
if (ibuf)
- ibuf->ftype= ftype;
+ ibuf->ftype = ftype;
#endif
/* to be safe change all buffer file types */
@@ -204,7 +205,7 @@ static void rna_Image_file_format_set(PointerRNA *ptr, int value)
static int rna_Image_has_data_get(PointerRNA *ptr)
{
- Image *im = (Image*)ptr->data;
+ Image *im = (Image *)ptr->data;
if (im->ibufs.first)
return 1;
@@ -214,7 +215,7 @@ static int rna_Image_has_data_get(PointerRNA *ptr)
static void rna_Image_size_get(PointerRNA *ptr, int *values)
{
- Image *im = (Image*)ptr->data;
+ Image *im = (Image *)ptr->data;
ImBuf *ibuf;
void *lock;
@@ -233,7 +234,7 @@ static void rna_Image_size_get(PointerRNA *ptr, int *values)
static void rna_Image_resolution_get(PointerRNA *ptr, float *values)
{
- Image *im = (Image*)ptr->data;
+ Image *im = (Image *)ptr->data;
ImBuf *ibuf;
void *lock;
@@ -252,7 +253,7 @@ static void rna_Image_resolution_get(PointerRNA *ptr, float *values)
static void rna_Image_resolution_set(PointerRNA *ptr, const float *values)
{
- Image *im = (Image*)ptr->data;
+ Image *im = (Image *)ptr->data;
ImBuf *ibuf;
void *lock;
@@ -267,7 +268,7 @@ static void rna_Image_resolution_set(PointerRNA *ptr, const float *values)
static int rna_Image_depth_get(PointerRNA *ptr)
{
- Image *im = (Image*)ptr->data;
+ Image *im = (Image *)ptr->data;
ImBuf *ibuf;
void *lock;
int planes;
@@ -295,7 +296,7 @@ static int rna_Image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
if (ibuf)
- length[0] = ibuf->x*ibuf->y*ibuf->channels;
+ length[0] = ibuf->x * ibuf->y * ibuf->channels;
else
length[0] = 0;
@@ -314,14 +315,14 @@ static void rna_Image_pixels_get(PointerRNA *ptr, float *values)
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
if (ibuf) {
- size = ibuf->x*ibuf->y*ibuf->channels;
+ size = ibuf->x * ibuf->y * ibuf->channels;
if (ibuf->rect_float) {
- memcpy(values, ibuf->rect_float, sizeof(float)*size);
+ memcpy(values, ibuf->rect_float, sizeof(float) * size);
}
else {
for (i = 0; i < size; i++)
- values[i] = ((unsigned char*)ibuf->rect)[i]*(1.0f/255.0f);
+ values[i] = ((unsigned char *)ibuf->rect)[i] * (1.0f / 255.0f);
}
}
@@ -338,14 +339,14 @@ static void rna_Image_pixels_set(PointerRNA *ptr, const float *values)
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
if (ibuf) {
- size = ibuf->x*ibuf->y*ibuf->channels;
+ size = ibuf->x * ibuf->y * ibuf->channels;
if (ibuf->rect_float) {
- memcpy(ibuf->rect_float, values, sizeof(float)*size);
+ memcpy(ibuf->rect_float, values, sizeof(float) * size);
}
else {
for (i = 0; i < size; i++)
- ((unsigned char*)ibuf->rect)[i] = FTOCHAR(values[i]);
+ ((unsigned char *)ibuf->rect)[i] = FTOCHAR(values[i]);
}
ibuf->userflags |= IB_BITMAPDIRTY;
@@ -423,20 +424,24 @@ static void rna_def_image(BlenderRNA *brna)
{IMA_TYPE_UV_TEST, "UV_TEST", 0, "UV Test", ""},
{IMA_TYPE_R_RESULT, "RENDER_RESULT", 0, "Render Result", ""},
{IMA_TYPE_COMPOSITE, "COMPOSITING", 0, "Compositing", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_generated_type_items[] = {
{0, "BLANK", 0, "Blank", "Generate a blank image"},
{1, "UV_GRID", 0, "UV Grid", "Generated grid to test UV mappings"},
{2, "COLOR_GRID", 0, "Color Grid", "Generated improved UV grid to test UV mappings"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_mapping_items[] = {
{0, "UV", 0, "UV Coordinates", "Use UV coordinates for mapping the image"},
{IMA_REFLECT, "REFLECTION", 0, "Reflection", "Use reflection mapping for mapping the image"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_field_order_items[] = {
{0, "EVEN", 0, "Upper First", "Upper field first"},
{IMA_STD_FIELD, "ODD", 0, "Lower First", "Lower field first"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Image", "ID");
RNA_def_struct_ui_text(srna, "Image", "Image datablock referencing an external or packed image");
@@ -445,7 +450,7 @@ static void rna_def_image(BlenderRNA *brna)
prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "File Name", "Image/Movie file name");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_reload_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_reload_update");
/* eek. this is horrible but needed so we can save to a new name without blanking the data :( */
prop = RNA_def_property(srna, "filepath_raw", PROP_STRING, PROP_FILEPATH);
@@ -461,13 +466,13 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_enum_items(prop, image_source_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Image_source_itemf");
RNA_def_property_ui_text(prop, "Source", "Where the image comes from");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_source_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_source_update");
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Type", "How to generate the image");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "packed_file", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
@@ -477,25 +482,25 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_field_order_items);
RNA_def_property_ui_text(prop, "Field Order", "Order of video fields (select which lines are displayed first)");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
/* booleans */
prop = RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_FIELDS);
RNA_def_property_ui_text(prop, "Fields", "Use fields of the image");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_fields_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_fields_update");
prop = RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_DO_PREMUL);
RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_free_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_free_update");
prop = RNA_def_property(srna, "use_color_unpremultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_CM_PREDIVIDE);
RNA_def_property_ui_text(prop, "Color Unpremultiply",
"For premultiplied alpha images, do color space conversion on colors without alpha, "
"to avoid fringing for images with light backgrounds");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_free_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_free_update");
prop = RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
@@ -507,100 +512,100 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "gen_type");
RNA_def_property_enum_items(prop, prop_generated_type_items);
RNA_def_property_ui_text(prop, "Generated Type", "Generated image type");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_generated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
prop = RNA_def_property(srna, "generated_width", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gen_x");
RNA_def_property_range(prop, 1, 16384);
RNA_def_property_ui_text(prop, "Generated Width", "Generated image width");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_generated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
prop = RNA_def_property(srna, "generated_height", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gen_y");
RNA_def_property_range(prop, 1, 16384);
RNA_def_property_ui_text(prop, "Generated Height", "Generated image height");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_generated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
prop = RNA_def_property(srna, "use_generated_float", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gen_flag", IMA_GEN_FLOAT);
RNA_def_property_ui_text(prop, "Float Buffer", "Generate floating point buffer");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_generated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
/* realtime properties */
prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_mapping_items);
RNA_def_property_ui_text(prop, "Mapping", "Mapping type to use for this image in the game engine");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "display_aspect", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "aspx");
RNA_def_property_array(prop, 2);
RNA_def_property_range(prop, 0.1f, 5000.0f);
RNA_def_property_ui_text(prop, "Display Aspect", "Display Aspect for this image, does not affect rendering");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_animation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TWINANIM);
RNA_def_property_ui_text(prop, "Animated", "Use as animated texture in the game engine");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_animated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "twsta");
RNA_def_property_range(prop, 0, 128);
RNA_def_property_ui_text(prop, "Animation Start", "Start frame of an animated texture");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_animated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "twend");
RNA_def_property_range(prop, 0, 128);
RNA_def_property_ui_text(prop, "Animation End", "End frame of an animated texture");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_animated_update");
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
prop = RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "animspeed");
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Animation Speed", "Speed of the animation in frames per second");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_tiles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TILES);
RNA_def_property_ui_text(prop, "Tiles",
"Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "tiles_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "xrep");
RNA_def_property_range(prop, 1, 16);
RNA_def_property_ui_text(prop, "Tiles X", "Degree of repetition in the X direction");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "tiles_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "yrep");
RNA_def_property_range(prop, 1, 16);
RNA_def_property_ui_text(prop, "Tiles Y", "Degree of repetition in the Y direction");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_clamp_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_U);
RNA_def_property_ui_text(prop, "Clamp X", "Disable texture repeating horizontally");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_clamp_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_V);
RNA_def_property_ui_text(prop, "Clamp Y", "Disable texture repeating vertically");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "bindcode", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "bindcode");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Bindcode", "OpenGL bindcode");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "render_slot", PROP_INT, PROP_UNSIGNED);
RNA_def_property_range(prop, 0, IMA_MAX_RENDER_SLOT - 1);
RNA_def_property_ui_text(prop, "Render Slot", "The current render slot displayed, only for viewer type images");
- RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
/*
* Image.has_data and Image.depth are temporary,
diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c
index 84321809ae9..3d937fc561d 100644
--- a/source/blender/makesrna/intern/rna_image_api.c
+++ b/source/blender/makesrna/intern/rna_image_api.c
@@ -109,7 +109,7 @@ static void rna_Image_save(Image *image, ReportList *reports)
if (image->packedfile) {
if (writePackedFile(reports, image->name, image->packedfile, 0) != RET_OK) {
- BKE_reportf(reports, RPT_ERROR, "Image \"%s\" could saved packed file to \"%s\"", image->id.name+2, image->name);
+ BKE_reportf(reports, RPT_ERROR, "Image \"%s\" could saved packed file to \"%s\"", image->id.name + 2, image->name);
}
}
else if (IMB_saveiff(ibuf, filename, ibuf->flags)) {
@@ -121,11 +121,11 @@ static void rna_Image_save(Image *image, ReportList *reports)
ibuf->userflags &= ~IB_BITMAPDIRTY;
}
else {
- BKE_reportf(reports, RPT_ERROR, "Image \"%s\" could not be saved to \"%s\"", image->id.name+2, image->name);
+ BKE_reportf(reports, RPT_ERROR, "Image \"%s\" could not be saved to \"%s\"", image->id.name + 2, image->name);
}
}
else {
- BKE_reportf(reports, RPT_ERROR, "Image \"%s\" does not have any image data", image->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Image \"%s\" does not have any image data", image->id.name + 2);
}
}
@@ -157,7 +157,7 @@ static void rna_Image_unpack(Image *image, ReportList *reports, int method)
}
else {
/* reports its own error on failure */
- unpackImage (reports, image, method);
+ unpackImage(reports, image, method);
}
}
@@ -171,13 +171,18 @@ static void rna_Image_update(Image *image, ReportList *reports)
ImBuf *ibuf = BKE_image_get_ibuf(image, NULL);
if (ibuf == NULL) {
- BKE_reportf(reports, RPT_ERROR, "Image \"%s\" does not have any image data", image->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Image \"%s\" does not have any image data", image->id.name + 2);
return;
}
IMB_rect_from_float(ibuf);
}
+static void rna_Image_scale(Image *image, int width, int height)
+{
+ BKE_image_scale(image, width, height);
+}
+
static int rna_Image_gl_load(Image *image, ReportList *reports, int filter, int mag)
{
ImBuf *ibuf;
@@ -189,13 +194,13 @@ static int rna_Image_gl_load(Image *image, ReportList *reports, int filter, int
ibuf = BKE_image_get_ibuf(image, NULL);
- if (ibuf == NULL || ibuf->rect == NULL ) {
- BKE_reportf(reports, RPT_ERROR, "Image \"%s\" does not have any image data", image->id.name+2);
+ if (ibuf == NULL || ibuf->rect == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Image \"%s\" does not have any image data", image->id.name + 2);
return (int)GL_INVALID_OPERATION;
}
/* could be made into a function? */
- glGenTextures(1, (GLuint*)bind);
+ glGenTextures(1, (GLuint *)bind);
glBindTexture(GL_TEXTURE_2D, *bind);
if (filter != GL_NEAREST && filter != GL_LINEAR)
@@ -212,7 +217,7 @@ static int rna_Image_gl_load(Image *image, ReportList *reports, int filter, int
}
if (error) {
- glDeleteTextures(1, (GLuint*)bind);
+ glDeleteTextures(1, (GLuint *)bind);
image->bindcode = 0;
}
@@ -236,7 +241,7 @@ void RNA_api_image(StructRNA *srna)
func = RNA_def_function(srna, "save_render", "rna_Image_save_render");
RNA_def_function_ui_description(func, "Save image to a specific path using a scenes render settings");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
parm = RNA_def_string_file_path(func, "filepath", "", 0, "", "Save path");
RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_def_pointer(func, "scene", "Scene", "", "Scene to take image parameters from");
@@ -262,6 +267,13 @@ void RNA_api_image(StructRNA *srna)
RNA_def_function_ui_description(func, "Update the display image from the floating point buffer");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ func = RNA_def_function(srna, "scale", "rna_Image_scale");
+ RNA_def_function_ui_description(func, "Scale the image in pixels");
+ parm = RNA_def_int(func, "width", 0, 1, 10000, "", "Width", 1, 10000);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm = RNA_def_int(func, "height", 0, 1, 10000, "", "Height", 1, 10000);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
func = RNA_def_function(srna, "gl_load", "rna_Image_gl_load");
RNA_def_function_ui_description(func, "Load the image into OpenGL graphics memory");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c
index 94120c8edc6..5a56518e498 100644
--- a/source/blender/makesrna/intern/rna_key.c
+++ b/source/blender/makesrna/intern/rna_key.c
@@ -57,11 +57,11 @@
static Key *rna_ShapeKey_find_key(ID *id)
{
switch (GS(id->name)) {
- case ID_CU: return ((Curve*)id)->key;
- case ID_KE: return (Key*)id;
- case ID_LT: return ((Lattice*)id)->key;
- case ID_ME: return ((Mesh*)id)->key;
- case ID_OB: return ob_get_key((Object*)id);
+ case ID_CU: return ((Curve *)id)->key;
+ case ID_KE: return (Key *)id;
+ case ID_LT: return ((Lattice *)id)->key;
+ case ID_ME: return ((Mesh *)id)->key;
+ case ID_OB: return ob_get_key((Object *)id);
default: return NULL;
}
}
@@ -89,14 +89,14 @@ void rna_ShapeKey_name_set(PointerRNA *ptr, const char *value)
static void rna_ShapeKey_value_set(PointerRNA *ptr, float value)
{
- KeyBlock *data = (KeyBlock*)ptr->data;
+ KeyBlock *data = (KeyBlock *)ptr->data;
CLAMP(value, data->slidermin, data->slidermax);
data->curval = value;
}
static void rna_ShapeKey_value_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- KeyBlock *data = (KeyBlock*)ptr->data;
+ KeyBlock *data = (KeyBlock *)ptr->data;
*min = data->slidermin;
*max = data->slidermax;
@@ -107,7 +107,7 @@ static void rna_ShapeKey_value_range(PointerRNA *ptr, float *min, float *max, fl
static void rna_ShapeKey_slider_min_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- KeyBlock *data = (KeyBlock*)ptr->data;
+ KeyBlock *data = (KeyBlock *)ptr->data;
*min = -10.0f;
*max = data->slidermax - SHAPEKEY_SLIDER_TOL;
@@ -115,7 +115,7 @@ static void rna_ShapeKey_slider_min_range(PointerRNA *ptr, float *min, float *ma
static void rna_ShapeKey_slider_min_set(PointerRNA *ptr, float value)
{
- KeyBlock *data = (KeyBlock*)ptr->data;
+ KeyBlock *data = (KeyBlock *)ptr->data;
float min, max, softmin, softmax;
rna_ShapeKey_slider_min_range(ptr, &min, &max, &softmin, &softmax);
@@ -125,7 +125,7 @@ static void rna_ShapeKey_slider_min_set(PointerRNA *ptr, float value)
static void rna_ShapeKey_slider_max_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- KeyBlock *data = (KeyBlock*)ptr->data;
+ KeyBlock *data = (KeyBlock *)ptr->data;
*min = data->slidermin + SHAPEKEY_SLIDER_TOL;
*max = 10.0f;
@@ -133,7 +133,7 @@ static void rna_ShapeKey_slider_max_range(PointerRNA *ptr, float *min, float *ma
static void rna_ShapeKey_slider_max_set(PointerRNA *ptr, float value)
{
- KeyBlock *data = (KeyBlock*)ptr->data;
+ KeyBlock *data = (KeyBlock *)ptr->data;
float min, max, softmin, softmax;
rna_ShapeKey_slider_max_range(ptr, &min, &max, &softmin, &softmax);
@@ -171,21 +171,21 @@ int rna_object_shapekey_index_set(ID *id, PointerRNA value, int current)
static PointerRNA rna_ShapeKey_relative_key_get(PointerRNA *ptr)
{
- KeyBlock *kb = (KeyBlock*)ptr->data;
+ KeyBlock *kb = (KeyBlock *)ptr->data;
return rna_object_shapekey_index_get(ptr->id.data, kb->relative);
}
static void rna_ShapeKey_relative_key_set(PointerRNA *ptr, PointerRNA value)
{
- KeyBlock *kb = (KeyBlock*)ptr->data;
+ KeyBlock *kb = (KeyBlock *)ptr->data;
kb->relative = rna_object_shapekey_index_set(ptr->id.data, value, kb->relative);
}
static void rna_ShapeKeyPoint_co_get(PointerRNA *ptr, float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
values[0] = vec[0];
values[1] = vec[1];
@@ -194,7 +194,7 @@ static void rna_ShapeKeyPoint_co_get(PointerRNA *ptr, float *values)
static void rna_ShapeKeyPoint_co_set(PointerRNA *ptr, const float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
vec[0] = values[0];
vec[1] = values[1];
@@ -203,37 +203,37 @@ static void rna_ShapeKeyPoint_co_set(PointerRNA *ptr, const float *values)
static float rna_ShapeKeyCurvePoint_tilt_get(PointerRNA *ptr)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
return vec[3];
}
static void rna_ShapeKeyCurvePoint_tilt_set(PointerRNA *ptr, float value)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
vec[3] = value;
}
static void rna_ShapeKeyBezierPoint_co_get(PointerRNA *ptr, float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
- values[0] = vec[0+3];
- values[1] = vec[1+3];
- values[2] = vec[2+3];
+ values[0] = vec[0 + 3];
+ values[1] = vec[1 + 3];
+ values[2] = vec[2 + 3];
}
static void rna_ShapeKeyBezierPoint_co_set(PointerRNA *ptr, const float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
- vec[0+3] = values[0];
- vec[1+3] = values[1];
- vec[2+3] = values[2];
+ vec[0 + 3] = values[0];
+ vec[1 + 3] = values[1];
+ vec[2 + 3] = values[2];
}
static void rna_ShapeKeyBezierPoint_handle_1_co_get(PointerRNA *ptr, float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
values[0] = vec[0];
values[1] = vec[1];
@@ -242,7 +242,7 @@ static void rna_ShapeKeyBezierPoint_handle_1_co_get(PointerRNA *ptr, float *valu
static void rna_ShapeKeyBezierPoint_handle_1_co_set(PointerRNA *ptr, const float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
vec[0] = values[0];
vec[1] = values[1];
@@ -251,46 +251,46 @@ static void rna_ShapeKeyBezierPoint_handle_1_co_set(PointerRNA *ptr, const float
static void rna_ShapeKeyBezierPoint_handle_2_co_get(PointerRNA *ptr, float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
- values[0] = vec[6+0];
- values[1] = vec[6+1];
- values[2] = vec[6+2];
+ values[0] = vec[6 + 0];
+ values[1] = vec[6 + 1];
+ values[2] = vec[6 + 2];
}
static void rna_ShapeKeyBezierPoint_handle_2_co_set(PointerRNA *ptr, const float *values)
{
- float *vec = (float*)ptr->data;
+ float *vec = (float *)ptr->data;
- vec[6+0] = values[0];
- vec[6+1] = values[1];
- vec[6+2] = values[2];
+ vec[6 + 0] = values[0];
+ vec[6 + 1] = values[1];
+ vec[6 + 2] = values[2];
}
#if 0
static float rna_ShapeKeyBezierPoint_tilt_get(PointerRNA *ptr)
{
- float *vec= (float*)ptr->data;
+ float *vec = (float *)ptr->data;
return vec[10];
}
static void rna_ShapeKeyBezierPoint_tilt_set(PointerRNA *ptr, float value)
{
- float *vec= (float*)ptr->data;
- vec[10]= value;
+ float *vec = (float *)ptr->data;
+ vec[10] = value;
}
#endif
static void rna_ShapeKey_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Key *key = rna_ShapeKey_find_key(ptr->id.data);
- KeyBlock *kb = (KeyBlock*)ptr->data;
+ KeyBlock *kb = (KeyBlock *)ptr->data;
Curve *cu;
Nurb *nu;
int tot = kb->totelem, size = key->elemsize;
if (GS(key->from->name) == ID_CU) {
- cu = (Curve*)key->from;
+ cu = (Curve *)key->from;
nu = cu->nurb.first;
if (nu->bezt) {
@@ -299,19 +299,19 @@ static void rna_ShapeKey_data_begin(CollectionPropertyIterator *iter, PointerRNA
}
}
- rna_iterator_array_begin(iter, (void*)kb->data, size, tot, 0, NULL);
+ rna_iterator_array_begin(iter, (void *)kb->data, size, tot, 0, NULL);
}
static int rna_ShapeKey_data_length(PointerRNA *ptr)
{
Key *key = rna_ShapeKey_find_key(ptr->id.data);
- KeyBlock *kb = (KeyBlock*)ptr->data;
+ KeyBlock *kb = (KeyBlock *)ptr->data;
Curve *cu;
Nurb *nu;
int tot = kb->totelem;
if (GS(key->from->name) == ID_CU) {
- cu = (Curve*)key->from;
+ cu = (Curve *)key->from;
nu = cu->nurb.first;
if (nu->bezt)
@@ -329,7 +329,7 @@ static PointerRNA rna_ShapeKey_data_get(CollectionPropertyIterator *iter)
Nurb *nu;
if (GS(key->from->name) == ID_CU) {
- cu = (Curve*)key->from;
+ cu = (Curve *)key->from;
nu = cu->nurb.first;
if (nu->bezt)
@@ -362,7 +362,7 @@ static void rna_Key_update_data(Main *bmain, Scene *UNUSED(scene), PointerRNA *p
for (ob = bmain->object.first; ob; ob = ob->id.next) {
if (ob_get_key(ob) == key) {
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
}
}
@@ -440,7 +440,7 @@ static char *rna_ShapeKeyPoint_path(PointerRNA *ptr)
return BLI_sprintfN("shape_keys.key_blocks[\"%s\"].data[%d]", kb->name, index);
}
else
- return NULL; /* XXX: there's really no way to resolve this... */
+ return NULL; /* XXX: there's really no way to resolve this... */
}
#else
@@ -462,7 +462,7 @@ static void rna_def_keydata(BlenderRNA *brna)
srna = RNA_def_struct(brna, "ShapeKeyCurvePoint", NULL);
RNA_def_struct_ui_text(srna, "Shape Key Curve Point", "Point in a shape key for curves");
- /* there's nothing type specific here, so this is fine for now */
+ /* there's nothing type specific here, so this is fine for now */
RNA_def_struct_path_func(srna, "rna_ShapeKeyPoint_path");
prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
@@ -478,7 +478,7 @@ static void rna_def_keydata(BlenderRNA *brna)
srna = RNA_def_struct(brna, "ShapeKeyBezierPoint", NULL);
RNA_def_struct_ui_text(srna, "Shape Key Bezier Point", "Point in a shape key for Bezier curves");
- /* there's nothing type specific here, so this is fine for now */
+ /* there's nothing type specific here, so this is fine for now */
RNA_def_struct_path_func(srna, "rna_ShapeKeyPoint_path");
prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
@@ -519,7 +519,8 @@ static void rna_def_keyblock(BlenderRNA *brna)
{KEY_LINEAR, "KEY_LINEAR", 0, "Linear", ""},
{KEY_CARDINAL, "KEY_CARDINAL", 0, "Cardinal", ""},
{KEY_BSPLINE, "KEY_BSPLINE", 0, "BSpline", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ShapeKey", NULL);
RNA_def_struct_ui_text(srna, "Shape Key", "Shape key in a shape keys datablock");
diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c
index e1cb714c68d..7adee6fd95f 100644
--- a/source/blender/makesrna/intern/rna_lamp.c
+++ b/source/blender/makesrna/intern/rna_lamp.c
@@ -52,7 +52,7 @@
static void rna_Lamp_buffer_size_set(PointerRNA *ptr, int value)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
CLAMP(value, 512, 10240);
la->bufsize = value;
@@ -66,13 +66,13 @@ static PointerRNA rna_Lamp_sky_settings_get(PointerRNA *ptr)
static void rna_Lamp_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Lamp *la = (Lamp*)ptr->data;
- rna_iterator_array_begin(iter, (void*)la->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
+ Lamp *la = (Lamp *)ptr->data;
+ rna_iterator_array_begin(iter, (void *)la->mtex, sizeof(MTex *), MAX_MTEX, 0, NULL);
}
static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
Tex *tex;
tex = give_current_lamp_texture(la);
@@ -81,16 +81,16 @@ static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr)
static void rna_Lamp_active_texture_set(PointerRNA *ptr, PointerRNA value)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
set_current_lamp_texture(la, value.data);
}
static int rna_use_shadow_get(PointerRNA *ptr)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
- if(la->type == LA_SPOT)
+ if (la->type == LA_SPOT)
return la->mode & LA_SHAD_BUF;
else
return la->mode & LA_SHAD_RAY;
@@ -98,20 +98,20 @@ static int rna_use_shadow_get(PointerRNA *ptr)
static void rna_use_shadow_set(PointerRNA *ptr, int value)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
if (value) {
- if(la->type == LA_SPOT)
+ if (la->type == LA_SPOT)
la->mode |= LA_SHAD_BUF;
else
la->mode |= LA_SHAD_RAY;
}
else
- la->mode &= ~(LA_SHAD_BUF|LA_SHAD_RAY);
+ la->mode &= ~(LA_SHAD_BUF | LA_SHAD_RAY);
}
-static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr)
+static StructRNA *rna_Lamp_refine(struct PointerRNA *ptr)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
switch (la->type) {
case LA_LOCAL:
@@ -135,9 +135,9 @@ static void rna_Lamp_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
DAG_id_tag_update(&la->id, 0);
if (scene->gm.matmode == GAME_MAT_GLSL)
- WM_main_add_notifier(NC_LAMP|ND_LIGHTING_DRAW, la);
+ WM_main_add_notifier(NC_LAMP | ND_LIGHTING_DRAW, la);
else
- WM_main_add_notifier(NC_LAMP|ND_LIGHTING, la);
+ WM_main_add_notifier(NC_LAMP | ND_LIGHTING, la);
}
static void rna_Lamp_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -145,7 +145,7 @@ static void rna_Lamp_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
Lamp *la = ptr->id.data;
DAG_id_tag_update(&la->id, 0);
- WM_main_add_notifier(NC_LAMP|ND_LIGHTING_DRAW, la);
+ WM_main_add_notifier(NC_LAMP | ND_LIGHTING_DRAW, la);
}
static void rna_Lamp_sky_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -153,7 +153,7 @@ static void rna_Lamp_sky_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
Lamp *la = ptr->id.data;
DAG_id_tag_update(&la->id, 0);
- WM_main_add_notifier(NC_LAMP|ND_SKY, la);
+ WM_main_add_notifier(NC_LAMP | ND_SKY, la);
}
/* only for rad/deg conversion! can remove later */
@@ -171,7 +171,7 @@ static void rna_Lamp_spot_size_set(PointerRNA *ptr, float value)
static void rna_Lamp_use_nodes_update(Main *blain, Scene *scene, PointerRNA *ptr)
{
- Lamp *la = (Lamp*)ptr->data;
+ Lamp *la = (Lamp *)ptr->data;
if (la->use_nodes && la->nodetree == NULL)
ED_node_shader_default(scene, &la->id);
@@ -187,7 +187,8 @@ EnumPropertyItem lamp_type_items[] = {
{LA_SPOT, "SPOT", 0, "Spot", "Directional cone light source"},
{LA_HEMI, "HEMI", 0, "Hemi", "180 degree constant light source"},
{LA_AREA, "AREA", 0, "Area", "Directional area light source"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static void rna_def_lamp_mtex(BlenderRNA *brna)
{
@@ -198,7 +199,8 @@ static void rna_def_lamp_mtex(BlenderRNA *brna)
{TEXCO_GLOB, "GLOBAL", 0, "Global", "Use global coordinates for the texture coordinates"},
{TEXCO_VIEW, "VIEW", 0, "View", "Use view coordinates for the texture coordinates"},
{TEXCO_OBJECT, "OBJECT", 0, "Object", "Use linked object's coordinates for texture coordinates"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "LampTextureSlot", "TextureSlot");
RNA_def_struct_sdna(srna, "MTex");
@@ -247,7 +249,8 @@ static void rna_def_lamp_sky_settings(BlenderRNA *brna)
{0, "SMPTE", 0, "SMPTE", ""},
{1, "REC709", 0, "REC709", ""},
{2, "CIE", 0, "CIE", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "LampSkySettings", NULL);
RNA_def_struct_sdna(srna, "Lamp");
@@ -418,7 +421,7 @@ static void rna_def_lamp(BlenderRNA *brna)
/* textures */
rna_def_mtex_common(brna, srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
- "rna_Lamp_active_texture_set", NULL, "LampTextureSlot", "LampTextureSlots", "rna_Lamp_update");
+ "rna_Lamp_active_texture_set", NULL, "LampTextureSlot", "LampTextureSlots", "rna_Lamp_update");
}
static void rna_def_lamp_falloff(StructRNA *srna)
@@ -431,7 +434,8 @@ static void rna_def_lamp_falloff(StructRNA *srna)
{LA_FALLOFF_INVSQUARE, "INVERSE_SQUARE", 0, "Inverse Square", ""},
{LA_FALLOFF_CURVE, "CUSTOM_CURVE", 0, "Custom Curve", ""},
{LA_FALLOFF_SLIDERS, "LINEAR_QUADRATIC_WEIGHTED", 0, "Lin/Quad Weighted", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, prop_fallofftype_items);
@@ -468,24 +472,28 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
static EnumPropertyItem prop_shadow_items[] = {
{0, "NOSHADOW", 0, "No Shadow", ""},
{LA_SHAD_RAY, "RAY_SHADOW", 0, "Ray Shadow", "Use ray tracing for shadow"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_spot_shadow_items[] = {
{0, "NOSHADOW", 0, "No Shadow", ""},
{LA_SHAD_BUF, "BUFFER_SHADOW", 0, "Buffer Shadow", "Let spotlight produce shadows using shadow buffer"},
{LA_SHAD_RAY, "RAY_SHADOW", 0, "Ray Shadow", "Use ray tracing for shadow"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_ray_sampling_method_items[] = {
{LA_SAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", ""},
{LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_spot_ray_sampling_method_items[] = {
{LA_SAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", ""},
{LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", ""},
{LA_SAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_shadbuftype_items[] = {
{LA_SHADBUF_REGULAR, "REGULAR", 0, "Classical", "Classic shadow buffer"},
@@ -497,33 +505,37 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
{LA_SHADBUF_DEEP, "DEEP", 0, "Deep",
"Deep shadow buffer supports transparency and better filtering, at the cost of "
"more memory usage and processing time"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_shadbuffiltertype_items[] = {
{LA_SHADBUF_BOX, "BOX", 0, "Box", "Apply the Box filter to shadow buffer samples"},
{LA_SHADBUF_TENT, "TENT", 0, "Tent", "Apply the Tent Filter to shadow buffer samples"},
{LA_SHADBUF_GAUSS, "GAUSS", 0, "Gauss", "Apply the Gauss filter to shadow buffer samples"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_numbuffer_items[] = {
{1, "BUFFERS_1", 0, "1", "Only one buffer rendered"},
{4, "BUFFERS_4", 0, "4", "Render 4 buffers for better AA, this quadruples memory usage"},
{9, "BUFFERS_9", 0, "9", "Render 9 buffers for better AA, this uses nine times more memory"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* GE only */
static EnumPropertyItem prop_ge_shadowbuffer_type_items[] = {
{LA_SHADMAP_SIMPLE, "SIMPLE", 0, "Simple", "Simple shadow maps"},
{LA_SHADMAP_VARIANCE, "VARIANCE", 0, "Variance", "Variance shadow maps"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
- prop= RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_use_shadow_get", "rna_use_shadow_set");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
- RNA_def_property_enum_items(prop, (spot)? prop_spot_shadow_items: prop_shadow_items);
+ RNA_def_property_enum_items(prop, (spot) ? prop_spot_shadow_items : prop_shadow_items);
RNA_def_property_update(prop, 0, "rna_Lamp_update");
prop = RNA_def_property(srna, "shadow_buffer_size", PROP_INT, PROP_NONE);
@@ -555,7 +567,7 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
"Shadow map clip start, below which objects will not generate shadows");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "shadow_buffer_clip_end", PROP_FLOAT, PROP_DISTANCE);
+ prop = RNA_def_property(srna, "shadow_buffer_clip_end", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "clipend");
RNA_def_property_range(prop, 0.0f, 9999.0f);
RNA_def_property_ui_text(prop, "Shadow Buffer Clip End",
@@ -629,16 +641,16 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
prop = RNA_def_property(srna, "shadow_ray_sample_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ray_samp_method");
- RNA_def_property_enum_items(prop, (area)? prop_spot_ray_sampling_method_items: prop_ray_sampling_method_items);
+ RNA_def_property_enum_items(prop, (area) ? prop_spot_ray_sampling_method_items : prop_ray_sampling_method_items);
RNA_def_property_ui_text(prop, "Shadow Ray Sampling Method",
"Method for generating shadow samples: Adaptive QMC is fastest, "
"Constant QMC is less noisy but slower");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop = RNA_def_property(srna, (area)? "shadow_ray_samples_x": "shadow_ray_samples", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, (area) ? "shadow_ray_samples_x" : "shadow_ray_samples", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ray_samp");
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, (area)? "Shadow Ray Samples": "Shadow Ray Samples X",
+ RNA_def_property_ui_text(prop, (area) ? "Shadow Ray Samples" : "Shadow Ray Samples X",
"Number of samples taken extra (samples x samples)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -690,7 +702,8 @@ static void rna_def_area_lamp(BlenderRNA *brna)
static EnumPropertyItem prop_areashape_items[] = {
{LA_AREA_SQUARE, "SQUARE", 0, "Square", ""},
{LA_AREA_RECT, "RECTANGLE", 0, "Rectangle", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "AreaLamp", "Lamp");
RNA_def_struct_sdna(srna, "Lamp");
@@ -749,13 +762,15 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
{LA_SHADBUF_BOX, "BOX", 0, "Box", "Apply the Box filter to shadow buffer samples"},
{LA_SHADBUF_TENT, "TENT", 0, "Tent", "Apply the Tent Filter to shadow buffer samples"},
{LA_SHADBUF_GAUSS, "GAUSS", 0, "Gauss", "Apply the Gauss filter to shadow buffer samples"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_numbuffer_items[] = {
{1, "BUFFERS_1", 0, "1", "Only one buffer rendered"},
{4, "BUFFERS_4", 0, "4", "Render 4 buffers for better AA, this quadruples memory usage"},
{9, "BUFFERS_9", 0, "9", "Render 9 buffers for better AA, this uses nine times more memory"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpotLamp", "Lamp");
RNA_def_struct_sdna(srna, "Lamp");
@@ -795,9 +810,9 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
prop = RNA_def_property(srna, "spot_size", PROP_FLOAT, PROP_ANGLE);
/* RNA_def_property_float_sdna(prop, NULL, "spotsize"); */
- RNA_def_property_range(prop, M_PI/180.0, M_PI);
+ RNA_def_property_range(prop, M_PI / 180.0, M_PI);
RNA_def_property_ui_text(prop, "Spot Size", "Angle of the spotlight beam");
- /* only for deg/rad conversion */
+ /* only for deg/rad conversion */
RNA_def_property_float_funcs(prop, "rna_Lamp_spot_size_get", "rna_Lamp_spot_size_set", NULL);
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
@@ -830,7 +845,7 @@ static void rna_def_sun_lamp(BlenderRNA *brna)
rna_def_lamp_sky_settings(brna);
/* BGE Only */
- prop= RNA_def_property(srna, "shadow_frustum_size", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "shadow_frustum_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "shadow_frustum_size");
RNA_def_property_ui_range(prop, 0.001, 100.0, 2, 1);
RNA_def_property_ui_text(prop, "Frustum Size", "Size of the frustum used for creating the shadow map");
diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c
index d919406a14d..a50389f01c1 100644
--- a/source/blender/makesrna/intern/rna_lattice.c
+++ b/source/blender/makesrna/intern/rna_lattice.c
@@ -51,27 +51,27 @@
static void rna_LatticePoint_co_get(PointerRNA *ptr, float *values)
{
- Lattice *lt = (Lattice*)ptr->id.data;
- BPoint *bp = (BPoint*)ptr->data;
+ Lattice *lt = (Lattice *)ptr->id.data;
+ BPoint *bp = (BPoint *)ptr->data;
int a = bp - lt->def;
int x = a % lt->pntsu;
- int y = (a/lt->pntsu) % lt->pntsv;
- int z = (a/(lt->pntsu*lt->pntsv));
+ int y = (a / lt->pntsu) % lt->pntsv;
+ int z = (a / (lt->pntsu * lt->pntsv));
- values[0] = lt->fu + x*lt->du;
- values[1] = lt->fv + y*lt->dv;
- values[2] = lt->fw + z*lt->dw;
+ values[0] = lt->fu + x * lt->du;
+ values[1] = lt->fv + y * lt->dv;
+ values[2] = lt->fw + z * lt->dw;
}
static void rna_LatticePoint_groups_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Lattice *lt = (Lattice*)ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->id.data;
if (lt->dvert) {
- BPoint *bp = (BPoint*)ptr->data;
- MDeformVert *dvert = lt->dvert + (bp-lt->def);
+ BPoint *bp = (BPoint *)ptr->data;
+ MDeformVert *dvert = lt->dvert + (bp - lt->def);
- rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL);
+ rna_iterator_array_begin(iter, (void *)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL);
}
else
rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL);
@@ -79,13 +79,13 @@ static void rna_LatticePoint_groups_begin(CollectionPropertyIterator *iter, Poin
static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Lattice *lt = (Lattice*)ptr->data;
- int tot = lt->pntsu*lt->pntsv*lt->pntsw;
+ Lattice *lt = (Lattice *)ptr->data;
+ int tot = lt->pntsu * lt->pntsv * lt->pntsw;
if (lt->editlatt && lt->editlatt->latt->def)
- rna_iterator_array_begin(iter, (void*)lt->editlatt->latt->def, sizeof(BPoint), tot, 0, NULL);
+ rna_iterator_array_begin(iter, (void *)lt->editlatt->latt->def, sizeof(BPoint), tot, 0, NULL);
else if (lt->def)
- rna_iterator_array_begin(iter, (void*)lt->def, sizeof(BPoint), tot, 0, NULL);
+ rna_iterator_array_begin(iter, (void *)lt->def, sizeof(BPoint), tot, 0, NULL);
else
rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL);
}
@@ -95,7 +95,7 @@ static void rna_Lattice_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), P
ID *id = ptr->id.data;
DAG_id_tag_update(id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -105,9 +105,9 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
int newu, newv, neww;
/* we don't modify the actual pnts, but go through opnts instead */
- newu = (lt->opntsu > 0)? lt->opntsu: lt->pntsu;
- newv = (lt->opntsv > 0)? lt->opntsv: lt->pntsv;
- neww = (lt->opntsw > 0)? lt->opntsw: lt->pntsw;
+ newu = (lt->opntsu > 0) ? lt->opntsu : lt->pntsu;
+ newv = (lt->opntsv > 0) ? lt->opntsv : lt->pntsv;
+ neww = (lt->opntsw > 0) ? lt->opntsw : lt->pntsw;
/* BKE_lattice_resize needs an object, any object will have the same result */
for (ob = bmain->object.first; ob; ob = ob->id.next) {
@@ -148,28 +148,28 @@ static void rna_Lattice_use_outside_set(PointerRNA *ptr, int value)
static int rna_Lattice_size_editable(PointerRNA *ptr)
{
- Lattice *lt = (Lattice*)ptr->data;
+ Lattice *lt = (Lattice *)ptr->data;
return lt->key == NULL;
}
static void rna_Lattice_points_u_set(PointerRNA *ptr, int value)
{
- Lattice *lt = (Lattice*)ptr->data;
+ Lattice *lt = (Lattice *)ptr->data;
lt->opntsu = CLAMPIS(value, 1, 64);
}
static void rna_Lattice_points_v_set(PointerRNA *ptr, int value)
{
- Lattice *lt = (Lattice*)ptr->data;
+ Lattice *lt = (Lattice *)ptr->data;
lt->opntsv = CLAMPIS(value, 1, 64);
}
static void rna_Lattice_points_w_set(PointerRNA *ptr, int value)
{
- Lattice *lt = (Lattice*)ptr->data;
+ Lattice *lt = (Lattice *)ptr->data;
lt->opntsw = CLAMPIS(value, 1, 64);
}
@@ -187,7 +187,7 @@ static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value)
/* annoying, but is a consequence of RNA structures... */
static char *rna_LatticePoint_path(PointerRNA *ptr)
{
- Lattice *lt = (Lattice*)ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->id.data;
void *point = ptr->data;
BPoint *points = NULL;
@@ -197,7 +197,7 @@ static char *rna_LatticePoint_path(PointerRNA *ptr)
points = lt->def;
if (points && point) {
- int tot = lt->pntsu*lt->pntsv*lt->pntsw;
+ int tot = lt->pntsu * lt->pntsv * lt->pntsw;
/* only return index if in range */
if ((point >= (void *)points) && (point < (void *)(points + tot))) {
@@ -252,7 +252,8 @@ static void rna_def_lattice(BlenderRNA *brna)
{KEY_LINEAR, "KEY_LINEAR", 0, "Linear", ""},
{KEY_CARDINAL, "KEY_CARDINAL", 0, "Cardinal", ""},
{KEY_BSPLINE, "KEY_BSPLINE", 0, "BSpline", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Lattice", "ID");
RNA_def_struct_ui_text(srna, "Lattice", "Lattice datablock defining a grid for deforming other objects");
diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c
index cfdf57efbea..5b2d8ddbeee 100644
--- a/source/blender/makesrna/intern/rna_main.c
+++ b/source/blender/makesrna/intern/rna_main.c
@@ -50,7 +50,7 @@ static int rna_Main_is_saved_get(PointerRNA *UNUSED(ptr))
static int rna_Main_is_dirty_get(PointerRNA *ptr)
{
/* XXX, not totally nice to do it this way, should store in main ? */
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
wmWindowManager *wm;
for (wm = bmain->wm.first; wm; wm = wm->id.next) {
return !wm->file_saved;
@@ -61,195 +61,195 @@ static int rna_Main_is_dirty_get(PointerRNA *ptr)
static void rna_Main_filepath_get(PointerRNA *ptr, char *value)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
BLI_strncpy(value, bmain->name, sizeof(bmain->name));
}
static int rna_Main_filepath_length(PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
return strlen(bmain->name);
}
#if 0
static void rna_Main_filepath_set(PointerRNA *ptr, const char *value)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
BLI_strncpy(bmain->name, value, sizeof(bmain->name));
}
#endif
static void rna_Main_scene_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->scene, NULL);
}
static void rna_Main_object_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->object, NULL);
}
static void rna_Main_lamp_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->lamp, NULL);
}
static void rna_Main_library_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->library, NULL);
}
static void rna_Main_mesh_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->mesh, NULL);
}
static void rna_Main_curve_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->curve, NULL);
}
static void rna_Main_mball_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->mball, NULL);
}
static void rna_Main_mat_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->mat, NULL);
}
static void rna_Main_tex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->tex, NULL);
}
static void rna_Main_image_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->image, NULL);
}
static void rna_Main_latt_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->latt, NULL);
}
static void rna_Main_camera_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->camera, NULL);
}
static void rna_Main_key_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->key, NULL);
}
static void rna_Main_world_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->world, NULL);
}
static void rna_Main_screen_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->screen, NULL);
}
static void rna_Main_script_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->script, NULL);
}
static void rna_Main_font_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->vfont, NULL);
}
static void rna_Main_text_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->text, NULL);
}
static void rna_Main_speaker_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->speaker, NULL);
}
static void rna_Main_sound_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->sound, NULL);
}
static void rna_Main_group_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->group, NULL);
}
static void rna_Main_armature_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->armature, NULL);
}
static void rna_Main_action_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->action, NULL);
}
static void rna_Main_nodetree_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->nodetree, NULL);
}
static void rna_Main_brush_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->brush, NULL);
}
static void rna_Main_particle_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->particle, NULL);
}
static void rna_Main_gpencil_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->gpencil, NULL);
}
static void rna_Main_wm_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->wm, NULL);
}
static void rna_Main_movieclips_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Main *bmain = (Main*)ptr->data;
+ Main *bmain = (Main *)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->movieclip, NULL);
}
@@ -277,11 +277,11 @@ static PointerRNA rna_Test_test_get(PointerRNA *ptr)
typedef void (CollectionDefFunc)(struct BlenderRNA *brna, struct PropertyRNA *cprop);
typedef struct MainCollectionDef {
- const char *identifier;
- const char *type;
- const char *iter_begin;
- const char *name;
- const char *description;
+ const char *identifier;
+ const char *type;
+ const char *iter_begin;
+ const char *name;
+ const char *description;
CollectionDefFunc *func;
} MainCollectionDef;
@@ -297,14 +297,12 @@ void RNA_def_main(BlenderRNA *brna)
{"scenes", "Scene", "rna_Main_scene_begin", "Scenes", "Scene datablocks", RNA_def_main_scenes},
{"objects", "Object", "rna_Main_object_begin", "Objects", "Object datablocks", RNA_def_main_objects},
{"materials", "Material", "rna_Main_mat_begin", "Materials", "Material datablocks", RNA_def_main_materials},
- {"node_groups", "NodeTree", "rna_Main_nodetree_begin", "Node Groups", "Node group datablocks",
- RNA_def_main_node_groups},
+ {"node_groups", "NodeTree", "rna_Main_nodetree_begin", "Node Groups", "Node group datablocks", RNA_def_main_node_groups},
{"meshes", "Mesh", "rna_Main_mesh_begin", "Meshes", "Mesh datablocks", RNA_def_main_meshes},
{"lamps", "Lamp", "rna_Main_lamp_begin", "Lamps", "Lamp datablocks", RNA_def_main_lamps},
{"libraries", "Library", "rna_Main_library_begin", "Libraries", "Library datablocks", RNA_def_main_libraries},
{"screens", "Screen", "rna_Main_screen_begin", "Screens", "Screen datablocks", RNA_def_main_screens},
- {"window_managers", "WindowManager", "rna_Main_wm_begin", "Window Managers", "Window manager datablocks",
- RNA_def_main_window_managers},
+ {"window_managers", "WindowManager", "rna_Main_wm_begin", "Window Managers", "Window manager datablocks", RNA_def_main_window_managers},
{"images", "Image", "rna_Main_image_begin", "Images", "Image datablocks", RNA_def_main_images},
{"lattices", "Lattice", "rna_Main_latt_begin", "Lattices", "Lattice datablocks", RNA_def_main_lattices},
{"curves", "Curve", "rna_Main_curve_begin", "Curves", "Curve datablocks", RNA_def_main_curves},
@@ -319,17 +317,14 @@ void RNA_def_main(BlenderRNA *brna)
{"texts", "Text", "rna_Main_text_begin", "Texts", "Text datablocks", RNA_def_main_texts},
{"speakers", "Speaker", "rna_Main_speaker_begin", "Speakers", "Speaker datablocks", RNA_def_main_speakers},
{"sounds", "Sound", "rna_Main_sound_begin", "Sounds", "Sound datablocks", RNA_def_main_sounds},
- {"armatures", "Armature", "rna_Main_armature_begin", "Armatures", "Armature datablocks",
- RNA_def_main_armatures},
+ {"armatures", "Armature", "rna_Main_armature_begin", "Armatures", "Armature datablocks", RNA_def_main_armatures},
{"actions", "Action", "rna_Main_action_begin", "Actions", "Action datablocks", RNA_def_main_actions},
- {"particles", "ParticleSettings", "rna_Main_particle_begin", "Particles", "Particle datablocks",
- RNA_def_main_particles},
- {"grease_pencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks",
- RNA_def_main_gpencil},
- {"movieclips", "MovieClip", "rna_Main_movieclips_begin", "Movie Clips", "Movie Clip datablocks",
- RNA_def_main_movieclips},
+ {"particles", "ParticleSettings", "rna_Main_particle_begin", "Particles", "Particle datablocks", RNA_def_main_particles},
+ {"grease_pencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks", RNA_def_main_gpencil},
+ {"movieclips", "MovieClip", "rna_Main_movieclips_begin", "Movie Clips", "Movie Clip datablocks", RNA_def_main_movieclips},
{"linestyles", "FreestyleLineStyle", "rna_Main_linestyle_begin", "Line Styles", "Line Style datablocks", RNA_def_main_linestyles},
- {NULL, NULL, NULL, NULL, NULL, NULL}};
+ {NULL, NULL, NULL, NULL, NULL, NULL}
+ };
int i;
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index fe9ad47a30f..53cfe684203 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -103,7 +103,7 @@ void rna_Main_cameras_remove(Main *bmain, ReportList *reports, struct Camera *ca
BKE_libblock_free(&bmain->camera, camera);
else
BKE_reportf(reports, RPT_ERROR, "Camera \"%s\" must have zero users to be removed, found %d",
- camera->id.name+2, ID_REAL_USERS(camera));
+ camera->id.name + 2, ID_REAL_USERS(camera));
/* XXX python now has invalid pointer? */
}
@@ -122,7 +122,7 @@ void rna_Main_scenes_remove(Main *bmain, bContext *C, ReportList *reports, struc
else if (scene->id.next)
newscene = scene->id.next;
else {
- BKE_reportf(reports, RPT_ERROR, "Scene \"%s\" is the last, cant ve removed", scene->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Scene \"%s\" is the last, cant ve removed", scene->id.name + 2);
return;
}
@@ -193,11 +193,11 @@ void rna_Main_objects_remove(Main *bmain, ReportList *reports, struct Object *ob
}
else {
BKE_reportf(reports, RPT_ERROR, "Object \"%s\" must have zero users to be removed, found %d",
- object->id.name+2, ID_REAL_USERS(object));
+ object->id.name + 2, ID_REAL_USERS(object));
}
}
-struct Material *rna_Main_materials_new(Main *UNUSED(bmain), const char *name)
+Material *rna_Main_materials_new(Main *UNUSED(bmain), const char *name)
{
ID *id = (ID *)BKE_material_add(name);
id_us_min(id);
@@ -209,12 +209,12 @@ void rna_Main_materials_remove(Main *bmain, ReportList *reports, struct Material
BKE_libblock_free(&bmain->mat, material);
else
BKE_reportf(reports, RPT_ERROR, "Material \"%s\" must have zero users to be removed, found %d",
- material->id.name+2, ID_REAL_USERS(material));
+ material->id.name + 2, ID_REAL_USERS(material));
/* XXX python now has invalid pointer? */
}
-struct bNodeTree *rna_Main_nodetree_new(Main *UNUSED(bmain), const char *name, int type)
+bNodeTree *rna_Main_nodetree_new(Main *UNUSED(bmain), const char *name, int type)
{
bNodeTree *tree = ntreeAddTree(name, type, NODE_GROUP);
@@ -227,7 +227,7 @@ void rna_Main_nodetree_remove(Main *bmain, ReportList *reports, struct bNodeTree
BKE_libblock_free(&bmain->nodetree, tree);
else
BKE_reportf(reports, RPT_ERROR, "Node Tree \"%s\" must have zero users to be removed, found %d",
- tree->id.name+2, ID_REAL_USERS(tree));
+ tree->id.name + 2, ID_REAL_USERS(tree));
/* XXX python now has invalid pointer? */
}
@@ -244,7 +244,7 @@ void rna_Main_meshes_remove(Main *bmain, ReportList *reports, Mesh *mesh)
BKE_libblock_free(&bmain->mesh, mesh);
else
BKE_reportf(reports, RPT_ERROR, "Mesh \"%s\" must have zero users to be removed, found %d",
- mesh->id.name+2, ID_REAL_USERS(mesh));
+ mesh->id.name + 2, ID_REAL_USERS(mesh));
/* XXX python now has invalid pointer? */
}
@@ -262,7 +262,7 @@ void rna_Main_lamps_remove(Main *bmain, ReportList *reports, Lamp *lamp)
BKE_libblock_free(&bmain->lamp, lamp);
else
BKE_reportf(reports, RPT_ERROR, "Lamp \"%s\" must have zero users to be removed, found %d",
- lamp->id.name+2, ID_REAL_USERS(lamp));
+ lamp->id.name + 2, ID_REAL_USERS(lamp));
/* XXX python now has invalid pointer? */
}
@@ -270,7 +270,7 @@ void rna_Main_lamps_remove(Main *bmain, ReportList *reports, Lamp *lamp)
Image *rna_Main_images_new(Main *UNUSED(bmain), const char *name, int width, int height, int alpha, int float_buffer)
{
float color[4] = {0.0, 0.0, 0.0, 1.0};
- Image *image = BKE_image_add_generated(width, height, name, alpha ? 32:24, float_buffer, 0, color);
+ Image *image = BKE_image_add_generated(width, height, name, alpha ? 32 : 24, float_buffer, 0, color);
id_us_min(&image->id);
return image;
}
@@ -293,7 +293,7 @@ void rna_Main_images_remove(Main *bmain, ReportList *reports, Image *image)
BKE_libblock_free(&bmain->image, image);
else
BKE_reportf(reports, RPT_ERROR, "Image \"%s\" must have zero users to be removed, found %d",
- image->id.name+2, ID_REAL_USERS(image));
+ image->id.name + 2, ID_REAL_USERS(image));
/* XXX python now has invalid pointer? */
}
@@ -310,7 +310,7 @@ void rna_Main_lattices_remove(Main *bmain, ReportList *reports, struct Lattice *
BKE_libblock_free(&bmain->latt, lt);
else
BKE_reportf(reports, RPT_ERROR, "Lattice \"%s\" must have zero users to be removed, found %d",
- lt->id.name+2, ID_REAL_USERS(lt));
+ lt->id.name + 2, ID_REAL_USERS(lt));
}
Curve *rna_Main_curves_new(Main *UNUSED(bmain), const char *name, int type)
@@ -325,7 +325,7 @@ void rna_Main_curves_remove(Main *bmain, ReportList *reports, struct Curve *cu)
BKE_libblock_free(&bmain->curve, cu);
else
BKE_reportf(reports, RPT_ERROR, "Curve \"%s\" must have zero users to be removed, found %d",
- cu->id.name+2, ID_REAL_USERS(cu));
+ cu->id.name + 2, ID_REAL_USERS(cu));
}
MetaBall *rna_Main_metaballs_new(Main *UNUSED(bmain), const char *name)
@@ -340,7 +340,7 @@ void rna_Main_metaballs_remove(Main *bmain, ReportList *reports, struct MetaBall
BKE_libblock_free(&bmain->mball, mb);
else
BKE_reportf(reports, RPT_ERROR, "Metaball \"%s\" must have zero users to be removed, found %d",
- mb->id.name+2, ID_REAL_USERS(mb));
+ mb->id.name + 2, ID_REAL_USERS(mb));
}
VFont *rna_Main_fonts_load(Main *bmain, ReportList *reports, const char *filepath)
@@ -363,7 +363,7 @@ void rna_Main_fonts_remove(Main *bmain, ReportList *reports, VFont *vfont)
BKE_libblock_free(&bmain->vfont, vfont);
else
BKE_reportf(reports, RPT_ERROR, "Font \"%s\" must have zero users to be removed, found %d",
- vfont->id.name+2, ID_REAL_USERS(vfont));
+ vfont->id.name + 2, ID_REAL_USERS(vfont));
/* XXX python now has invalid pointer? */
}
@@ -381,7 +381,7 @@ void rna_Main_textures_remove(Main *bmain, ReportList *reports, struct Tex *tex)
BKE_libblock_free(&bmain->tex, tex);
else
BKE_reportf(reports, RPT_ERROR, "Texture \"%s\" must have zero users to be removed, found %d",
- tex->id.name+2, ID_REAL_USERS(tex));
+ tex->id.name + 2, ID_REAL_USERS(tex));
}
Brush *rna_Main_brushes_new(Main *UNUSED(bmain), const char *name)
@@ -396,7 +396,7 @@ void rna_Main_brushes_remove(Main *bmain, ReportList *reports, struct Brush *bru
BKE_libblock_free(&bmain->brush, brush);
else
BKE_reportf(reports, RPT_ERROR, "Brush \"%s\" must have zero users to be removed, found %d",
- brush->id.name+2, ID_REAL_USERS(brush));
+ brush->id.name + 2, ID_REAL_USERS(brush));
}
World *rna_Main_worlds_new(Main *UNUSED(bmain), const char *name)
@@ -411,7 +411,7 @@ void rna_Main_worlds_remove(Main *bmain, ReportList *reports, struct World *worl
BKE_libblock_free(&bmain->world, world);
else
BKE_reportf(reports, RPT_ERROR, "World \"%s\" must have zero users to be removed, found %d",
- world->id.name+2, ID_REAL_USERS(world));
+ world->id.name + 2, ID_REAL_USERS(world));
}
Group *rna_Main_groups_new(Main *UNUSED(bmain), const char *name)
@@ -437,7 +437,7 @@ void rna_Main_speakers_remove(Main *bmain, ReportList *reports, Speaker *speaker
BKE_libblock_free(&bmain->speaker, speaker);
else
BKE_reportf(reports, RPT_ERROR, "Speaker \"%s\" must have zero users to be removed, found %d",
- speaker->id.name+2, ID_REAL_USERS(speaker));
+ speaker->id.name + 2, ID_REAL_USERS(speaker));
/* XXX python now has invalid pointer? */
}
@@ -479,7 +479,7 @@ void rna_Main_armatures_remove(Main *bmain, ReportList *reports, bArmature *arm)
BKE_libblock_free(&bmain->armature, arm);
else
BKE_reportf(reports, RPT_ERROR, "Armature \"%s\" must have zero users to be removed, found %d",
- arm->id.name+2, ID_REAL_USERS(arm));
+ arm->id.name + 2, ID_REAL_USERS(arm));
/* XXX python now has invalid pointer? */
}
@@ -497,7 +497,7 @@ void rna_Main_actions_remove(Main *bmain, ReportList *reports, bAction *act)
BKE_libblock_free(&bmain->action, act);
else
BKE_reportf(reports, RPT_ERROR, "Action \"%s\" must have zero users to be removed, found %d",
- act->id.name+2, ID_REAL_USERS(act));
+ act->id.name + 2, ID_REAL_USERS(act));
/* XXX python now has invalid pointer? */
}
@@ -514,7 +514,7 @@ void rna_Main_particles_remove(Main *bmain, ReportList *reports, ParticleSetting
BKE_libblock_free(&bmain->particle, part);
else
BKE_reportf(reports, RPT_ERROR, "Particle Settings \"%s\" must have zero users to be removed, found %d",
- part->id.name+2, ID_REAL_USERS(part));
+ part->id.name + 2, ID_REAL_USERS(part));
/* XXX python now has invalid pointer? */
}
@@ -625,11 +625,11 @@ void RNA_api_main(StructRNA *srna)
PropertyRNA *parm;
/* maybe we want to add functions in 'bpy.data' still?
* for now they are all in collections bpy.data.images.new(...) */
- func= RNA_def_function(srna, "add_image", "rna_Main_add_image");
+ func = RNA_def_function(srna, "add_image", "rna_Main_add_image");
RNA_def_function_ui_description(func, "Add a new image");
- parm= RNA_def_string_file_path(func, "filepath", "", 0, "", "File path to load image from");
+ parm = RNA_def_string_file_path(func, "filepath", "", 0, "", "File path to load image from");
RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_pointer(func, "image", "Image", "", "New image");
+ parm = RNA_def_pointer(func, "image", "Image", "", "New image");
RNA_def_function_return(func, parm);
#endif
}
@@ -658,7 +658,7 @@ void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a camera from the current blendfile");
parm = RNA_def_pointer(func, "camera", "Camera", "", "Camera to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_cameras_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -690,10 +690,10 @@ void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "remove", "rna_Main_scenes_remove");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a scene from the current blendfile");
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_scenes_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -732,7 +732,7 @@ void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove a object from the current blendfile");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "object", "Object", "", "Object to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_objects_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -767,7 +767,7 @@ void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a material from the current blendfile");
parm = RNA_def_pointer(func, "material", "Material", "", "Material to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_materials_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -785,10 +785,11 @@ void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
PropertyRNA *prop;
static EnumPropertyItem node_nodetree_items[] = {
- {0, "SHADER", 0, "Shader", ""},
- {1, "COMPOSITE", 0, "Composite", ""},
- {2, "TEXTURE", 0, "Texture", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, "SHADER", 0, "Shader", ""},
+ {1, "COMPOSITE", 0, "Composite", ""},
+ {2, "TEXTURE", 0, "Texture", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
RNA_def_property_srna(cprop, "BlendDataNodeTrees");
srna = RNA_def_struct(brna, "BlendDataNodeTrees", NULL);
@@ -809,7 +810,7 @@ void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a node tree from the current blendfile");
parm = RNA_def_pointer(func, "tree", "NodeTree", "", "Node tree to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_node_groups_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -843,7 +844,7 @@ void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a mesh from the current blendfile");
parm = RNA_def_pointer(func, "mesh", "Mesh", "", "Mesh to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_meshes_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -879,7 +880,7 @@ void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a lamp from the current blendfile");
parm = RNA_def_pointer(func, "lamp", "Lamp", "", "Lamp to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_lamps_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -991,7 +992,7 @@ void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove an image from the current blendfile");
parm = RNA_def_pointer(func, "image", "Image", "", "Image to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_images_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1026,7 +1027,7 @@ void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a lattice from the current blendfile");
parm = RNA_def_pointer(func, "lattice", "Lattice", "", "Lattice to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_lattices_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1062,7 +1063,7 @@ void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a curve from the current blendfile");
parm = RNA_def_pointer(func, "curve", "Curve", "", "Curve to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_curves_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1096,7 +1097,7 @@ void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a metaball from the current blendfile");
parm = RNA_def_pointer(func, "metaball", "MetaBall", "", "Metaball to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_metaballs_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1131,7 +1132,7 @@ void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a font from the current blendfile");
parm = RNA_def_pointer(func, "vfont", "VectorFont", "", "Font to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_fonts_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1167,7 +1168,7 @@ void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a texture from the current blendfile");
parm = RNA_def_pointer(func, "texture", "Texture", "", "Texture to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_textures_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1201,7 +1202,7 @@ void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a brush from the current blendfile");
parm = RNA_def_pointer(func, "brush", "Brush", "", "Brush to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_brushes_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1236,7 +1237,7 @@ void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a world from the current blendfile");
parm = RNA_def_pointer(func, "world", "World", "", "World to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_worlds_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1270,7 +1271,7 @@ void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_Main_groups_remove");
RNA_def_function_ui_description(func, "Remove a group from the current blendfile");
parm = RNA_def_pointer(func, "group", "Group", "", "Group to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_groups_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1305,7 +1306,7 @@ void RNA_def_main_speakers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a speaker from the current blendfile");
parm = RNA_def_pointer(func, "speaker", "Speaker", "", "Speaker to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_speakers_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1339,7 +1340,7 @@ void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_Main_texts_remove");
RNA_def_function_ui_description(func, "Remove a text from the current blendfile");
parm = RNA_def_pointer(func, "text", "Text", "", "Text to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* load func */
func = RNA_def_function(srna, "load", "rna_Main_texts_load");
@@ -1407,7 +1408,7 @@ void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a armature from the current blendfile");
parm = RNA_def_pointer(func, "armature", "Armature", "", "Armature to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_armatures_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1441,7 +1442,7 @@ void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a action from the current blendfile");
parm = RNA_def_pointer(func, "action", "Action", "", "Action to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_actions_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1475,7 +1476,7 @@ void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a particle settings instance from the current blendfile");
parm = RNA_def_pointer(func, "particle", "ParticleSettings", "", "Particle Settings to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "tag", "rna_Main_particles_tag");
parm = RNA_def_boolean(func, "value", 0, "Value", "");
@@ -1525,7 +1526,7 @@ void RNA_def_main_movieclips(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_Main_movieclips_remove");
RNA_def_function_ui_description(func, "Remove a movie clip from the current blendfile.");
parm = RNA_def_pointer(func, "clip", "MovieClip", "", "Movie clip to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* load func */
func = RNA_def_function(srna, "load", "rna_Main_movieclip_load");
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 8aabc515dcb..3cee8ca271c 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -39,41 +39,43 @@
#include "WM_types.h"
static EnumPropertyItem prop_texture_coordinates_items[] = {
-{TEXCO_GLOB, "GLOBAL", 0, "Global", "Use global coordinates for the texture coordinates"},
-{TEXCO_OBJECT, "OBJECT", 0, "Object", "Use linked object's coordinates for texture coordinates"},
-{TEXCO_UV, "UV", 0, "UV", "Use UV coordinates for texture coordinates"},
-{TEXCO_ORCO, "ORCO", 0, "Generated", "Use the original undeformed coordinates of the object"},
-{TEXCO_STRAND, "STRAND", 0, "Strand / Particle",
- "Use normalized strand texture coordinate (1D) or particle age (X) and trail position (Y)"},
-{TEXCO_STICKY, "STICKY", 0, "Sticky", "Use mesh's sticky coordinates for the texture coordinates"},
-{TEXCO_WINDOW, "WINDOW", 0, "Window", "Use screen coordinates as texture coordinates"},
-{TEXCO_NORM, "NORMAL", 0, "Normal", "Use normal vector as texture coordinates"},
-{TEXCO_REFL, "REFLECTION", 0, "Reflection", "Use reflection vector as texture coordinates"},
-{TEXCO_STRESS, "STRESS", 0, "Stress",
- "Use the difference of edge lengths compared to original coordinates of the mesh"},
-{TEXCO_TANGENT, "TANGENT", 0, "Tangent", "Use the optional tangent vector as texture coordinates"},
-{0, NULL, 0, NULL, NULL}};
+ {TEXCO_GLOB, "GLOBAL", 0, "Global", "Use global coordinates for the texture coordinates"},
+ {TEXCO_OBJECT, "OBJECT", 0, "Object", "Use linked object's coordinates for texture coordinates"},
+ {TEXCO_UV, "UV", 0, "UV", "Use UV coordinates for texture coordinates"},
+ {TEXCO_ORCO, "ORCO", 0, "Generated", "Use the original undeformed coordinates of the object"},
+ {TEXCO_STRAND, "STRAND", 0, "Strand / Particle",
+ "Use normalized strand texture coordinate (1D) or particle age (X) and trail position (Y)"},
+ {TEXCO_STICKY, "STICKY", 0, "Sticky", "Use mesh's sticky coordinates for the texture coordinates"},
+ {TEXCO_WINDOW, "WINDOW", 0, "Window", "Use screen coordinates as texture coordinates"},
+ {TEXCO_NORM, "NORMAL", 0, "Normal", "Use normal vector as texture coordinates"},
+ {TEXCO_REFL, "REFLECTION", 0, "Reflection", "Use reflection vector as texture coordinates"},
+ {TEXCO_STRESS, "STRESS", 0, "Stress",
+ "Use the difference of edge lengths compared to original coordinates of the mesh"},
+ {TEXCO_TANGENT, "TANGENT", 0, "Tangent", "Use the optional tangent vector as texture coordinates"},
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem ramp_blend_items[] = {
-{MA_RAMP_BLEND, "MIX", 0, "Mix", ""},
-{MA_RAMP_ADD, "ADD", 0, "Add", ""},
-{MA_RAMP_MULT, "MULTIPLY", 0, "Multiply", ""},
-{MA_RAMP_SUB, "SUBTRACT", 0, "Subtract", ""},
-{MA_RAMP_SCREEN, "SCREEN", 0, "Screen", ""},
-{MA_RAMP_DIV, "DIVIDE", 0, "Divide", ""},
-{MA_RAMP_DIFF, "DIFFERENCE", 0, "Difference", ""},
-{MA_RAMP_DARK, "DARKEN", 0, "Darken", ""},
-{MA_RAMP_LIGHT, "LIGHTEN", 0, "Lighten", ""},
-{MA_RAMP_OVERLAY, "OVERLAY", 0, "Overlay", ""},
-{MA_RAMP_DODGE, "DODGE", 0, "Dodge", ""},
-{MA_RAMP_BURN, "BURN", 0, "Burn", ""},
-{MA_RAMP_HUE, "HUE", 0, "Hue", ""},
-{MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""},
-{MA_RAMP_VAL, "VALUE", 0, "Value", ""},
-{MA_RAMP_COLOR, "COLOR", 0, "Color", ""},
-{MA_RAMP_SOFT, "SOFT_LIGHT", 0, "Soft Light", ""},
-{MA_RAMP_LINEAR, "LINEAR_LIGHT", 0, "Linear Light", ""},
-{0, NULL, 0, NULL, NULL}};
+ {MA_RAMP_BLEND, "MIX", 0, "Mix", ""},
+ {MA_RAMP_ADD, "ADD", 0, "Add", ""},
+ {MA_RAMP_MULT, "MULTIPLY", 0, "Multiply", ""},
+ {MA_RAMP_SUB, "SUBTRACT", 0, "Subtract", ""},
+ {MA_RAMP_SCREEN, "SCREEN", 0, "Screen", ""},
+ {MA_RAMP_DIV, "DIVIDE", 0, "Divide", ""},
+ {MA_RAMP_DIFF, "DIFFERENCE", 0, "Difference", ""},
+ {MA_RAMP_DARK, "DARKEN", 0, "Darken", ""},
+ {MA_RAMP_LIGHT, "LIGHTEN", 0, "Lighten", ""},
+ {MA_RAMP_OVERLAY, "OVERLAY", 0, "Overlay", ""},
+ {MA_RAMP_DODGE, "DODGE", 0, "Dodge", ""},
+ {MA_RAMP_BURN, "BURN", 0, "Burn", ""},
+ {MA_RAMP_HUE, "HUE", 0, "Hue", ""},
+ {MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""},
+ {MA_RAMP_VAL, "VALUE", 0, "Value", ""},
+ {MA_RAMP_COLOR, "COLOR", 0, "Color", ""},
+ {MA_RAMP_SOFT, "SOFT_LIGHT", 0, "Soft Light", ""},
+ {MA_RAMP_LINEAR, "LINEAR_LIGHT", 0, "Linear Light", ""},
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -96,10 +98,10 @@ static void rna_Material_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *p
DAG_id_tag_update(&ma->id, 0);
if (scene) { /* can be NULL, see [#30025] */
if (scene->gm.matmode == GAME_MAT_GLSL) {
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, ma);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
}
else {
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING, ma);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING, ma);
}
}
}
@@ -109,7 +111,7 @@ static void rna_Material_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
Material *ma = ptr->id.data;
DAG_id_tag_update(&ma->id, 0);
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, ma);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
}
static PointerRNA rna_Material_mirror_get(PointerRNA *ptr)
@@ -144,23 +146,23 @@ static PointerRNA rna_Material_physics_get(PointerRNA *ptr)
static void rna_Material_type_set(PointerRNA *ptr, int value)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
if (ma->material_type == MA_TYPE_HALO && value != MA_TYPE_HALO)
- ma->mode &= ~(MA_STAR|MA_HALO_XALPHA|MA_ZINV|MA_ENV);
+ ma->mode &= ~(MA_STAR | MA_HALO_XALPHA | MA_ZINV | MA_ENV);
ma->material_type = value;
}
static void rna_Material_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Material *ma = (Material*)ptr->data;
- rna_iterator_array_begin(iter, (void*)ma->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
+ Material *ma = (Material *)ptr->data;
+ rna_iterator_array_begin(iter, (void *)ma->mtex, sizeof(MTex *), MAX_MTEX, 0, NULL);
}
static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
Tex *tex;
tex = give_current_material_texture(ma);
@@ -169,27 +171,27 @@ static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr)
static void rna_Material_active_texture_set(PointerRNA *ptr, PointerRNA value)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
set_current_material_texture(ma, value.data);
}
static int rna_Material_active_texture_editable(PointerRNA *ptr)
{
- Material *ma = (Material*)ptr->id.data;
+ Material *ma = (Material *)ptr->id.data;
return has_current_material_texture(ma);
}
static PointerRNA rna_Material_active_node_material_get(PointerRNA *ptr)
{
- Material *ma = give_node_material((Material*)ptr->data);
+ Material *ma = give_node_material((Material *)ptr->data);
return rna_pointer_inherit_refine(ptr, &RNA_Material, ma);
}
static void rna_Material_active_node_material_set(PointerRNA *ptr, PointerRNA value)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
Material *ma_act = value.data;
nodeSetActiveID(ma->nodetree, ID_MA, &ma_act->id);
@@ -197,7 +199,7 @@ static void rna_Material_active_node_material_set(PointerRNA *ptr, PointerRNA va
static void rna_MaterialStrand_start_size_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- Material *ma = (Material*)ptr->id.data;
+ Material *ma = (Material *)ptr->id.data;
if (ma->mode & MA_STR_B_UNITS) {
*min = 0.0001f;
@@ -211,7 +213,7 @@ static void rna_MaterialStrand_start_size_range(PointerRNA *ptr, float *min, flo
static void rna_MaterialStrand_end_size_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- Material *ma = (Material*)ptr->id.data;
+ Material *ma = (Material *)ptr->id.data;
if (ma->mode & MA_STR_B_UNITS) {
*min = 0.0001f;
@@ -225,36 +227,36 @@ static void rna_MaterialStrand_end_size_range(PointerRNA *ptr, float *min, float
static int rna_MaterialTextureSlot_use_get(PointerRNA *ptr)
{
- Material *ma = (Material*)ptr->id.data;
- MTex *mtex = (MTex*)ptr->data;
+ Material *ma = (Material *)ptr->id.data;
+ MTex *mtex = (MTex *)ptr->data;
int a;
- for (a = 0; a<MAX_MTEX; a++)
+ for (a = 0; a < MAX_MTEX; a++)
if (ma->mtex[a] == mtex)
- return (ma->septex & (1<<a)) == 0;
+ return (ma->septex & (1 << a)) == 0;
return 0;
}
static void rna_MaterialTextureSlot_use_set(PointerRNA *ptr, int value)
{
- Material *ma = (Material*)ptr->id.data;
- MTex *mtex = (MTex*)ptr->data;
+ Material *ma = (Material *)ptr->id.data;
+ MTex *mtex = (MTex *)ptr->data;
int a;
- for (a = 0; a<MAX_MTEX; a++) {
+ for (a = 0; a < MAX_MTEX; a++) {
if (ma->mtex[a] == mtex) {
if (value)
- ma->septex &= ~(1<<a);
+ ma->septex &= ~(1 << a);
else
- ma->septex |= (1<<a);
+ ma->septex |= (1 << a);
}
}
}
static void rna_Material_use_diffuse_ramp_set(PointerRNA *ptr, int value)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
if (value) ma->mode |= MA_RAMP_COL;
else ma->mode &= ~MA_RAMP_COL;
@@ -265,7 +267,7 @@ static void rna_Material_use_diffuse_ramp_set(PointerRNA *ptr, int value)
static void rna_Material_use_specular_ramp_set(PointerRNA *ptr, int value)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
if (value) ma->mode |= MA_RAMP_SPEC;
else ma->mode &= ~MA_RAMP_SPEC;
@@ -276,7 +278,7 @@ static void rna_Material_use_specular_ramp_set(PointerRNA *ptr, int value)
static void rna_Material_use_nodes_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Material *ma = (Material*)ptr->data;
+ Material *ma = (Material *)ptr->data;
if (ma->use_nodes && ma->nodetree == NULL)
ED_node_shader_default(scene, &ma->id);
@@ -287,7 +289,7 @@ static void rna_Material_use_nodes_update(Main *bmain, Scene *scene, PointerRNA
static EnumPropertyItem *rna_Material_texture_coordinates_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- Material *ma = (Material*)ptr->id.data;
+ Material *ma = (Material *)ptr->id.data;
EnumPropertyItem *item = NULL;
int totitem = 0;
@@ -385,35 +387,40 @@ static void rna_def_material_mtex(BlenderRNA *brna)
{MTEX_CUBE, "CUBE", 0, "Cube", "Map using the normal vector"},
{MTEX_TUBE, "TUBE", 0, "Tube", "Map with Z as central axis"},
{MTEX_SPHERE, "SPHERE", 0, "Sphere", "Map with Z as central axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_x_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_y_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_z_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_normal_map_space_items[] = {
{MTEX_NSPACE_CAMERA, "CAMERA", 0, "Camera", ""},
{MTEX_NSPACE_WORLD, "WORLD", 0, "World", ""},
{MTEX_NSPACE_OBJECT, "OBJECT", 0, "Object", ""},
{MTEX_NSPACE_TANGENT, "TANGENT", 0, "Tangent", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_bump_method_items[] = {
{0, "BUMP_ORIGINAL", 0, "Original", ""},
@@ -421,15 +428,17 @@ static void rna_def_material_mtex(BlenderRNA *brna)
{MTEX_3TAP_BUMP, "BUMP_LOW_QUALITY", 0, "Low Quality", "Use 3 tap filtering"},
{MTEX_5TAP_BUMP, "BUMP_MEDIUM_QUALITY", 0, "Medium Quality", "Use 5 tap filtering"},
{MTEX_BICUBIC_BUMP, "BUMP_BEST_QUALITY", 0,
- "Best Quality", "Use bicubic filtering (requires OpenGL 3.0+, it will fall back on "
- "medium setting for other systems)"},
- {0, NULL, 0, NULL, NULL}};
+ "Best Quality", "Use bicubic filtering (requires OpenGL 3.0+, it will fall back on "
+ "medium setting for other systems)"},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_bump_space_items[] = {
{0, "BUMP_VIEWSPACE", 0, "ViewSpace", ""},
{MTEX_BUMP_OBJECTSPACE, "BUMP_OBJECTSPACE", 0, "ObjectSpace", ""},
{MTEX_BUMP_TEXTURESPACE, "BUMP_TEXTURESPACE", 0, "TextureSpace", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MaterialTextureSlot", "TextureSlot");
RNA_def_struct_sdna(srna, "MTex");
@@ -763,14 +772,16 @@ static void rna_def_material_gamesettings(BlenderRNA *brna)
"Render polygon transparent, depending on alpha channel of the texture"},
{GEMAT_ALPHA_SORT, "ALPHA_SORT", 0, "Alpha Sort",
"Sort faces for correct alpha drawing (slow, use Alpha Clip instead when possible)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_face_orientation_items[] = {
{GEMAT_NORMAL, "NORMAL", 0, "Normal", "No tranformation"},
{GEMAT_HALO, "HALO", 0, "Halo", "Screen aligned billboard"},
{GEMAT_BILLBOARD, "BILLBOARD", 0, "Billboard", "Billboard with Z-axis constraint"},
{GEMAT_SHADOW, "SHADOW", 0, "Shadow", "Faces are used for shadow"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MaterialGameSettings", NULL);
RNA_def_struct_sdna(srna, "GameSettings");
@@ -816,7 +827,8 @@ static void rna_def_material_colors(StructRNA *srna)
{MA_RAMP_IN_ENERGY, "ENERGY", 0, "Energy", ""},
{MA_RAMP_IN_NOR, "NORMAL", 0, "Normal", ""},
{MA_RAMP_IN_RESULT, "RESULT", 0, "Result", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "diffuse_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "r");
@@ -919,7 +931,8 @@ static void rna_def_material_diffuse(StructRNA *srna)
{MA_DIFF_TOON, "TOON", 0, "Toon", "Use a toon shader"},
{MA_DIFF_MINNAERT, "MINNAERT", 0, "Minnaert", "Use a Minnaert shader"},
{MA_DIFF_FRESNEL, "FRESNEL", 0, "Fresnel", "Use a Fresnel shader"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "diffuse_shader", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "diff_shader");
@@ -976,7 +989,8 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
static EnumPropertyItem prop_fadeto_mir_items[] = {
{MA_RAYMIR_FADETOSKY, "FADE_TO_SKY", 0, "Sky", ""},
{MA_RAYMIR_FADETOMAT, "FADE_TO_MATERIAL", 0, "Material", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MaterialRaytraceMirror", NULL);
RNA_def_struct_sdna(srna, "Material");
@@ -1148,13 +1162,15 @@ static void rna_def_material_volume(BlenderRNA *brna)
{MA_VOL_SHADE_SHADED, "SHADED", 0, "Shaded", ""},
{MA_VOL_SHADE_MULTIPLE, "MULTIPLE_SCATTERING", 0, "Multiple Scattering", ""},
{MA_VOL_SHADE_SHADEDPLUSMULTIPLE, "SHADED_PLUS_MULTIPLE_SCATTERING", 0, "Shaded + Multiple Scattering", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_stepsize_items[] = {
{MA_VOL_STEP_RANDOMIZED, "RANDOMIZED", 0, "Randomized", ""},
{MA_VOL_STEP_CONSTANT, "CONSTANT", 0, "Constant", ""},
/*{MA_VOL_STEP_ADAPTIVE, "ADAPTIVE", 0, "Adaptive", ""}, */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MaterialVolume", NULL);
RNA_def_struct_sdna(srna, "VolumeSettings");
@@ -1433,7 +1449,7 @@ static void rna_def_material_sss(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Material Subsurface Scattering",
"Diffuse subsurface scattering settings for a Material datablock");
- prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_COLOR|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_COLOR | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "sss_radius");
RNA_def_property_range(prop, 0.001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001, 10000, 1, 3);
@@ -1503,7 +1519,8 @@ static void rna_def_material_specularity(StructRNA *srna)
{MA_SPEC_BLINN, "BLINN", 0, "Blinn", "Use a Blinn shader"},
{MA_SPEC_TOON, "TOON", 0, "Toon", "Use a toon shader"},
{MA_SPEC_WARDISO, "WARDISO", 0, "WardIso", "Use a Ward anisotropic shader"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "specular_shader", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "spec_shader");
@@ -1678,12 +1695,14 @@ void RNA_def_material(BlenderRNA *brna)
{MA_TYPE_WIRE, "WIRE", 0, "Wire", "Render the edges of faces as wires (not supported in raytracing)"},
{MA_TYPE_VOLUME, "VOLUME", 0, "Volume", "Render object as a volume"},
{MA_TYPE_HALO, "HALO", 0, "Halo", "Render object as halo particles"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem transparency_items[] = {
{0, "MASK", 0, "Mask", "Mask the background"},
{MA_ZTRANSP, "Z_TRANSPARENCY", 0, "Z Transparency", "Use alpha buffer for transparent faces"},
{MA_RAYTRANSP, "RAYTRACE", 0, "Raytrace", "Use raytracing for transparent refraction rendering"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* Render Preview Types */
static EnumPropertyItem preview_type_items[] = {
@@ -1693,14 +1712,16 @@ void RNA_def_material(BlenderRNA *brna)
{MA_MONKEY, "MONKEY", ICON_MONKEY, "Monkey", "Monkey"},
{MA_HAIR, "HAIR", ICON_HAIR, "Hair", "Hair strands"},
{MA_SPHERE_A, "SPHERE_A", ICON_MAT_SPHERE_SKY, "World Sphere", "Large sphere with sky"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_shadows_only_items[] = {
{MA_SO_OLD, "SHADOW_ONLY_OLD", 0, "Shadow and Distance", "Old shadow only method"},
{MA_SO_SHADOW, "SHADOW_ONLY", 0, "Shadow Only", "Improved shadow only method"},
{MA_SO_SHADED, "SHADOW_ONLY_SHADED", 0, "Shadow and Shading",
- "Improved shadow only method which also renders lightless areas as shadows"},
- {0, NULL, 0, NULL, NULL}};
+ "Improved shadow only method which also renders lightless areas as shadows"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Material", "ID");
RNA_def_struct_ui_text(srna, "Material",
@@ -1990,8 +2011,8 @@ void RNA_def_material(BlenderRNA *brna)
/* common */
rna_def_animdata_common(srna);
rna_def_mtex_common(brna, srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",
- "rna_Material_active_texture_set", "rna_Material_active_texture_editable",
- "MaterialTextureSlot", "MaterialTextureSlots", "rna_Material_update");
+ "rna_Material_active_texture_set", "rna_Material_active_texture_editable",
+ "MaterialTextureSlot", "MaterialTextureSlots", "rna_Material_update");
/* only material has this one */
prop = RNA_def_property(srna, "use_textures", PROP_BOOLEAN, PROP_NONE);
@@ -2034,26 +2055,26 @@ static void rna_def_texture_slots(BlenderRNA *brna, PropertyRNA *cprop, const ch
/* functions */
func = RNA_def_function(srna, "add", "rna_mtex_texture_slots_add");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_NO_SELF|FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_NO_SELF | FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "mtex", structname, "", "The newly initialized mtex");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "create", "rna_mtex_texture_slots_create");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_NO_SELF|FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_NO_SELF | FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
parm = RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "Slot index to initialize", 0, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_pointer(func, "mtex", structname, "", "The newly initialized mtex");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "clear", "rna_mtex_texture_slots_clear");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_NO_SELF|FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_NO_SELF | FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
parm = RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "Slot index to clear", 0, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
}
void rna_def_mtex_common(BlenderRNA *brna, StructRNA *srna, const char *begin,
- const char *activeget, const char *activeset, const char *activeeditable,
- const char *structname, const char *structname_slots, const char *update)
+ const char *activeget, const char *activeset, const char *activeeditable,
+ const char *structname, const char *structname_slots, const char *update)
{
PropertyRNA *prop;
@@ -2076,7 +2097,7 @@ void rna_def_mtex_common(BlenderRNA *brna, StructRNA *srna, const char *begin,
prop = RNA_def_property(srna, "active_texture_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "texact");
- RNA_def_property_range(prop, 0, MAX_MTEX-1);
+ RNA_def_property_range(prop, 0, MAX_MTEX - 1);
RNA_def_property_ui_text(prop, "Active Texture Index", "Index of active texture slot");
RNA_def_property_update(prop, 0, update);
}
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index 530f7d91561..c122b8f262b 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -116,7 +116,7 @@ static void rna_Mesh_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
DAG_id_tag_update(id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
}
@@ -125,7 +125,7 @@ static void rna_Mesh_update_select(Main *bmain, Scene *scene, PointerRNA *ptr)
ID *id = ptr->id.data;
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
- WM_main_add_notifier(NC_GEOM|ND_SELECT, id);
+ WM_main_add_notifier(NC_GEOM | ND_SELECT, id);
}
}
@@ -134,14 +134,14 @@ void rna_Mesh_update_draw(Main *bmain, Scene *scene, PointerRNA *ptr)
ID *id = ptr->id.data;
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
}
void rna_Mesh_update_vertmask(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Mesh* me = ptr->data;
+ Mesh *me = ptr->data;
if ((me->editflag & ME_EDIT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_MASK)) {
me->editflag ^= ME_EDIT_PAINT_MASK;
}
@@ -150,7 +150,7 @@ void rna_Mesh_update_vertmask(Main *bmain, Scene *scene, PointerRNA *ptr)
void rna_Mesh_update_facemask(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Mesh* me = ptr->data;
+ Mesh *me = ptr->data;
if ((me->editflag & ME_EDIT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_MASK)) {
me->editflag ^= ME_EDIT_VERT_SEL;
}
@@ -158,13 +158,13 @@ void rna_Mesh_update_facemask(Main *bmain, Scene *scene, PointerRNA *ptr)
}
static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value)
{
- MVert *mvert = (MVert*)ptr->data;
+ MVert *mvert = (MVert *)ptr->data;
normal_short_to_float_v3(value, mvert->no);
}
static void rna_MeshVertex_normal_set(PointerRNA *ptr, const float *value)
{
- MVert *mvert = (MVert*)ptr->data;
+ MVert *mvert = (MVert *)ptr->data;
float no[3];
copy_v3_v3(no, value);
@@ -174,61 +174,61 @@ static void rna_MeshVertex_normal_set(PointerRNA *ptr, const float *value)
static float rna_MeshVertex_bevel_weight_get(PointerRNA *ptr)
{
- MVert *mvert = (MVert*)ptr->data;
- return mvert->bweight/255.0f;
+ MVert *mvert = (MVert *)ptr->data;
+ return mvert->bweight / 255.0f;
}
static void rna_MeshVertex_bevel_weight_set(PointerRNA *ptr, float value)
{
- MVert *mvert = (MVert*)ptr->data;
- mvert->bweight = (char)(CLAMPIS(value*255.0f, 0, 255));
+ MVert *mvert = (MVert *)ptr->data;
+ mvert->bweight = (char)(CLAMPIS(value * 255.0f, 0, 255));
}
static float rna_MEdge_bevel_weight_get(PointerRNA *ptr)
{
- MEdge *medge = (MEdge*)ptr->data;
- return medge->bweight/255.0f;
+ MEdge *medge = (MEdge *)ptr->data;
+ return medge->bweight / 255.0f;
}
static void rna_MEdge_bevel_weight_set(PointerRNA *ptr, float value)
{
- MEdge *medge = (MEdge*)ptr->data;
- medge->bweight = (char)(CLAMPIS(value*255.0f, 0, 255));
+ MEdge *medge = (MEdge *)ptr->data;
+ medge->bweight = (char)(CLAMPIS(value * 255.0f, 0, 255));
}
static float rna_MEdge_crease_get(PointerRNA *ptr)
{
- MEdge *medge = (MEdge*)ptr->data;
- return medge->crease/255.0f;
+ MEdge *medge = (MEdge *)ptr->data;
+ return medge->crease / 255.0f;
}
static void rna_MEdge_crease_set(PointerRNA *ptr, float value)
{
- MEdge *medge = (MEdge*)ptr->data;
- medge->crease = (char)(CLAMPIS(value*255.0f, 0, 255));
+ MEdge *medge = (MEdge *)ptr->data;
+ medge->crease = (char)(CLAMPIS(value * 255.0f, 0, 255));
}
static void rna_MeshPolygon_normal_get(PointerRNA *ptr, float *values)
{
Mesh *me = rna_mesh(ptr);
- MPoly *mp = (MPoly*)ptr->data;
+ MPoly *mp = (MPoly *)ptr->data;
/* BMESH_TODO: might be faster to look for a CD_NORMALS layer and use that */
- mesh_calc_poly_normal(mp, me->mloop+mp->loopstart, me->mvert, values);
+ mesh_calc_poly_normal(mp, me->mloop + mp->loopstart, me->mvert, values);
}
static float rna_MeshPolygon_area_get(PointerRNA *ptr)
{
- Mesh *me = (Mesh*)ptr->id.data;
- MPoly *mp = (MPoly*)ptr->data;
+ Mesh *me = (Mesh *)ptr->id.data;
+ MPoly *mp = (MPoly *)ptr->data;
- return BKE_mesh_calc_poly_area(mp, me->mloop+mp->loopstart, me->mvert, NULL);
+ return BKE_mesh_calc_poly_area(mp, me->mloop + mp->loopstart, me->mvert, NULL);
}
static void rna_MeshTessFace_normal_get(PointerRNA *ptr, float *values)
{
Mesh *me = rna_mesh(ptr);
- MFace *mface = (MFace*)ptr->data;
+ MFace *mface = (MFace *)ptr->data;
if (mface->v4)
normal_quad_v3(values, me->mvert[mface->v1].co, me->mvert[mface->v2].co,
@@ -240,7 +240,7 @@ static void rna_MeshTessFace_normal_get(PointerRNA *ptr, float *values)
static float rna_MeshTessFace_area_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- MFace *mface = (MFace*)ptr->data;
+ MFace *mface = (MFace *)ptr->data;
if (mface->v4)
return area_quad_v3(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co,
@@ -251,7 +251,7 @@ static float rna_MeshTessFace_area_get(PointerRNA *ptr)
static void rna_MeshTextureFace_uv1_get(PointerRNA *ptr, float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
values[0] = mtface->uv[0][0];
values[1] = mtface->uv[0][1];
@@ -259,7 +259,7 @@ static void rna_MeshTextureFace_uv1_get(PointerRNA *ptr, float *values)
static void rna_MeshTextureFace_uv1_set(PointerRNA *ptr, const float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
mtface->uv[0][0] = values[0];
mtface->uv[0][1] = values[1];
@@ -267,7 +267,7 @@ static void rna_MeshTextureFace_uv1_set(PointerRNA *ptr, const float *values)
static void rna_MeshTextureFace_uv2_get(PointerRNA *ptr, float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
values[0] = mtface->uv[1][0];
values[1] = mtface->uv[1][1];
@@ -275,7 +275,7 @@ static void rna_MeshTextureFace_uv2_get(PointerRNA *ptr, float *values)
static void rna_MeshTextureFace_uv2_set(PointerRNA *ptr, const float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
mtface->uv[1][0] = values[0];
mtface->uv[1][1] = values[1];
@@ -283,7 +283,7 @@ static void rna_MeshTextureFace_uv2_set(PointerRNA *ptr, const float *values)
static void rna_MeshTextureFace_uv3_get(PointerRNA *ptr, float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
values[0] = mtface->uv[2][0];
values[1] = mtface->uv[2][1];
@@ -291,7 +291,7 @@ static void rna_MeshTextureFace_uv3_get(PointerRNA *ptr, float *values)
static void rna_MeshTextureFace_uv3_set(PointerRNA *ptr, const float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
mtface->uv[2][0] = values[0];
mtface->uv[2][1] = values[1];
@@ -299,7 +299,7 @@ static void rna_MeshTextureFace_uv3_set(PointerRNA *ptr, const float *values)
static void rna_MeshTextureFace_uv4_get(PointerRNA *ptr, float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
values[0] = mtface->uv[3][0];
values[1] = mtface->uv[3][1];
@@ -307,7 +307,7 @@ static void rna_MeshTextureFace_uv4_get(PointerRNA *ptr, float *values)
static void rna_MeshTextureFace_uv4_set(PointerRNA *ptr, const float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
mtface->uv[3][0] = values[0];
mtface->uv[3][1] = values[1];
@@ -322,7 +322,7 @@ static int rna_CustomDataData_numverts(PointerRNA *ptr, int type)
for (cdl = fdata->layers, a = 0; a < fdata->totlayer; cdl++, a++) {
if (cdl->type == type) {
- b = ((char *)ptr->data - ((char*)cdl->data)) / CustomData_sizeof(type);
+ b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
if (b >= 0 && b < me->totface) {
return (me->mface[b].v4 ? 4 : 3);
}
@@ -336,12 +336,12 @@ static int rna_MeshTextureFace_uv_get_length(PointerRNA *ptr, int length[RNA_MAX
{
length[0] = rna_CustomDataData_numverts(ptr, CD_MTFACE);
length[1] = 2;
- return length[0]*length[1];
+ return length[0] * length[1];
}
static void rna_MeshTextureFace_uv_get(PointerRNA *ptr, float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
int totvert = rna_CustomDataData_numverts(ptr, CD_MTFACE);
memcpy(values, mtface->uv, totvert * 2 * sizeof(float));
@@ -349,7 +349,7 @@ static void rna_MeshTextureFace_uv_get(PointerRNA *ptr, float *values)
static void rna_MeshTextureFace_uv_set(PointerRNA *ptr, const float *values)
{
- MTFace *mtface = (MTFace*)ptr->data;
+ MTFace *mtface = (MTFace *)ptr->data;
int totvert = rna_CustomDataData_numverts(ptr, CD_MTFACE);
memcpy(mtface->uv, values, totvert * 2 * sizeof(float));
@@ -358,74 +358,74 @@ static void rna_MeshTextureFace_uv_set(PointerRNA *ptr, const float *values)
/* notice red and blue are swapped */
static void rna_MeshColor_color1_get(PointerRNA *ptr, float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- values[2] = (&mcol[0].r)[0]/255.0f;
- values[1] = (&mcol[0].r)[1]/255.0f;
- values[0] = (&mcol[0].r)[2]/255.0f;
+ values[2] = (&mcol[0].r)[0] / 255.0f;
+ values[1] = (&mcol[0].r)[1] / 255.0f;
+ values[0] = (&mcol[0].r)[2] / 255.0f;
}
static void rna_MeshColor_color1_set(PointerRNA *ptr, const float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- (&mcol[0].r)[2] = (char)(CLAMPIS(values[0]*255.0f, 0, 255));
- (&mcol[0].r)[1] = (char)(CLAMPIS(values[1]*255.0f, 0, 255));
- (&mcol[0].r)[0] = (char)(CLAMPIS(values[2]*255.0f, 0, 255));
+ (&mcol[0].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
+ (&mcol[0].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
+ (&mcol[0].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
}
static void rna_MeshColor_color2_get(PointerRNA *ptr, float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- values[2] = (&mcol[1].r)[0]/255.0f;
- values[1] = (&mcol[1].r)[1]/255.0f;
- values[0] = (&mcol[1].r)[2]/255.0f;
+ values[2] = (&mcol[1].r)[0] / 255.0f;
+ values[1] = (&mcol[1].r)[1] / 255.0f;
+ values[0] = (&mcol[1].r)[2] / 255.0f;
}
static void rna_MeshColor_color2_set(PointerRNA *ptr, const float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- (&mcol[1].r)[2] = (char)(CLAMPIS(values[0]*255.0f, 0, 255));
- (&mcol[1].r)[1] = (char)(CLAMPIS(values[1]*255.0f, 0, 255));
- (&mcol[1].r)[0] = (char)(CLAMPIS(values[2]*255.0f, 0, 255));
+ (&mcol[1].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
+ (&mcol[1].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
+ (&mcol[1].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
}
static void rna_MeshColor_color3_get(PointerRNA *ptr, float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- values[2] = (&mcol[2].r)[0]/255.0f;
- values[1] = (&mcol[2].r)[1]/255.0f;
- values[0] = (&mcol[2].r)[2]/255.0f;
+ values[2] = (&mcol[2].r)[0] / 255.0f;
+ values[1] = (&mcol[2].r)[1] / 255.0f;
+ values[0] = (&mcol[2].r)[2] / 255.0f;
}
static void rna_MeshColor_color3_set(PointerRNA *ptr, const float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- (&mcol[2].r)[2] = (char)(CLAMPIS(values[0]*255.0f, 0, 255));
- (&mcol[2].r)[1] = (char)(CLAMPIS(values[1]*255.0f, 0, 255));
- (&mcol[2].r)[0] = (char)(CLAMPIS(values[2]*255.0f, 0, 255));
+ (&mcol[2].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
+ (&mcol[2].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
+ (&mcol[2].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
}
static void rna_MeshColor_color4_get(PointerRNA *ptr, float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- values[2] = (&mcol[3].r)[0]/255.0f;
- values[1] = (&mcol[3].r)[1]/255.0f;
- values[0] = (&mcol[3].r)[2]/255.0f;
+ values[2] = (&mcol[3].r)[0] / 255.0f;
+ values[1] = (&mcol[3].r)[1] / 255.0f;
+ values[0] = (&mcol[3].r)[2] / 255.0f;
}
static void rna_MeshColor_color4_set(PointerRNA *ptr, const float *values)
{
- MCol *mcol = (MCol*)ptr->data;
+ MCol *mcol = (MCol *)ptr->data;
- (&mcol[3].r)[2] = (char)(CLAMPIS(values[0]*255.0f, 0, 255));
- (&mcol[3].r)[1] = (char)(CLAMPIS(values[1]*255.0f, 0, 255));
- (&mcol[3].r)[0] = (char)(CLAMPIS(values[2]*255.0f, 0, 255));
+ (&mcol[3].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
+ (&mcol[3].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
+ (&mcol[3].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
}
static void rna_MeshLoopColor_color_get(PointerRNA *ptr, float *values)
@@ -448,15 +448,15 @@ static void rna_MeshLoopColor_color_set(PointerRNA *ptr, const float *values)
static int rna_Mesh_texspace_editable(PointerRNA *ptr)
{
- Mesh *me = (Mesh*)ptr->data;
- return (me->texflag & ME_AUTOSPACE)? 0: PROP_EDITABLE;
+ Mesh *me = (Mesh *)ptr->data;
+ return (me->texflag & ME_AUTOSPACE) ? 0 : PROP_EDITABLE;
}
static void rna_Mesh_texspace_size_get(PointerRNA *ptr, float values[3])
{
- Mesh *me= (Mesh*)ptr->data;
+ Mesh *me = (Mesh *)ptr->data;
- if(!me->bb)
+ if (!me->bb)
BKE_mesh_texspace_calc(me);
copy_v3_v3(values, me->size);
@@ -464,9 +464,9 @@ static void rna_Mesh_texspace_size_get(PointerRNA *ptr, float values[3])
static void rna_Mesh_texspace_loc_get(PointerRNA *ptr, float values[3])
{
- Mesh *me= (Mesh*)ptr->data;
+ Mesh *me = (Mesh *)ptr->data;
- if(!me->bb)
+ if (!me->bb)
BKE_mesh_texspace_calc(me);
copy_v3_v3(values, me->loc);
@@ -477,10 +477,10 @@ static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, Pointe
Mesh *me = rna_mesh(ptr);
if (me->dvert) {
- MVert *mvert = (MVert*)ptr->data;
- MDeformVert *dvert = me->dvert + (mvert-me->mvert);
+ MVert *mvert = (MVert *)ptr->data;
+ MDeformVert *dvert = me->dvert + (mvert - me->mvert);
- rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL);
+ rna_iterator_array_begin(iter, (void *)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL);
}
else
rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL);
@@ -488,7 +488,7 @@ static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, Pointe
static int rna_CustomDataLayer_active_get(PointerRNA *ptr, CustomData *data, int type, int render)
{
- int n = ((CustomDataLayer*)ptr->data) - data->layers;
+ int n = ((CustomDataLayer *)ptr->data) - data->layers;
if (render) return (n == CustomData_get_render_layer_index(data, type));
else return (n == CustomData_get_active_layer_index(data, type));
@@ -496,32 +496,35 @@ static int rna_CustomDataLayer_active_get(PointerRNA *ptr, CustomData *data, int
static int rna_CustomDataLayer_clone_get(PointerRNA *ptr, CustomData *data, int type, int render)
{
- int n = ((CustomDataLayer*)ptr->data) - data->layers;
+ int n = ((CustomDataLayer *)ptr->data) - data->layers;
return (n == CustomData_get_clone_layer_index(data, type));
}
static void rna_CustomDataLayer_active_set(PointerRNA *ptr, CustomData *data, int value, int type, int render)
{
- int n = (((CustomDataLayer*)ptr->data) - data->layers) - CustomData_get_layer_index(data, type);
+ Mesh *me = ptr->id.data;
+ int n = (((CustomDataLayer *)ptr->data) - data->layers) - CustomData_get_layer_index(data, type);
if (value == 0)
return;
if (render) CustomData_set_layer_render(data, type, n);
- else CustomData_set_layer_active(data, type, n);
+ else CustomData_set_layer_active(data, type, n);
/* sync loop layer */
if (type == CD_MTEXPOLY) {
CustomData *ldata = rna_mesh_ldata(ptr);
if (render) CustomData_set_layer_render(ldata, CD_MLOOPUV, n);
- else CustomData_set_layer_active(ldata, CD_MLOOPUV, n);
+ else CustomData_set_layer_active(ldata, CD_MLOOPUV, n);
}
+
+ mesh_update_customdata_pointers(me, TRUE);
}
static void rna_CustomDataLayer_clone_set(PointerRNA *ptr, CustomData *data, int value, int type, int render)
{
- int n = ((CustomDataLayer*)ptr->data) - data->layers;
+ int n = ((CustomDataLayer *)ptr->data) - data->layers;
if (value == 0)
return;
@@ -539,9 +542,9 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, rende
/* MeshUVLoopLayer */
-static char *rna_MeshUVLoopLayer_path(PointerRNA *ptr)
+static char *rna_MeshUVLoopLayer_path(PointerRNA * ptr)
{
- return BLI_sprintfN("uv_layers[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("uv_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static void rna_MeshUVLoopLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -568,14 +571,14 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_uv_texture, fdata, CD_MTF
static void rna_MeshTextureFaceLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
- rna_iterator_array_begin(iter, layer->data, sizeof(MTFace), (me->edit_btmesh)? 0: me->totface, 0, NULL);
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
+ rna_iterator_array_begin(iter, layer->data, sizeof(MTFace), (me->edit_btmesh) ? 0 : me->totface, 0, NULL);
}
static int rna_MeshTextureFaceLayer_data_length(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- return (me->edit_btmesh)? 0: me->totface;
+ return (me->edit_btmesh) ? 0 : me->totface;
}
static int rna_MeshTextureFaceLayer_active_render_get(PointerRNA *ptr)
@@ -611,7 +614,7 @@ static void rna_MeshTextureFaceLayer_clone_set(PointerRNA *ptr, int value)
static void rna_MeshTextureFaceLayer_name_set(PointerRNA *ptr, const char *value)
{
CustomData *fdata = rna_mesh_fdata(ptr);
- CustomDataLayer *cdl = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *cdl = (CustomDataLayer *)ptr->data;
BLI_strncpy_utf8(cdl->name, value, sizeof(cdl->name));
CustomData_set_layer_unique_name(fdata, cdl - fdata->layers);
}
@@ -627,7 +630,7 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, re
static void rna_MeshTexturePolyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
rna_iterator_array_begin(iter, layer->data, sizeof(MTexPoly), (me->edit_btmesh) ? 0 : me->totpoly, 0, NULL);
}
@@ -670,7 +673,7 @@ static void rna_MeshTexturePolyLayer_clone_set(PointerRNA *ptr, int value)
static void rna_MeshTexturePolyLayer_name_set(PointerRNA *ptr, const char *value)
{
CustomData *pdata = rna_mesh_pdata(ptr);
- CustomDataLayer *cdl = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *cdl = (CustomDataLayer *)ptr->data;
BLI_strncpy_utf8(cdl->name, value, sizeof(cdl->name));
CustomData_set_layer_unique_name(pdata, cdl - pdata->layers);
}
@@ -721,7 +724,7 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(vertex_color, ldata, CD_MLOOPCOL,
static void rna_MeshLoopColorLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
rna_iterator_array_begin(iter, layer->data, sizeof(MLoopCol), me->totloop, 0, NULL);
}
@@ -755,7 +758,7 @@ static void rna_MeshLoopColorLayer_name_set(PointerRNA *ptr, const char *value)
{
/* Mesh *me = rna_mesh(ptr); */ /* UNUSED */
/* CustomData *pdata = rna_mesh_pdata(ptr); */ /* UNUSED */
- CustomDataLayer *cdl = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *cdl = (CustomDataLayer *)ptr->data;
BLI_strncpy_utf8(cdl->name, value, sizeof(cdl->name));
CustomData_set_layer_unique_name(rna_mesh_ldata(ptr), cdl - rna_mesh_ldata(ptr)->layers);
}
@@ -763,7 +766,7 @@ static void rna_MeshLoopColorLayer_name_set(PointerRNA *ptr, const char *value)
static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
rna_iterator_array_begin(iter, layer->data, sizeof(MFloatProperty), me->totpoly, 0, NULL);
}
@@ -775,14 +778,14 @@ static int rna_MeshFloatPropertyLayer_data_length(PointerRNA *ptr)
static int rna_float_layer_check(CollectionPropertyIterator *iter, void *data)
{
- CustomDataLayer *layer = (CustomDataLayer*)data;
+ CustomDataLayer *layer = (CustomDataLayer *)data;
return (layer->type != CD_PROP_FLT);
}
static void rna_Mesh_polygon_float_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
CustomData *pdata = rna_mesh_pdata(ptr);
- rna_iterator_array_begin(iter, (void*)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
+ rna_iterator_array_begin(iter, (void *)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
rna_float_layer_check);
}
@@ -793,14 +796,14 @@ static int rna_Mesh_polygon_float_layers_length(PointerRNA *ptr)
static int rna_int_layer_check(CollectionPropertyIterator *iter, void *data)
{
- CustomDataLayer *layer = (CustomDataLayer*)data;
+ CustomDataLayer *layer = (CustomDataLayer *)data;
return (layer->type != CD_PROP_INT);
}
static void rna_MeshIntPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
rna_iterator_array_begin(iter, layer->data, sizeof(MIntProperty), me->totpoly, 0, NULL);
}
@@ -813,7 +816,7 @@ static int rna_MeshIntPropertyLayer_data_length(PointerRNA *ptr)
static void rna_Mesh_polygon_int_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
CustomData *pdata = rna_mesh_pdata(ptr);
- rna_iterator_array_begin(iter, (void*)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
+ rna_iterator_array_begin(iter, (void *)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
rna_int_layer_check);
}
@@ -824,14 +827,14 @@ static int rna_Mesh_polygon_int_layers_length(PointerRNA *ptr)
static int rna_string_layer_check(CollectionPropertyIterator *iter, void *data)
{
- CustomDataLayer *layer = (CustomDataLayer*)data;
+ CustomDataLayer *layer = (CustomDataLayer *)data;
return (layer->type != CD_PROP_STR);
}
static void rna_MeshStringPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
rna_iterator_array_begin(iter, layer->data, sizeof(MStringProperty), me->totpoly, 0, NULL);
}
@@ -844,7 +847,7 @@ static int rna_MeshStringPropertyLayer_data_length(PointerRNA *ptr)
static void rna_Mesh_polygon_string_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
CustomData *pdata = rna_mesh_pdata(ptr);
- rna_iterator_array_begin(iter, (void*)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
+ rna_iterator_array_begin(iter, (void *)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
rna_string_layer_check);
}
@@ -855,7 +858,7 @@ static int rna_Mesh_polygon_string_layers_length(PointerRNA *ptr)
static void rna_TexturePoly_image_set(PointerRNA *ptr, PointerRNA value)
{
- MTexPoly *tf = (MTexPoly*)ptr->data;
+ MTexPoly *tf = (MTexPoly *)ptr->data;
ID *id = value.data;
if (id) {
@@ -874,7 +877,7 @@ static void rna_TexturePoly_image_set(PointerRNA *ptr, PointerRNA value)
* keep it to support importers that only make tessfaces */
static void rna_TextureFace_image_set(PointerRNA *ptr, PointerRNA value)
{
- MTFace *tf = (MTFace*)ptr->data;
+ MTFace *tf = (MTFace *)ptr->data;
ID *id = value.data;
if (id) {
@@ -905,32 +908,32 @@ static float rna_Mesh_auto_smooth_angle_get(PointerRNA *ptr)
static int rna_MeshTessFace_verts_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- MFace *face = (MFace*)ptr->data;
+ MFace *face = (MFace *)ptr->data;
if (face)
- length[0] = (face->v4)? 4: 3;
+ length[0] = (face->v4) ? 4 : 3;
else
- length[0] = 4; /* XXX rna_raw_access wants the length of a dummy face. this needs fixing. - Campbell */
+ length[0] = 4; /* XXX rna_raw_access wants the length of a dummy face. this needs fixing. - Campbell */
return length[0];
}
static void rna_MeshTessFace_verts_get(PointerRNA *ptr, int *values)
{
- MFace *face = (MFace*)ptr->data;
+ MFace *face = (MFace *)ptr->data;
memcpy(values, &face->v1, (face->v4 ? 4 : 3) * sizeof(int));
}
static void rna_MeshTessFace_verts_set(PointerRNA *ptr, const int *values)
{
- MFace *face = (MFace*)ptr->data;
+ MFace *face = (MFace *)ptr->data;
memcpy(&face->v1, values, (face->v4 ? 4 : 3) * sizeof(int));
}
/* poly.vertices - this is faked loop access for convenience */
static int rna_MeshPoly_vertices_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- MPoly *mp = (MPoly*)ptr->data;
+ MPoly *mp = (MPoly *)ptr->data;
/* note, raw access uses dummy item, this _could_ crash, watch out for this, mface uses it but it cant work here */
return (length[0] = mp->totloop);
}
@@ -938,7 +941,7 @@ static int rna_MeshPoly_vertices_get_length(PointerRNA *ptr, int length[RNA_MAX_
static void rna_MeshPoly_vertices_get(PointerRNA *ptr, int *values)
{
Mesh *me = rna_mesh(ptr);
- MPoly *mp = (MPoly*)ptr->data;
+ MPoly *mp = (MPoly *)ptr->data;
MLoop *ml = &me->mloop[mp->loopstart];
unsigned int i;
for (i = mp->totloop; i > 0; i--, values++, ml++) {
@@ -949,7 +952,7 @@ static void rna_MeshPoly_vertices_get(PointerRNA *ptr, int *values)
static void rna_MeshPoly_vertices_set(PointerRNA *ptr, const int *values)
{
Mesh *me = rna_mesh(ptr);
- MPoly *mp = (MPoly*)ptr->data;
+ MPoly *mp = (MPoly *)ptr->data;
MLoop *ml = &me->mloop[mp->loopstart];
unsigned int i;
for (i = mp->totloop; i > 0; i--, values++, ml++) {
@@ -961,42 +964,42 @@ static void rna_MeshPoly_material_index_range(PointerRNA *ptr, int *min, int *ma
{
Mesh *me = rna_mesh(ptr);
*min = 0;
- *max = me->totcol-1;
+ *max = me->totcol - 1;
*max = MAX2(0, *max);
}
static int rna_MeshVertex_index_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- MVert *vert = (MVert*)ptr->data;
+ MVert *vert = (MVert *)ptr->data;
return (int)(vert - me->mvert);
}
static int rna_MeshEdge_index_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- MEdge *edge = (MEdge*)ptr->data;
+ MEdge *edge = (MEdge *)ptr->data;
return (int)(edge - me->medge);
}
static int rna_MeshTessFace_index_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- MFace *face = (MFace*)ptr->data;
+ MFace *face = (MFace *)ptr->data;
return (int)(face - me->mface);
}
static int rna_MeshPolygon_index_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- MPoly *mpoly = (MPoly*)ptr->data;
+ MPoly *mpoly = (MPoly *)ptr->data;
return (int)(mpoly - me->mpoly);
}
static int rna_MeshLoop_index_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- MLoop *mloop = (MLoop*)ptr->data;
+ MLoop *mloop = (MLoop *)ptr->data;
return (int)(mloop - me->mloop);
}
@@ -1005,7 +1008,7 @@ static int rna_MeshLoop_index_get(PointerRNA *ptr)
static char *rna_VertexGroupElement_path(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr); /* XXX not always! */
- MDeformWeight *dw = (MDeformWeight*)ptr->data;
+ MDeformWeight *dw = (MDeformWeight *)ptr->data;
MDeformVert *dvert;
int a, b;
@@ -1019,7 +1022,7 @@ static char *rna_VertexGroupElement_path(PointerRNA *ptr)
static char *rna_MeshPolygon_path(PointerRNA *ptr)
{
- return BLI_sprintfN("polygons[%d]", (int)((MPoly*)ptr->data - rna_mesh(ptr)->mpoly));
+ return BLI_sprintfN("polygons[%d]", (int)((MPoly *)ptr->data - rna_mesh(ptr)->mpoly));
}
static char *rna_MeshTessFace_path(PointerRNA *ptr)
@@ -1029,28 +1032,28 @@ static char *rna_MeshTessFace_path(PointerRNA *ptr)
static char *rna_MeshEdge_path(PointerRNA *ptr)
{
- return BLI_sprintfN("edges[%d]", (int)((MEdge*)ptr->data - rna_mesh(ptr)->medge));
+ return BLI_sprintfN("edges[%d]", (int)((MEdge *)ptr->data - rna_mesh(ptr)->medge));
}
static char *rna_MeshLoop_path(PointerRNA *ptr)
{
- return BLI_sprintfN("loops[%d]", (int)((MLoop*)ptr->data - rna_mesh(ptr)->mloop));
+ return BLI_sprintfN("loops[%d]", (int)((MLoop *)ptr->data - rna_mesh(ptr)->mloop));
}
static char *rna_MeshVertex_path(PointerRNA *ptr)
{
- return BLI_sprintfN("vertices[%d]", (int)((MVert*)ptr->data - rna_mesh(ptr)->mvert));
+ return BLI_sprintfN("vertices[%d]", (int)((MVert *)ptr->data - rna_mesh(ptr)->mvert));
}
static char *rna_MeshTextureFaceLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("tessface_uv_textures[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("tessface_uv_textures[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_MeshTexturePolyLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("uv_textures[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("uv_textures[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_PolyCustomData_data_path(PointerRNA *ptr, char *collection, int type)
@@ -1062,7 +1065,7 @@ static char *rna_PolyCustomData_data_path(PointerRNA *ptr, char *collection, int
for (cdl = pdata->layers, a = 0; a < pdata->totlayer; cdl++, a++) {
if (cdl->type == type) {
- b = ((char*)ptr->data - ((char*)cdl->data))/CustomData_sizeof(type);
+ b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
if (b >= 0 && b < totpoly)
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b);
}
@@ -1080,7 +1083,7 @@ static char *rna_LoopCustomData_data_path(PointerRNA *ptr, char *collection, int
for (cdl = ldata->layers, a = 0; a < ldata->totlayer; cdl++, a++) {
if (cdl->type == type) {
- b = ((char*)ptr->data - ((char*)cdl->data))/CustomData_sizeof(type);
+ b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
if (b >= 0 && b < totloop)
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b);
}
@@ -1098,7 +1101,7 @@ static char *rna_FaceCustomData_data_path(PointerRNA *ptr, char *collection, int
for (cdl = fdata->layers, a = 0; a < fdata->totlayer; cdl++, a++) {
if (cdl->type == type) {
- b = ((char*)ptr->data - ((char*)cdl->data))/CustomData_sizeof(type);
+ b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
if (b >= 0 && b < totloop)
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b);
}
@@ -1124,12 +1127,12 @@ static char *rna_MeshTexturePoly_path(PointerRNA *ptr)
static char *rna_MeshColorLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("tessface_vertex_colors[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("tessface_vertex_colors[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_MeshLoopColorLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("vertex_colors[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("vertex_colors[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_MeshColor_path(PointerRNA *ptr)
@@ -1139,12 +1142,12 @@ static char *rna_MeshColor_path(PointerRNA *ptr)
static char *rna_MeshSticky_path(PointerRNA *ptr)
{
- return BLI_sprintfN("sticky[%d]", (int)((MSticky*)ptr->data - rna_mesh(ptr)->msticky));
+ return BLI_sprintfN("sticky[%d]", (int)((MSticky *)ptr->data - rna_mesh(ptr)->msticky));
}
static char *rna_MeshIntPropertyLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("int_layers[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("int_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_MeshIntProperty_path(PointerRNA *ptr)
@@ -1154,7 +1157,7 @@ static char *rna_MeshIntProperty_path(PointerRNA *ptr)
static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("float_layers[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("float_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_MeshFloatProperty_path(PointerRNA *ptr)
@@ -1164,7 +1167,7 @@ static char *rna_MeshFloatProperty_path(PointerRNA *ptr)
static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr)
{
- return BLI_sprintfN("string_layers[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
+ return BLI_sprintfN("string_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name);
}
static char *rna_MeshStringProperty_path(PointerRNA *ptr)
@@ -1180,7 +1183,7 @@ static int rna_Mesh_tot_vert_get(PointerRNA *ptr)
static int rna_Mesh_tot_edge_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
- return me->edit_btmesh ? me->edit_btmesh->bm->totedgesel: 0;
+ return me->edit_btmesh ? me->edit_btmesh->bm->totedgesel : 0;
}
static int rna_Mesh_tot_face_get(PointerRNA *ptr)
{
@@ -1711,8 +1714,8 @@ static void rna_def_mtface(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "MeshTextureFace");
RNA_def_property_ui_text(prop, "Data", "");
RNA_def_property_collection_funcs(prop, "rna_MeshTextureFaceLayer_data_begin", "rna_iterator_array_next",
- "rna_iterator_array_end", "rna_iterator_array_get",
- "rna_MeshTextureFaceLayer_data_length", NULL, NULL, NULL);
+ "rna_iterator_array_end", "rna_iterator_array_get",
+ "rna_MeshTextureFaceLayer_data_length", NULL, NULL, NULL);
srna = RNA_def_struct(brna, "MeshTextureFace", NULL);
RNA_def_struct_sdna(srna, "MTFace");
@@ -2112,12 +2115,14 @@ void rna_def_texmat_common(StructRNA *srna, const char *texspace_editable)
RNA_def_property_editable_func(prop, texspace_editable);
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- /* not supported yet
+ /* not supported yet */
+#if 0
prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
RNA_def_property_float(prop, NULL, "rot");
RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
RNA_def_property_editable_func(prop, texspace_editable);
- RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");*/
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
+#endif
/* materials */
prop = RNA_def_property(srna, "materials", PROP_COLLECTION, PROP_NONE);
@@ -2309,13 +2314,14 @@ static void rna_def_loop_colors(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(parm, PROP_RNAPTR);
RNA_def_function_return(func, parm);
-/*
+#if 0
func = RNA_def_function(srna, "remove", "rna_Mesh_vertex_color_remove");
RNA_def_function_ui_description(func, "Remove a vertex color layer");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "layer", "Layer", "", "The layer to remove");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
-*/
+#endif
+
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshLoopColorLayer");
RNA_def_property_pointer_funcs(prop, "rna_Mesh_vertex_color_active_get",
@@ -2485,13 +2491,14 @@ static void rna_def_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(parm, PROP_RNAPTR);
RNA_def_function_return(func, parm);
-/*
+#if 0
func = RNA_def_function(srna, "remove", "rna_Mesh_uv_texture_layers_remove");
RNA_def_function_ui_description(func, "Remove a vertex color layer");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "layer", "Layer", "", "The layer to remove");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
-*/
+#endif
+
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_active_get",
@@ -2554,7 +2561,7 @@ static void rna_def_mesh(BlenderRNA *brna)
/* TODO, should this be allowed to be its self? */
prop = RNA_def_property(srna, "texture_mesh", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_ui_text(prop, "Texture Mesh",
"Use another mesh for texture indices (vertex indices must be aligned)");
@@ -2717,21 +2724,23 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Auto Texture Space",
"Adjust active object's texture space automatically when transforming object");
- /*prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
+#if 0
+ prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
RNA_def_property_editable_func(prop, "rna_Mesh_texspace_editable");
RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_loc_get", "rna_Mesh_texspace_loc_set", NULL);
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- */
+#endif
- /* not supported yet
+ /* not supported yet */
+#if 0
prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
RNA_def_property_float(prop, NULL, "rot");
RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
RNA_def_property_editable_func(prop, texspace_editable);
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- */
+#endif
/* Mesh Draw Options for Edit Mode*/
@@ -2743,7 +2752,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_all_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_ALLEDGES);
RNA_def_property_ui_text(prop, "All Edges", "Display all edges for wireframe in all view modes in the 3D view");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWFACES);
@@ -2820,15 +2829,15 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_X);
RNA_def_property_ui_text(prop, "X Mirror", "X Axis mirror editing");
- /*
+#if 0
prop = RNA_def_property(srna, "use_mirror_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_Y);
RNA_def_property_ui_text(prop, "Y Mirror", "Y Axis mirror editing");
- prop = RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_mirror_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_Z);
RNA_def_property_ui_text(prop, "Z Mirror", "Z Axis mirror editing");
- */
+#endif
prop = RNA_def_property(srna, "use_mirror_topology", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_TOPO);
@@ -2840,13 +2849,13 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_PAINT_MASK);
RNA_def_property_ui_text(prop, "Paint Mask", "Face selection masking for painting");
RNA_def_property_ui_icon(prop, ICON_FACESEL_HLT, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_Mesh_update_facemask");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Mesh_update_facemask");
prop = RNA_def_property(srna, "use_paint_mask_vertex", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_VERT_SEL);
RNA_def_property_ui_text(prop, "Vertex Selection", "Vertex selection masking for painting (weight paint only)");
RNA_def_property_ui_icon(prop, ICON_VERTEXSEL, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_Mesh_update_vertmask");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Mesh_update_vertmask");
/* readonly editmesh info - use for extrude menu */
prop = RNA_def_property(srna, "total_vert_sel", PROP_INT, PROP_UNSIGNED);
diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c
index c0a9d19360d..ec03d452b57 100644
--- a/source/blender/makesrna/intern/rna_mesh_api.c
+++ b/source/blender/makesrna/intern/rna_mesh_api.c
@@ -42,7 +42,7 @@
#ifdef RNA_RUNTIME
const char *rna_Mesh_unit_test_compare(struct Mesh *mesh, bContext *C, struct Mesh *mesh2)
{
- const char *ret = BKE_mesh_cmp(mesh, mesh2, FLT_EPSILON*60);
+ const char *ret = BKE_mesh_cmp(mesh, mesh2, FLT_EPSILON * 60);
if (!ret)
ret = "Same";
@@ -82,7 +82,7 @@ void RNA_api_mesh(StructRNA *srna)
func = RNA_def_function(srna, "validate", "BKE_mesh_validate");
RNA_def_function_ui_description(func, "validate geometry, return True when the mesh has had "
- "invalid geometry corrected/removed");
+ "invalid geometry corrected/removed");
RNA_def_boolean(func, "verbose", 0, "Verbose", "Output information about the errors found");
parm = RNA_def_boolean(func, "result", 0, "Result", "");
RNA_def_function_return(func, parm);
diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c
index eda38a43d54..c8b52b45604 100644
--- a/source/blender/makesrna/intern/rna_meta.c
+++ b/source/blender/makesrna/intern/rna_meta.c
@@ -53,13 +53,13 @@
static int rna_Meta_texspace_editable(PointerRNA *ptr)
{
- MetaBall *mb = (MetaBall*)ptr->data;
- return (mb->texflag & MB_AUTOSPACE)? 0: PROP_EDITABLE;
+ MetaBall *mb = (MetaBall *)ptr->data;
+ return (mb->texflag & MB_AUTOSPACE) ? 0 : PROP_EDITABLE;
}
static void rna_Meta_texspace_loc_get(PointerRNA *ptr, float *values)
{
- MetaBall *mb = (MetaBall*)ptr->data;
+ MetaBall *mb = (MetaBall *)ptr->data;
/* tex_space_mball() needs object.. ugh */
@@ -68,14 +68,14 @@ static void rna_Meta_texspace_loc_get(PointerRNA *ptr, float *values)
static void rna_Meta_texspace_loc_set(PointerRNA *ptr, const float *values)
{
- MetaBall *mb = (MetaBall*)ptr->data;
+ MetaBall *mb = (MetaBall *)ptr->data;
copy_v3_v3(mb->loc, values);
}
static void rna_Meta_texspace_size_get(PointerRNA *ptr, float *values)
{
- MetaBall *mb = (MetaBall*)ptr->data;
+ MetaBall *mb = (MetaBall *)ptr->data;
/* tex_space_mball() needs object.. ugh */
@@ -84,7 +84,7 @@ static void rna_Meta_texspace_size_get(PointerRNA *ptr, float *values)
static void rna_Meta_texspace_size_set(PointerRNA *ptr, const float *values)
{
- MetaBall *mb = (MetaBall*)ptr->data;
+ MetaBall *mb = (MetaBall *)ptr->data;
copy_v3_v3(mb->size, values);
}
@@ -102,7 +102,7 @@ static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
BKE_mball_properties_copy(scene, ob);
DAG_id_tag_update(&mb->id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, mb);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, mb);
}
}
@@ -120,7 +120,7 @@ static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type)
/* cheating way for importers to avoid slow updates */
if (mb->id.us > 0) {
DAG_id_tag_update(&mb->id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, &mb->id);
}
return ml;
@@ -133,7 +133,7 @@ static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, Meta
found = BLI_remlink_safe(&mb->elems, ml);
if (!found) {
- BKE_reportf(reports, RPT_ERROR, "Metaball \"%s\" does not contain spline given", mb->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Metaball \"%s\" does not contain spline given", mb->id.name + 2);
return;
}
@@ -143,7 +143,7 @@ static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, Meta
/* cheating way for importers to avoid slow updates */
if (mb->id.us > 0) {
DAG_id_tag_update(&mb->id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, &mb->id);
}
}
@@ -154,7 +154,7 @@ static void rna_MetaBall_elements_clear(MetaBall *mb)
/* cheating way for importers to avoid slow updates */
if (mb->id.us > 0) {
DAG_id_tag_update(&mb->id, 0);
- WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, &mb->id);
}
}
@@ -188,7 +188,7 @@ static void rna_def_metaelement(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Rotation", "Normalized quaternion rotation");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_rotation");
- prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_UNSIGNED|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_UNSIGNED | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "rad");
RNA_def_property_ui_text(prop, "Radius", "");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
@@ -254,7 +254,7 @@ static void rna_def_metaball_elements(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove an element from the metaball");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "element", "MetaElement", "", "The element to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "clear", "rna_MetaBall_elements_clear");
RNA_def_function_ui_description(func, "Remove all elements from the metaball");
@@ -273,7 +273,8 @@ static void rna_def_metaball(BlenderRNA *brna)
{MB_UPDATE_HALFRES, "HALFRES", 0, "Half", "While editing, update metaball in half resolution"},
{MB_UPDATE_FAST, "FAST", 0, "Fast", "While editing, update metaball without polygonization"},
{MB_UPDATE_NEVER, "NEVER", 0, "Never", "While editing, don't update metaball at all"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MetaBall", "ID");
RNA_def_struct_ui_text(srna, "MetaBall", "Metaball datablock to defined blobby surfaces");
@@ -333,7 +334,7 @@ static void rna_def_metaball(BlenderRNA *brna)
/* not supported yet */
#if 0
- prop= RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
+ prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
RNA_def_property_float(prop, NULL, "rot");
RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
RNA_def_property_editable_func(prop, "rna_Meta_texspace_editable");
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 4f045788561..4a7050b47e9 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -102,7 +102,8 @@ EnumPropertyItem modifier_type_items[] = {
{eModifierType_Smoke, "SMOKE", ICON_MOD_SMOKE, "Smoke", ""},
{eModifierType_Softbody, "SOFT_BODY", ICON_MOD_SOFT, "Soft Body", ""},
{eModifierType_Surface, "SURFACE", ICON_MOD_PHYSICS, "Surface", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -117,13 +118,13 @@ EnumPropertyItem modifier_type_items[] = {
static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- UVProjectModifierData *uvp = (UVProjectModifierData*)ptr->data;
- rna_iterator_array_begin(iter, (void*)uvp->projectors, sizeof(Object*), uvp->num_projectors, 0, NULL);
+ UVProjectModifierData *uvp = (UVProjectModifierData *)ptr->data;
+ rna_iterator_array_begin(iter, (void *)uvp->projectors, sizeof(Object *), uvp->num_projectors, 0, NULL);
}
-static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr)
+static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
{
- ModifierData *md = (ModifierData*)ptr->data;
+ ModifierData *md = (ModifierData *)ptr->data;
switch (md->type) {
case eModifierType_Subsurf:
@@ -234,13 +235,13 @@ void rna_Modifier_name_set(PointerRNA *ptr, const char *value)
static char *rna_Modifier_path(PointerRNA *ptr)
{
- return BLI_sprintfN("modifiers[\"%s\"]", ((ModifierData*)ptr->data)->name);
+ return BLI_sprintfN("modifiers[\"%s\"]", ((ModifierData *)ptr->data)->name);
}
static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
}
static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -252,7 +253,7 @@ static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA
static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
SmokeModifierData *smd = (SmokeModifierData *)ptr->data;
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ParticleSystemModifierData *psmd = NULL;
ParticleSystem *psys = NULL;
ParticleSettings *part = NULL;
@@ -285,7 +286,7 @@ static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
part->flag |= PART_UNBORN;
part->draw_as = PART_DRAW_DOT;
BLI_strncpy(psys->name, "SmokeParticles", sizeof(psys->name));
- psys->recalc |= (PSYS_RECALC_RESET|PSYS_RECALC_PHYS);
+ psys->recalc |= (PSYS_RECALC_RESET | PSYS_RECALC_PHYS);
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
}
@@ -304,137 +305,137 @@ static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value)
{
- ExplodeModifierData *emd = (ExplodeModifierData*)ptr->data;
+ ExplodeModifierData *emd = (ExplodeModifierData *)ptr->data;
rna_object_vgroup_name_index_get(ptr, value, emd->vgroup);
}
static int rna_ExplodeModifier_vgroup_length(PointerRNA *ptr)
{
- ExplodeModifierData *emd = (ExplodeModifierData*)ptr->data;
+ ExplodeModifierData *emd = (ExplodeModifierData *)ptr->data;
return rna_object_vgroup_name_index_length(ptr, emd->vgroup);
}
static void rna_ExplodeModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- ExplodeModifierData *emd = (ExplodeModifierData*)ptr->data;
+ ExplodeModifierData *emd = (ExplodeModifierData *)ptr->data;
rna_object_vgroup_name_index_set(ptr, value, &emd->vgroup);
}
static void rna_SimpleDeformModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- SimpleDeformModifierData *smd = (SimpleDeformModifierData*)ptr->data;
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, smd->vgroup_name, sizeof(smd->vgroup_name));
}
static void rna_ShrinkwrapModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*)ptr->data;
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, smd->vgroup_name, sizeof(smd->vgroup_name));
}
static void rna_LatticeModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- LatticeModifierData *lmd = (LatticeModifierData*)ptr->data;
+ LatticeModifierData *lmd = (LatticeModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
}
static void rna_ArmatureModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- ArmatureModifierData *lmd = (ArmatureModifierData*)ptr->data;
+ ArmatureModifierData *lmd = (ArmatureModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
}
static void rna_CurveModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- CurveModifierData *lmd = (CurveModifierData*)ptr->data;
+ CurveModifierData *lmd = (CurveModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
}
static void rna_DisplaceModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- DisplaceModifierData *lmd = (DisplaceModifierData*)ptr->data;
+ DisplaceModifierData *lmd = (DisplaceModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
}
static void rna_HookModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- HookModifierData *lmd = (HookModifierData*)ptr->data;
+ HookModifierData *lmd = (HookModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
}
static void rna_MaskModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- MaskModifierData *lmd = (MaskModifierData*)ptr->data;
+ MaskModifierData *lmd = (MaskModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->vgroup, sizeof(lmd->vgroup));
}
static void rna_MeshDeformModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- MeshDeformModifierData *lmd = (MeshDeformModifierData*)ptr->data;
+ MeshDeformModifierData *lmd = (MeshDeformModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
}
static void rna_SmoothModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- SmoothModifierData *lmd = (SmoothModifierData*)ptr->data;
+ SmoothModifierData *lmd = (SmoothModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
}
static void rna_WaveModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- WaveModifierData *lmd = (WaveModifierData*)ptr->data;
+ WaveModifierData *lmd = (WaveModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
}
static void rna_CastModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- CastModifierData *lmd = (CastModifierData*)ptr->data;
+ CastModifierData *lmd = (CastModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
}
static void rna_SolidifyModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- SolidifyModifierData *smd = (SolidifyModifierData*)ptr->data;
+ SolidifyModifierData *smd = (SolidifyModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, smd->defgrp_name, sizeof(smd->defgrp_name));
}
static void rna_WeightVGModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- ModifierData *md = (ModifierData*)ptr->data;
+ ModifierData *md = (ModifierData *)ptr->data;
if (md->type == eModifierType_WeightVGEdit) {
- WeightVGEditModifierData *wmd = (WeightVGEditModifierData*)md;
+ WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name, sizeof(wmd->defgrp_name));
}
else if (md->type == eModifierType_WeightVGMix) {
- WeightVGMixModifierData *wmd = (WeightVGMixModifierData*)md;
+ WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md;
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name_a, sizeof(wmd->defgrp_name_a));
}
else if (md->type == eModifierType_WeightVGProximity) {
- WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData*)md;
+ WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md;
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name, sizeof(wmd->defgrp_name));
}
}
static void rna_WeightVGModifier_mask_vgroup_set(PointerRNA *ptr, const char *value)
{
- ModifierData *md = (ModifierData*)ptr->data;
+ ModifierData *md = (ModifierData *)ptr->data;
if (md->type == eModifierType_WeightVGEdit) {
- WeightVGEditModifierData *wmd = (WeightVGEditModifierData*)md;
+ WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
rna_object_vgroup_name_set(ptr, value, wmd->mask_defgrp_name, sizeof(wmd->mask_defgrp_name));
}
else if (md->type == eModifierType_WeightVGMix) {
- WeightVGMixModifierData *wmd = (WeightVGMixModifierData*)md;
+ WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md;
rna_object_vgroup_name_set(ptr, value, wmd->mask_defgrp_name, sizeof(wmd->mask_defgrp_name));
}
else if (md->type == eModifierType_WeightVGProximity) {
- WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData*)md;
+ WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md;
rna_object_vgroup_name_set(ptr, value, wmd->mask_defgrp_name, sizeof(wmd->mask_defgrp_name));
}
}
static void rna_WeightVGMixModifier_vgroup2_set(PointerRNA *ptr, const char *value)
{
- WeightVGMixModifierData *wmd = (WeightVGMixModifierData*)ptr->data;
+ WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name_b, sizeof(wmd->defgrp_name_b));
}
@@ -446,36 +447,36 @@ static void rna_MappingInfo_uvlayer_set(PointerRNA *ptr, const char *value)
static void rna_UVProjectModifier_uvlayer_set(PointerRNA *ptr, const char *value)
{
- UVProjectModifierData *umd = (UVProjectModifierData*)ptr->data;
+ UVProjectModifierData *umd = (UVProjectModifierData *)ptr->data;
rna_object_uvlayer_name_set(ptr, value, umd->uvlayer_name, sizeof(umd->uvlayer_name));
}
static void RNA_WarpModifier_vgroup_set(PointerRNA *ptr, const char *value)
{
- WarpModifierData *tmd = (WarpModifierData*)ptr->data;
+ WarpModifierData *tmd = (WarpModifierData *)ptr->data;
rna_object_vgroup_name_set(ptr, value, tmd->defgrp_name, sizeof(tmd->defgrp_name));
}
static void rna_WeightVGModifier_mask_uvlayer_set(PointerRNA *ptr, const char *value)
{
- ModifierData *md = (ModifierData*)ptr->data;
+ ModifierData *md = (ModifierData *)ptr->data;
if (md->type == eModifierType_WeightVGEdit) {
- WeightVGEditModifierData *wmd = (WeightVGEditModifierData*)md;
+ WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
rna_object_uvlayer_name_set(ptr, value, wmd->mask_tex_uvlayer_name, sizeof(wmd->mask_tex_uvlayer_name));
}
else if (md->type == eModifierType_WeightVGMix) {
- WeightVGMixModifierData *wmd = (WeightVGMixModifierData*)md;
+ WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md;
rna_object_uvlayer_name_set(ptr, value, wmd->mask_tex_uvlayer_name, sizeof(wmd->mask_tex_uvlayer_name));
}
else if (md->type == eModifierType_WeightVGProximity) {
- WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData*)md;
+ WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md;
rna_object_uvlayer_name_set(ptr, value, wmd->mask_tex_uvlayer_name, sizeof(wmd->mask_tex_uvlayer_name));
}
}
static void rna_MultiresModifier_level_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- MultiresModifierData *mmd = (MultiresModifierData*)ptr->data;
+ MultiresModifierData *mmd = (MultiresModifierData *)ptr->data;
*min = 0;
*max = mmd->totlvl; /* intentionally _not_ -1 */
@@ -484,7 +485,7 @@ static void rna_MultiresModifier_level_range(PointerRNA *ptr, int *min, int *max
static int rna_MultiresModifier_external_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Mesh *me = ob->data;
return CustomData_external_test(&me->ldata, CD_MDISPS);
@@ -492,16 +493,16 @@ static int rna_MultiresModifier_external_get(PointerRNA *ptr)
static void rna_MultiresModifier_filepath_get(PointerRNA *ptr, char *value)
{
- Object *ob = (Object*)ptr->id.data;
- CustomDataExternal *external = ((Mesh*)ob->data)->ldata.external;
+ Object *ob = (Object *)ptr->id.data;
+ CustomDataExternal *external = ((Mesh *)ob->data)->ldata.external;
- BLI_strncpy(value, (external)? external->filename: "", sizeof(external->filename));
+ BLI_strncpy(value, (external) ? external->filename : "", sizeof(external->filename));
}
static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object*)ptr->id.data;
- CustomDataExternal *external = ((Mesh*)ob->data)->ldata.external;
+ Object *ob = (Object *)ptr->id.data;
+ CustomDataExternal *external = ((Mesh *)ob->data)->ldata.external;
if (external && strcmp(external->filename, value)) {
BLI_strncpy(external->filename, value, sizeof(external->filename));
@@ -511,10 +512,10 @@ static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value
static int rna_MultiresModifier_filepath_length(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- CustomDataExternal *external = ((Mesh*)ob->data)->ldata.external;
+ Object *ob = (Object *)ptr->id.data;
+ CustomDataExternal *external = ((Mesh *)ob->data)->ldata.external;
- return strlen((external)? external->filename: "");
+ return strlen((external) ? external->filename : "");
}
static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
@@ -531,126 +532,126 @@ static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRN
static void rna_LatticeModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((LatticeModifierData*)ptr->data)->object, OB_LATTICE, value);
+ modifier_object_set(ptr->id.data, &((LatticeModifierData *)ptr->data)->object, OB_LATTICE, value);
}
static void rna_BooleanModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((BooleanModifierData*)ptr->data)->object, OB_MESH, value);
+ modifier_object_set(ptr->id.data, &((BooleanModifierData *)ptr->data)->object, OB_MESH, value);
}
static void rna_CurveModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((CurveModifierData*)ptr->data)->object, OB_CURVE, value);
+ modifier_object_set(ptr->id.data, &((CurveModifierData *)ptr->data)->object, OB_CURVE, value);
}
static void rna_CastModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((CastModifierData*)ptr->data)->object, OB_EMPTY, value);
+ modifier_object_set(ptr->id.data, &((CastModifierData *)ptr->data)->object, OB_EMPTY, value);
}
static void rna_ArmatureModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((ArmatureModifierData*)ptr->data)->object, OB_ARMATURE, value);
+ modifier_object_set(ptr->id.data, &((ArmatureModifierData *)ptr->data)->object, OB_ARMATURE, value);
}
static void rna_MaskModifier_armature_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((MaskModifierData*)ptr->data)->ob_arm, OB_ARMATURE, value);
+ modifier_object_set(ptr->id.data, &((MaskModifierData *)ptr->data)->ob_arm, OB_ARMATURE, value);
}
static void rna_ShrinkwrapModifier_auxiliary_target_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData*)ptr->data)->auxTarget, OB_MESH, value);
+ modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData *)ptr->data)->auxTarget, OB_MESH, value);
}
static void rna_ShrinkwrapModifier_target_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData*)ptr->data)->target, OB_MESH, value);
+ modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData *)ptr->data)->target, OB_MESH, value);
}
static int rna_ShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
{
- ShrinkwrapModifierData *swm = (ShrinkwrapModifierData*)ptr->data;
- return swm->shrinkOpts & (MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
+ ShrinkwrapModifierData *swm = (ShrinkwrapModifierData *)ptr->data;
+ return swm->shrinkOpts & (MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE | MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
}
static void rna_ShrinkwrapModifier_face_cull_set(struct PointerRNA *ptr, int value)
{
- ShrinkwrapModifierData *swm = (ShrinkwrapModifierData*)ptr->data;
+ ShrinkwrapModifierData *swm = (ShrinkwrapModifierData *)ptr->data;
swm->shrinkOpts =
- (swm->shrinkOpts & ~(MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE)) | value;
+ (swm->shrinkOpts & ~(MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE | MOD_SHRINKWRAP_CULL_TARGET_BACKFACE)) | value;
}
static void rna_MeshDeformModifier_object_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((MeshDeformModifierData*)ptr->data)->object, OB_MESH, value);
+ modifier_object_set(ptr->id.data, &((MeshDeformModifierData *)ptr->data)->object, OB_MESH, value);
}
static void rna_ArrayModifier_end_cap_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((ArrayModifierData*)ptr->data)->end_cap, OB_MESH, value);
+ modifier_object_set(ptr->id.data, &((ArrayModifierData *)ptr->data)->end_cap, OB_MESH, value);
}
static void rna_ArrayModifier_start_cap_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((ArrayModifierData*)ptr->data)->start_cap, OB_MESH, value);
+ modifier_object_set(ptr->id.data, &((ArrayModifierData *)ptr->data)->start_cap, OB_MESH, value);
}
static void rna_ArrayModifier_curve_set(PointerRNA *ptr, PointerRNA value)
{
- modifier_object_set(ptr->id.data, &((ArrayModifierData*)ptr->data)->curve_ob, OB_CURVE, value);
+ modifier_object_set(ptr->id.data, &((ArrayModifierData *)ptr->data)->curve_ob, OB_CURVE, value);
}
static int rna_MeshDeformModifier_is_bound_get(PointerRNA *ptr)
{
- return (((MeshDeformModifierData*)ptr->data)->bindcagecos != NULL);
+ return (((MeshDeformModifierData *)ptr->data)->bindcagecos != NULL);
}
static PointerRNA rna_SoftBodyModifier_settings_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
return rna_pointer_inherit_refine(ptr, &RNA_SoftBodySettings, ob->soft);
}
static PointerRNA rna_SoftBodyModifier_point_cache_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
return rna_pointer_inherit_refine(ptr, &RNA_PointCache, ob->soft->pointcache);
}
static PointerRNA rna_CollisionModifier_settings_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
return rna_pointer_inherit_refine(ptr, &RNA_CollisionSettings, ob->pd);
}
static PointerRNA rna_UVProjector_object_get(PointerRNA *ptr)
{
- Object **ob = (Object**)ptr->data;
+ Object **ob = (Object **)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_Object, *ob);
}
static void rna_UVProjector_object_set(PointerRNA *ptr, PointerRNA value)
{
- Object **ob = (Object**)ptr->data;
+ Object **ob = (Object **)ptr->data;
if (*ob)
- id_us_min((ID*)*ob);
+ id_us_min((ID *)*ob);
if (value.data)
- id_us_plus((ID*)value.data);
+ id_us_plus((ID *)value.data);
*ob = value.data;
}
static void rna_UVProjectModifier_num_projectors_set(PointerRNA *ptr, int value)
{
- UVProjectModifierData *md = (UVProjectModifierData*)ptr->data;
+ UVProjectModifierData *md = (UVProjectModifierData *)ptr->data;
int a;
md->num_projectors = CLAMPIS(value, 1, MOD_UVPROJECT_MAX);
- for (a = md->num_projectors; a<MOD_UVPROJECT_MAX; a++)
+ for (a = md->num_projectors; a < MOD_UVPROJECT_MAX; a++)
md->projectors[a] = NULL;
}
@@ -665,16 +666,16 @@ static int rna_OceanModifier_is_build_enabled_get(PointerRNA *UNUSED(ptr))
static void rna_OceanModifier_init_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- OceanModifierData *omd = (OceanModifierData*)ptr->data;
+ OceanModifierData *omd = (OceanModifierData *)ptr->data;
- omd->refresh |= (MOD_OCEAN_REFRESH_RESET|MOD_OCEAN_REFRESH_SIM|MOD_OCEAN_REFRESH_CLEAR_CACHE);
+ omd->refresh |= (MOD_OCEAN_REFRESH_RESET | MOD_OCEAN_REFRESH_SIM | MOD_OCEAN_REFRESH_CLEAR_CACHE);
rna_Modifier_update(bmain, scene, ptr);
}
static void rna_OceanModifier_sim_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- OceanModifierData *omd = (OceanModifierData*)ptr->data;
+ OceanModifierData *omd = (OceanModifierData *)ptr->data;
omd->refresh |= MOD_OCEAN_REFRESH_SIM;
@@ -683,7 +684,7 @@ static void rna_OceanModifier_sim_update(Main *bmain, Scene *scene, PointerRNA *
static void rna_OceanModifier_topology_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- OceanModifierData *omd = (OceanModifierData*)ptr->data;
+ OceanModifierData *omd = (OceanModifierData *)ptr->data;
omd->refresh |= MOD_OCEAN_REFRESH_TOPOLOGY;
@@ -692,13 +693,13 @@ static void rna_OceanModifier_topology_update(Main *bmain, Scene *scene, Pointer
static void rna_OceanModifier_ocean_chop_set(PointerRNA *ptr, float value)
{
- OceanModifierData *omd = (OceanModifierData*)ptr->data;
+ OceanModifierData *omd = (OceanModifierData *)ptr->data;
float old_value = omd->chop_amount;
omd->chop_amount = value;
if ((old_value == 0.0f && value > 0.0f) ||
- (old_value > 0.0f && value == 0.0f))
+ (old_value > 0.0f && value == 0.0f))
{
omd->refresh |= MOD_OCEAN_REFRESH_RESET;
omd->refresh |= MOD_OCEAN_REFRESH_CLEAR_CACHE;
@@ -707,13 +708,13 @@ static void rna_OceanModifier_ocean_chop_set(PointerRNA *ptr, float value)
static float rna_EdgeSplitModifier_split_angle_get(PointerRNA *ptr)
{
- EdgeSplitModifierData *md = (EdgeSplitModifierData*)ptr->data;
+ EdgeSplitModifierData *md = (EdgeSplitModifierData *)ptr->data;
return DEG2RADF(md->split_angle);
}
static void rna_EdgeSplitModifier_split_angle_set(PointerRNA *ptr, float value)
{
- EdgeSplitModifierData *md = (EdgeSplitModifierData*)ptr->data;
+ EdgeSplitModifierData *md = (EdgeSplitModifierData *)ptr->data;
value = RAD2DEGF(value);
CLAMP(value, 0.0f, 180.0f);
md->split_angle = (int)value;
@@ -721,13 +722,13 @@ static void rna_EdgeSplitModifier_split_angle_set(PointerRNA *ptr, float value)
static float rna_BevelModifier_angle_limit_get(PointerRNA *ptr)
{
- BevelModifierData *md = (BevelModifierData*)ptr->data;
+ BevelModifierData *md = (BevelModifierData *)ptr->data;
return DEG2RADF(md->bevel_angle);
}
static void rna_BevelModifier_angle_limit_set(PointerRNA *ptr, float value)
{
- BevelModifierData *md = (BevelModifierData*)ptr->data;
+ BevelModifierData *md = (BevelModifierData *)ptr->data;
value = RAD2DEGF(value);
CLAMP(value, 0.0f, 180.0f);
md->bevel_angle = (int)value;
@@ -740,7 +741,8 @@ static void rna_def_property_subdivision_common(StructRNA *srna, const char type
static EnumPropertyItem prop_subdivision_type_items[] = {
{0, "CATMULL_CLARK", 0, "Catmull-Clark", ""},
{1, "SIMPLE", 0, "Simple", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
PropertyRNA *prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, type);
@@ -789,9 +791,10 @@ static void rna_def_modifier_generic_map_info(StructRNA *srna)
{MOD_DISP_MAP_LOCAL, "LOCAL", 0, "Local", "Use the local coordinate system for the texture coordinates"},
{MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", "Use the global coordinate system for the texture coordinates"},
{MOD_DISP_MAP_OBJECT, "OBJECT", 0, "Object",
- "Use the linked object's local coordinate system for the texture coordinates"},
+ "Use the linked object's local coordinate system for the texture coordinates"},
{MOD_DISP_MAP_UV, "UV", 0, "UV", "Use UV coordinates for the texture coordinates"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
PropertyRNA *prop;
@@ -815,7 +818,7 @@ static void rna_def_modifier_generic_map_info(StructRNA *srna)
prop = RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "map_object");
RNA_def_property_ui_text(prop, "Texture Coordinate Object", "Object to set the texture coordinates");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -825,15 +828,16 @@ static void rna_def_modifier_warp(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_falloff_items[] = {
- {eWarp_Falloff_None, "NONE", 0, "No Falloff", ""},
- {eWarp_Falloff_Curve, "CURVE", 0, "Curve", ""},
- {eWarp_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
- {eWarp_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
- {eWarp_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
- {eWarp_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
- {eWarp_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
- {eWarp_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
- {0, NULL, 0, NULL, NULL}};
+ {eWarp_Falloff_None, "NONE", 0, "No Falloff", ""},
+ {eWarp_Falloff_Curve, "CURVE", 0, "Curve", ""},
+ {eWarp_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
+ {eWarp_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
+ {eWarp_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
+ {eWarp_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
+ {eWarp_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
+ {eWarp_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "WarpModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Warp Modifier", "Warp modifier");
@@ -842,12 +846,12 @@ static void rna_def_modifier_warp(BlenderRNA *brna)
prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "From", "Object to transform from");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "To", "Object to transform to");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
@@ -954,7 +958,7 @@ static void rna_def_modifier_lattice(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeModifier_object_set", NULL, "rna_Lattice_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -983,7 +987,8 @@ static void rna_def_modifier_curve(BlenderRNA *brna)
{MOD_CURVE_NEGX, "NEG_X", 0, "-X", ""},
{MOD_CURVE_NEGY, "NEG_Y", 0, "-Y", ""},
{MOD_CURVE_NEGZ, "NEG_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "CurveModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Curve Modifier", "Curve deformation modifier");
@@ -993,7 +998,7 @@ static void rna_def_modifier_curve(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Curve object to deform with");
RNA_def_property_pointer_funcs(prop, NULL, "rna_CurveModifier_object_set", NULL, "rna_Curve_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -1103,7 +1108,7 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
prop = RNA_def_property(srna, "mirror_object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "mirror_ob");
RNA_def_property_ui_text(prop, "Mirror Object", "Object to use as mirror");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -1218,7 +1223,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
prop = RNA_def_property(srna, "start_position_object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "objectcenter");
RNA_def_property_ui_text(prop, "Start Position Object", "Object which defines the wave center");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -1270,7 +1275,7 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureModifier_object_set", NULL, "rna_Armature_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
@@ -1330,7 +1335,7 @@ static void rna_def_modifier_hook(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Parent Object for hook, also recalculates and clears offset");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
@@ -1380,7 +1385,8 @@ static void rna_def_modifier_boolean(BlenderRNA *brna)
"Keep the part of the mesh that intersects with the other selected object"},
{eBooleanModifierOp_Union, "UNION", 0, "Union", "Combine two meshes in an additive way"},
{eBooleanModifierOp_Difference, "DIFFERENCE", 0, "Difference", "Combine two meshes in a subtractive way"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "BooleanModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Boolean Modifier", "Boolean operations modifier");
@@ -1390,7 +1396,7 @@ static void rna_def_modifier_boolean(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Mesh object to use for Boolean operation");
RNA_def_property_pointer_funcs(prop, NULL, "rna_BooleanModifier_object_set", NULL, "rna_Mesh_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE);
@@ -1409,7 +1415,8 @@ static void rna_def_modifier_array(BlenderRNA *brna)
{MOD_ARR_FITLENGTH, "FIT_LENGTH", 0, "Fit Length",
"Duplicate the object as many times as fits in a certain length"},
{MOD_ARR_FITCURVE, "FIT_CURVE", 0, "Fit Curve", "Fit the duplicated objects to a curve"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ArrayModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Array Modifier", "Array duplication modifier");
@@ -1439,7 +1446,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "curve_ob");
RNA_def_property_ui_text(prop, "Curve", "Curve object to fit array length to");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_curve_set", NULL, "rna_Curve_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
/* Offset parameters */
@@ -1459,7 +1466,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Relative Offset", "Add an offset relative to the object's bounding box");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- /* PROP_TRANSLATION causes units to be used which we don't want */
+ /* PROP_TRANSLATION causes units to be used which we don't want */
prop = RNA_def_property(srna, "relative_offset_displace", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "scale");
RNA_def_property_ui_text(prop, "Relative Offset Displacement",
@@ -1495,20 +1502,20 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object Offset",
"Use the location and rotation of another object to determine the distance and "
"rotational change between arrayed items");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
/* Caps */
prop = RNA_def_property(srna, "start_cap", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Start Cap", "Mesh object to use as a start cap");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_start_cap_set", NULL, "rna_Mesh_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "end_cap", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "End Cap", "Mesh object to use as an end cap");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_end_cap_set", NULL, "rna_Mesh_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -1560,7 +1567,8 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
"Use the texture's intensity value to displace in the normal direction"},
{MOD_DISP_DIR_RGB_XYZ, "RGB_TO_XYZ", 0, "RGB to XYZ",
"Use the texture's RGB values to displace the mesh in the XYZ direction"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "DisplaceModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Displace Modifier", "Displacement modifier");
@@ -1668,7 +1676,7 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_pointer_funcs(prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform");
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -1728,7 +1736,8 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
{MOD_CAST_TYPE_SPHERE, "SPHERE", 0, "Sphere", ""},
{MOD_CAST_TYPE_CYLINDER, "CYLINDER", 0, "Cylinder", ""},
{MOD_CAST_TYPE_CUBOID, "CUBOID", 0, "Cuboid", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "CastModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Cast Modifier", "Modifier to cast to other shapes");
@@ -1745,7 +1754,7 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object",
"Control object: if available, its location determines the center of the effect");
RNA_def_property_pointer_funcs(prop, NULL, "rna_CastModifier_object_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
@@ -1809,7 +1818,8 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
static EnumPropertyItem prop_mode_items[] = {
{0, "VOLUME", 0, "Volume", "Bind to volume inside cage mesh"},
{1, "SURFACE", 0, "Surface", "Bind to surface of cage mesh"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
#endif
srna = RNA_def_struct(brna, "MeshDeformModifier", "Modifier");
@@ -1820,7 +1830,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Mesh object to deform with");
RNA_def_property_pointer_funcs(prop, NULL, "rna_MeshDeformModifier_object_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
@@ -1896,7 +1906,7 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob");
RNA_def_property_ui_text(prop, "Object", "Object that has the particle system");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
@@ -2047,11 +2057,12 @@ static void rna_def_modifier_smoke(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_smoke_type_items[] = {
- {0, "NONE", 0, "None", ""},
- {MOD_SMOKE_TYPE_DOMAIN, "DOMAIN", 0, "Domain", ""},
- {MOD_SMOKE_TYPE_FLOW, "FLOW", 0, "Flow", "Inflow/Outflow"},
- {MOD_SMOKE_TYPE_COLL, "COLLISION", 0, "Collision", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, "NONE", 0, "None", ""},
+ {MOD_SMOKE_TYPE_DOMAIN, "DOMAIN", 0, "Domain", ""},
+ {MOD_SMOKE_TYPE_FLOW, "FLOW", 0, "Flow", "Inflow/Outflow"},
+ {MOD_SMOKE_TYPE_COLL, "COLLISION", 0, "Collision", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SmokeModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Smoke Modifier", "Smoke simulation modifier");
@@ -2131,13 +2142,15 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
{BME_BEVEL_WEIGHT, "WEIGHT", 0, "Weight",
"Use bevel weights to determine how much bevel is applied; "
"apply them separately in vert/edge select mode"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_edge_weight_method_items[] = {
{0, "AVERAGE", 0, "Average", ""},
{BME_BEVEL_EMIN, "SHARPEST", 0, "Sharpest", ""},
{BME_BEVEL_EMAX, "LARGEST", 0, "Largest", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "BevelModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Bevel Modifier", "Bevel modifier to make edges and vertices more rounded");
@@ -2210,13 +2223,15 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
"Shrink the mesh to the nearest target surface along a given axis"},
{MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex",
"Shrink the mesh to the nearest target vertex"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem shrink_face_cull_items[] = {
{0, "OFF", 0, "Off", "No culling"},
{MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE, "FRONT", 0, "Front", "No projection when in front of the face"},
{MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, "BACK", 0, "Back", "No projection when behind the face"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ShrinkwrapModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Shrinkwrap Modifier",
@@ -2242,7 +2257,7 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_target_set", NULL, "rna_Mesh_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
@@ -2250,7 +2265,7 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_auxiliary_target_set", NULL,
"rna_Mesh_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -2330,7 +2345,8 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
static EnumPropertyItem modifier_mask_mode_items[] = {
{MOD_MASK_MODE_VGROUP, "VERTEX_GROUP", 0, "Vertex Group", ""},
{MOD_MASK_MODE_ARM, "ARMATURE", 0, "Armature", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MaskModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Mask Modifier", "Mask modifier to hide parts of the mesh");
@@ -2346,7 +2362,7 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ob_arm");
RNA_def_property_ui_text(prop, "Armature", "Armature to use as source of bones to mask");
RNA_def_property_pointer_funcs(prop, NULL, "rna_MaskModifier_armature_set", NULL, "rna_Armature_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -2372,7 +2388,8 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
{MOD_SIMPLEDEFORM_MODE_TAPER, "TAPER", 0, "Taper", "Linearly scale along Z axis of the modifier space"},
{MOD_SIMPLEDEFORM_MODE_STRETCH, "STRETCH", 0, "Stretch",
"Stretch the object along the Z axis of the modifier space"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SimpleDeformModifier", "Modifier");
RNA_def_struct_ui_text(srna, "SimpleDeform Modifier",
@@ -2394,7 +2411,7 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
prop = RNA_def_property(srna, "origin", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Origin", "Origin of modifier space coordinates");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
@@ -2543,7 +2560,8 @@ static void rna_def_modifier_screw(BlenderRNA *brna)
{0, "X", 0, "X Axis", ""},
{1, "Y", 0, "Y Axis", ""},
{2, "Z", 0, "Z Axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -2556,7 +2574,7 @@ static void rna_def_modifier_screw(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob_axis");
RNA_def_property_ui_text(prop, "Object", "Object to define the screw axis");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "steps", PROP_INT, PROP_UNSIGNED);
@@ -2584,7 +2602,7 @@ static void rna_def_modifier_screw(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
- RNA_def_property_ui_range(prop, 0, -M_PI*2, M_PI*2, 2);
+ RNA_def_property_ui_range(prop, 0, -M_PI * 2, M_PI * 2, 2);
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
RNA_def_property_ui_text(prop, "Angle", "Angle of revolution");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2609,10 +2627,17 @@ static void rna_def_modifier_screw(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object Screw", "Use the distance between the objects to make a screw");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- /*prop= RNA_def_property(srna, "use_angle_object", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SCREW_SMOOTH_SHADING);
+ RNA_def_property_ui_text(prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+#if 0
+ prop= RNA_def_property(srna, "use_angle_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SCREW_OBJECT_ANGLE);
RNA_def_property_ui_text(prop, "Object Angle", "Use the angle between the objects rather than the fixed angle");
- RNA_def_property_update(prop, 0, "rna_Modifier_update");*/
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+#endif
}
static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
@@ -2622,7 +2647,8 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
{MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", "Use global coordinates"},
{MOD_DISP_MAP_OBJECT, "OBJECT", 0, "Object", "Use local generated coordinates of another object"},
{MOD_DISP_MAP_UV, "UV", 0, "UV", "Use coordinates from an UV layer"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem weightvg_mask_tex_used_items[] = {
{MOD_WVG_MASK_TEX_USE_INT, "INT", 0, "Intensity", ""},
@@ -2633,7 +2659,8 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
{MOD_WVG_MASK_TEX_USE_SAT, "SAT", 0, "Saturation", ""},
{MOD_WVG_MASK_TEX_USE_VAL, "VAL", 0, "Value", ""},
{MOD_WVG_MASK_TEX_USE_ALPHA, "ALPHA", 0, "Alpha", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
PropertyRNA *prop;
@@ -2662,7 +2689,7 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
prop = RNA_def_property(srna, "mask_tex_mapping", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, weightvg_mask_tex_map_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "Which texture coordinates "
- "to use for mapping");
+ "to use for mapping");
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "mask_tex_uv_layer", PROP_STRING, PROP_NONE);
@@ -2674,8 +2701,8 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
prop = RNA_def_property(srna, "mask_tex_map_object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "mask_tex_map_obj");
RNA_def_property_ui_text(prop, "Texture Coordinate Object", "Which object to take texture "
- "coordinates from");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ "coordinates from");
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -2691,7 +2718,8 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
{MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
{MOD_WVG_MAPPING_STEP, "STEP", ICON_NOCURVE /* Would need a better icon... */, "Median Step",
"Map all values below 0.5 to 0.0, and all others to 1.0"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -2716,20 +2744,20 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_add", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "edit_flags", MOD_WVG_EDIT_ADD2VG);
RNA_def_property_ui_text(prop, "Group Add", "Add vertices with weight over threshold "
- "to vgroup");
+ "to vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "use_remove", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "edit_flags", MOD_WVG_EDIT_REMFVG);
RNA_def_property_ui_text(prop, "Group Remove", "Remove vertices with weight below threshold "
- "from vgroup");
+ "from vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0, 1.0f);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 0);
RNA_def_property_ui_text(prop, "Default Weight", "Default weight a vertex will have if "
- "it is not in the vgroup");
+ "it is not in the vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "map_curve", PROP_POINTER, PROP_NONE);
@@ -2742,7 +2770,7 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 0);
RNA_def_property_ui_text(prop, "Add Threshold", "Lower bound for a vertex's weight "
- "to be added to the vgroup");
+ "to be added to the vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "remove_threshold", PROP_FLOAT, PROP_NONE);
@@ -2750,7 +2778,7 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 0);
RNA_def_property_ui_text(prop, "Rem Threshold", "Upper bound for a vertex's weight "
- "to be removed from the vgroup");
+ "to be removed from the vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
/* Common masking properties. */
@@ -2767,7 +2795,8 @@ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
{MOD_WVG_MIX_DIV, "DIV", 0, "Divide", "Divide VGroup A's weights by VGroup B's ones"},
{MOD_WVG_MIX_DIF, "DIF", 0, "Difference", "Difference between VGroup A's and VGroup B's weigths"},
{MOD_WVG_MIX_AVG, "AVG", 0, "Average", "Average value of VGroup A's and VGroup B's weigths"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem weightvg_mix_set_items[] = {
{MOD_WVG_SET_ALL, "ALL", 0, "All", "Affect all vertices (might add some to VGroup A)"},
@@ -2776,7 +2805,8 @@ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
{MOD_WVG_SET_OR, "OR", 0, "VGroup A or B",
"Affect vertices in at least one of both VGroups (might add some to VGroup A)"},
{MOD_WVG_SET_AND, "AND", 0, "VGroup A and B", "Affect vertices in both groups"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -2803,20 +2833,20 @@ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0f);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 0);
RNA_def_property_ui_text(prop, "Default Weight A", "Default weight a vertex will have if "
- "it is not in the first A vgroup");
+ "it is not in the first A vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "default_weight_b", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0, 1.0f);
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 0);
RNA_def_property_ui_text(prop, "Default Weight B", "Default weight a vertex will have if "
- "it is not in the second B vgroup");
+ "it is not in the second B vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, weightvg_mix_modes_items);
RNA_def_property_ui_text(prop, "Mix Mode", "How weights from vgroup B affect weights "
- "of vgroup A");
+ "of vgroup A");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "mix_set", PROP_ENUM, PROP_NONE);
@@ -2836,13 +2866,15 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
{MOD_WVG_PROXIMITY_GEOMETRY, "GEOMETRY", 0, "Geometry Distance",
"Use distance between affected object's vertices and target "
"object, or target object's geometry"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem proximity_geometry_items[] = {
{MOD_WVG_PROXIMITY_GEOM_VERTS, "VERTEX", ICON_VERTEXSEL, "Vertex", "Compute distance to nearest vertex"},
{MOD_WVG_PROXIMITY_GEOM_EDGES, "EDGE", ICON_EDGESEL, "Edge", "Compute distance to nearest edge"},
{MOD_WVG_PROXIMITY_GEOM_FACES, "FACE", ICON_FACESEL, "Face", "Compute distance to nearest face"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem weightvg_proximity_falloff_type_items[] = {
{MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", "Null action"},
@@ -2854,7 +2886,8 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
{MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
{MOD_WVG_MAPPING_STEP, "STEP", ICON_NOCURVE /* Would need a better icon... */, "Median Step",
"Map all values below 0.5 to 0.0, and all others to 1.0"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -2891,7 +2924,7 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "proximity_ob_target");
RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices distances from");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "min_dist", PROP_FLOAT, PROP_DISTANCE);
@@ -2922,7 +2955,8 @@ static void rna_def_modifier_remesh(BlenderRNA *brna)
{MOD_REMESH_MASS_POINT, "SMOOTH", 0, "Smooth", "Output a smooth surface with no sharp-features detection"},
{MOD_REMESH_SHARP_FEATURES, "SHARP", 0, "Sharp",
"Output a surface that reproduces sharp edges and corners from the input mesh"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -2971,6 +3005,11 @@ static void rna_def_modifier_remesh(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_REMESH_FLOOD_FILL);
RNA_def_property_ui_text(prop, "Remove Disconnected Pieces", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_REMESH_SMOOTH_SHADING);
+ RNA_def_property_ui_text(prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
static void rna_def_modifier_ocean(BlenderRNA *brna)
@@ -2986,7 +3025,8 @@ static void rna_def_modifier_ocean(BlenderRNA *brna)
{MOD_OCEAN_GEOM_SIM_ONLY, "SIM_ONLY", 0, "Sim Only",
"Leaves geometry unchanged, but still runs simulation (to be used from texture)"},
#endif
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "OceanModifier", "Modifier");
RNA_def_struct_ui_text(srna, "Ocean Modifier", "Simulate an ocean surface");
@@ -3172,7 +3212,7 @@ void RNA_def_modifier(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Modifier_name_set");
RNA_def_property_ui_text(prop, "Name", "Modifier name");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER|NA_RENAME, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER | NA_RENAME, NULL);
RNA_def_struct_name_property(srna, prop);
/* enums */
@@ -3194,7 +3234,7 @@ void RNA_def_modifier(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Render);
RNA_def_property_ui_text(prop, "Render", "Use modifier during rendering");
RNA_def_property_ui_icon(prop, ICON_SCENE, 0);
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Editmode);
diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c
index 96da24b3392..2cbe6946485 100644
--- a/source/blender/makesrna/intern/rna_movieclip.c
+++ b/source/blender/makesrna/intern/rna_movieclip.c
@@ -52,7 +52,7 @@
static void rna_MovieClip_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip*)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->id.data;
BKE_movieclip_reload(clip);
DAG_id_tag_update(&clip->id, 0);
@@ -60,7 +60,7 @@ static void rna_MovieClip_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene
static void rna_MovieClip_size_get(PointerRNA *ptr, int *values)
{
- MovieClip *clip = (MovieClip*)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->id.data;
values[0] = clip->lastsize[0];
values[1] = clip->lastsize[1];
@@ -82,7 +82,8 @@ static void rna_def_movieclip_proxy(BlenderRNA *brna)
"written by recording device"},
{IMB_TC_RECORD_RUN_NO_GAPS, "FREE_RUN_NO_GAPS", 0, "Free Run No Gaps",
"Record run, but ignore timecode, changes in framerate or dropouts"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MovieClipProxy", NULL);
RNA_def_struct_ui_text(srna, "Movie Clip Proxy", "Proxy parameters for a movie clip");
@@ -158,14 +159,14 @@ static void rna_def_movieclip_proxy(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_items(prop, clip_tc_items);
RNA_def_property_ui_text(prop, "Timecode", "");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
/* directory */
prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "dir");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Directory", "Location to store the proxy files");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_MovieClip_reload_update");
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_MovieClip_reload_update");
}
static void rna_def_moviecliUser(BlenderRNA *brna)
@@ -179,7 +180,8 @@ static void rna_def_moviecliUser(BlenderRNA *brna)
{MCLIP_PROXY_RENDER_SIZE_75, "PROXY_75", 0, "Proxy size 75%", ""},
{MCLIP_PROXY_RENDER_SIZE_100, "PROXY_100", 0, "Proxy size 100%", ""},
{MCLIP_PROXY_RENDER_SIZE_FULL, "FULL", 0, "No proxy, full render", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MovieClipUser", NULL);
RNA_def_struct_ui_text(srna, "Movie Clip User",
@@ -197,13 +199,13 @@ static void rna_def_moviecliUser(BlenderRNA *brna)
RNA_def_property_enum_items(prop, clip_render_size_items);
RNA_def_property_ui_text(prop, "Proxy render size",
"Draw preview using full resolution or different proxy resolutions");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
/* render undistorted */
prop = RNA_def_property(srna, "use_render_undistorted", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "render_flag", MCLIP_PROXY_RENDER_UNDISTORT);
RNA_def_property_ui_text(prop, "Render Undistorted", "Render preview using undistorted proxy");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
}
static void rna_def_movieClipScopes(BlenderRNA *brna)
@@ -223,7 +225,8 @@ static void rna_def_movieclip(BlenderRNA *brna)
static EnumPropertyItem clip_source_items[] = {
{MCLIP_SRC_SEQUENCE, "SEQUENCE", 0, "Image Sequence", "Multiple image files, as a sequence"},
{MCLIP_SRC_MOVIE, "MOVIE", 0, "Movie File", "Movie file"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MovieClip", "ID");
RNA_def_struct_ui_text(srna, "MovieClip", "MovieClip datablock referencing an external movie file");
@@ -232,7 +235,7 @@ static void rna_def_movieclip(BlenderRNA *brna)
prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "File Path", "Filename of the movie or sequence file");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_MovieClip_reload_update");
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_MovieClip_reload_update");
prop = RNA_def_property(srna, "tracking", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "MovieTracking");
@@ -246,7 +249,7 @@ static void rna_def_movieclip(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Use Proxy / Timecode",
"Use a preview proxy and/or timecode index for this clip");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
prop = RNA_def_int_vector(srna, "size", 2, NULL, 0, 0, "Size",
"Width and height in pixels, zero when image data cant be loaded", 0, 0);
@@ -259,7 +262,7 @@ static void rna_def_movieclip(BlenderRNA *brna)
RNA_def_property_range(prop, 0.1f, 5000.0f);
RNA_def_property_ui_range(prop, 0.1f, 5000.0f, 1, 2);
RNA_def_property_ui_text(prop, "Display Aspect", "Display Aspect for this clip, does not affect rendering");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
/* source */
prop = RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
@@ -273,7 +276,7 @@ static void rna_def_movieclip(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Proxy Custom Directory",
"Create proxy images in a custom directory (default is movie location)");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_MovieClip_reload_update");
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_MovieClip_reload_update");
/* grease pencil */
prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c
index 7ad13b8a6d1..edfbf0f2efd 100644
--- a/source/blender/makesrna/intern/rna_nla.c
+++ b/source/blender/makesrna/intern/rna_nla.c
@@ -52,7 +52,7 @@
#include "ED_anim_api.h"
/* temp constant defined for these funcs only... */
-#define NLASTRIP_MIN_LEN_THRESH 0.1f
+#define NLASTRIP_MIN_LEN_THRESH 0.1f
static void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value)
{
@@ -94,14 +94,14 @@ static char *rna_NlaStrip_path(PointerRNA *ptr)
static void rna_NlaStrip_transform_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- NlaStrip *strip = (NlaStrip*)ptr->data;
+ NlaStrip *strip = (NlaStrip *)ptr->data;
BKE_nlameta_flush_transforms(strip);
}
static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
/* clamp value to lie within valid limits
* - cannot start past the end of the strip + some flexibility threshold
@@ -112,13 +112,13 @@ static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value)
*/
if (data->prev) {
if (data->prev->type == NLASTRIP_TYPE_TRANSITION) {
- CLAMP(value, data->prev->start+NLASTRIP_MIN_LEN_THRESH, data->end-NLASTRIP_MIN_LEN_THRESH);
+ CLAMP(value, data->prev->start + NLASTRIP_MIN_LEN_THRESH, data->end - NLASTRIP_MIN_LEN_THRESH);
/* readjust the transition to stick to the endpoints of the action-clips */
data->prev->end = value;
}
else {
- CLAMP(value, data->prev->end, data->end-NLASTRIP_MIN_LEN_THRESH);
+ CLAMP(value, data->prev->end, data->end - NLASTRIP_MIN_LEN_THRESH);
}
}
else {
@@ -129,7 +129,7 @@ static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_end_frame_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
/* clamp value to lie within valid limits
* - must not have zero or negative length strip, so cannot start before the first frame
@@ -140,17 +140,17 @@ static void rna_NlaStrip_end_frame_set(PointerRNA *ptr, float value)
*/
if (data->next) {
if (data->next->type == NLASTRIP_TYPE_TRANSITION) {
- CLAMP(value, data->start+NLASTRIP_MIN_LEN_THRESH, data->next->end-NLASTRIP_MIN_LEN_THRESH);
+ CLAMP(value, data->start + NLASTRIP_MIN_LEN_THRESH, data->next->end - NLASTRIP_MIN_LEN_THRESH);
/* readjust the transition to stick to the endpoints of the action-clips */
data->next->start = value;
}
else {
- CLAMP(value, data->start+NLASTRIP_MIN_LEN_THRESH, data->next->start);
+ CLAMP(value, data->start + NLASTRIP_MIN_LEN_THRESH, data->next->start);
}
}
else {
- CLAMP(value, data->start+NLASTRIP_MIN_LEN_THRESH, MAXFRAME);
+ CLAMP(value, data->start + NLASTRIP_MIN_LEN_THRESH, MAXFRAME);
}
data->end = value;
@@ -170,10 +170,10 @@ static void rna_NlaStrip_end_frame_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_scale_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
/* set scale value */
- /* NOTE: these need to be synced with the values in the property definition in rna_def_nlastrip() */
+ /* NOTE: these need to be synced with the values in the property definition in rna_def_nlastrip() */
CLAMP(value, 0.0001f, 1000.0f);
data->scale = value;
@@ -183,10 +183,10 @@ static void rna_NlaStrip_scale_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_repeat_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
/* set repeat value */
- /* NOTE: these need to be synced with the values in the property definition in rna_def_nlastrip() */
+ /* NOTE: these need to be synced with the values in the property definition in rna_def_nlastrip() */
CLAMP(value, 0.01f, 1000.0f);
data->repeat = value;
@@ -196,7 +196,7 @@ static void rna_NlaStrip_repeat_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_blend_in_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
float len;
/* blend-in is limited to the length of the strip, and also cannot overlap with blendout */
@@ -208,7 +208,7 @@ static void rna_NlaStrip_blend_in_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_blend_out_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
float len;
/* blend-out is limited to the length of the strip */
@@ -247,7 +247,7 @@ static int rna_NlaStrip_action_editable(PointerRNA *ptr)
static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
/* prevent start frame from occurring after end of action */
CLAMP(value, MINAFRAME, data->actend);
@@ -260,7 +260,7 @@ static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_action_end_frame_set(PointerRNA *ptr, float value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
/* prevent end frame from starting before start of action */
CLAMP(value, data->actstart, MAXFRAME);
@@ -272,7 +272,7 @@ static void rna_NlaStrip_action_end_frame_set(PointerRNA *ptr, float value)
static void rna_NlaStrip_animated_influence_set(PointerRNA *ptr, int value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
if (value) {
/* set the flag, then make sure a curve for this exists */
@@ -285,7 +285,7 @@ static void rna_NlaStrip_animated_influence_set(PointerRNA *ptr, int value)
static void rna_NlaStrip_animated_time_set(PointerRNA *ptr, int value)
{
- NlaStrip *data = (NlaStrip*)ptr->data;
+ NlaStrip *data = (NlaStrip *)ptr->data;
if (value) {
/* set the flag, then make sure a curve for this exists */
@@ -318,7 +318,7 @@ static NlaStrip *rna_NlaStrip_new(NlaTrack *track, bContext *C, ReportList *repo
/* create dummy AnimData block so that BKE_nlastrip_validate_name()
* can be used to ensure a valid name, as we don't have one here...
- * - only the nla_tracks list is needed there, which we aim to reverse engineer here...
+ * - only the nla_tracks list is needed there, which we aim to reverse engineer here...
*/
{
AnimData adt = {NULL};
@@ -340,7 +340,7 @@ static NlaStrip *rna_NlaStrip_new(NlaTrack *track, bContext *C, ReportList *repo
BKE_nlastrip_validate_name(&adt, strip);
}
- WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_ADDED, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_ADDED, NULL);
return strip;
}
@@ -353,7 +353,7 @@ static void rna_NlaStrip_remove(NlaTrack *track, bContext *C, ReportList *report
}
else {
free_nlastrip(&track->strips, strip);
- WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_REMOVED, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_REMOVED, NULL);
}
}
@@ -374,20 +374,22 @@ EnumPropertyItem nla_mode_extend_items[] = {
{NLASTRIP_EXTEND_HOLD, "HOLD", 0, "Hold",
"Hold the first frame if no previous strips in track, and always hold last frame"},
{NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static void rna_def_nlastrip(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
- /* enum defs */
+ /* enum defs */
static EnumPropertyItem prop_type_items[] = {
{NLASTRIP_TYPE_CLIP, "CLIP", 0, "Action Clip", "NLA Strip references some Action"},
{NLASTRIP_TYPE_TRANSITION, "TRANSITION", 0, "Transition", "NLA Strip 'transitions' between adjacent strips"},
{NLASTRIP_TYPE_META, "META", 0, "Meta", "NLA Strip acts as a container for adjacent strips"},
{NLASTRIP_TYPE_SOUND, "SOUND", 0, "Sound Clip", "NLA Strip representing a sound event for speakers"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* struct definition */
srna = RNA_def_struct(brna, "NlaStrip", NULL);
@@ -400,7 +402,7 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Name", "");
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_NlaStrip_name_set");
RNA_def_struct_name_property(srna, prop);
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Enums */
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
@@ -408,19 +410,19 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* XXX for now, not editable, since this is dangerous */
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Type", "Type of NLA Strip");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "extendmode");
RNA_def_property_enum_items(prop, nla_mode_extend_items);
RNA_def_property_ui_text(prop, "Extrapolation", "Action to take for gaps past the strip extents");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "blendmode");
RNA_def_property_enum_items(prop, nla_mode_blend_items);
RNA_def_property_ui_text(prop, "Blending", "Method used for combining strip's result with accumulated result");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Strip extents */
prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
@@ -440,61 +442,61 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "blendin");
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_blend_in_set", NULL);
RNA_def_property_ui_text(prop, "Blend In", "Number of frames at start of strip to fade in influence");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "blend_out", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "blendout");
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_blend_out_set", NULL);
RNA_def_property_ui_text(prop, "Blend Out", "");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "use_auto_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_AUTO_BLENDS);
RNA_def_property_ui_text(prop, "Auto Blend In/Out",
"Number of frames for Blending In/Out is automatically determined from "
"overlapping strips");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Action */
prop = RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "act");
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Action_id_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_REFCOUNT);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
RNA_def_property_editable_func(prop, "rna_NlaStrip_action_editable");
RNA_def_property_ui_text(prop, "Action", "Action referenced by this strip");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Action extents */
prop = RNA_def_property(srna, "action_frame_start", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "actstart");
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_action_start_frame_set", NULL);
RNA_def_property_ui_text(prop, "Action Start Frame", "");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "action_frame_end", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "actend");
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_action_end_frame_set", NULL);
RNA_def_property_ui_text(prop, "Action End Frame", "");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Action Reuse */
prop = RNA_def_property(srna, "repeat", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "repeat");
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_repeat_set", NULL);
- /* these limits have currently be chosen arbitarily, but could be extended
- * (minimum should still be > 0 though) if needed... */
+ /* these limits have currently be chosen arbitarily, but could be extended
+ * (minimum should still be > 0 though) if needed... */
RNA_def_property_range(prop, 0.1f, 1000.0f);
RNA_def_property_ui_text(prop, "Repeat", "Number of times to repeat the action range");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "scale");
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_scale_set", NULL);
- /* these limits can be extended, but beyond this, we can get some crazy+annoying bugs
- * due to numeric errors */
+ /* these limits can be extended, but beyond this, we can get some crazy+annoying bugs
+ * due to numeric errors */
RNA_def_property_range(prop, 0.0001f, 1000.0f);
RNA_def_property_ui_text(prop, "Scale", "Scaling factor for action");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* Strip's F-Curves */
prop = RNA_def_property(srna, "fcurves", PROP_COLLECTION, PROP_NONE);
@@ -516,26 +518,26 @@ static void rna_def_nlastrip(BlenderRNA *brna)
prop = RNA_def_property(srna, "influence", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Influence", "Amount the strip contributes to the current result");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "strip_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_ui_text(prop, "Strip Time", "Frame of referenced Action to evaluate");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
- /* TODO: should the animated_influence/time settings be animatable themselves? */
+ /* TODO: should the animated_influence/time settings be animatable themselves? */
prop = RNA_def_property(srna, "use_animated_influence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_INFLUENCE);
RNA_def_property_boolean_funcs(prop, NULL, "rna_NlaStrip_animated_influence_set");
RNA_def_property_ui_text(prop, "Animated Influence",
"Influence setting is controlled by an F-Curve rather than automatically determined");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "use_animated_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_TIME);
RNA_def_property_boolean_funcs(prop, NULL, "rna_NlaStrip_animated_time_set");
RNA_def_property_ui_text(prop, "Animated Strip Time",
"Strip time is controlled by an F-Curve rather than automatically determined");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "use_animated_time_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_TIME_CYCLIC);
@@ -544,28 +546,28 @@ static void rna_def_nlastrip(BlenderRNA *brna)
/* settings */
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
- /* can be made editable by hooking it up to the necessary NLA API methods */
+ /* can be made editable by hooking it up to the necessary NLA API methods */
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "NLA Strip is active");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_SELECT);
RNA_def_property_ui_text(prop, "Select", "NLA Strip is selected");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_MUTED);
RNA_def_property_ui_text(prop, "Muted", "NLA Strip is not evaluated");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "use_reverse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_REVERSE);
RNA_def_property_ui_text(prop, "Reversed",
"NLA Strip is played back in reverse order (only when timing is "
"automatically determined)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* TODO: */
/* - sync length */
@@ -583,7 +585,7 @@ static void rna_api_nlatrack_strips(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_ui_text(srna, "Nla Strips", "Collection of Nla Strips");
func = RNA_def_function(srna, "new", "rna_NlaStrip_new");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Add a new Action-Clip strip to the track");
parm = RNA_def_string(func, "name", "NlaStrip", 0, "", "Name for the NLA Strips");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -591,16 +593,16 @@ static void rna_api_nlatrack_strips(BlenderRNA *brna, PropertyRNA *cprop)
"Start frame for this strip", INT_MIN, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_pointer(func, "action", "Action", "", "Action to assign to this strip");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* return type */
parm = RNA_def_pointer(func, "strip", "NlaStrip", "", "New NLA Strip");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "remove", "rna_NlaStrip_remove");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a NLA Strip");
parm = RNA_def_pointer(func, "strip", "NlaStrip", "", "NLA Strip to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_nlatrack(BlenderRNA *brna)
@@ -623,39 +625,39 @@ static void rna_def_nlatrack(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "");
RNA_def_struct_name_property(srna, prop);
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
/* settings */
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
- /* can be made editable by hooking it up to the necessary NLA API methods */
+ /* can be made editable by hooking it up to the necessary NLA API methods */
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "NLA Track is active");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "is_solo", PROP_BOOLEAN, PROP_NONE);
- /* can be made editable by hooking it up to the necessary NLA API methods */
+ /* can be made editable by hooking it up to the necessary NLA API methods */
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_SOLO);
RNA_def_property_ui_text(prop, "Solo",
"NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the "
"same AnimData block are disabled)");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_SELECTED);
RNA_def_property_ui_text(prop, "Select", "NLA Track is selected");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_MUTED);
RNA_def_property_ui_text(prop, "Muted", "NLA Track is not evaluated");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_PROTECTED);
RNA_def_property_ui_text(prop, "Locked", "NLA Track is locked");
- RNA_def_property_update(prop, NC_ANIMATION|ND_NLA, NULL); /* this will do? */
+ RNA_def_property_update(prop, NC_ANIMATION | ND_NLA, NULL); /* this will do? */
}
/* --------- */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index bb1c50d8c13..9dcdce61cea 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -64,6 +64,11 @@ EnumPropertyItem nodetree_type_items[] = {
{0, NULL, 0, NULL, NULL}
};
+EnumPropertyItem node_quality_items[] = {
+ {NTREE_QUALITY_HIGH, "HIGH", 0, "High", "High quality"},
+ {NTREE_QUALITY_MEDIUM, "MEDIUM", 0, "Medium", "Medium quality"},
+ {NTREE_QUALITY_LOW, "LOW", 0, "Low", "Low quality"},
+ {0, NULL, 0, NULL, NULL}};
EnumPropertyItem node_socket_type_items[] = {
{SOCK_FLOAT, "VALUE", 0, "Value", ""},
@@ -487,6 +492,18 @@ static void rna_NodeSocketVector_range(PointerRNA *ptr, float *min, float *max,
*softmax = val->max;
}
+static void rna_Node_image_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ bNode *node = (bNode*)ptr->data;
+ Image *ima = (Image *)node->id;
+ ImageUser *iuser = node->storage;
+
+ BKE_image_multilayer_index(ima->rr, iuser);
+ BKE_image_signal(ima, iuser, IMA_SIGNAL_SRC_CHANGE);
+
+ rna_Node_update(bmain, scene, ptr);
+}
+
static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl)
{
EnumPropertyItem *item = NULL;
@@ -495,7 +512,11 @@ static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl)
while (rl) {
tmp.identifier = rl->name;
- tmp.name = rl->name;
+ /* little trick: using space char instead empty string makes the item selectable in the dropdown */
+ if (rl->name[0] == '\0')
+ tmp.name = " ";
+ else
+ tmp.name = rl->name;
tmp.value = i++;
RNA_enum_item_add(&item, &totitem, &tmp);
rl = rl->next;
@@ -506,6 +527,24 @@ static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl)
return item;
}
+static EnumPropertyItem *rna_Node_image_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+ PropertyRNA *UNUSED(prop), int *free)
+{
+ bNode *node = (bNode*)ptr->data;
+ Image *ima = (Image *)node->id;
+ EnumPropertyItem *item = NULL;
+ RenderLayer *rl;
+
+ if (!ima || !(ima->rr)) return NULL;
+
+ rl = ima->rr->layers.first;
+ item = renderresult_layers_add_enum(rl);
+
+ *free = 1;
+
+ return item;
+}
+
static EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
@@ -833,7 +872,7 @@ static PointerRNA rna_NodeOutputFile_slot_file_get(CollectionPropertyIterator *i
{
PointerRNA ptr;
bNodeSocket *sock = rna_iterator_listbase_get(iter);
- RNA_pointer_create(iter->ptr.id.data, &RNA_NodeOutputFileSlotFile, sock->storage, &ptr);
+ RNA_pointer_create(iter->parent.id.data, &RNA_NodeOutputFileSlotFile, sock->storage, &ptr);
return ptr;
}
@@ -841,7 +880,7 @@ static PointerRNA rna_NodeOutputFile_slot_layer_get(CollectionPropertyIterator *
{
PointerRNA ptr;
bNodeSocket *sock = rna_iterator_listbase_get(iter);
- RNA_pointer_create(iter->ptr.id.data, &RNA_NodeOutputFileSlotLayer, sock->storage, &ptr);
+ RNA_pointer_create(iter->parent.id.data, &RNA_NodeOutputFileSlotLayer, sock->storage, &ptr);
return ptr;
}
@@ -892,6 +931,10 @@ static void rna_NodeOutputFileSlotLayer_name_set(PointerRNA *ptr, const char *va
#else
+static EnumPropertyItem prop_image_layer_items[] = {
+{ 0, "PLACEHOLDER", 0, "Placeholder", ""},
+{0, NULL, 0, NULL, NULL}};
+
static EnumPropertyItem prop_scene_layer_items[] = {
{ 0, "PLACEHOLDER", 0, "Placeholder", ""},
{0, NULL, 0, NULL, NULL}};
@@ -1811,6 +1854,13 @@ static void def_cmp_image(StructRNA *srna)
/* copied from the rna_image.c */
RNA_def_property_ui_text(prop, "Auto-Refresh", "Always refresh image on frame changes");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "layer", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "layer");
+ RNA_def_property_enum_items(prop, prop_image_layer_items);
+ RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_image_layer_itemf");
+ RNA_def_property_ui_text(prop, "Layer", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_image_layer_update");
}
static void def_cmp_render_layers(StructRNA *srna)
@@ -2931,6 +2981,373 @@ static void dev_cmd_transform(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
}
+/* -- Compositor Nodes ------------------------------------------------------ */
+
+EnumPropertyItem node_masktype_items[] = {
+{0, "ADD", 0, "Add", ""},
+{1, "SUBTRACT", 0, "Subtract", ""},
+{2, "MULTIPLY", 0, "Multiply", ""},
+{3, "NOT", 0, "Not", ""},
+{0, NULL, 0, NULL, NULL}};
+
+static void def_cmp_boxmask(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ prop = RNA_def_property(srna, "mask_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "custom1");
+ RNA_def_property_enum_items(prop, node_masktype_items);
+ RNA_def_property_ui_text(prop, "Mask type", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ RNA_def_struct_sdna_from(srna, "NodeBoxMask", "storage");
+
+ prop = RNA_def_property(srna, "x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "x");
+ RNA_def_property_float_default(prop, 0.5f);
+ RNA_def_property_range(prop, -1.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "X position", "X position of the middle of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "y");
+ RNA_def_property_float_default(prop, 0.5f);
+ RNA_def_property_range(prop, -1.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "Y position", "Y position of the middle of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "width", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "width");
+ RNA_def_property_float_default(prop, 0.3f);
+ RNA_def_property_range(prop, 0.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "Width of the box", "Width of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "height");
+ RNA_def_property_float_default(prop, 0.2f);
+ RNA_def_property_range(prop, 0.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "Height of the box", "Height of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rotation");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1000.0f, 1000.0f);
+ RNA_def_property_ui_text(prop, "Rotation", "Rotationangle of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
+static void def_cmp_ellipsemask(StructRNA *srna)
+{
+ PropertyRNA *prop;
+ prop = RNA_def_property(srna, "mask_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "custom1");
+ RNA_def_property_enum_items(prop, node_masktype_items);
+ RNA_def_property_ui_text(prop, "Mask type", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ RNA_def_struct_sdna_from(srna, "NodeEllipseMask", "storage");
+
+ prop = RNA_def_property(srna, "x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "x");
+ RNA_def_property_float_default(prop, 0.5f);
+ RNA_def_property_range(prop, -1.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "X position", "X position of the middle of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "y");
+ RNA_def_property_float_default(prop, 0.5f);
+ RNA_def_property_range(prop, -1.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "Y position", "Y position of the middle of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "width", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "width");
+ RNA_def_property_float_default(prop, 0.3f);
+ RNA_def_property_range(prop, 0.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "Width of the box", "Width of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "height");
+ RNA_def_property_float_default(prop, 0.2f);
+ RNA_def_property_range(prop, 0.0f, 2.0f);
+ RNA_def_property_ui_text(prop, "Height of the box", "Height of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rotation");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1000.0f, 1000.0f);
+ RNA_def_property_ui_text(prop, "Rotation", "Rotationangle of the box");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
+static void def_cmp_bokehimage(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ RNA_def_struct_sdna_from(srna, "NodeBokehImage", "storage");
+
+ prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "angle");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -0.0f, 360.0f);
+ RNA_def_property_ui_text(prop, "Angle", "Angle of the bokeh");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "flaps", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "flaps");
+ RNA_def_property_int_default(prop, 5);
+ RNA_def_property_range(prop, 3, 24);
+ RNA_def_property_ui_text(prop, "Flaps", "Number of flaps");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rounding", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rounding");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Rounding", "Level of rounding of the bokeh");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "catadioptric", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "catadioptric");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Catadioptric", "Level of catadioptric of the bokeh");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "shift", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "lensshift");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Lens shift", "Shift of the lens.");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+}
+
+static void def_cmp_switch(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ prop = RNA_def_property(srna, "check", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "custom1", 0);
+ RNA_def_property_ui_text(prop, "Switch", "Off: first socket, On: second socket");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
+static void def_cmp_colorcorrection(StructRNA *srna)
+{
+ PropertyRNA *prop;
+ prop = RNA_def_property(srna, "red", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
+ RNA_def_property_boolean_default(prop, TRUE);
+ RNA_def_property_ui_text(prop, "Red", "Red channel active");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "green", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "custom1", 2);
+ RNA_def_property_boolean_default(prop, TRUE);
+ RNA_def_property_ui_text(prop, "Green", "Green channel active");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "blue", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "custom1", 4);
+ RNA_def_property_boolean_default(prop, TRUE);
+ RNA_def_property_ui_text(prop, "Blue", "Blue channel active");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ RNA_def_struct_sdna_from(srna, "NodeColorCorrection", "storage");
+
+ prop = RNA_def_property(srna, "midtones_start", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "startmidtones");
+ RNA_def_property_float_default(prop, 0.2f);
+ RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_ui_text(prop, "Start of midtones", "Start of midtones");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "midtones_end", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "endmidtones");
+ RNA_def_property_float_default(prop, 0.7f);
+ RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_ui_text(prop, "End of midtones", "end of midtones");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "master_saturation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "master.saturation");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Master saturation", "Master saturation");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "master_contrast", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "master.contrast");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Master contrast", "Master contrast");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "master_gamma", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "master.gamma");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Master gamma", "Master gamma");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "master_gain", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "master.gain");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Master gain", "Master gain");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "master_lift", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "master.lift");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1, 1);
+ RNA_def_property_ui_text(prop, "Master lift", "Master lift");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+//
+ prop = RNA_def_property(srna, "shadows_saturation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "shadows.saturation");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Shadows saturation", "Shadows saturation");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "shadows_contrast", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "shadows.contrast");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Shadows contrast", "Shadows contrast");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "shadows_gamma", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "shadows.gamma");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Shadows gamma", "Shadows gamma");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "shadows_gain", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "shadows.gain");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Shadows gain", "Shadows gain");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "shadows_lift", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "shadows.lift");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1, 1);
+ RNA_def_property_ui_text(prop, "Shadows lift", "Shadows lift");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+//
+ prop = RNA_def_property(srna, "midtones_saturation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "midtones.saturation");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Midtones saturation", "Midtones saturation");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "midtones_contrast", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "midtones.contrast");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Midtones contrast", "Midtones contrast");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "midtones_gamma", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "midtones.gamma");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Midtones gamma", "Midtones gamma");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "midtones_gain", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "midtones.gain");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Midtones gain", "Midtones gain");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "midtones_lift", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "midtones.lift");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1, 1);
+ RNA_def_property_ui_text(prop, "Midtones lift", "Midtones lift");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+//
+ prop = RNA_def_property(srna, "highlights_saturation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "highlights.saturation");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Highlights saturation", "Highlights saturation");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "highlights_contrast", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "highlights.contrast");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Highlights contrast", "Highlights contrast");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "highlights_gamma", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "highlights.gamma");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Highlights gamma", "Highlights gamma");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "highlights_gain", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "highlights.gain");
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_range(prop, 0, 4);
+ RNA_def_property_ui_text(prop, "Highlights gain", "Highlights gain");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "highlights_lift", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "highlights.lift");
+ RNA_def_property_float_default(prop, 0.0f);
+ RNA_def_property_range(prop, -1, 1);
+ RNA_def_property_ui_text(prop, "Highlights lift", "Highlights lift");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
+static void def_cmp_viewer(StructRNA *srna)
+{
+ PropertyRNA *prop;
+ static EnumPropertyItem tileorder_items[] = {
+ {0, "CENTEROUT", 0, "Center", "Expand from center"},
+ {1, "RANDOM", 0, "Random", "Random tiles"},
+ {2, "BOTTOMUP", 0, "Bottom up", "Expand from bottom"},
+ {3, "RULE_OF_THIRDS", 0, "Rule of thirds", "Expand from 9 places"},
+ {0, NULL, 0, NULL, NULL}};
+
+ prop = RNA_def_property(srna, "tile_order", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "custom1");
+ RNA_def_property_enum_items(prop, tileorder_items);
+ RNA_def_property_ui_text(prop, "Tile order", "tile order");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "center_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "custom3");
+ RNA_def_property_float_default(prop, 0.5f);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "X", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "center_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "custom4");
+ RNA_def_property_float_default(prop, 0.5f);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Y", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
/* -- Texture Nodes --------------------------------------------------------- */
@@ -3488,6 +3905,25 @@ static void rna_def_composite_nodetree(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Node");
RNA_def_property_ui_text(prop, "Nodes", "");
+ prop= RNA_def_property(srna, "render_quality", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "render_quality");
+ RNA_def_property_enum_items(prop, node_quality_items);
+ RNA_def_property_ui_text(prop, "Render quality", "Quality when rendering");
+
+ prop= RNA_def_property(srna, "edit_quality", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "edit_quality");
+ RNA_def_property_enum_items(prop, node_quality_items);
+ RNA_def_property_ui_text(prop, "Edit quality", "Quality when editing");
+
+ prop= RNA_def_property(srna, "chunksize", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "chunksize");
+ RNA_def_property_ui_text(prop, "Chunksize", "Max size of a chunk during calculation");
+ RNA_def_property_range(prop, 32, 1024);
+
+ prop= RNA_def_property(srna, "use_opencl", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", NTREE_COM_OPENCL);
+ RNA_def_property_ui_text(prop, "OpenCL", "Enable GPU calculations");
+
rna_def_composite_nodetree_api(brna, prop);
}
diff --git a/source/blender/makesrna/intern/rna_nodetree_types.h b/source/blender/makesrna/intern/rna_nodetree_types.h
index d7e55ae27df..2da06d5dea7 100644
--- a/source/blender/makesrna/intern/rna_nodetree_types.h
+++ b/source/blender/makesrna/intern/rna_nodetree_types.h
@@ -91,7 +91,7 @@ DefNode( ShaderNode, SH_NODE_TEX_VORONOI, def_sh_tex_voronoi, "TE
DefNode( ShaderNode, SH_NODE_TEX_CHECKER, def_sh_tex_checker, "TEX_CHECKER", TexChecker, "Checker Texture", "" )
DefNode( ShaderNode, SH_NODE_TEX_COORD, 0, "TEX_COORD", TexCoord, "Texture Coordinate","")
-DefNode( CompositorNode, CMP_NODE_VIEWER, 0, "VIEWER", Viewer, "Viewer", "" )
+DefNode( CompositorNode, CMP_NODE_VIEWER, def_cmp_viewer, "VIEWER", Viewer, "Viewer", "" )
DefNode( CompositorNode, CMP_NODE_RGB, 0, "RGB", RGB, "RGB", "" )
DefNode( CompositorNode, CMP_NODE_VALUE, 0, "VALUE", Value, "Value", "" )
DefNode( CompositorNode, CMP_NODE_MIX_RGB, def_mix_rgb, "MIX_RGB", MixRGB, "Mix RGB", "" )
@@ -159,6 +159,11 @@ DefNode( CompositorNode, CMP_NODE_MOVIECLIP, def_cmp_movieclip, "MOVIE
DefNode( CompositorNode, CMP_NODE_TRANSFORM, dev_cmd_transform, "TRANSFORM", Transform, "Transform", "" )
DefNode( CompositorNode, CMP_NODE_STABILIZE2D, def_cmp_stabilize2d, "STABILIZE2D", Stabilize, "Stabilize 2D", "" )
DefNode( CompositorNode, CMP_NODE_MOVIEDISTORTION,def_cmp_moviedistortion,"MOVIEDISTORTION",MovieDistortion, "Movie Distortion", "" )
+DefNode( CompositorNode, CMP_NODE_MASK_BOX, def_cmp_boxmask, "BOXMASK" ,BoxMask, "Box mask", "" )
+DefNode( CompositorNode, CMP_NODE_MASK_ELLIPSE, def_cmp_ellipsemask, "ELLIPSEMASK" ,EllipseMask, "Ellipse mask", "" )
+DefNode( CompositorNode, CMP_NODE_BOKEHIMAGE, def_cmp_bokehimage, "BOKEHIMAGE" ,BokehImage, "Bokeh image", "" )
+DefNode( CompositorNode, CMP_NODE_SWITCH, def_cmp_switch, "SWITCH" ,Switch, "Switch", "" )
+DefNode( CompositorNode, CMP_NODE_COLORCORRECTION,def_cmp_colorcorrection,"COLORCORRECTION",ColorCorrection, "ColorCorrection", "" )
DefNode( TextureNode, TEX_NODE_OUTPUT, def_tex_output, "OUTPUT", Output, "Output", "" )
DefNode( TextureNode, TEX_NODE_CHECKER, 0, "CHECKER", Checker, "Checker", "" )
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 2472e7613ad..21c9187cbb8 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -66,7 +66,8 @@ EnumPropertyItem object_mode_items[] = {
{OB_MODE_TEXTURE_PAINT, "TEXTURE_PAINT", ICON_TPAINT_HLT, "Texture Paint", ""},
{OB_MODE_PARTICLE_EDIT, "PARTICLE_EDIT", ICON_PARTICLEMODE, "Particle Edit", ""},
{OB_MODE_POSE, "POSE", ICON_POSE_HLT, "Pose", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem parent_type_items[] = {
{PAROBJECT, "OBJECT", 0, "Object", "The object is parented to an object"},
@@ -77,7 +78,8 @@ static EnumPropertyItem parent_type_items[] = {
{PARVERT1, "VERTEX", 0, "Vertex", "The object is parented to a vertex"},
{PARVERT3, "VERTEX_3", 0, "3 Vertices", ""},
{PARBONE, "BONE", 0, "Bone", "The object is parented to a bone"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem collision_bounds_items[] = {
{OB_BOUND_BOX, "BOX", 0, "Box", ""},
@@ -88,7 +90,8 @@ static EnumPropertyItem collision_bounds_items[] = {
{OB_BOUND_TRIANGLE_MESH, "TRIANGLE_MESH", 0, "Triangle Mesh", ""},
{OB_BOUND_CAPSULE, "CAPSULE", 0, "Capsule", ""},
/*{OB_DYN_MESH, "DYNAMIC_MESH", 0, "Dynamic Mesh", ""}, */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem metaelem_type_items[] = {
{MB_BALL, "BALL", ICON_META_BALL, "Ball", ""},
@@ -96,7 +99,8 @@ EnumPropertyItem metaelem_type_items[] = {
{MB_PLANE, "PLANE", ICON_META_PLANE, "Plane", ""},
{MB_ELIPSOID, "ELLIPSOID", ICON_META_ELLIPSOID, "Ellipsoid", ""}, /* NOTE: typo at original definition! */
{MB_CUBE, "CUBE", ICON_META_CUBE, "Cube", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
/* used for 2 enums */
#define OBTYPE_CU_CURVE {OB_CURVE, "CURVE", 0, "Curve", ""}
@@ -117,13 +121,15 @@ EnumPropertyItem object_type_items[] = {
{OB_CAMERA, "CAMERA", 0, "Camera", ""},
{OB_LAMP, "LAMP", 0, "Lamp", ""},
{OB_SPEAKER, "SPEAKER", 0, "Speaker", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem object_type_curve_items[] = {
OBTYPE_CU_CURVE,
OBTYPE_CU_SURF,
OBTYPE_CU_FONT,
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -217,7 +223,7 @@ static void rna_Object_matrix_basis_set(PointerRNA *ptr, const float values[16])
void rna_Object_internal_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->id.data);
}
void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -230,8 +236,8 @@ void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
case OB_MESH:
EDBM_mesh_load(ob);
EDBM_mesh_make(scene->toolsettings, scene, ob);
- EDBM_mesh_normals_update(((Mesh*)ob->data)->edit_btmesh);
- BMEdit_RecalcTessellation(((Mesh*)ob->data)->edit_btmesh);
+ EDBM_mesh_normals_update(((Mesh *)ob->data)->edit_btmesh);
+ BMEdit_RecalcTessellation(((Mesh *)ob->data)->edit_btmesh);
break;
case OB_CURVE:
case OB_SURF:
@@ -254,14 +260,14 @@ static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *
if (scene) {
DAG_scene_sort(bmain, scene);
}
- WM_main_add_notifier(NC_OBJECT|ND_PARENT, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->id.data);
}
/* when changing the selection flag the scene needs updating */
static void rna_Object_select_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
if (scene) {
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
short mode = ob->flag & SELECT ? BA_SELECT : BA_DESELECT;
ED_base_object_select(BKE_scene_base_find(scene, ob), mode);
}
@@ -269,7 +275,7 @@ static void rna_Object_select_update(Main *UNUSED(bmain), Scene *scene, PointerR
static void rna_Base_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Base *base = (Base*)ptr->data;
+ Base *base = (Base *)ptr->data;
short mode = base->flag & BA_SELECT ? BA_SELECT : BA_DESELECT;
ED_base_object_select(base, mode);
}
@@ -281,7 +287,7 @@ static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *b
/* pass - unlikely but when running scripts on startup it happens */
}
else if ((ob->lay & scene->lay) && (base->lay & scene->lay)) {
- /* pass */
+ /* pass */
}
else if ((ob->lay & scene->lay) == 0 && (base->lay & scene->lay) == 0) {
/* pass */
@@ -295,7 +301,7 @@ static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *b
static void rna_Object_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Base *base;
base = scene ? BKE_scene_base_find(scene, ob) : NULL;
@@ -307,23 +313,23 @@ static void rna_Object_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
rna_Object_layer_update__internal(bmain, scene, base, ob);
ob->lay = base->lay;
- WM_main_add_notifier(NC_SCENE|ND_LAYER_CONTENT, scene);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER_CONTENT, scene);
}
static void rna_Base_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Base *base = (Base*)ptr->data;
- Object *ob = (Object*)base->object;
+ Base *base = (Base *)ptr->data;
+ Object *ob = (Object *)base->object;
rna_Object_layer_update__internal(bmain, scene, base, ob);
ob->lay = base->lay;
- WM_main_add_notifier(NC_SCENE|ND_LAYER_CONTENT, scene);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER_CONTENT, scene);
}
static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
ID *id = value.data;
if (id == NULL || ob->mode & OB_MODE_EDIT)
@@ -331,7 +337,7 @@ static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
if (ob->type == OB_EMPTY) {
if (ob->data) {
- id_us_min((ID*)ob->data);
+ id_us_min((ID *)ob->data);
ob->data = NULL;
}
@@ -341,11 +347,11 @@ static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
}
}
else if (ob->type == OB_MESH) {
- set_mesh(ob, (Mesh*)id);
+ set_mesh(ob, (Mesh *)id);
}
else {
if (ob->data)
- id_us_min((ID*)ob->data);
+ id_us_min((ID *)ob->data);
if (id)
id_us_plus(id);
@@ -361,7 +367,7 @@ static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
static StructRNA *rna_Object_data_typef(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
switch (ob->type) {
case OB_EMPTY: return &RNA_Image;
@@ -381,8 +387,8 @@ static StructRNA *rna_Object_data_typef(PointerRNA *ptr)
static void rna_Object_parent_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->data;
- Object *par = (Object*)value.data;
+ Object *ob = (Object *)ptr->data;
+ Object *par = (Object *)value.data;
#ifdef FREE_WINDOWS
/* NOTE: this dummy check here prevents this method causing weird runtime errors on mingw 4.6.2 */
@@ -395,7 +401,7 @@ static void rna_Object_parent_set(PointerRNA *ptr, PointerRNA value)
static void rna_Object_parent_type_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
ED_object_parent(ob, ob->parent, value, ob->parsubstr);
}
@@ -403,7 +409,7 @@ static void rna_Object_parent_type_set(PointerRNA *ptr, int value)
static EnumPropertyItem *rna_Object_parent_type_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
EnumPropertyItem *item = NULL;
int totitem = 0;
@@ -437,7 +443,7 @@ static EnumPropertyItem *rna_Object_parent_type_itemf(bContext *UNUSED(C), Point
static EnumPropertyItem *rna_Object_collision_bounds_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
EnumPropertyItem *item = NULL;
int totitem = 0;
@@ -460,7 +466,7 @@ static EnumPropertyItem *rna_Object_collision_bounds_itemf(bContext *UNUSED(C),
static void rna_Object_parent_bone_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
ED_object_parent(ob, ob->parent, ob->partype, value);
}
@@ -490,44 +496,44 @@ void rna_VertexGroup_name_set(PointerRNA *ptr, const char *value)
static int rna_VertexGroup_index_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
return BLI_findindex(&ob->defbase, ptr->data);
}
static PointerRNA rna_Object_active_vertex_group_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- return rna_pointer_inherit_refine(ptr, &RNA_VertexGroup, BLI_findlink(&ob->defbase, ob->actdef-1));
+ Object *ob = (Object *)ptr->id.data;
+ return rna_pointer_inherit_refine(ptr, &RNA_VertexGroup, BLI_findlink(&ob->defbase, ob->actdef - 1));
}
static int rna_Object_active_vertex_group_index_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- return ob->actdef-1;
+ Object *ob = (Object *)ptr->id.data;
+ return ob->actdef - 1;
}
static void rna_Object_active_vertex_group_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->id.data;
- ob->actdef = value+1;
+ Object *ob = (Object *)ptr->id.data;
+ ob->actdef = value + 1;
}
static void rna_Object_active_vertex_group_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
*min = 0;
- *max = BLI_countlist(&ob->defbase)-1;
+ *max = BLI_countlist(&ob->defbase) - 1;
*max = MAX2(0, *max);
}
void rna_object_vgroup_name_index_get(PointerRNA *ptr, char *value, int index)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bDeformGroup *dg;
- dg = BLI_findlink(&ob->defbase, index-1);
+ dg = BLI_findlink(&ob->defbase, index - 1);
if (dg) BLI_strncpy(value, dg->name, sizeof(dg->name));
else value[0] = '\0';
@@ -535,22 +541,22 @@ void rna_object_vgroup_name_index_get(PointerRNA *ptr, char *value, int index)
int rna_object_vgroup_name_index_length(PointerRNA *ptr, int index)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bDeformGroup *dg;
- dg = BLI_findlink(&ob->defbase, index-1);
- return (dg)? strlen(dg->name): 0;
+ dg = BLI_findlink(&ob->defbase, index - 1);
+ return (dg) ? strlen(dg->name) : 0;
}
void rna_object_vgroup_name_index_set(PointerRNA *ptr, const char *value, short *index)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
*index = defgroup_name_index(ob, value) + 1;
}
void rna_object_vgroup_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bDeformGroup *dg = defgroup_find_name(ob, value);
if (dg) {
BLI_strncpy(result, value, maxlen); /* no need for BLI_strncpy_utf8, since this matches an existing group */
@@ -562,15 +568,15 @@ void rna_object_vgroup_name_set(PointerRNA *ptr, const char *value, char *result
void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Mesh *me;
CustomDataLayer *layer;
int a;
if (ob->type == OB_MESH && ob->data) {
- me = (Mesh*)ob->data;
+ me = (Mesh *)ob->data;
- for (a = 0; a<me->pdata.totlayer; a++) {
+ for (a = 0; a < me->pdata.totlayer; a++) {
layer = &me->pdata.layers[a];
if (layer->type == CD_MTEXPOLY && strcmp(layer->name, value) == 0) {
@@ -585,15 +591,15 @@ void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *resul
void rna_object_vcollayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Mesh *me;
CustomDataLayer *layer;
int a;
if (ob->type == OB_MESH && ob->data) {
- me = (Mesh*)ob->data;
+ me = (Mesh *)ob->data;
- for (a = 0; a<me->fdata.totlayer; a++) {
+ for (a = 0; a < me->fdata.totlayer; a++) {
layer = &me->fdata.layers[a];
if (layer->type == CD_MCOL && strcmp(layer->name, value) == 0) {
@@ -608,14 +614,14 @@ void rna_object_vcollayer_name_set(PointerRNA *ptr, const char *value, char *res
static int rna_Object_active_material_index_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
return MAX2(ob->actcol - 1, 0);
}
static void rna_Object_active_material_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->id.data;
- ob->actcol = value+1;
+ Object *ob = (Object *)ptr->id.data;
+ ob->actcol = value + 1;
if (ob->type == OB_MESH) {
Mesh *me = ob->data;
@@ -627,24 +633,24 @@ static void rna_Object_active_material_index_set(PointerRNA *ptr, int value)
static void rna_Object_active_material_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
*min = 0;
- *max = MAX2(ob->totcol-1, 0);
+ *max = MAX2(ob->totcol - 1, 0);
}
/* returns active base material */
static PointerRNA rna_Object_active_material_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Material *ma;
- ma = (ob->totcol)? give_current_material(ob, ob->actcol): NULL;
+ ma = (ob->totcol) ? give_current_material(ob, ob->actcol) : NULL;
return rna_pointer_inherit_refine(ptr, &RNA_Material, ma);
}
static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
DAG_id_tag_update(value.data, 0);
assign_material(ob, value.data, ob->actcol);
@@ -653,27 +659,27 @@ static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value)
static void rna_Object_active_particle_system_index_range(PointerRNA *ptr, int *min, int *max,
int *softmin, int *softmax)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
*min = 0;
- *max = BLI_countlist(&ob->particlesystem)-1;
+ *max = BLI_countlist(&ob->particlesystem) - 1;
*max = MAX2(0, *max);
}
static int rna_Object_active_particle_system_index_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
return psys_get_current_num(ob);
}
static void rna_Object_active_particle_system_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
psys_set_current_num(ob, value);
}
static void rna_Object_particle_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
PE_current_changed(scene, ob);
}
@@ -791,34 +797,34 @@ static int rna_Object_rotation_4d_editable(PointerRNA *ptr, int index)
static PointerRNA rna_MaterialSlot_material_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Material *ma;
- int index = (Material**)ptr->data - ob->mat;
+ int index = (Material **)ptr->data - ob->mat;
- ma = give_current_material(ob, index+1);
+ ma = give_current_material(ob, index + 1);
return rna_pointer_inherit_refine(ptr, &RNA_Material, ma);
}
static void rna_MaterialSlot_material_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->id.data;
- int index = (Material**)ptr->data - ob->mat;
+ Object *ob = (Object *)ptr->id.data;
+ int index = (Material **)ptr->data - ob->mat;
- assign_material(ob, value.data, index+1);
+ assign_material(ob, value.data, index + 1);
}
static int rna_MaterialSlot_link_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- int index = (Material**)ptr->data - ob->mat;
+ Object *ob = (Object *)ptr->id.data;
+ int index = (Material **)ptr->data - ob->mat;
return ob->matbits[index] != 0;
}
static void rna_MaterialSlot_link_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->id.data;
- int index = (Material**)ptr->data - ob->mat;
+ Object *ob = (Object *)ptr->id.data;
+ int index = (Material **)ptr->data - ob->mat;
if (value) {
ob->matbits[index] = 1;
@@ -832,28 +838,28 @@ static void rna_MaterialSlot_link_set(PointerRNA *ptr, int value)
static int rna_MaterialSlot_name_length(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Material *ma;
- int index = (Material**)ptr->data - ob->mat;
+ int index = (Material **)ptr->data - ob->mat;
- ma = give_current_material(ob, index+1);
+ ma = give_current_material(ob, index + 1);
if (ma)
- return strlen(ma->id.name+2);
+ return strlen(ma->id.name + 2);
return 0;
}
static void rna_MaterialSlot_name_get(PointerRNA *ptr, char *str)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Material *ma;
- int index = (Material**)ptr->data - ob->mat;
+ int index = (Material **)ptr->data - ob->mat;
- ma = give_current_material(ob, index+1);
+ ma = give_current_material(ob, index + 1);
if (ma)
- strcpy(str, ma->id.name+2);
+ strcpy(str, ma->id.name + 2);
else
str[0] = '\0';
}
@@ -861,7 +867,7 @@ static void rna_MaterialSlot_name_get(PointerRNA *ptr, char *str)
static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Object_internal_update(bmain, scene, ptr);
- WM_main_add_notifier(NC_OBJECT|ND_OB_SHADING, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, ptr->id.data);
}
/* why does this have to be so complicated?, can't all this crap be
@@ -871,7 +877,7 @@ static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
* */
static int rna_GameObjectSettings_physics_type_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
/* determine the body_type setting based on flags */
if (!(ob->gameflag & OB_COLLISION)) {
@@ -891,7 +897,7 @@ static int rna_GameObjectSettings_physics_type_get(PointerRNA *ptr)
else if (!(ob->gameflag & OB_DYNAMIC)) {
ob->body_type = OB_BODY_TYPE_STATIC;
}
- else if (!(ob->gameflag & (OB_RIGID_BODY|OB_SOFT_BODY))) {
+ else if (!(ob->gameflag & (OB_RIGID_BODY | OB_SOFT_BODY))) {
ob->body_type = OB_BODY_TYPE_DYNAMIC;
}
else if (ob->gameflag & OB_RIGID_BODY) {
@@ -909,58 +915,58 @@ static int rna_GameObjectSettings_physics_type_get(PointerRNA *ptr)
static void rna_GameObjectSettings_physics_type_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
const int was_navmesh = (ob->gameflag & OB_NAVMESH);
ob->body_type = value;
switch (ob->body_type) {
- case OB_BODY_TYPE_SENSOR:
- ob->gameflag |= OB_SENSOR | OB_COLLISION | OB_GHOST;
- ob->gameflag &= ~(OB_OCCLUDER | OB_DYNAMIC | OB_RIGID_BODY | OB_SOFT_BODY | OB_ACTOR |
- OB_ANISOTROPIC_FRICTION | OB_DO_FH | OB_ROT_FH | OB_COLLISION_RESPONSE | OB_NAVMESH);
- break;
- case OB_BODY_TYPE_OCCLUDER:
- ob->gameflag |= OB_OCCLUDER;
- ob->gameflag &= ~(OB_SENSOR|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION|OB_DYNAMIC|OB_NAVMESH);
- break;
- case OB_BODY_TYPE_NAVMESH:
- ob->gameflag |= OB_NAVMESH;
- ob->gameflag &= ~(OB_SENSOR|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION|OB_DYNAMIC|OB_OCCLUDER);
-
- if (ob->type == OB_MESH) {
- /* could be moved into mesh UI but for now ensure mesh data layer */
- BKE_mesh_ensure_navmesh(ob->data);
- }
+ case OB_BODY_TYPE_SENSOR:
+ ob->gameflag |= OB_SENSOR | OB_COLLISION | OB_GHOST;
+ ob->gameflag &= ~(OB_OCCLUDER | OB_DYNAMIC | OB_RIGID_BODY | OB_SOFT_BODY | OB_ACTOR |
+ OB_ANISOTROPIC_FRICTION | OB_DO_FH | OB_ROT_FH | OB_COLLISION_RESPONSE | OB_NAVMESH);
+ break;
+ case OB_BODY_TYPE_OCCLUDER:
+ ob->gameflag |= OB_OCCLUDER;
+ ob->gameflag &= ~(OB_SENSOR | OB_RIGID_BODY | OB_SOFT_BODY | OB_COLLISION | OB_DYNAMIC | OB_NAVMESH);
+ break;
+ case OB_BODY_TYPE_NAVMESH:
+ ob->gameflag |= OB_NAVMESH;
+ ob->gameflag &= ~(OB_SENSOR | OB_RIGID_BODY | OB_SOFT_BODY | OB_COLLISION | OB_DYNAMIC | OB_OCCLUDER);
+
+ if (ob->type == OB_MESH) {
+ /* could be moved into mesh UI but for now ensure mesh data layer */
+ BKE_mesh_ensure_navmesh(ob->data);
+ }
- break;
- case OB_BODY_TYPE_NO_COLLISION:
- ob->gameflag &= ~(OB_SENSOR|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION|OB_OCCLUDER|OB_DYNAMIC|OB_NAVMESH);
- break;
- case OB_BODY_TYPE_STATIC:
- ob->gameflag |= OB_COLLISION;
- ob->gameflag &= ~(OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY|OB_OCCLUDER|OB_SENSOR|OB_NAVMESH);
- break;
- case OB_BODY_TYPE_DYNAMIC:
- ob->gameflag |= OB_COLLISION|OB_DYNAMIC|OB_ACTOR;
- ob->gameflag &= ~(OB_RIGID_BODY|OB_SOFT_BODY|OB_OCCLUDER|OB_SENSOR|OB_NAVMESH);
- break;
- case OB_BODY_TYPE_RIGID:
- ob->gameflag |= OB_COLLISION|OB_DYNAMIC|OB_RIGID_BODY|OB_ACTOR;
- ob->gameflag &= ~(OB_SOFT_BODY|OB_OCCLUDER|OB_SENSOR|OB_NAVMESH);
- break;
- default:
- case OB_BODY_TYPE_SOFT:
- ob->gameflag |= OB_COLLISION|OB_DYNAMIC|OB_SOFT_BODY|OB_ACTOR;
- ob->gameflag &= ~(OB_RIGID_BODY|OB_OCCLUDER|OB_SENSOR|OB_NAVMESH);
-
- /* assume triangle mesh, if no bounds chosen for soft body */
- if ((ob->gameflag & OB_BOUNDS) && (ob->boundtype<OB_BOUND_TRIANGLE_MESH)) {
- ob->boundtype = OB_BOUND_TRIANGLE_MESH;
- }
- /* create a BulletSoftBody structure if not already existing */
- if (!ob->bsoft)
- ob->bsoft = bsbNew();
- break;
+ break;
+ case OB_BODY_TYPE_NO_COLLISION:
+ ob->gameflag &= ~(OB_SENSOR | OB_RIGID_BODY | OB_SOFT_BODY | OB_COLLISION | OB_OCCLUDER | OB_DYNAMIC | OB_NAVMESH);
+ break;
+ case OB_BODY_TYPE_STATIC:
+ ob->gameflag |= OB_COLLISION;
+ ob->gameflag &= ~(OB_DYNAMIC | OB_RIGID_BODY | OB_SOFT_BODY | OB_OCCLUDER | OB_SENSOR | OB_NAVMESH);
+ break;
+ case OB_BODY_TYPE_DYNAMIC:
+ ob->gameflag |= OB_COLLISION | OB_DYNAMIC | OB_ACTOR;
+ ob->gameflag &= ~(OB_RIGID_BODY | OB_SOFT_BODY | OB_OCCLUDER | OB_SENSOR | OB_NAVMESH);
+ break;
+ case OB_BODY_TYPE_RIGID:
+ ob->gameflag |= OB_COLLISION | OB_DYNAMIC | OB_RIGID_BODY | OB_ACTOR;
+ ob->gameflag &= ~(OB_SOFT_BODY | OB_OCCLUDER | OB_SENSOR | OB_NAVMESH);
+ break;
+ default:
+ case OB_BODY_TYPE_SOFT:
+ ob->gameflag |= OB_COLLISION | OB_DYNAMIC | OB_SOFT_BODY | OB_ACTOR;
+ ob->gameflag &= ~(OB_RIGID_BODY | OB_OCCLUDER | OB_SENSOR | OB_NAVMESH);
+
+ /* assume triangle mesh, if no bounds chosen for soft body */
+ if ((ob->gameflag & OB_BOUNDS) && (ob->boundtype < OB_BOUND_TRIANGLE_MESH)) {
+ ob->boundtype = OB_BOUND_TRIANGLE_MESH;
+ }
+ /* create a BulletSoftBody structure if not already existing */
+ if (!ob->bsoft)
+ ob->bsoft = bsbNew();
+ break;
}
if (was_navmesh != (ob->gameflag & OB_NAVMESH)) {
@@ -970,12 +976,12 @@ static void rna_GameObjectSettings_physics_type_set(PointerRNA *ptr, int value)
}
}
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->id.data);
}
static PointerRNA rna_Object_active_particle_system_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ParticleSystem *psys = psys_get_current(ob);
return rna_pointer_inherit_refine(ptr, &RNA_ParticleSystem, psys);
}
@@ -991,16 +997,16 @@ static unsigned int rna_Object_layer_validate__internal(const int *values, unsig
int i, tot = 0;
/* ensure we always have some layer selected */
- for (i = 0; i<20; i++)
+ for (i = 0; i < 20; i++)
if (values[i])
tot++;
if (tot == 0)
return 0;
- for (i = 0; i<20; i++) {
- if (values[i]) lay |= (1<<i);
- else lay &= ~(1<<i);
+ for (i = 0; i < 20; i++) {
+ if (values[i]) lay |= (1 << i);
+ else lay &= ~(1 << i);
}
return lay;
@@ -1008,7 +1014,7 @@ static unsigned int rna_Object_layer_validate__internal(const int *values, unsig
static void rna_Object_layer_set(PointerRNA *ptr, const int *values)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
unsigned int lay;
lay = rna_Object_layer_validate__internal(values, ob->lay);
@@ -1018,7 +1024,7 @@ static void rna_Object_layer_set(PointerRNA *ptr, const int *values)
static void rna_Base_layer_set(PointerRNA *ptr, const int *values)
{
- Base *base = (Base*)ptr->data;
+ Base *base = (Base *)ptr->data;
unsigned int lay;
lay = rna_Object_layer_validate__internal(values, base->lay);
@@ -1030,45 +1036,45 @@ static void rna_Base_layer_set(PointerRNA *ptr, const int *values)
static void rna_GameObjectSettings_state_get(PointerRNA *ptr, int *values)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
int i;
- int all_states = (ob->scaflag & OB_ALLSTATE?1:0);
+ int all_states = (ob->scaflag & OB_ALLSTATE ? 1 : 0);
- memset(values, 0, sizeof(int)*OB_MAX_STATES);
- for (i = 0; i<OB_MAX_STATES; i++)
- values[i] = (ob->state & (1<<i)) | all_states;
+ memset(values, 0, sizeof(int) * OB_MAX_STATES);
+ for (i = 0; i < OB_MAX_STATES; i++)
+ values[i] = (ob->state & (1 << i)) | all_states;
}
static void rna_GameObjectSettings_state_set(PointerRNA *ptr, const int *values)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
int i, tot = 0;
/* ensure we always have some state selected */
- for (i = 0; i<OB_MAX_STATES; i++)
+ for (i = 0; i < OB_MAX_STATES; i++)
if (values[i])
tot++;
if (tot == 0)
return;
- for (i = 0; i<OB_MAX_STATES; i++) {
- if (values[i]) ob->state |= (1<<i);
- else ob->state &= ~(1<<i);
+ for (i = 0; i < OB_MAX_STATES; i++) {
+ if (values[i]) ob->state |= (1 << i);
+ else ob->state &= ~(1 << i);
}
}
static void rna_GameObjectSettings_used_state_get(PointerRNA *ptr, int *values)
{
- Object *ob = (Object*)ptr->data;
+ Object *ob = (Object *)ptr->data;
bController *cont;
- memset(values, 0, sizeof(int)*OB_MAX_STATES);
+ memset(values, 0, sizeof(int) * OB_MAX_STATES);
for (cont = ob->controllers.first; cont; cont = cont->next) {
int i;
- for (i = 0; i<OB_MAX_STATES; i++) {
- if (cont->state_mask & (1<<i))
+ for (i = 0; i < OB_MAX_STATES; i++) {
+ if (cont->state_mask & (1 << i))
values[i] = 1;
}
}
@@ -1076,12 +1082,12 @@ static void rna_GameObjectSettings_used_state_get(PointerRNA *ptr, int *values)
static void rna_Object_active_shape_key_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Key *key = ob_get_key(ob);
*min = 0;
if (key) {
- *max = BLI_countlist(&key->block)-1;
+ *max = BLI_countlist(&key->block) - 1;
if (*max < 0) *max = 0;
}
else {
@@ -1091,21 +1097,21 @@ static void rna_Object_active_shape_key_index_range(PointerRNA *ptr, int *min, i
static int rna_Object_active_shape_key_index_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
- return MAX2(ob->shapenr-1, 0);
+ return MAX2(ob->shapenr - 1, 0);
}
static void rna_Object_active_shape_key_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
- ob->shapenr = value+1;
+ ob->shapenr = value + 1;
}
static PointerRNA rna_Object_active_shape_key_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
Key *key = ob_get_key(ob);
KeyBlock *kb;
PointerRNA keyptr;
@@ -1113,14 +1119,14 @@ static PointerRNA rna_Object_active_shape_key_get(PointerRNA *ptr)
if (key == NULL)
return PointerRNA_NULL;
- kb = BLI_findlink(&key->block, ob->shapenr-1);
+ kb = BLI_findlink(&key->block, ob->shapenr - 1);
RNA_pointer_create((ID *)key, &RNA_ShapeKey, kb, &keyptr);
return keyptr;
}
static PointerRNA rna_Object_field_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
/* weak */
if (!ob->pd)
@@ -1131,7 +1137,7 @@ static PointerRNA rna_Object_field_get(PointerRNA *ptr)
static PointerRNA rna_Object_collision_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
if (ob->type != OB_MESH)
return PointerRNA_NULL;
@@ -1145,34 +1151,34 @@ static PointerRNA rna_Object_collision_get(PointerRNA *ptr)
static PointerRNA rna_Object_active_constraint_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bConstraint *con = constraints_get_active(&ob->constraints);
return rna_pointer_inherit_refine(ptr, &RNA_Constraint, con);
}
static void rna_Object_active_constraint_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
constraints_set_active(&ob->constraints, (bConstraint *)value.data);
}
static bConstraint *rna_Object_constraints_new(Object *object, int type)
{
- WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_ADDED, object);
+ WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, object);
return add_ob_constraint(object, NULL, type);
}
static void rna_Object_constraints_remove(Object *object, ReportList *reports, bConstraint *con)
{
if (BLI_findindex(&object->constraints, con) == -1) {
- BKE_reportf(reports, RPT_ERROR, "Constraint '%s' not found in object '%s'", con->name, object->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Constraint '%s' not found in object '%s'", con->name, object->id.name + 2);
return;
}
remove_constraint(&object->constraints, con);
ED_object_constraint_update(object);
ED_object_constraint_set_active(object, NULL);
- WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, object);
+ WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, object);
}
static void rna_Object_constraints_clear(Object *object)
@@ -1182,7 +1188,7 @@ static void rna_Object_constraints_clear(Object *object)
ED_object_constraint_update(object);
ED_object_constraint_set_active(object, NULL);
- WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, object);
+ WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, object);
}
static ModifierData *rna_Object_modifier_new(Object *object, bContext *C, ReportList *reports,
@@ -1195,25 +1201,25 @@ static void rna_Object_modifier_remove(Object *object, bContext *C, ReportList *
{
ED_object_modifier_remove(reports, CTX_data_main(C), CTX_data_scene(C), object, md);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER|NA_REMOVED, object);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER | NA_REMOVED, object);
}
static void rna_Object_modifier_clear(Object *object, bContext *C)
{
ED_object_modifier_clear(CTX_data_main(C), CTX_data_scene(C), object);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER|NA_REMOVED, object);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER | NA_REMOVED, object);
}
static void rna_Object_boundbox_get(PointerRNA *ptr, float *values)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
BoundBox *bb = BKE_object_boundbox_get(ob);
if (bb) {
memcpy(values, bb->vec, sizeof(bb->vec));
}
else {
- fill_vn_fl(values, sizeof(bb->vec)/sizeof(float), 0.0f);
+ fill_vn_fl(values, sizeof(bb->vec) / sizeof(float), 0.0f);
}
}
@@ -1222,7 +1228,7 @@ static bDeformGroup *rna_Object_vgroup_new(Object *ob, const char *name)
{
bDeformGroup *defgroup = ED_vgroup_add_name(ob, name);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
return defgroup;
}
@@ -1231,14 +1237,14 @@ static void rna_Object_vgroup_remove(Object *ob, bDeformGroup *defgroup)
{
ED_vgroup_delete(ob, defgroup);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
static void rna_Object_vgroup_clear(Object *ob)
{
ED_vgroup_clear(ob);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
static void rna_VertexGroup_vertex_add(ID *id, bDeformGroup *def, ReportList *reports, int index_len,
@@ -1252,9 +1258,9 @@ static void rna_VertexGroup_vertex_add(ID *id, bDeformGroup *def, ReportList *re
}
while (index_len--)
- ED_vgroup_vert_add(ob, def, *index++, weight, assignmode); /* XXX, not efficient calling within loop*/
+ ED_vgroup_vert_add(ob, def, *index++, weight, assignmode); /* XXX, not efficient calling within loop*/
- WM_main_add_notifier(NC_GEOM|ND_DATA, (ID *)ob->data);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, (ID *)ob->data);
}
static void rna_VertexGroup_vertex_remove(ID *id, bDeformGroup *dg, ReportList *reports, int index_len, int *index)
@@ -1269,7 +1275,7 @@ static void rna_VertexGroup_vertex_remove(ID *id, bDeformGroup *dg, ReportList *
while (index_len--)
ED_vgroup_vert_remove(ob, dg, *index++);
- WM_main_add_notifier(NC_GEOM|ND_DATA, (ID *)ob->data);
+ WM_main_add_notifier(NC_GEOM | ND_DATA, (ID *)ob->data);
}
static float rna_VertexGroup_weight(ID *id, bDeformGroup *dg, ReportList *reports, int index)
@@ -1334,14 +1340,14 @@ static void rna_def_vertex_group(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Name", "Vertex group name");
RNA_def_struct_name_property(srna, prop);
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_VertexGroup_name_set");
- /* update data because modifiers may use [#24761] */
- RNA_def_property_update(prop, NC_GEOM|ND_DATA|NA_RENAME, "rna_Object_internal_update_data");
+ /* update data because modifiers may use [#24761] */
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA | NA_RENAME, "rna_Object_internal_update_data");
prop = RNA_def_property(srna, "lock_weight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "", "Maintain the relative weights for the group");
RNA_def_property_boolean_sdna(prop, NULL, "flag", 0);
- /* update data because modifiers may use [#24761] */
- RNA_def_property_update(prop, NC_GEOM|ND_DATA|NA_RENAME, "rna_Object_internal_update_data");
+ /* update data because modifiers may use [#24761] */
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA | NA_RENAME, "rna_Object_internal_update_data");
prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1350,10 +1356,10 @@ static void rna_def_vertex_group(BlenderRNA *brna)
func = RNA_def_function(srna, "add", "rna_VertexGroup_vertex_add");
RNA_def_function_ui_description(func, "Add vertices to the group");
- RNA_def_function_flag(func, FUNC_USE_REPORTS|FUNC_USE_SELF_ID);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
/* TODO, see how array size of 0 works, this shouldnt be used */
prop = RNA_def_int_array(func, "index", 1, NULL, 0, 0, "", "Index List", 0, 0);
- RNA_def_property_flag(prop, PROP_DYNAMIC|PROP_REQUIRED);
+ RNA_def_property_flag(prop, PROP_DYNAMIC | PROP_REQUIRED);
prop = RNA_def_float(func, "weight", 0, 0.0f, 1.0f, "", "Vertex weight", 0.0f, 1.0f);
RNA_def_property_flag(prop, PROP_REQUIRED);
prop = RNA_def_enum(func, "type", assign_mode_items, 0, "", "Vertex assign mode");
@@ -1361,14 +1367,14 @@ static void rna_def_vertex_group(BlenderRNA *brna)
func = RNA_def_function(srna, "remove", "rna_VertexGroup_vertex_remove");
RNA_def_function_ui_description(func, "Remove a vertex from the group");
- RNA_def_function_flag(func, FUNC_USE_REPORTS|FUNC_USE_SELF_ID);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
/* TODO, see how array size of 0 works, this shouldnt be used */
prop = RNA_def_int_array(func, "index", 1, NULL, 0, 0, "", "Index List", 0, 0);
- RNA_def_property_flag(prop, PROP_DYNAMIC|PROP_REQUIRED);
+ RNA_def_property_flag(prop, PROP_DYNAMIC | PROP_REQUIRED);
func = RNA_def_function(srna, "weight", "rna_VertexGroup_weight");
RNA_def_function_ui_description(func, "Get a vertex weight from the group");
- RNA_def_function_flag(func, FUNC_USE_REPORTS|FUNC_USE_SELF_ID);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
prop = RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "The index of the vertex", 0, INT_MAX);
RNA_def_property_flag(prop, PROP_REQUIRED);
prop = RNA_def_float(func, "weight", 0, 0.0f, 1.0f, "", "Vertex weight", 0.0f, 1.0f);
@@ -1383,7 +1389,8 @@ static void rna_def_material_slot(BlenderRNA *brna)
static EnumPropertyItem link_items[] = {
{1, "OBJECT", 0, "Object", ""},
{0, "DATA", 0, "Data", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* NOTE: there is no MaterialSlot equivalent in DNA, so the internal
* pointer data points to ob->mat + index, and we manually implement
@@ -1398,13 +1405,13 @@ static void rna_def_material_slot(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_pointer_funcs(prop, "rna_MaterialSlot_material_get", "rna_MaterialSlot_material_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Material", "Material datablock used by this material slot");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_MaterialSlot_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_MaterialSlot_update");
prop = RNA_def_property(srna, "link", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, link_items);
RNA_def_property_enum_funcs(prop, "rna_MaterialSlot_link_get", "rna_MaterialSlot_link_set", NULL);
RNA_def_property_ui_text(prop, "Link", "Link material to object or the object's data");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_MaterialSlot_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_MaterialSlot_update");
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_MaterialSlot_name_get", "rna_MaterialSlot_name_length", NULL);
@@ -1429,7 +1436,8 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
"Collision Sensor, detects static and dynamic objects but not the other "
"collision sensor objects"},
{OB_BODY_TYPE_NAVMESH, "NAVMESH", 0, "Navigation Mesh", "Navigation mesh"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "GameObjectSettings", NULL);
RNA_def_struct_sdna(srna, "Object");
@@ -1491,12 +1499,12 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0.01, 10000.0);
RNA_def_property_ui_text(prop, "Mass", "Mass of the object");
- prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "inertia");
RNA_def_property_range(prop, 0.01f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.01f, 10.0f, 1, 3);
RNA_def_property_ui_text(prop, "Radius", "Radius of bounding sphere and material physics");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "use_sleep", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_COLLISION_RESPONSE);
@@ -1583,20 +1591,20 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_collision_bounds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_BOUNDS);
RNA_def_property_ui_text(prop, "Use Collision Bounds", "Specify a collision bounds type other than the default");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "collision_bounds_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "collision_boundtype");
RNA_def_property_enum_items(prop, collision_bounds_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Object_collision_bounds_itemf");
RNA_def_property_ui_text(prop, "Collision Bounds", "Select the collision type");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "use_collision_compound", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_CHILD);
RNA_def_property_ui_text(prop, "Collision Compound", "Add children to form a compound collision object");
- prop = RNA_def_property(srna, "collision_margin", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "collision_margin", PROP_FLOAT, PROP_NONE | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "margin");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Collision Margin",
@@ -1611,7 +1619,7 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_HASOBSTACLE);
RNA_def_property_ui_text(prop, "Create obstacle", "Create representation for obstacle simulation");
- prop = RNA_def_property(srna, "obstacle_radius", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ prop = RNA_def_property(srna, "obstacle_radius", PROP_FLOAT, PROP_NONE | PROP_UNIT_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "obstacleRad");
RNA_def_property_range(prop, 0.0, 1000.0);
RNA_def_property_ui_text(prop, "Obstacle Radius", "Radius of object representation in obstacle simulation");
@@ -1688,7 +1696,7 @@ static void rna_def_object_constraints(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* constraint to remove */
parm = RNA_def_pointer(func, "constraint", "Constraint", "", "Removed constraint");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "clear", "rna_Object_constraints_clear");
RNA_def_function_ui_description(func, "Remove all constraint from this object");
@@ -1722,7 +1730,7 @@ static void rna_def_object_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
/* add target */
func = RNA_def_function(srna, "new", "rna_Object_modifier_new");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Add a new modifier");
parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the bone");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -1735,11 +1743,11 @@ static void rna_def_object_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
/* remove target */
func = RNA_def_function(srna, "remove", "rna_Object_modifier_remove");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove an existing modifier from the object");
/* target to remove*/
parm = RNA_def_pointer(func, "modifier", "Modifier", "", "Modifier to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* clear all modifiers */
func = RNA_def_function(srna, "clear", "rna_Object_modifier_clear");
@@ -1766,7 +1774,7 @@ static void rna_def_object_particle_systems(BlenderRNA *brna, PropertyRNA *cprop
RNA_def_property_struct_type(prop, "ParticleSystem");
RNA_def_property_pointer_funcs(prop, "rna_Object_active_particle_system_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Particle System", "Active particle system being displayed");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -1774,7 +1782,7 @@ static void rna_def_object_particle_systems(BlenderRNA *brna, PropertyRNA *cprop
"rna_Object_active_particle_system_index_set",
"rna_Object_active_particle_system_index_range");
RNA_def_property_ui_text(prop, "Active Particle System Index", "Index of active particle system slot");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_particle_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_particle_update");
}
@@ -1798,7 +1806,7 @@ static void rna_def_object_vertex_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get",
"rna_Object_active_vertex_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Active Vertex Group", "Vertex groups of the object");
- RNA_def_property_update(prop, NC_GEOM|ND_DATA, "rna_Object_internal_update_data");
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, "rna_Object_internal_update_data");
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -1807,7 +1815,7 @@ static void rna_def_object_vertex_groups(BlenderRNA *brna, PropertyRNA *cprop)
"rna_Object_active_vertex_group_index_set",
"rna_Object_active_vertex_group_index_range");
RNA_def_property_ui_text(prop, "Active Vertex Group Index", "Active index in vertex group array");
- RNA_def_property_update(prop, NC_GEOM|ND_DATA, "rna_Object_internal_update_data");
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, "rna_Object_internal_update_data");
/* vertex groups */ /* add_vertex_group */
func = RNA_def_function(srna, "new", "rna_Object_vgroup_new");
@@ -1819,7 +1827,7 @@ static void rna_def_object_vertex_groups(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_Object_vgroup_remove");
RNA_def_function_ui_description(func, "Delete vertex group from object");
parm = RNA_def_pointer(func, "group", "VertexGroup", "", "Vertex group to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "clear", "rna_Object_vgroup_clear");
RNA_def_function_ui_description(func, "Delete all vertex groups from object");
@@ -1840,7 +1848,8 @@ static void rna_def_object(BlenderRNA *brna)
{OB_EMPTY_SPHERE, "SPHERE", 0, "Sphere", ""},
{OB_EMPTY_CONE, "CONE", 0, "Cone", ""},
{OB_EMPTY_IMAGE, "IMAGE", 0, "Image", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem track_items[] = {
{OB_POSX, "POS_X", 0, "+X", ""},
@@ -1849,13 +1858,15 @@ static void rna_def_object(BlenderRNA *brna)
{OB_NEGX, "NEG_X", 0, "-X", ""},
{OB_NEGY, "NEG_Y", 0, "-Y", ""},
{OB_NEGZ, "NEG_Z", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem up_items[] = {
{OB_POSX, "X", 0, "X", ""},
{OB_POSY, "Y", 0, "Y", ""},
{OB_POSZ, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem drawtype_items[] = {
{OB_BOUNDBOX, "BOUNDS", 0, "Bounds", "Draw the bounds of the object"},
@@ -1863,14 +1874,16 @@ static void rna_def_object(BlenderRNA *brna)
{OB_SOLID, "SOLID", 0, "Solid", "Draw the object as a solid (if solid drawing is enabled in the viewport)"},
{OB_TEXTURE, "TEXTURED", 0, "Textured",
"Draw the object with textures (if textures are enabled in the viewport)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem boundtype_items[] = {
{OB_BOUND_BOX, "BOX", 0, "Box", "Draw bounds as box"},
{OB_BOUND_SPHERE, "SPHERE", 0, "Sphere", "Draw bounds as sphere"},
{OB_BOUND_CYLINDER, "CYLINDER", 0, "Cylinder", "Draw bounds as cylinder"},
{OB_BOUND_CONE, "CONE", 0, "Cone", "Draw bounds as cone"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem dupli_items[] = {
{0, "NONE", 0, "None", ""},
@@ -1878,7 +1891,8 @@ static void rna_def_object(BlenderRNA *brna)
{OB_DUPLIVERTS, "VERTS", 0, "Verts", "Duplicate child objects on all vertices"},
{OB_DUPLIFACES, "FACES", 0, "Faces", "Duplicate child objects on all faces"},
{OB_DUPLIGROUP, "GROUP", 0, "Group", "Enable group instancing"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* XXX: this RNA enum define is currently duplicated for objects,
* since there is some text here which is not applicable */
@@ -1892,10 +1906,11 @@ static void rna_def_object(BlenderRNA *brna)
{ROT_MODE_ZYX, "ZYX", 0, "ZYX Euler", "ZYX Rotation Order - prone to Gimbal Lock"},
{ROT_MODE_AXISANGLE, "AXIS_ANGLE", 0, "Axis Angle",
"Axis Angle (W+XYZ), defines a rotation around some axis defined by 3D-Vector"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
- static float default_quat[4] = {1, 0, 0, 0}; /* default quaternion values */
- static float default_axisAngle[4] = {0, 0, 1, 0}; /* default axis-angle rotation values */
+ static float default_quat[4] = {1, 0, 0, 0}; /* default quaternion values */
+ static float default_axisAngle[4] = {0, 0, 1, 0}; /* default axis-angle rotation values */
static float default_scale[3] = {1, 1, 1}; /* default scale values */
static int boundbox_dimsize[] = {8, 3};
@@ -1907,7 +1922,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "data", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ID");
RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_data_set", "rna_Object_data_typef", NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_UNLINK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
RNA_def_property_ui_text(prop, "Data", "Object data");
RNA_def_property_update(prop, 0, "rna_Object_internal_update_data");
@@ -1929,12 +1944,12 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layers", "Layers the object is on");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_layer_set");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_layer_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_layer_update");
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
RNA_def_property_ui_text(prop, "Select", "Object selection state");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_select_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_select_update");
/* for data access */
prop = RNA_def_property(srna, "bound_box", PROP_FLOAT, PROP_NONE);
@@ -1948,28 +1963,28 @@ static void rna_def_object(BlenderRNA *brna)
/* parent */
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_parent_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
prop = RNA_def_property(srna, "parent_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "partype");
RNA_def_property_enum_items(prop, parent_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Object_parent_type_set", "rna_Object_parent_type_itemf");
RNA_def_property_ui_text(prop, "Parent Type", "Type of parent relation");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
prop = RNA_def_property(srna, "parent_vertices", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "par1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Parent Vertices", "Indices of vertices in case of a vertex parenting relation");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
prop = RNA_def_property(srna, "parent_bone", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "parsubstr");
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Object_parent_bone_set");
RNA_def_property_ui_text(prop, "Parent Bone", "Name of parent bone in case of a bone parenting relation");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
/* Track and Up flags */
/* XXX: these have been saved here for a bit longer (after old track was removed),
@@ -1980,7 +1995,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Track Axis",
"Axis that points in 'forward' direction (applies to DupliFrame when "
"parent 'Follow' is enabled)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "upflag");
@@ -1988,7 +2003,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Up Axis",
"Axis that points in the upward direction (applies to DupliFrame when "
"parent 'Follow' is enabled)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
/* proxy */
prop = RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
@@ -2001,7 +2016,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "material_slots", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
RNA_def_property_struct_type(prop, "MaterialSlot");
- /* don't dereference pointer! */
+ /* don't dereference pointer! */
RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_iterator_array_get", NULL, NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Material Slots", "Material slots in the object");
@@ -2011,7 +2026,7 @@ static void rna_def_object(BlenderRNA *brna)
"rna_Object_active_material_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Material", "Active material being displayed");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_MaterialSlot_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_MaterialSlot_update");
prop = RNA_def_property(srna, "active_material_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "actcol");
@@ -2019,7 +2034,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, "rna_Object_active_material_index_get", "rna_Object_active_material_index_set",
"rna_Object_active_material_index_range");
RNA_def_property_ui_text(prop, "Active Material Index", "Index of active material slot");
- RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
/* transform */
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
@@ -2027,18 +2042,18 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_editable_array_func(prop, "rna_Object_location_editable");
RNA_def_property_ui_text(prop, "Location", "Location of the object");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
RNA_def_property_float_sdna(prop, NULL, "quat");
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_4d_editable");
RNA_def_property_float_array_default(prop, default_quat);
RNA_def_property_ui_text(prop, "Quaternion Rotation", "Rotation in Quaternions");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
- /* XXX: for axis-angle, it would have been nice to have 2 separate fields for UI purposes, but
- * having a single one is better for Keyframing and other property-management situations...
- */
+ /* XXX: for axis-angle, it would have been nice to have 2 separate fields for UI purposes, but
+ * having a single one is better for Keyframing and other property-management situations...
+ */
prop = RNA_def_property(srna, "rotation_axis_angle", PROP_FLOAT, PROP_AXISANGLE);
RNA_def_property_array(prop, 4);
RNA_def_property_float_funcs(prop, "rna_Object_rotation_axis_angle_get",
@@ -2046,20 +2061,20 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_4d_editable");
RNA_def_property_float_array_default(prop, default_axisAngle);
RNA_def_property_ui_text(prop, "Axis-Angle Rotation", "Angle of Rotation for Axis-Angle rotation representation");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, NULL, "rot");
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_euler_editable");
RNA_def_property_ui_text(prop, "Euler Rotation", "Rotation in Eulers");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "rotation_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "rotmode");
RNA_def_property_enum_items(prop, prop_rotmode_items); /* XXX move to using a single define of this someday */
RNA_def_property_enum_funcs(prop, NULL, "rna_Object_rotation_mode_set", NULL);
RNA_def_property_ui_text(prop, "Rotation Mode", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "size");
@@ -2067,14 +2082,14 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 3);
RNA_def_property_float_array_default(prop, default_scale);
RNA_def_property_ui_text(prop, "Scale", "Scaling of the object");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "dimensions", PROP_FLOAT, PROP_XYZ_LENGTH);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_Object_dimensions_get", "rna_Object_dimensions_set", NULL);
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 3);
RNA_def_property_ui_text(prop, "Dimensions", "Absolute bounding box dimensions of the object");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
/* delta transforms */
@@ -2082,29 +2097,29 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "dloc");
RNA_def_property_ui_text(prop, "Delta Location", "Extra translation added to the location of the object");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "delta_rotation_euler", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, NULL, "drot");
RNA_def_property_ui_text(prop, "Delta Rotation (Euler)",
"Extra rotation added to the rotation of the object (when using Euler rotations)");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "delta_rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
RNA_def_property_float_sdna(prop, NULL, "dquat");
RNA_def_property_float_array_default(prop, default_quat);
RNA_def_property_ui_text(prop, "Delta Rotation (Quaternion)",
"Extra rotation added to the rotation of the object (when using Quaternion rotations)");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
#if 0 /* XXX not supported well yet... */
prop = RNA_def_property(srna, "delta_rotation_axis_angle", PROP_FLOAT, PROP_AXISANGLE);
- /* FIXME: this is not a single field any more! (drotAxis and drotAngle) */
+ /* FIXME: this is not a single field any more! (drotAxis and drotAngle) */
RNA_def_property_float_sdna(prop, NULL, "dquat");
RNA_def_property_float_array_default(prop, default_axisAngle);
RNA_def_property_ui_text(prop, "Delta Rotation (Axis Angle)",
"Extra rotation added to the rotation of the object (when using Axis-Angle rotations)");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
#endif
prop = RNA_def_property(srna, "delta_scale", PROP_FLOAT, PROP_XYZ);
@@ -2112,7 +2127,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 3);
RNA_def_property_float_array_default(prop, default_scale);
RNA_def_property_ui_text(prop, "Delta Scale", "Extra scaling added to the scale of the object");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
/* transform locks */
prop = RNA_def_property(srna, "lock_location", PROP_BOOLEAN, PROP_NONE);
@@ -2120,23 +2135,23 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Lock Location", "Lock editing of location in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "lock_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROTX);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Lock Rotation", "Lock editing of rotation in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
- /* XXX this is sub-optimal - it really should be included above,
- * but due to technical reasons we can't do this! */
+ /* XXX this is sub-optimal - it really should be included above,
+ * but due to technical reasons we can't do this! */
prop = RNA_def_property(srna, "lock_rotation_w", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROTW);
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
RNA_def_property_ui_text(prop, "Lock Rotation (4D Angle)",
"Lock editing of 'angle' component of four-component rotations in the interface");
- /* XXX this needs a better name */
+ /* XXX this needs a better name */
prop = RNA_def_property(srna, "lock_rotations_4d", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROT4D);
RNA_def_property_ui_text(prop, "Lock Rotations (4D)",
@@ -2147,7 +2162,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Lock Scale", "Lock editing of scale in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
/* matrix */
prop = RNA_def_property(srna, "matrix_world", PROP_FLOAT, PROP_MATRIX);
@@ -2155,14 +2170,14 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Matrix World", "Worldspace transformation matrix");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_matrix_world_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_matrix_world_update");
prop = RNA_def_property(srna, "matrix_local", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Local Matrix", "Parent relative transformation matrix");
RNA_def_property_float_funcs(prop, "rna_Object_matrix_local_get", "rna_Object_matrix_local_set", NULL);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, NULL);
prop = RNA_def_property(srna, "matrix_basis", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
@@ -2171,14 +2186,14 @@ static void rna_def_object(BlenderRNA *brna)
"Matrix access to location, rotation and scale (including deltas), "
"before constraints and parenting are applied");
RNA_def_property_float_funcs(prop, "rna_Object_matrix_basis_get", "rna_Object_matrix_basis_set", NULL);
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
/*parent_inverse*/
prop = RNA_def_property(srna, "matrix_parent_inverse", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "parentinv");
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
RNA_def_property_ui_text(prop, "Matrix", "Inverse of object's parent matrix at time of parenting");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
/* modifiers */
prop = RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
@@ -2212,20 +2227,20 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "empty_drawtype");
RNA_def_property_enum_items(prop, empty_drawtype_items);
RNA_def_property_ui_text(prop, "Empty Display Type", "Viewport display style for empties");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "empty_draw_size", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "empty_drawsize");
RNA_def_property_range(prop, 0.0001f, 1000.0f);
RNA_def_property_ui_range(prop, 0.01, 100, 1, 2);
RNA_def_property_ui_text(prop, "Empty Display Size", "Size of display for empties in the viewport");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "empty_image_offset", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "ima_ofs");
RNA_def_property_ui_text(prop, "Origin Offset", "Origin offset distance");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 0.1f, 2);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* render */
prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED);
@@ -2236,7 +2251,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "col");
RNA_def_property_ui_text(prop, "Color", "Object color and alpha, used when faces have the ObColor mode enabled");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* physics */
prop = RNA_def_property(srna, "field", PROP_POINTER, PROP_NONE);
@@ -2268,19 +2283,19 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_VIEW);
RNA_def_property_ui_text(prop, "Restrict View", "Restrict visibility in the viewport");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 1);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_SELECT);
RNA_def_property_ui_text(prop, "Restrict Select", "Restrict selection in the viewport");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 1);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "hide_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER);
RNA_def_property_ui_text(prop, "Restrict Render", "Restrict renderability");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* anim */
rna_def_animdata_common(srna);
@@ -2295,75 +2310,75 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Slow Parent",
"Create a delay in the parent relationship (beware: this isn't renderfarm "
"safe and may be invalid after jumping around the timeline)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
- prop = RNA_def_property(srna, "slow_parent_offset", PROP_FLOAT, PROP_NONE|PROP_UNIT_TIME);
+ prop = RNA_def_property(srna, "slow_parent_offset", PROP_FLOAT, PROP_NONE | PROP_UNIT_TIME);
RNA_def_property_float_sdna(prop, NULL, "sf");
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Slow Parent Offset", "Delay in the parent relationship");
- RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
/* duplicates */
prop = RNA_def_property(srna, "dupli_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag");
RNA_def_property_enum_items(prop, dupli_items);
RNA_def_property_ui_text(prop, "Dupli Type", "If not None, object duplication method to use");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
prop = RNA_def_property(srna, "use_dupli_frames_speed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "transflag", OB_DUPLINOSPEED);
RNA_def_property_ui_text(prop, "Dupli Frames Speed",
"Set dupliframes to use the current frame instead of parent curve's evaluation time");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
prop = RNA_def_property(srna, "use_dupli_vertices_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIROT);
RNA_def_property_ui_text(prop, "Dupli Verts Rotation", "Rotate dupli according to vertex normal");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "use_dupli_faces_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIFACES_SCALE);
RNA_def_property_ui_text(prop, "Dupli Faces Inherit Scale", "Scale dupli based on face size");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
prop = RNA_def_property(srna, "dupli_faces_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dupfacesca");
RNA_def_property_range(prop, 0.001f, 10000.0f);
RNA_def_property_ui_text(prop, "Dupli Faces Scale", "Scale the DupliFace objects");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "dupli_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "dup_group");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_dup_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Dupli Group", "Instance an existing group");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
- prop = RNA_def_property(srna, "dupli_frames_start", PROP_INT, PROP_NONE|PROP_UNIT_TIME);
+ prop = RNA_def_property(srna, "dupli_frames_start", PROP_INT, PROP_NONE | PROP_UNIT_TIME);
RNA_def_property_int_sdna(prop, NULL, "dupsta");
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Dupli Frames Start", "Start frame for DupliFrames");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
- prop = RNA_def_property(srna, "dupli_frames_end", PROP_INT, PROP_NONE|PROP_UNIT_TIME);
+ prop = RNA_def_property(srna, "dupli_frames_end", PROP_INT, PROP_NONE | PROP_UNIT_TIME);
RNA_def_property_int_sdna(prop, NULL, "dupend");
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Dupli Frames End", "End frame for DupliFrames");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
- prop = RNA_def_property(srna, "dupli_frames_on", PROP_INT, PROP_NONE|PROP_UNIT_TIME);
+ prop = RNA_def_property(srna, "dupli_frames_on", PROP_INT, PROP_NONE | PROP_UNIT_TIME);
RNA_def_property_int_sdna(prop, NULL, "dupon");
RNA_def_property_range(prop, MINFRAME, MAXFRAME);
RNA_def_property_ui_range(prop, 1, 1500, 1, 0);
RNA_def_property_ui_text(prop, "Dupli Frames On", "Number of frames to use between DupOff frames");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
- prop = RNA_def_property(srna, "dupli_frames_off", PROP_INT, PROP_NONE|PROP_UNIT_TIME);
+ prop = RNA_def_property(srna, "dupli_frames_off", PROP_INT, PROP_NONE | PROP_UNIT_TIME);
RNA_def_property_int_sdna(prop, NULL, "dupoff");
RNA_def_property_range(prop, 0, MAXFRAME);
RNA_def_property_ui_range(prop, 0, 1500, 1, 0);
RNA_def_property_ui_text(prop, "Dupli Frames Off", "Recurring frames to exclude from the Dupliframes");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
prop = RNA_def_property(srna, "dupli_list", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "duplilist", NULL);
@@ -2379,50 +2394,50 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "dt");
RNA_def_property_enum_items(prop, drawtype_items);
RNA_def_property_ui_text(prop, "Maximum Draw Type", "Maximum draw type to display object with in viewport");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_bounds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_BOUNDBOX);
RNA_def_property_ui_text(prop, "Draw Bounds", "Display the object's bounds");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "draw_bounds_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "boundtype");
RNA_def_property_enum_items(prop, boundtype_items);
RNA_def_property_ui_text(prop, "Draw Bounds Type", "Object boundary display type");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_name", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWNAME);
RNA_def_property_ui_text(prop, "Draw Name", "Display the object's name");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_AXIS);
RNA_def_property_ui_text(prop, "Draw Axes", "Display the object's origin and axes");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_texture_space", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_TEXSPACE);
RNA_def_property_ui_text(prop, "Draw Texture Space", "Display the object's texture space");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_wire", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWWIRE);
RNA_def_property_ui_text(prop, "Draw Wire", "Add the object's wireframe over solid drawing");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_transparent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWTRANSP);
RNA_def_property_ui_text(prop, "Draw Transparent",
"Display material transparency in the object (unsupported for duplicator drawing)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "show_x_ray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWXRAY);
RNA_def_property_ui_text(prop, "X-Ray",
"Make the object draw in front of others (unsupported for duplicator drawing)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* Grease Pencil */
prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
@@ -2430,7 +2445,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "GreasePencil");
RNA_def_property_ui_text(prop, "Grease Pencil Data", "Grease Pencil datablock");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
/* pose */
prop = RNA_def_property(srna, "pose_library", PROP_POINTER, PROP_NONE);
@@ -2491,18 +2506,18 @@ static void rna_def_dupli_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "matrix_original", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "omat");
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE|PROP_EDITABLE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Object Matrix", "The original matrix of this object before it was duplicated");
prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "mat");
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE|PROP_EDITABLE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Object Duplicate Matrix", "Object duplicate transformation matrix");
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "no_draw", 0);
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE|PROP_EDITABLE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Hide", "Don't show dupli object in viewport or render");
/* TODO: DupliObject has more properties that can be wrapped */
@@ -2528,12 +2543,12 @@ static void rna_def_object_base(BlenderRNA *brna)
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Layers", "Layers the object base is on");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Base_layer_set");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Base_layer_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Base_layer_update");
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BA_SELECT);
RNA_def_property_ui_text(prop, "Select", "Object base selection state");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Base_select_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Base_select_update");
RNA_api_object_base(srna);
}
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 7ed0304ebb4..4d7ecc9350f 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -82,157 +82,157 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_
/* perform the mesh extraction based on type */
switch (ob->type) {
- case OB_FONT:
- case OB_CURVE:
- case OB_SURF:
+ case OB_FONT:
+ case OB_CURVE:
+ case OB_SURF:
- /* copies object and modifiers (but not the data) */
- tmpobj = BKE_object_copy(ob);
- tmpcu = (Curve *)tmpobj->data;
- tmpcu->id.us--;
+ /* copies object and modifiers (but not the data) */
+ tmpobj = BKE_object_copy(ob);
+ tmpcu = (Curve *)tmpobj->data;
+ tmpcu->id.us--;
- /* if getting the original caged mesh, delete object modifiers */
- if ( cage )
- BKE_object_free_modifiers(tmpobj);
+ /* if getting the original caged mesh, delete object modifiers */
+ if (cage)
+ BKE_object_free_modifiers(tmpobj);
- /* copies the 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
- * mode gives invalid data structures */
- copycu->editfont = tmpcu->editfont;
- copycu->editnurb = tmpcu->editnurb;
+ /* copies the data */
+ copycu = tmpobj->data = BKE_curve_copy((Curve *) ob->data);
- /* get updated display list, and convert to a mesh */
- BKE_displist_make_curveTypes(sce, tmpobj, 0);
+ /* temporarily set edit so we get updates from edit mode, but
+ * also because for text datablocks copying it while in edit
+ * mode gives invalid data structures */
+ copycu->editfont = tmpcu->editfont;
+ copycu->editnurb = tmpcu->editnurb;
- copycu->editfont = NULL;
- copycu->editnurb = NULL;
+ /* get updated display list, and convert to a mesh */
+ BKE_displist_make_curveTypes(sce, tmpobj, 0);
- BKE_mesh_from_nurbs(tmpobj);
+ copycu->editfont = NULL;
+ copycu->editnurb = NULL;
- /* BKE_mesh_from_nurbs changes the type to a mesh, check it worked */
- if (tmpobj->type != OB_MESH) {
- BKE_libblock_free_us(&(G.main->object), tmpobj);
- BKE_report(reports, RPT_ERROR, "cant convert curve to mesh. Does the curve have any segments?");
- return NULL;
- }
- tmpmesh = tmpobj->data;
- BKE_libblock_free_us(&G.main->object, tmpobj);
- break;
+ BKE_mesh_from_nurbs(tmpobj);
- case OB_MBALL: {
- /* metaballs don't have modifiers, so just convert to mesh */
- Object *basis_ob = BKE_mball_basis_find(sce, ob);
- /* todo, re-generatre for render-res */
- /* metaball_polygonize(scene, ob) */
+ /* BKE_mesh_from_nurbs changes the type to a mesh, check it worked */
+ if (tmpobj->type != OB_MESH) {
+ BKE_libblock_free_us(&(G.main->object), tmpobj);
+ BKE_report(reports, RPT_ERROR, "cant convert curve to mesh. Does the curve have any segments?");
+ return NULL;
+ }
+ tmpmesh = tmpobj->data;
+ BKE_libblock_free_us(&G.main->object, tmpobj);
+ break;
- if (ob != basis_ob)
- return NULL; /* only do basis metaball */
+ case OB_MBALL: {
+ /* metaballs don't have modifiers, so just convert to mesh */
+ Object *basis_ob = BKE_mball_basis_find(sce, ob);
+ /* todo, re-generatre for render-res */
+ /* metaball_polygonize(scene, ob) */
- tmpmesh = BKE_mesh_add("Mesh");
+ if (ob != basis_ob)
+ return NULL; /* only do basis metaball */
- if (render) {
- ListBase disp = {NULL, NULL};
- BKE_displist_make_mball_forRender(sce, ob, &disp);
- BKE_mesh_from_metaball(&disp, tmpmesh);
- BKE_displist_free(&disp);
- }
- else
- BKE_mesh_from_metaball(&ob->disp, tmpmesh);
- break;
+ tmpmesh = BKE_mesh_add("Mesh");
- }
- case OB_MESH:
- /* copies object and modifiers (but not the data) */
- if (cage) {
- /* copies the data */
- tmpmesh = BKE_mesh_copy( ob->data );
- /* if not getting the original caged mesh, get final derived mesh */
- }
- else {
- /* Make a dummy mesh, saves copying */
- DerivedMesh *dm;
- /* CustomDataMask mask = CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL; */
- CustomDataMask mask = CD_MASK_MESH; /* this seems more suitable, exporter,
- * for example, needs CD_MASK_MDEFORMVERT */
-
- /* Write the display mesh into the dummy mesh */
- if (render)
- dm = mesh_create_derived_render(sce, ob, mask);
+ if (render) {
+ ListBase disp = {NULL, NULL};
+ BKE_displist_make_mball_forRender(sce, ob, &disp);
+ BKE_mesh_from_metaball(&disp, tmpmesh);
+ BKE_displist_free(&disp);
+ }
else
- dm = mesh_create_derived_view(sce, ob, mask);
-
- tmpmesh = BKE_mesh_add("Mesh");
- DM_to_mesh(dm, tmpmesh, ob);
- dm->release(dm);
+ BKE_mesh_from_metaball(&ob->disp, tmpmesh);
+ break;
+
}
+ case OB_MESH:
+ /* copies object and modifiers (but not the data) */
+ if (cage) {
+ /* copies the data */
+ tmpmesh = BKE_mesh_copy(ob->data);
+ /* if not getting the original caged mesh, get final derived mesh */
+ }
+ else {
+ /* Make a dummy mesh, saves copying */
+ DerivedMesh *dm;
+ /* CustomDataMask mask = CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL; */
+ CustomDataMask mask = CD_MASK_MESH; /* this seems more suitable, exporter,
+ * for example, needs CD_MASK_MDEFORMVERT */
+
+ /* Write the display mesh into the dummy mesh */
+ if (render)
+ dm = mesh_create_derived_render(sce, ob, mask);
+ else
+ dm = mesh_create_derived_view(sce, ob, mask);
- break;
- default:
- BKE_report(reports, RPT_ERROR, "Object does not have geometry data");
- return NULL;
+ tmpmesh = BKE_mesh_add("Mesh");
+ DM_to_mesh(dm, tmpmesh, ob);
+ dm->release(dm);
+ }
+
+ break;
+ default:
+ BKE_report(reports, RPT_ERROR, "Object does not have geometry data");
+ return NULL;
}
/* Copy materials to new mesh */
switch (ob->type) {
- case OB_SURF:
- case OB_FONT:
- case OB_CURVE:
- tmpmesh->totcol = tmpcu->totcol;
-
- /* free old material list (if it exists) and adjust user counts */
- if ( tmpcu->mat ) {
- for ( i = tmpcu->totcol; i-- > 0; ) {
- /* are we an object material or data based? */
+ case OB_SURF:
+ case OB_FONT:
+ case OB_CURVE:
+ tmpmesh->totcol = tmpcu->totcol;
+
+ /* free old material list (if it exists) and adjust user counts */
+ if (tmpcu->mat) {
+ for (i = tmpcu->totcol; i-- > 0; ) {
+ /* are we an object material or data based? */
- tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : tmpcu->mat[i];
+ tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : tmpcu->mat[i];
- if (tmpmesh->mat[i]) {
- tmpmesh->mat[i]->id.us++;
+ if (tmpmesh->mat[i]) {
+ tmpmesh->mat[i]->id.us++;
+ }
}
}
- }
- break;
+ break;
#if 0
- /* Crashes when assigning the new material, not sure why */
- case OB_MBALL:
- tmpmb = (MetaBall *)ob->data;
- tmpmesh->totcol = tmpmb->totcol;
-
- /* free old material list (if it exists) and adjust user counts */
- if ( tmpmb->mat ) {
- for ( i = tmpmb->totcol; i-- > 0; ) {
- tmpmesh->mat[i] = tmpmb->mat[i]; /* CRASH HERE ??? */
- if (tmpmesh->mat[i]) {
- tmpmb->mat[i]->id.us++;
+ /* Crashes when assigning the new material, not sure why */
+ case OB_MBALL:
+ tmpmb = (MetaBall *)ob->data;
+ tmpmesh->totcol = tmpmb->totcol;
+
+ /* free old material list (if it exists) and adjust user counts */
+ if (tmpmb->mat) {
+ for (i = tmpmb->totcol; i-- > 0; ) {
+ tmpmesh->mat[i] = tmpmb->mat[i]; /* CRASH HERE ??? */
+ if (tmpmesh->mat[i]) {
+ tmpmb->mat[i]->id.us++;
+ }
}
}
- }
- break;
+ break;
#endif
- case OB_MESH:
- if (!cage) {
- Mesh *origmesh = ob->data;
- tmpmesh->flag = origmesh->flag;
- tmpmesh->mat = MEM_dupallocN(origmesh->mat);
- tmpmesh->totcol = origmesh->totcol;
- tmpmesh->smoothresh = origmesh->smoothresh;
- if ( origmesh->mat ) {
- for ( i = origmesh->totcol; i-- > 0; ) {
- /* are we an object material or data based? */
- tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : origmesh->mat[i];
-
- if (tmpmesh->mat[i]) {
- tmpmesh->mat[i]->id.us++;
+ case OB_MESH:
+ if (!cage) {
+ Mesh *origmesh = ob->data;
+ tmpmesh->flag = origmesh->flag;
+ tmpmesh->mat = MEM_dupallocN(origmesh->mat);
+ tmpmesh->totcol = origmesh->totcol;
+ tmpmesh->smoothresh = origmesh->smoothresh;
+ if (origmesh->mat) {
+ for (i = origmesh->totcol; i-- > 0; ) {
+ /* are we an object material or data based? */
+ tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : origmesh->mat[i];
+
+ if (tmpmesh->mat[i]) {
+ tmpmesh->mat[i]->id.us++;
+ }
}
}
}
- }
- break;
+ break;
} /* end copy materials */
/* cycles and exporters rely on this still */
@@ -277,7 +277,7 @@ static void dupli_render_particle_set(Scene *scene, Object *ob, int level, int e
/* this is to make sure we get render level duplis in groups:
* the derivedmesh must be created before init_render_mesh,
* since object_duplilist does dupliparticles before that */
- dm = mesh_create_derived_render(scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+ dm = mesh_create_derived_render(scene, ob, CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
dm->release(dm);
for (psys = ob->particlesystem.first; psys; psys = psys->next)
@@ -289,7 +289,7 @@ static void dupli_render_particle_set(Scene *scene, Object *ob, int level, int e
group = ob->dup_group;
for (go = group->gobject.first; go; go = go->next)
- dupli_render_particle_set(scene, go->ob, level+1, enable);
+ dupli_render_particle_set(scene, go->ob, level + 1, enable);
}
/* When no longer needed, duplilist should be freed with Object.free_duplilist */
void rna_Object_create_duplilist(Object *ob, ReportList *reports, Scene *sce)
@@ -332,12 +332,12 @@ static PointerRNA rna_Object_shape_key_add(Object *ob, bContext *C, ReportList *
PointerRNA keyptr;
RNA_pointer_create((ID *)ob->data, &RNA_ShapeKey, kb, &keyptr);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return keyptr;
}
else {
- BKE_reportf(reports, RPT_ERROR, "Object \"%s\"does not support shapes", ob->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "Object \"%s\"does not support shapes", ob->id.name + 2);
return PointerRNA_NULL;
}
}
@@ -356,7 +356,7 @@ static void rna_Mesh_assign_verts_to_group(Object *ob, bDeformGroup *group, int
return;
}
- Mesh *me = (Mesh*)ob->data;
+ Mesh *me = (Mesh *)ob->data;
int group_index = BLI_findlink(&ob->defbase, group);
if (group_index == -1) {
BKE_report(reports, RPT_ERROR, "No deform groups assigned to mesh");
@@ -391,7 +391,7 @@ void rna_Object_ray_cast(Object *ob, ReportList *reports, float ray_start[3], fl
BVHTreeFromMesh treeData = {NULL};
if (ob->derivedFinal == NULL) {
- BKE_reportf(reports, RPT_ERROR, "object \"%s\" has no mesh data to be used for ray casting", ob->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "object \"%s\" has no mesh data to be used for ray casting", ob->id.name + 2);
return;
}
@@ -399,7 +399,7 @@ void rna_Object_ray_cast(Object *ob, ReportList *reports, float ray_start[3], fl
bvhtree_from_mesh_faces(&treeData, ob->derivedFinal, 0.0f, 4, 6);
if (treeData.tree == NULL) {
- BKE_reportf(reports, RPT_ERROR, "object \"%s\" could not create internal data for ray casting", ob->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "object \"%s\" could not create internal data for ray casting", ob->id.name + 2);
return;
}
else {
@@ -433,7 +433,7 @@ void rna_Object_closest_point_on_mesh(Object *ob, ReportList *reports, float poi
if (ob->derivedFinal == NULL) {
BKE_reportf(reports, RPT_ERROR, "object \"%s\" has no mesh data to be used for finding nearest point",
- ob->id.name+2);
+ ob->id.name + 2);
return;
}
@@ -442,7 +442,7 @@ void rna_Object_closest_point_on_mesh(Object *ob, ReportList *reports, float poi
if (treeData.tree == NULL) {
BKE_reportf(reports, RPT_ERROR, "object \"%s\" could not create internal data for finding nearest point",
- ob->id.name+2);
+ ob->id.name + 2);
return;
}
else {
@@ -546,7 +546,7 @@ void RNA_api_object(StructRNA *srna)
RNA_def_function_ui_description(func, "Create a Mesh datablock with modifiers applied");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate modifiers");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_boolean(func, "apply_modifiers", 0, "", "Apply modifiers");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply");
@@ -558,10 +558,10 @@ void RNA_api_object(StructRNA *srna)
/* duplis */
func = RNA_def_function(srna, "dupli_list_create", "rna_Object_create_duplilist");
RNA_def_function_ui_description(func, "Create a list of dupli objects for this object, needs to "
- "be freed manually with free_dupli_list to restore the "
- "objects real matrix and layers");
+ "be freed manually with free_dupli_list to restore the "
+ "objects real matrix and layers");
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate duplis");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
RNA_def_function_flag(func, FUNC_USE_REPORTS);
func = RNA_def_function(srna, "dupli_list_clear", "rna_Object_free_duplilist");
@@ -576,7 +576,7 @@ void RNA_api_object(StructRNA *srna)
/* Shape key */
func = RNA_def_function(srna, "shape_key_add", "rna_Object_shape_key_add");
RNA_def_function_ui_description(func, "Add shape key to an object");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_string(func, "name", "Key", 0, "", "Unique name for the new keylock"); /* optional */
RNA_def_boolean(func, "from_mix", 1, "", "Create new shape from existing mix of shapes");
parm = RNA_def_pointer(func, "key", "ShapeKey", "", "New shape keyblock");
@@ -635,7 +635,7 @@ void RNA_api_object(StructRNA *srna)
func = RNA_def_function(srna, "is_visible", "rna_Object_is_visible");
RNA_def_function_ui_description(func, "Determine if object is visible in a given scene");
parm = RNA_def_pointer(func, "scene", "Scene", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_boolean(func, "result", 0, "", "Object visibility");
RNA_def_function_return(func, parm);
@@ -643,7 +643,7 @@ void RNA_api_object(StructRNA *srna)
func = RNA_def_function(srna, "is_modified", "rna_Object_is_modified");
RNA_def_function_ui_description(func, "Determine if this object is modified from the base mesh data");
parm = RNA_def_pointer(func, "scene", "Scene", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_boolean(func, "result", 0, "", "Object visibility");
@@ -652,7 +652,7 @@ void RNA_api_object(StructRNA *srna)
func = RNA_def_function(srna, "is_deform_modified", "rna_Object_is_deform_modified");
RNA_def_function_ui_description(func, "Determine if this object is modified by a deformation from the base mesh data");
parm = RNA_def_pointer(func, "scene", "Scene", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_boolean(func, "result", 0, "", "Object visibility");
@@ -682,7 +682,7 @@ void RNA_api_object_base(StructRNA *srna)
RNA_def_function_ui_description(func,
"Sets the object layers from a 3D View (use when adding an object in local view)");
parm = RNA_def_pointer(func, "view", "SpaceView3D", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
#endif
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index 2e8e597ad35..25866dd996f 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -100,8 +100,8 @@ static EnumPropertyItem empty_vortex_shape_items[] = {
static void rna_Cache_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- PointCache *cache = (PointCache*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ PointCache *cache = (PointCache *)ptr->data;
PTCacheID *pid = NULL;
ListBase pidlist;
@@ -131,8 +131,8 @@ static void rna_Cache_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
static void rna_Cache_toggle_disk_cache(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- PointCache *cache = (PointCache*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ PointCache *cache = (PointCache *)ptr->data;
PTCacheID *pid = NULL;
ListBase pidlist;
@@ -157,8 +157,8 @@ static void rna_Cache_toggle_disk_cache(Main *UNUSED(bmain), Scene *UNUSED(scene
static void rna_Cache_idname_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- PointCache *cache = (PointCache*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ PointCache *cache = (PointCache *)ptr->data;
PTCacheID *pid = NULL, *pid2 = NULL;
ListBase pidlist;
int new_name = 1;
@@ -239,7 +239,7 @@ static void rna_Cache_active_point_cache_index_range(PointerRNA *ptr, int *min,
for (pid = pidlist.first; pid; pid = pid->next) {
if (pid->cache == cache) {
- *max = BLI_countlist(pid->ptcaches)-1;
+ *max = BLI_countlist(pid->ptcaches) - 1;
*max = MAX2(0, *max);
break;
}
@@ -315,7 +315,7 @@ static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr))
{
/* both methods work ok, but return the shorter path */
#if 0
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ModifierData *md = (ModifierData *)modifiers_findByType(ob, eModifierType_Collision);
if (md) {
@@ -332,59 +332,59 @@ static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr))
static int rna_SoftBodySettings_use_edges_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
return (((data->softflag) & OB_SB_EDGES) != 0);
}
static void rna_SoftBodySettings_use_edges_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value) data->softflag |= OB_SB_EDGES;
else data->softflag &= ~OB_SB_EDGES;
}
static int rna_SoftBodySettings_use_goal_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
return (((data->softflag) & OB_SB_GOAL) != 0);
}
static void rna_SoftBodySettings_use_goal_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value) data->softflag |= OB_SB_GOAL;
else data->softflag &= ~OB_SB_GOAL;
}
static int rna_SoftBodySettings_stiff_quads_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
return (((data->softflag) & OB_SB_QUADS) != 0);
}
static void rna_SoftBodySettings_stiff_quads_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value) data->softflag |= OB_SB_QUADS;
else data->softflag &= ~OB_SB_QUADS;
}
static int rna_SoftBodySettings_self_collision_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
return (((data->softflag) & OB_SB_SELF) != 0);
}
static void rna_SoftBodySettings_self_collision_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value) data->softflag |= OB_SB_SELF;
else data->softflag &= ~OB_SB_SELF;
}
static int rna_SoftBodySettings_new_aero_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (data->softflag & OB_SB_AERO_ANGLE)
return 1;
else
@@ -393,73 +393,73 @@ static int rna_SoftBodySettings_new_aero_get(PointerRNA *ptr)
static void rna_SoftBodySettings_new_aero_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value == 1)
data->softflag |= OB_SB_AERO_ANGLE;
- else /* value == 0 */
+ else /* value == 0 */
data->softflag &= ~OB_SB_AERO_ANGLE;
}
static int rna_SoftBodySettings_face_collision_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
return (((data->softflag) & OB_SB_FACECOLL) != 0);
}
static void rna_SoftBodySettings_face_collision_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value) data->softflag |= OB_SB_FACECOLL;
else data->softflag &= ~OB_SB_FACECOLL;
}
static int rna_SoftBodySettings_edge_collision_get(PointerRNA *ptr)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
return (((data->softflag) & OB_SB_EDGECOLL) != 0);
}
static void rna_SoftBodySettings_edge_collision_set(PointerRNA *ptr, int value)
{
- Object *data = (Object*)(ptr->id.data);
+ Object *data = (Object *)(ptr->id.data);
if (value) data->softflag |= OB_SB_EDGECOLL;
else data->softflag &= ~OB_SB_EDGECOLL;
}
static void rna_SoftBodySettings_goal_vgroup_get(PointerRNA *ptr, char *value)
{
- SoftBody *sb = (SoftBody*)ptr->data;
+ SoftBody *sb = (SoftBody *)ptr->data;
rna_object_vgroup_name_index_get(ptr, value, sb->vertgroup);
}
static int rna_SoftBodySettings_goal_vgroup_length(PointerRNA *ptr)
{
- SoftBody *sb = (SoftBody*)ptr->data;
+ SoftBody *sb = (SoftBody *)ptr->data;
return rna_object_vgroup_name_index_length(ptr, sb->vertgroup);
}
static void rna_SoftBodySettings_goal_vgroup_set(PointerRNA *ptr, const char *value)
{
- SoftBody *sb = (SoftBody*)ptr->data;
+ SoftBody *sb = (SoftBody *)ptr->data;
rna_object_vgroup_name_index_set(ptr, value, &sb->vertgroup);
}
static void rna_SoftBodySettings_mass_vgroup_set(PointerRNA *ptr, const char *value)
{
- SoftBody *sb = (SoftBody*)ptr->data;
+ SoftBody *sb = (SoftBody *)ptr->data;
rna_object_vgroup_name_set(ptr, value, sb->namedVG_Mass, sizeof(sb->namedVG_Mass));
}
static void rna_SoftBodySettings_spring_vgroup_set(PointerRNA *ptr, const char *value)
{
- SoftBody *sb = (SoftBody*)ptr->data;
+ SoftBody *sb = (SoftBody *)ptr->data;
rna_object_vgroup_name_set(ptr, value, sb->namedVG_Spring_K, sizeof(sb->namedVG_Spring_K));
}
static char *rna_SoftBodySettings_path(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ModifierData *md = (ModifierData *)modifiers_findByType(ob, eModifierType_Softbody);
return BLI_sprintfN("modifiers[\"%s\"].settings", md->name);
@@ -475,7 +475,7 @@ static int particle_id_check(PointerRNA *ptr)
static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
if (particle_id_check(ptr)) {
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
if (part->pd->forcefield != PFIELD_TEXTURE && part->pd->tex) {
part->pd->tex->id.us--;
@@ -487,12 +487,12 @@ static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
part->pd2->tex = NULL;
}
- DAG_id_tag_update(&part->id, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME|PSYS_RECALC_RESET);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL);
+ DAG_id_tag_update(&part->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME | PSYS_RECALC_RESET);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
else {
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
if (ob->pd->forcefield != PFIELD_TEXTURE && ob->pd->tex) {
ob->pd->tex->id.us--;
@@ -500,14 +500,14 @@ static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
}
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
}
static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if (!particle_id_check(ptr)) {
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
PartDeflect *pd = ob->pd;
ModifierData *md = modifiers_findByType(ob, eModifierType_Surface);
@@ -522,23 +522,23 @@ static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA
ED_object_modifier_remove(NULL, bmain, scene, ob, md);
}
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
}
static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if (particle_id_check(ptr)) {
- DAG_id_tag_update((ID*)ptr->id.data, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME|PSYS_RECALC_RESET);
+ DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME | PSYS_RECALC_RESET);
}
else {
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
/* do this before scene sort, that one checks for CU_PATH */
#if 0 /* XXX */
if (ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE) {
Curve *cu = ob->data;
- cu->flag |= (CU_PATH|CU_3D);
+ cu->flag |= (CU_PATH | CU_3D);
do_curvebuts(B_CU3D); /* all curves too */
}
#endif
@@ -548,11 +548,11 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
DAG_scene_sort(bmain, scene);
if (ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE)
- DAG_id_tag_update(&ob->id, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME);
+ DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
else
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
}
@@ -564,7 +564,7 @@ static char *rna_FieldSettings_path(PointerRNA *ptr)
if (particle_id_check(ptr)) {
/* particle system force field */
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
if (part->pd == pd)
return BLI_sprintfN("force_field_1");
@@ -573,7 +573,7 @@ static char *rna_FieldSettings_path(PointerRNA *ptr)
}
else {
/* object force field */
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
if (ob->pd == pd)
return BLI_sprintfN("field");
@@ -583,18 +583,18 @@ static char *rna_FieldSettings_path(PointerRNA *ptr)
static void rna_EffectorWeight_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update((ID*)ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
DAG_scene_sort(bmain, scene);
- DAG_id_tag_update((ID*)ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
static char *rna_EffectorWeight_path(PointerRNA *ptr)
@@ -604,13 +604,13 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr)
if (particle_id_check(ptr)) {
/* particle effector weights */
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
if (part->effector_weights == ew)
return BLI_sprintfN("effector_weights");
}
else {
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ModifierData *md;
/* check softbody modifier */
@@ -660,7 +660,7 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr)
static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
ModifierData *md = modifiers_findByType(ob, eModifierType_Collision);
/* add/remove modifier as needed */
@@ -669,23 +669,23 @@ static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, P
else if (!ob->pd->deflect && md)
ED_object_modifier_remove(NULL, bmain, scene, ob, md);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
static void rna_CollisionSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
+ DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
static void rna_softbody_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
@@ -697,7 +697,7 @@ static EnumPropertyItem *rna_Effector_shape_itemf(bContext *UNUSED(C), PointerRN
if (particle_id_check(ptr))
return empty_shape_items;
- ob = (Object*)ptr->id.data;
+ ob = (Object *)ptr->id.data;
if (ob->type == OB_CURVE) {
if (ob->pd->forcefield == PFIELD_VORTEX)
@@ -752,7 +752,8 @@ static void rna_def_pointcache(BlenderRNA *brna)
{PTCACHE_COMPRESS_NO, "NO", 0, "No", "No compression"},
{PTCACHE_COMPRESS_LZO, "LIGHT", 0, "Light", "Fast but not so effective compression"},
{PTCACHE_COMPRESS_LZMA, "HEAVY", 0, "Heavy", "Effective but slow compression"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "PointCache", NULL);
RNA_def_struct_ui_text(srna, "Point Cache", "Point cache for physics simulations");
@@ -1081,25 +1082,29 @@ static void rna_def_field(BlenderRNA *brna)
{PFIELD_BOID, "BOID", ICON_FORCE_BOID, "Boid", ""},
{PFIELD_TURBULENCE, "TURBULENCE", ICON_FORCE_TURBULENCE, "Turbulence", "Create turbulence with a noise field"},
{PFIELD_DRAG, "DRAG", ICON_FORCE_DRAG, "Drag", "Create a force that dampens motion"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem falloff_items[] = {
{PFIELD_FALL_SPHERE, "SPHERE", 0, "Sphere", ""},
{PFIELD_FALL_TUBE, "TUBE", 0, "Tube", ""},
{PFIELD_FALL_CONE, "CONE", 0, "Cone", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem texture_items[] = {
{PFIELD_TEX_RGB, "RGB", 0, "RGB", ""},
{PFIELD_TEX_GRAD, "GRADIENT", 0, "Gradient", ""},
{PFIELD_TEX_CURL, "CURL", 0, "Curl", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem zdirection_items[] = {
{PFIELD_Z_BOTH, "BOTH", 0, "Both Z", ""},
{PFIELD_Z_POS, "POSITIVE", 0, "+Z", ""},
{PFIELD_Z_NEG, "NEGATIVE", 0, "-Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem guide_kink_items[] = {
{0, "NONE", 0, "Nothing", ""},
@@ -1109,13 +1114,15 @@ static void rna_def_field(BlenderRNA *brna)
{4, "BRAID", 0, "Braid", ""},
{5, "ROTATION", 0, "Rotation", ""},
{6, "ROLL", 0, "Roll", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem guide_kink_axis_items[] = {
{0, "X", 0, "X", ""},
{1, "Y", 0, "Y", ""},
{2, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FieldSettings", NULL);
RNA_def_struct_sdna(srna, "PartDeflect");
@@ -1495,12 +1502,14 @@ static void rna_def_softbody(BlenderRNA *brna)
{SBC_MODE_MIN, "MINIMAL", 0, "Minimal", "Minimal Spring length * Ball Size"},
{SBC_MODE_MAX, "MAXIMAL", 0, "Maximal", "Maximal Spring length * Ball Size"},
{SBC_MODE_AVGMINMAX, "MINMAX", 0, "AvMinMax", "(Min+Max)/2 * Ball Size"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem aerodynamics_type[] = {
{0, "SIMPLE", 0, "Simple", "Edges receive a drag force from surrounding media"},
{1, "LIFT_FORCE", 0, "Lift Force", "Edges receive a lift force when passing through surrounding media"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SoftBodySettings", NULL);
RNA_def_struct_sdna(srna, "SoftBody");
diff --git a/source/blender/makesrna/intern/rna_packedfile.c b/source/blender/makesrna/intern/rna_packedfile.c
index 1fed98b33eb..e691ca46c69 100644
--- a/source/blender/makesrna/intern/rna_packedfile.c
+++ b/source/blender/makesrna/intern/rna_packedfile.c
@@ -38,7 +38,8 @@ EnumPropertyItem unpack_method_items[] = {
{PF_WRITE_LOCAL, "WRITE_LOCAL", 0, "Write Local File (overwrite existing)", ""},
{PF_USE_ORIGINAL, "USE_ORIGINAL", 0, "Use Original File", ""},
{PF_WRITE_ORIGINAL, "WRITE_ORIGINAL", 0, "Write Original File (overwrite existing)", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#else
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index 52c41c869bb..d179612ae04 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -147,9 +147,9 @@ static void rna_ParticleHairKey_location_object_info(PointerRNA *ptr, ParticleSy
/* given the pointer HairKey *hkey, we iterate over all particles in all
* particle systems in the object "ob" in order to find
- *- the ParticleSystemData to which the HairKey (and hence the particle)
- * belongs (will be stored in psmd_pt)
- *- the ParticleData to which the HairKey belongs (will be stored in pa_pt)
+ * - the ParticleSystemData to which the HairKey (and hence the particle)
+ * belongs (will be stored in psmd_pt)
+ * - the ParticleData to which the HairKey belongs (will be stored in pa_pt)
*
* not a very efficient way of getting hair key location data,
* but it's the best we've got at the present
@@ -242,16 +242,16 @@ static void rna_ParticleHairKey_location_object_set(PointerRNA *ptr, const float
static void particle_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr, short flag)
{
if (ptr->type == &RNA_ParticleSystem) {
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
psys->recalc = flag;
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
else
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA|flag);
+ DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | flag);
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
{
@@ -271,12 +271,12 @@ static void rna_Particle_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Particle_change_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET|PSYS_RECALC_TYPE);
+ particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET | PSYS_RECALC_TYPE);
}
static void rna_Particle_change_physics(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET|PSYS_RECALC_PHYS);
+ particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET | PSYS_RECALC_PHYS);
}
static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -300,12 +300,12 @@ static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget
static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleTarget) {
- Object *ob = (Object*)ptr->id.data;
- ParticleTarget *pt = (ParticleTarget*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ ParticleTarget *pt = (ParticleTarget *)ptr->data;
ParticleSystem *kpsys = NULL, *psys = rna_particle_system_for_target(ob, pt);
if (pt->ob == ob || pt->ob == NULL) {
- kpsys = BLI_findlink(&ob->particlesystem, pt->psys-1);
+ kpsys = BLI_findlink(&ob->particlesystem, pt->psys - 1);
if (kpsys)
pt->flag |= PTARGET_VALID;
@@ -314,7 +314,7 @@ static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr
}
else {
if (pt->ob)
- kpsys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1);
+ kpsys = BLI_findlink(&pt->ob->particlesystem, pt->psys - 1);
if (kpsys)
pt->flag |= PTARGET_VALID;
@@ -328,43 +328,43 @@ static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr
DAG_scene_sort(bmain, scene);
}
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
static void rna_Particle_target_redo(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleTarget) {
- Object *ob = (Object*)ptr->id.data;
- ParticleTarget *pt = (ParticleTarget*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ ParticleTarget *pt = (ParticleTarget *)ptr->data;
ParticleSystem *psys = rna_particle_system_for_target(ob, pt);
psys->recalc = PSYS_RECALC_REDO;
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
}
static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys && !psys->clmd) {
- psys->clmd = (ClothModifierData*)modifier_new(eModifierType_Cloth);
+ psys->clmd = (ClothModifierData *)modifier_new(eModifierType_Cloth);
psys->clmd->sim_parms->goalspring = 0.0f;
- psys->clmd->sim_parms->flags |= CLOTH_SIMSETTINGS_FLAG_GOAL|CLOTH_SIMSETTINGS_FLAG_NO_SPRING_COMPRESS;
+ psys->clmd->sim_parms->flags |= CLOTH_SIMSETTINGS_FLAG_GOAL | CLOTH_SIMSETTINGS_FLAG_NO_SPRING_COMPRESS;
psys->clmd->coll_parms->flags &= ~CLOTH_COLLSETTINGS_FLAG_SELF;
rna_Particle_redo(bmain, scene, ptr);
}
else
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
ParticleSettings *part = psys->part;
return rna_pointer_inherit_refine(ptr, &RNA_ParticleSettings, part);
@@ -372,7 +372,7 @@ static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
int old_type = 0;
@@ -392,21 +392,21 @@ static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value)
}
static void rna_Particle_abspathtime_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
float delta = settings->end + settings->lifetime - settings->sta;
if (settings->draw & PART_ABS_PATH_TIME) {
settings->path_start = settings->sta + settings->path_start * delta;
settings->path_end = settings->sta + settings->path_end * delta;
}
else {
- settings->path_start = (settings->path_start - settings->sta)/delta;
- settings->path_end = (settings->path_end - settings->sta)/delta;
+ settings->path_start = (settings->path_start - settings->sta) / delta;
+ settings->path_end = (settings->path_end - settings->sta) / delta;
}
rna_Particle_redo(bmain, scene, ptr);
}
static void rna_PartSettings_start_set(struct PointerRNA *ptr, float value)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
/* check for clipping */
if (value > settings->end)
@@ -423,7 +423,7 @@ static void rna_PartSettings_start_set(struct PointerRNA *ptr, float value)
static void rna_PartSettings_end_set(struct PointerRNA *ptr, float value)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
/* check for clipping */
if (value < settings->sta)
@@ -434,44 +434,44 @@ static void rna_PartSettings_end_set(struct PointerRNA *ptr, float value)
static void rna_PartSetings_timestep_set(struct PointerRNA *ptr, float value)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
- settings->timetweak = value/0.04f;
+ settings->timetweak = value / 0.04f;
}
static float rna_PartSettings_timestep_get(struct PointerRNA *ptr)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
return settings->timetweak * 0.04f;
}
static void rna_PartSetting_hairlength_set(struct PointerRNA *ptr, float value)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
settings->normfac = value / 4.f;
}
static float rna_PartSetting_hairlength_get(struct PointerRNA *ptr)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
return settings->normfac * 4.f;
}
static void rna_PartSetting_linelentail_set(struct PointerRNA *ptr, float value)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
settings->draw_line[0] = value;
}
static float rna_PartSetting_linelentail_get(struct PointerRNA *ptr)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
return settings->draw_line[0];
}
static void rna_PartSetting_pathstartend_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
if (settings->type == PART_HAIR) {
*min = 0.0f;
@@ -484,20 +484,20 @@ static void rna_PartSetting_pathstartend_range(PointerRNA *ptr, float *min, floa
}
static void rna_PartSetting_linelenhead_set(struct PointerRNA *ptr, float value)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
settings->draw_line[1] = value;
}
static float rna_PartSetting_linelenhead_get(struct PointerRNA *ptr)
{
- ParticleSettings *settings = (ParticleSettings*)ptr->data;
+ ParticleSettings *settings = (ParticleSettings *)ptr->data;
return settings->draw_line[1];
}
static int rna_PartSettings_is_fluid_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->data;
+ ParticleSettings *part = (ParticleSettings *)ptr->data;
return part->type == PART_FLUID;
}
@@ -505,7 +505,7 @@ static int rna_PartSettings_is_fluid_get(PointerRNA *ptr)
void rna_ParticleSystem_name_set(PointerRNA *ptr, const char *value)
{
Object *ob = ptr->id.data;
- ParticleSystem *part = (ParticleSystem*)ptr->data;
+ ParticleSystem *part = (ParticleSystem *)ptr->data;
/* copy the new name into the name slot */
BLI_strncpy_utf8(part->name, value, sizeof(part->name));
@@ -516,7 +516,7 @@ void rna_ParticleSystem_name_set(PointerRNA *ptr, const char *value)
static PointerRNA rna_ParticleSystem_active_particle_target_get(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
ParticleTarget *pt = psys->targets.first;
for (; pt; pt = pt->next) {
@@ -528,15 +528,15 @@ static PointerRNA rna_ParticleSystem_active_particle_target_get(PointerRNA *ptr)
static void rna_ParticleSystem_active_particle_target_index_range(PointerRNA *ptr, int *min, int *max,
int *softmin, int *softmax)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
*min = 0;
- *max = BLI_countlist(&psys->targets)-1;
+ *max = BLI_countlist(&psys->targets) - 1;
*max = MAX2(0, *max);
}
static int rna_ParticleSystem_active_particle_target_index_get(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
ParticleTarget *pt = psys->targets.first;
int i = 0;
@@ -549,7 +549,7 @@ static int rna_ParticleSystem_active_particle_target_index_get(PointerRNA *ptr)
static void rna_ParticleSystem_active_particle_target_index_set(struct PointerRNA *ptr, int value)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
ParticleTarget *pt = psys->targets.first;
int i = 0;
@@ -568,15 +568,15 @@ static int rna_ParticleTarget_name_length(PointerRNA *ptr)
ParticleSystem *psys = NULL;
if (pt->ob)
- psys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1);
+ psys = BLI_findlink(&pt->ob->particlesystem, pt->psys - 1);
else {
- Object *ob = (Object*) ptr->id.data;
- psys = BLI_findlink(&ob->particlesystem, pt->psys-1);
+ Object *ob = (Object *) ptr->id.data;
+ psys = BLI_findlink(&ob->particlesystem, pt->psys - 1);
}
if (psys) {
if (pt->ob)
- return strlen(pt->ob->id.name+2) + 2 + strlen(psys->name);
+ return strlen(pt->ob->id.name + 2) + 2 + strlen(psys->name);
else
return strlen(psys->name);
}
@@ -595,15 +595,15 @@ static void rna_ParticleTarget_name_get(PointerRNA *ptr, char *str)
ParticleSystem *psys = NULL;
if (pt->ob)
- psys = BLI_findlink(&pt->ob->particlesystem, pt->psys-1);
+ psys = BLI_findlink(&pt->ob->particlesystem, pt->psys - 1);
else {
- Object *ob = (Object*) ptr->id.data;
- psys = BLI_findlink(&ob->particlesystem, pt->psys-1);
+ Object *ob = (Object *) ptr->id.data;
+ psys = BLI_findlink(&ob->particlesystem, pt->psys - 1);
}
if (psys) {
if (pt->ob)
- sprintf(str, "%s: %s", pt->ob->id.name+2, psys->name);
+ sprintf(str, "%s: %s", pt->ob->id.name + 2, psys->name);
else
strcpy(str, psys->name);
}
@@ -626,7 +626,7 @@ static char *rna_SPHFluidSettings_path(PointerRNA *ptr)
SPHFluidSettings *fluid = (SPHFluidSettings *)ptr->data;
if (particle_id_check(ptr)) {
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
if (part->fluid == fluid)
return BLI_sprintfN("fluid");
@@ -636,19 +636,19 @@ static char *rna_SPHFluidSettings_path(PointerRNA *ptr)
static int rna_ParticleSystem_multiple_caches_get(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
return (psys->ptcaches.first != psys->ptcaches.last);
}
static int rna_ParticleSystem_editable_get(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
return psys_check_edited(psys);
}
static int rna_ParticleSystem_edited_get(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys->part && psys->part->type == PART_HAIR)
return (psys->flag & PSYS_EDITED || (psys->edit && psys->edit->edited));
@@ -657,7 +657,7 @@ static int rna_ParticleSystem_edited_get(PointerRNA *ptr)
}
static PointerRNA rna_ParticleDupliWeight_active_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
ParticleDupliWeight *dw = part->dupliweights.first;
for (; dw; dw = dw->next) {
@@ -668,15 +668,15 @@ static PointerRNA rna_ParticleDupliWeight_active_get(PointerRNA *ptr)
}
static void rna_ParticleDupliWeight_active_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
*min = 0;
- *max = BLI_countlist(&part->dupliweights)-1;
+ *max = BLI_countlist(&part->dupliweights) - 1;
*max = MAX2(0, *max);
}
static int rna_ParticleDupliWeight_active_index_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
ParticleDupliWeight *dw = part->dupliweights.first;
int i = 0;
@@ -689,7 +689,7 @@ static int rna_ParticleDupliWeight_active_index_get(PointerRNA *ptr)
static void rna_ParticleDupliWeight_active_index_set(struct PointerRNA *ptr, int value)
{
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
ParticleDupliWeight *dw = part->dupliweights.first;
int i = 0;
@@ -715,7 +715,7 @@ static void rna_ParticleDupliWeight_name_get(PointerRNA *ptr, char *str)
ParticleDupliWeight *dw = ptr->data;
if (dw->ob)
- sprintf(str, "%s: %i", dw->ob->id.name+2, dw->count);
+ sprintf(str, "%s: %i", dw->ob->id.name + 2, dw->count);
else
strcpy(str, "No object");
}
@@ -726,7 +726,7 @@ static EnumPropertyItem *rna_Particle_from_itemf(bContext *UNUSED(C), PointerRNA
/*if (part->type==PART_REACTOR) */
/* return part_reactor_from_items; */
/*else */
- return part_from_items;
+ return part_from_items;
}
static EnumPropertyItem *rna_Particle_dist_itemf(bContext *UNUSED(C), PointerRNA *ptr,
@@ -764,7 +764,7 @@ static EnumPropertyItem *rna_Particle_ren_as_itemf(bContext *UNUSED(C), PointerR
static PointerRNA rna_Particle_field1_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
/* weak */
if (!part->pd)
@@ -775,7 +775,7 @@ static PointerRNA rna_Particle_field1_get(PointerRNA *ptr)
static PointerRNA rna_Particle_field2_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->id.data;
/* weak */
if (!part->pd2)
@@ -787,10 +787,10 @@ static PointerRNA rna_Particle_field2_get(PointerRNA *ptr)
static void psys_vg_name_get__internal(PointerRNA *ptr, char *value, int index)
{
Object *ob = ptr->id.data;
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys->vgroup[index] > 0) {
- bDeformGroup *defGroup = BLI_findlink(&ob->defbase, psys->vgroup[index]-1);
+ bDeformGroup *defGroup = BLI_findlink(&ob->defbase, psys->vgroup[index] - 1);
if (defGroup) {
strcpy(value, defGroup->name);
@@ -803,10 +803,10 @@ static void psys_vg_name_get__internal(PointerRNA *ptr, char *value, int index)
static int psys_vg_name_len__internal(PointerRNA *ptr, int index)
{
Object *ob = ptr->id.data;
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys->vgroup[index] > 0) {
- bDeformGroup *defGroup = BLI_findlink(&ob->defbase, psys->vgroup[index]-1);
+ bDeformGroup *defGroup = BLI_findlink(&ob->defbase, psys->vgroup[index] - 1);
if (defGroup) {
return strlen(defGroup->name);
@@ -817,9 +817,9 @@ static int psys_vg_name_len__internal(PointerRNA *ptr, int index)
static void psys_vg_name_set__internal(PointerRNA *ptr, const char *value, int index)
{
Object *ob = ptr->id.data;
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
- if (value[0] =='\0') {
+ if (value[0] == '\0') {
psys->vgroup[index] = 0;
}
else {
@@ -834,19 +834,19 @@ static void psys_vg_name_set__internal(PointerRNA *ptr, const char *value, int i
static char *rna_ParticleSystem_path(PointerRNA *ptr)
{
- ParticleSystem *psys = (ParticleSystem*)ptr->data;
+ ParticleSystem *psys = (ParticleSystem *)ptr->data;
return BLI_sprintfN("particle_systems[\"%s\"]", psys->name);
}
static void rna_ParticleSettings_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->data;
- rna_iterator_array_begin(iter, (void*)part->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
+ ParticleSettings *part = (ParticleSettings *)ptr->data;
+ rna_iterator_array_begin(iter, (void *)part->mtex, sizeof(MTex *), MAX_MTEX, 0, NULL);
}
static PointerRNA rna_ParticleSettings_active_texture_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings*)ptr->data;
+ ParticleSettings *part = (ParticleSettings *)ptr->data;
Tex *tex;
tex = give_current_particle_texture(part);
@@ -855,7 +855,7 @@ static PointerRNA rna_ParticleSettings_active_texture_get(PointerRNA *ptr)
static void rna_ParticleSettings_active_texture_set(PointerRNA *ptr, PointerRNA value)
{
- ParticleSettings *part = (ParticleSettings*)ptr->data;
+ ParticleSettings *part = (ParticleSettings *)ptr->data;
set_current_particle_texture(part, value.data);
}
@@ -1259,35 +1259,40 @@ static void rna_def_particle_settings_mtex(BlenderRNA *brna)
{TEXCO_ORCO, "ORCO", 0, "Generated", "Use the original undeformed coordinates of the object"},
{TEXCO_STRAND, "STRAND", 0, "Strand / Particle",
"Use normalized strand texture coordinate (1D) or particle age (X) and trail position (Y)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_mapping_items[] = {
{MTEX_FLAT, "FLAT", 0, "Flat", "Map X and Y coordinates directly"},
{MTEX_CUBE, "CUBE", 0, "Cube", "Map using the normal vector"},
{MTEX_TUBE, "TUBE", 0, "Tube", "Map with Z as central axis"},
{MTEX_SPHERE, "SPHERE", 0, "Sphere", "Map with Z as central axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_x_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_y_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_z_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ParticleSettingsTextureSlot", "TextureSlot");
RNA_def_struct_sdna(srna, "MTex");
@@ -1914,7 +1919,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
/*TODO: not found in UI, readonly? */
prop = RNA_def_property(srna, "keys_step", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, 0, SHRT_MAX);/*TODO:min,max */
+ RNA_def_property_range(prop, 0, SHRT_MAX); /*TODO:min,max */
RNA_def_property_ui_text(prop, "Keys Step", "");
/* adaptive path rendering */
@@ -2068,7 +2073,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
/* general values */
prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "sta");/*optional if prop names are the same */
+ RNA_def_property_float_sdna(prop, NULL, "sta"); /*optional if prop names are the same */
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_float_funcs(prop, NULL, "rna_PartSettings_start_set", NULL);
@@ -2153,7 +2158,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Number", "Total number of particles");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop = RNA_def_property(srna, "userjit", PROP_INT, PROP_UNSIGNED);/*TODO: can we get a better name for userjit? */
+ prop = RNA_def_property(srna, "userjit", PROP_INT, PROP_UNSIGNED); /*TODO: can we get a better name for userjit? */
RNA_def_property_int_sdna(prop, NULL, "userjit");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_range(prop, 0, 1000);
@@ -2183,7 +2188,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
/* initial velocity factors */
prop = RNA_def_property(srna, "normal_factor", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "normfac");/*optional if prop names are the same */
+ RNA_def_property_float_sdna(prop, NULL, "normfac"); /*optional if prop names are the same */
RNA_def_property_range(prop, -1000.0f, 1000.0f);
RNA_def_property_ui_range(prop, 0, 100, 1, 3);
RNA_def_property_ui_text(prop, "Normal", "Let the surface normal give the particle a starting speed");
@@ -2197,7 +2202,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
prop = RNA_def_property(srna, "factor_random", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "randfac");/*optional if prop names are the same */
+ RNA_def_property_float_sdna(prop, NULL, "randfac"); /*optional if prop names are the same */
RNA_def_property_range(prop, 0.0f, 200.0f);
RNA_def_property_ui_range(prop, 0, 100, 1, 3);
RNA_def_property_ui_text(prop, "Random", "Give the starting speed a random variation");
@@ -2322,7 +2327,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
/* children */
prop = RNA_def_property(srna, "child_nbr", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "child_nbr");/*optional if prop names are the same */
+ RNA_def_property_int_sdna(prop, NULL, "child_nbr"); /*optional if prop names are the same */
RNA_def_property_range(prop, 0, 100000);
RNA_def_property_ui_range(prop, 0, 1000, 1, 0);
RNA_def_property_ui_text(prop, "Children Per Parent", "Number of children/parent");
@@ -2683,7 +2688,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "Particle system name");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER|NA_RENAME, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER | NA_RENAME, NULL);
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ParticleSystem_name_set");
RNA_def_struct_name_property(srna, prop);
@@ -2692,7 +2697,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
/*RNA_def_property_pointer_sdna(prop, NULL, "part"); */
RNA_def_property_struct_type(prop, "ParticleSettings");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
RNA_def_property_pointer_funcs(prop, "rna_particle_settings_get", "rna_particle_settings_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Settings", "Particle system settings");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2970,7 +2975,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
* the next time-step. The user should change ParticlSettings.subframes or
* ParticleSettings.courant_target instead. */
prop = RNA_def_property(srna, "dt_frac", PROP_FLOAT, PROP_NONE);
- RNA_def_property_range(prop, 1.0f/101.0f, 1.0f);
+ RNA_def_property_range(prop, 1.0f / 101.0f, 1.0f);
RNA_def_property_ui_text(prop, "Timestep", "The current simulation time step size, as a fraction of a frame");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index c87dabf46ca..6ec0932dba8 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -57,7 +57,8 @@ EnumPropertyItem posebone_rotmode_items[] = {
{ROT_MODE_ZYX, "ZYX", 0, "ZYX Euler", "ZYX Rotation Order (prone to Gimbal Lock)"},
{ROT_MODE_AXISANGLE, "AXIS_ANGLE", 0, "Axis Angle",
"Axis Angle (W+XYZ), defines a rotation around some axis defined by 3D-Vector"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -103,7 +104,7 @@ static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe
static char *rna_PoseBone_path(PointerRNA *ptr)
{
- return BLI_sprintfN("pose.bones[\"%s\"]", ((bPoseChannel*)ptr->data)->name);
+ return BLI_sprintfN("pose.bones[\"%s\"]", ((bPoseChannel *)ptr->data)->name);
}
static void rna_BoneGroup_color_set_set(PointerRNA *ptr, int value)
@@ -163,7 +164,7 @@ static IDProperty *rna_PoseBone_idprops(PointerRNA *ptr, int create)
static void rna_Pose_ik_solver_set(struct PointerRNA *ptr, int value)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
if (pose->iksolver != value) {
/* the solver has changed, must clean any temporary structures */
@@ -182,14 +183,14 @@ static void rna_Pose_ik_solver_update(Main *bmain, Scene *scene, PointerRNA *ptr
Object *ob = ptr->id.data;
bPose *pose = ptr->data;
- pose->flag |= POSE_RECALC; /* checks & sorts pose channels */
+ pose->flag |= POSE_RECALC; /* checks & sorts pose channels */
DAG_scene_sort(bmain, scene);
BKE_pose_update_constraint_flags(pose);
object_test_constraints(ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA|OB_RECALC_OB);
+ DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
}
/* rotation - axis-angle */
@@ -228,8 +229,8 @@ static void rna_PoseChannel_rotation_mode_set(PointerRNA *ptr, int value)
static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object*)ptr->id.data;
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
char oldname[sizeof(pchan->name)], newname[sizeof(pchan->name)];
/* need to be on the stack */
@@ -241,8 +242,8 @@ static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value)
static int rna_PoseChannel_has_ik_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
return ED_pose_channel_in_IK_chain(ob, pchan);
}
@@ -252,28 +253,28 @@ StructRNA *rna_IKParam_refine(PointerRNA *ptr)
bIKParam *param = (bIKParam *)ptr->data;
switch (param->iksolver) {
- case IKSOLVER_ITASC:
- return &RNA_Itasc;
- default:
- return &RNA_IKParam;
+ case IKSOLVER_ITASC:
+ return &RNA_Itasc;
+ default:
+ return &RNA_IKParam;
}
}
PointerRNA rna_Pose_ikparam_get(struct PointerRNA *ptr)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_IKParam, pose->ikparam);
}
static StructRNA *rna_Pose_ikparam_typef(PointerRNA *ptr)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
switch (pose->iksolver) {
- case IKSOLVER_ITASC:
- return &RNA_Itasc;
- default:
- return &RNA_IKParam;
+ case IKSOLVER_ITASC:
+ return &RNA_Itasc;
+ default:
+ return &RNA_IKParam;
}
}
@@ -307,13 +308,13 @@ static void rna_Itasc_update_rebuild(Main *bmain, Scene *scene, PointerRNA *ptr)
Object *ob = ptr->id.data;
bPose *pose = ob->pose;
- pose->flag |= POSE_RECALC; /* checks & sorts pose channels */
+ pose->flag |= POSE_RECALC; /* checks & sorts pose channels */
rna_Itasc_update(bmain, scene, ptr);
}
static void rna_PoseChannel_bone_custom_set(PointerRNA *ptr, PointerRNA value)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
if (pchan->custom) {
@@ -328,13 +329,13 @@ static void rna_PoseChannel_bone_custom_set(PointerRNA *ptr, PointerRNA value)
static PointerRNA rna_PoseChannel_bone_group_get(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bPose *pose = (ob) ? ob->pose : NULL;
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
bActionGroup *grp;
if (pose)
- grp = BLI_findlink(&pose->agroups, pchan->agrp_index-1);
+ grp = BLI_findlink(&pose->agroups, pchan->agrp_index - 1);
else
grp = NULL;
@@ -343,9 +344,9 @@ static PointerRNA rna_PoseChannel_bone_group_get(PointerRNA *ptr)
static void rna_PoseChannel_bone_group_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bPose *pose = (ob) ? ob->pose : NULL;
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
if (pose)
pchan->agrp_index = BLI_findindex(&pose->agroups, value.data) + 1;
@@ -355,25 +356,25 @@ static void rna_PoseChannel_bone_group_set(PointerRNA *ptr, PointerRNA value)
static int rna_PoseChannel_bone_group_index_get(PointerRNA *ptr)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
- return MAX2(pchan->agrp_index-1, 0);
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
+ return MAX2(pchan->agrp_index - 1, 0);
}
static void rna_PoseChannel_bone_group_index_set(PointerRNA *ptr, int value)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
- pchan->agrp_index = value+1;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
+ pchan->agrp_index = value + 1;
}
static void rna_PoseChannel_bone_group_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bPose *pose = (ob) ? ob->pose : NULL;
*min = 0;
if (pose) {
- *max = BLI_countlist(&pose->agroups)-1;
+ *max = BLI_countlist(&pose->agroups) - 1;
*max = MAX2(0, *max);
}
else
@@ -382,44 +383,44 @@ static void rna_PoseChannel_bone_group_index_range(PointerRNA *ptr, int *min, in
static PointerRNA rna_Pose_active_bone_group_get(PointerRNA *ptr)
{
- bPose *pose = (bPose*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_BoneGroup, BLI_findlink(&pose->agroups, pose->active_group-1));
+ bPose *pose = (bPose *)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_BoneGroup, BLI_findlink(&pose->agroups, pose->active_group - 1));
}
static void rna_Pose_active_bone_group_set(PointerRNA *ptr, PointerRNA value)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
pose->active_group = BLI_findindex(&pose->agroups, value.data) + 1;
}
static int rna_Pose_active_bone_group_index_get(PointerRNA *ptr)
{
- bPose *pose = (bPose*)ptr->data;
- return MAX2(pose->active_group-1, 0);
+ bPose *pose = (bPose *)ptr->data;
+ return MAX2(pose->active_group - 1, 0);
}
static void rna_Pose_active_bone_group_index_set(PointerRNA *ptr, int value)
{
- bPose *pose = (bPose*)ptr->data;
- pose->active_group = value+1;
+ bPose *pose = (bPose *)ptr->data;
+ pose->active_group = value + 1;
}
static void rna_Pose_active_bone_group_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
*min = 0;
- *max = BLI_countlist(&pose->agroups)-1;
+ *max = BLI_countlist(&pose->agroups) - 1;
*max = MAX2(0, *max);
}
#if 0
static void rna_pose_bgroup_name_index_get(PointerRNA *ptr, char *value, int index)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
bActionGroup *grp;
- grp = BLI_findlink(&pose->agroups, index-1);
+ grp = BLI_findlink(&pose->agroups, index - 1);
if (grp) BLI_strncpy(value, grp->name, sizeof(grp->name));
else value[0] = '\0';
@@ -427,16 +428,16 @@ static void rna_pose_bgroup_name_index_get(PointerRNA *ptr, char *value, int ind
static int rna_pose_bgroup_name_index_length(PointerRNA *ptr, int index)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
bActionGroup *grp;
- grp = BLI_findlink(&pose->agroups, index-1);
- return (grp)? strlen(grp->name): 0;
+ grp = BLI_findlink(&pose->agroups, index - 1);
+ return (grp) ? strlen(grp->name) : 0;
}
static void rna_pose_bgroup_name_index_set(PointerRNA *ptr, const char *value, short *index)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
bActionGroup *grp;
int a;
@@ -452,7 +453,7 @@ static void rna_pose_bgroup_name_index_set(PointerRNA *ptr, const char *value, s
static void rna_pose_pgroup_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
bActionGroup *grp;
for (grp = pose->agroups.first; grp; grp = grp->next) {
@@ -468,14 +469,14 @@ static void rna_pose_pgroup_name_set(PointerRNA *ptr, const char *value, char *r
static PointerRNA rna_PoseChannel_active_constraint_get(PointerRNA *ptr)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
bConstraint *con = constraints_get_active(&pchan->constraints);
return rna_pointer_inherit_refine(ptr, &RNA_Constraint, con);
}
static void rna_PoseChannel_active_constraint_set(PointerRNA *ptr, PointerRNA value)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
constraints_set_active(&pchan->constraints, (bConstraint *)value.data);
}
@@ -500,7 +501,7 @@ static void rna_PoseChannel_constraints_remove(ID *id, bPoseChannel *pchan, Repo
remove_constraint(&pchan->constraints, con);
ED_object_constraint_update(ob);
constraints_set_active(&pchan->constraints, NULL);
- WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, id);
+ WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, id);
if (is_ik) {
BIK_clear_data(ob->pose);
@@ -510,16 +511,16 @@ static void rna_PoseChannel_constraints_remove(ID *id, bPoseChannel *pchan, Repo
static int rna_PoseChannel_proxy_editable(PointerRNA *ptr)
{
- Object *ob = (Object*)ptr->id.data;
+ Object *ob = (Object *)ptr->id.data;
bArmature *arm = ob->data;
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
- return (ob->proxy && pchan->bone && (pchan->bone->layer & arm->layer_protected))? 0: PROP_EDITABLE;
+ return (ob->proxy && pchan->bone && (pchan->bone->layer & arm->layer_protected)) ? 0 : PROP_EDITABLE;
}
static int rna_PoseChannel_location_editable(PointerRNA *ptr, int index)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
/* only if the axis in question is locked, not editable... */
if ((index == 0) && (pchan->protectflag & OB_LOCK_LOCX))
@@ -534,7 +535,7 @@ static int rna_PoseChannel_location_editable(PointerRNA *ptr, int index)
static int rna_PoseChannel_scale_editable(PointerRNA *ptr, int index)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
/* only if the axis in question is locked, not editable... */
if ((index == 0) && (pchan->protectflag & OB_LOCK_SCALEX))
@@ -549,7 +550,7 @@ static int rna_PoseChannel_scale_editable(PointerRNA *ptr, int index)
static int rna_PoseChannel_rotation_euler_editable(PointerRNA *ptr, int index)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
/* only if the axis in question is locked, not editable... */
if ((index == 0) && (pchan->protectflag & OB_LOCK_ROTX))
@@ -564,7 +565,7 @@ static int rna_PoseChannel_rotation_euler_editable(PointerRNA *ptr, int index)
static int rna_PoseChannel_rotation_4d_editable(PointerRNA *ptr, int index)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
/* only consider locks if locking components individually... */
if (pchan->protectflag & OB_LOCK_ROT4D) {
@@ -585,7 +586,7 @@ static int rna_PoseChannel_rotation_4d_editable(PointerRNA *ptr, int index)
/* not essential, but much faster then the default lookup function */
int rna_PoseBones_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
{
- bPose *pose = (bPose*)ptr->data;
+ bPose *pose = (bPose *)ptr->data;
bPoseChannel *pchan = BKE_pose_channel_find_name(pose, key);
if (pchan) {
RNA_pointer_create(ptr->id.data, &RNA_PoseBone, pchan, r_ptr);
@@ -598,20 +599,20 @@ int rna_PoseBones_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_
static void rna_PoseChannel_matrix_basis_get(PointerRNA *ptr, float *values)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
BKE_pchan_to_mat4(pchan, (float (*)[4])values);
}
static void rna_PoseChannel_matrix_basis_set(PointerRNA *ptr, const float *values)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
BKE_pchan_apply_mat4(pchan, (float (*)[4])values, FALSE); /* no compat for predictable result */
}
static void rna_PoseChannel_matrix_set(PointerRNA *ptr, const float *values)
{
- bPoseChannel *pchan = (bPoseChannel*)ptr->data;
- Object *ob = (Object*)ptr->id.data;
+ bPoseChannel *pchan = (bPoseChannel *)ptr->data;
+ Object *ob = (Object *)ptr->id.data;
float tmat[4][4];
BKE_armature_mat_pose_to_bone_ex(ob, pchan, (float (*)[4])values, tmat);
@@ -646,7 +647,8 @@ static void rna_def_bone_group(BlenderRNA *brna)
{19, "THEME19", 0, "19 - Theme Color Set", ""},
{20, "THEME20", 0, "20 - Theme Color Set", ""},
{-1, "CUSTOM", 0, "Custom Color Set", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -671,27 +673,29 @@ static void rna_def_bone_group(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_colorSets_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_BoneGroup_color_set_set", NULL);
RNA_def_property_ui_text(prop, "Color Set", "Custom color set to use");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
- /* TODO: editing the colors for this should result in changes to the color type... */
+ /* TODO: editing the colors for this should result in changes to the color type... */
prop = RNA_def_property(srna, "colors", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "ThemeBoneColorSet");
- /* NOTE: the DNA data is not really a pointer, but this code works :) */
+ /* NOTE: the DNA data is not really a pointer, but this code works :) */
RNA_def_property_pointer_sdna(prop, NULL, "cs");
RNA_def_property_ui_text(prop, "Colors", "Copy of the colors associated with the group's color set");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
}
static EnumPropertyItem prop_iksolver_items[] = {
{IKSOLVER_LEGACY, "LEGACY", 0, "Legacy", "Original IK solver"},
{IKSOLVER_ITASC, "ITASC", 0, "iTaSC", "Multi constraint, stateful IK solver"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem prop_solver_items[] = {
{ITASC_SOLVER_SDLS, "SDLS", 0, "SDLS", "Selective Damped Least Square"},
{ITASC_SOLVER_DLS, "DLS", 0, "DLS", "Damped Least Square with Numerical Filtering"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cprop)
@@ -728,16 +732,16 @@ static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cpro
func = RNA_def_function(srna, "remove", "rna_PoseChannel_constraints_remove");
RNA_def_function_ui_description(func, "Remove a constraint from this object");
- RNA_def_function_flag(func, FUNC_USE_REPORTS|FUNC_USE_SELF_ID); /* ID needed for refresh */
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID); /* ID needed for refresh */
/* constraint to remove */
parm = RNA_def_pointer(func, "constraint", "Constraint", "", "Removed constraint");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
static void rna_def_pose_channel(BlenderRNA *brna)
{
- static float default_quat[4] = {1, 0, 0, 0}; /* default quaternion values */
- static float default_axisAngle[4] = {0, 0, 1, 0}; /* default axis-angle rotation values */
+ static float default_quat[4] = {1, 0, 0, 0}; /* default quaternion values */
+ static float default_axisAngle[4] = {0, 0, 1, 0}; /* default axis-angle rotation values */
static float default_scale[3] = {1, 1, 1}; /* default scale values */
const int matrix_dimsize[] = {4, 4};
@@ -791,31 +795,31 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_location_editable");
RNA_def_property_ui_text(prop, "Location", "");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
- /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
+ /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "size");
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_scale_editable");
RNA_def_property_float_array_default(prop, default_scale);
RNA_def_property_ui_text(prop, "Scale", "");
- /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
+ /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
RNA_def_property_float_sdna(prop, NULL, "quat");
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_4d_editable");
RNA_def_property_float_array_default(prop, default_quat);
RNA_def_property_ui_text(prop, "Quaternion Rotation", "Rotation in Quaternions");
- /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
+ /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
- /* XXX: for axis-angle, it would have been nice to have 2 separate fields for UI purposes, but
- * having a single one is better for Keyframing and other property-management situations...
- */
+ /* XXX: for axis-angle, it would have been nice to have 2 separate fields for UI purposes, but
+ * having a single one is better for Keyframing and other property-management situations...
+ */
prop = RNA_def_property(srna, "rotation_axis_angle", PROP_FLOAT, PROP_AXISANGLE);
RNA_def_property_array(prop, 4);
RNA_def_property_float_funcs(prop, "rna_PoseChannel_rotation_axis_angle_get",
@@ -823,26 +827,26 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_4d_editable");
RNA_def_property_float_array_default(prop, default_axisAngle);
RNA_def_property_ui_text(prop, "Axis-Angle Rotation", "Angle of Rotation for Axis-Angle rotation representation");
- /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
+ /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, NULL, "eul");
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_euler_editable");
- /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
+ /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_ui_text(prop, "Euler Rotation", "Rotation in Eulers");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "rotation_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "rotmode");
RNA_def_property_enum_items(prop, posebone_rotmode_items); /* XXX move to using a single define of this someday */
RNA_def_property_enum_funcs(prop, NULL, "rna_PoseChannel_rotation_mode_set", NULL);
- /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
+ /* XXX... disabled, since proxy-locked layers are currently used for ensuring proxy-syncing too */
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_ui_text(prop, "Rotation Mode", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
/* transform matrices - should be read-only since these are set directly by AnimSys evaluation */
prop = RNA_def_property(srna, "matrix_channel", PROP_FLOAT, PROP_MATRIX);
@@ -858,7 +862,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
"Alternative access to location/scale/rotation relative to the parent and own rest bone");
RNA_def_property_float_funcs(prop, "rna_PoseChannel_matrix_basis_get", "rna_PoseChannel_matrix_basis_set", NULL);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
/* final matrix */
prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
@@ -867,7 +871,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, NULL, "rna_PoseChannel_matrix_set", NULL);
RNA_def_property_ui_text(prop, "Pose Matrix",
"Final 4x4 matrix after constraints and drivers are applied (object space)");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
/* Head/Tail Coordinates (in Pose Space) - Automatically calculated... */
prop = RNA_def_property(srna, "head", PROP_FLOAT, PROP_TRANSLATION);
@@ -887,139 +891,139 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, "rna_PoseChannel_has_ik_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Has IK", "Is part of an IK chain");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "lock_ik_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_XDOF);
RNA_def_property_ui_text(prop, "IK X Lock", "Disallow movement around the X axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "lock_ik_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_YDOF);
RNA_def_property_ui_text(prop, "IK Y Lock", "Disallow movement around the Y axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "lock_ik_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_ZDOF);
RNA_def_property_ui_text(prop, "IK Z Lock", "Disallow movement around the Z axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "use_ik_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_XLIMIT);
RNA_def_property_ui_text(prop, "IK X Limit", "Limit movement around the X axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "use_ik_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_YLIMIT);
RNA_def_property_ui_text(prop, "IK Y Limit", "Limit movement around the Y axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "use_ik_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_ZLIMIT);
RNA_def_property_ui_text(prop, "IK Z Limit", "Limit movement around the Z axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "use_ik_rotation_control", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_ROTCTL);
RNA_def_property_ui_text(prop, "IK rot control", "Apply channel rotation as IK constraint");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "use_ik_linear_control", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_LINCTL);
RNA_def_property_ui_text(prop, "IK rot control", "Apply channel size as IK constraint if stretching is enabled");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_min_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "limitmin[0]");
RNA_def_property_range(prop, -M_PI, 0.0f);
RNA_def_property_ui_text(prop, "IK X Minimum", "Minimum angles for IK Limit");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_max_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "limitmax[0]");
RNA_def_property_range(prop, 0.0f, M_PI);
RNA_def_property_ui_text(prop, "IK X Maximum", "Maximum angles for IK Limit");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_min_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "limitmin[1]");
RNA_def_property_range(prop, -M_PI, 0.0f);
RNA_def_property_ui_text(prop, "IK Y Minimum", "Minimum angles for IK Limit");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_max_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "limitmax[1]");
RNA_def_property_range(prop, 0.0f, M_PI);
RNA_def_property_ui_text(prop, "IK Y Maximum", "Maximum angles for IK Limit");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_min_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "limitmin[2]");
RNA_def_property_range(prop, -M_PI, 0.0f);
RNA_def_property_ui_text(prop, "IK Z Minimum", "Minimum angles for IK Limit");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_max_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "limitmax[2]");
RNA_def_property_range(prop, 0.0f, M_PI);
RNA_def_property_ui_text(prop, "IK Z Maximum", "Maximum angles for IK Limit");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_stiffness_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness[0]");
RNA_def_property_range(prop, 0.0f, 0.99f);
RNA_def_property_ui_text(prop, "IK X Stiffness", "IK stiffness around the X axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_stiffness_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness[1]");
RNA_def_property_range(prop, 0.0f, 0.99f);
RNA_def_property_ui_text(prop, "IK Y Stiffness", "IK stiffness around the Y axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_stiffness_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness[2]");
RNA_def_property_range(prop, 0.0f, 0.99f);
RNA_def_property_ui_text(prop, "IK Z Stiffness", "IK stiffness around the Z axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_stretch", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ikstretch");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "IK Stretch", "Allow scaling of the bone for IK");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_IK_update");
prop = RNA_def_property(srna, "ik_rotation_weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ikrotweight");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "IK Rot Weight", "Weight of rotation constraint for IK");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "ik_linear_weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "iklinweight");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "IK Lin Weight", "Weight of scale constraint for IK");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
/* custom bone shapes */
prop = RNA_def_property(srna, "custom_shape", PROP_POINTER, PROP_NONE);
@@ -1029,7 +1033,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_PoseChannel_bone_custom_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Custom Object", "Object that defines custom draw type for this bone");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "custom_shape_transform", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "custom_tx");
@@ -1038,7 +1042,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Custom Shape Transform",
"Bone that defines the display transform of this custom shape");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
/* bone groups */
prop = RNA_def_property(srna, "bone_group_index", PROP_INT, PROP_NONE);
@@ -1049,7 +1053,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
"rna_PoseChannel_bone_group_index_range");
RNA_def_property_ui_text(prop, "Bone Group Index", "Bone Group this pose channel belongs to (0=no group)");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "bone_group", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "BoneGroup");
@@ -1058,7 +1062,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
"rna_PoseChannel_bone_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Bone Group", "Bone Group this pose channel belongs to");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
/* transform locks */
prop = RNA_def_property(srna, "lock_location", PROP_BOOLEAN, PROP_NONE);
@@ -1067,7 +1071,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Location", "Lock editing of location in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "lock_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROTX);
@@ -1075,25 +1079,25 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Rotation", "Lock editing of rotation in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
- /* XXX this is sub-optimal - it really should be included above, but due to technical reasons
- * we can't do this! */
+ /* XXX this is sub-optimal - it really should be included above, but due to technical reasons
+ * we can't do this! */
prop = RNA_def_property(srna, "lock_rotation_w", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROTW);
RNA_def_property_ui_text(prop, "Lock Rotation (4D Angle)",
"Lock editing of 'angle' component of four-component rotations in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
- /* XXX this needs a better name */
+ /* XXX this needs a better name */
prop = RNA_def_property(srna, "lock_rotations_4d", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROT4D);
RNA_def_property_ui_text(prop, "Lock Rotations (4D)",
"Lock editing of four component rotations by components (instead of as Eulers)");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "lock_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_SCALEX);
@@ -1101,7 +1105,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Scale", "Lock editing of scale in the interface");
RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1);
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
RNA_api_pose_channel(srna);
}
@@ -1114,7 +1118,8 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
{ITASC_SIMULATION, "SIMULATION", 0, "Simulation",
"Statefull solver running in real-time context and ignoring actions "
"and non-IK constraints"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_itasc_reiteration_items[] = {
{0, "NEVER", 0, "Never", "The solver does not reiterate, not even on first frame (starts from rest pose)"},
{ITASC_INITIAL_REITERATION, "INITIAL", 0, "Initial",
@@ -1122,7 +1127,8 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
"subsequent frame"},
{ITASC_INITIAL_REITERATION|ITASC_REITERATION, "ALWAYS", 0, "Always",
"The solver reiterates (converges) on all frames"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -1135,26 +1141,26 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "precision");
RNA_def_property_range(prop, 0.0f, 0.1f);
RNA_def_property_ui_text(prop, "Precision", "Precision of convergence in case of reiteration");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "numiter");
RNA_def_property_range(prop, 1.f, 1000.f);
RNA_def_property_ui_text(prop, "Iterations",
"Maximum number of iterations for convergence in case of reiteration");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "step_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "numstep");
RNA_def_property_range(prop, 1.f, 50.f);
RNA_def_property_ui_text(prop, "Num steps", "Divide the frame interval into this many steps");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_itasc_mode_items);
RNA_def_property_ui_text(prop, "Mode", NULL);
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update_rebuild");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update_rebuild");
prop = RNA_def_property(srna, "reiteration_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
@@ -1162,26 +1168,26 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Reiteration",
"Defines if the solver is allowed to reiterate (converge until "
"precision is met) on none, first or all frames");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "use_auto_step", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ITASC_AUTO_STEP);
RNA_def_property_ui_text(prop, "Auto step",
"Automatically determine the optimal number of steps for best "
"performance/accuracy trade off");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "step_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "minstep");
RNA_def_property_range(prop, 0.0f, 0.1f);
RNA_def_property_ui_text(prop, "Min step", "Lower bound for timestep in second in case of automatic substeps");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "step_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxstep");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Max step", "Higher bound for timestep in second in case of automatic substeps");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "feedback", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "feedback");
@@ -1189,19 +1195,19 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Feedback",
"Feedback coefficient for error correction, average response time is 1/feedback "
"(default=20)");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "velocity_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxvel");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Max Velocity", "Maximum joint velocity in rad/s (default=50)");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "solver", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "solver");
RNA_def_property_enum_items(prop, prop_solver_items);
RNA_def_property_ui_text(prop, "Solver", "Solving method selection: automatic damping or manual damping");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update_rebuild");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update_rebuild");
prop = RNA_def_property(srna, "damping_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampmax");
@@ -1209,7 +1215,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Damp",
"Maximum damping coefficient when singular value is nearly 0 "
"(higher values=more stability, less reactivity - default=0.5)");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
prop = RNA_def_property(srna, "damping_epsilon", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampeps");
@@ -1217,7 +1223,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Epsilon",
"Singular value under which damping is progressively applied "
"(higher values=more stability, less reactivity - default=0.1)");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Itasc_update");
}
static void rna_def_pose_ikparam(BlenderRNA *brna)
@@ -1258,14 +1264,14 @@ static void rna_def_bone_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_pointer_funcs(prop, "rna_Pose_active_bone_group_get",
"rna_Pose_active_bone_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Active Bone Group", "Active bone group for this pose");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "active_group");
RNA_def_property_int_funcs(prop, "rna_Pose_active_bone_group_index_get", "rna_Pose_active_bone_group_index_set",
"rna_Pose_active_bone_group_index_range");
RNA_def_property_ui_text(prop, "Active Bone Group Index", "Active index in bone groups array");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
}
static void rna_def_pose(BlenderRNA *brna)
@@ -1283,7 +1289,7 @@ static void rna_def_pose(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "chanbase", NULL);
RNA_def_property_struct_type(prop, "PoseBone");
RNA_def_property_ui_text(prop, "Pose Bones", "Individual pose bones for the armature");
- /* can be removed, only for fast lookup */
+ /* can be removed, only for fast lookup */
RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL, "rna_PoseBones_lookup_string", NULL);
/* bone groups */
@@ -1300,7 +1306,7 @@ static void rna_def_pose(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_iksolver_items);
RNA_def_property_ui_text(prop, "IK Solver",
"Selection of IK solver for IK chain, current choice is 0 for Legacy, 1 for iTaSC");
- RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_ik_solver_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_ik_solver_update");
prop = RNA_def_property(srna, "ik_param", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "IKParam");
diff --git a/source/blender/makesrna/intern/rna_pose_api.c b/source/blender/makesrna/intern/rna_pose_api.c
index 531a85edeea..ed4690ac6a7 100644
--- a/source/blender/makesrna/intern/rna_pose_api.c
+++ b/source/blender/makesrna/intern/rna_pose_api.c
@@ -71,7 +71,7 @@ void RNA_api_pose_channel(StructRNA *srna)
func = RNA_def_function(srna, "evaluate_envelope", "rna_PoseBone_do_envelope");
RNA_def_function_ui_description(func, "Calculate bone envelope at given point");
parm = RNA_def_float_vector_xyz(func, "point", 3, NULL, -FLT_MAX, FLT_MAX, "Point",
- "Position in 3d space to evaluate", -FLT_MAX, FLT_MAX);
+ "Position in 3d space to evaluate", -FLT_MAX, FLT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
/* return value */
parm = RNA_def_float(func, "factor", 0, -FLT_MAX, FLT_MAX, "Factor", "Envelope factor", -FLT_MAX, FLT_MAX);
diff --git a/source/blender/makesrna/intern/rna_property.c b/source/blender/makesrna/intern/rna_property.c
index 637e21cf6c5..bf9f924489b 100644
--- a/source/blender/makesrna/intern/rna_property.c
+++ b/source/blender/makesrna/intern/rna_property.c
@@ -41,16 +41,17 @@ EnumPropertyItem gameproperty_type_items[] = {
{GPROP_FLOAT, "FLOAT", 0, "Float", "Floating-Point Property"},
{GPROP_STRING, "STRING", 0, "String", "String Property"},
{GPROP_TIME, "TIMER", 0, "Timer", "Timer Property"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#include "BKE_property.h"
-static StructRNA* rna_GameProperty_refine(struct PointerRNA *ptr)
+static StructRNA *rna_GameProperty_refine(struct PointerRNA *ptr)
{
- bProperty *property = (bProperty*)ptr->data;
+ bProperty *property = (bProperty *)ptr->data;
switch (property->type) {
case GPROP_BOOL:
@@ -71,20 +72,20 @@ static StructRNA* rna_GameProperty_refine(struct PointerRNA *ptr)
/* for both float and timer */
static float rna_GameFloatProperty_value_get(PointerRNA *ptr)
{
- bProperty *prop = (bProperty*)(ptr->data);
- return *(float*)(&prop->data);
+ bProperty *prop = (bProperty *)(ptr->data);
+ return *(float *)(&prop->data);
}
static void rna_GameFloatProperty_value_set(PointerRNA *ptr, float value)
{
- bProperty *prop = (bProperty*)(ptr->data);
+ bProperty *prop = (bProperty *)(ptr->data);
CLAMP(value, -10000.0f, 10000.0f);
- *(float*)(&prop->data) = value;
+ *(float *)(&prop->data) = value;
}
static void rna_GameProperty_type_set(PointerRNA *ptr, int value)
{
- bProperty *prop = (bProperty*)(ptr->data);
+ bProperty *prop = (bProperty *)(ptr->data);
if (prop->type != value) {
prop->type = value;
@@ -94,7 +95,7 @@ static void rna_GameProperty_type_set(PointerRNA *ptr, int value)
static void rna_GameProperty_name_set(PointerRNA *ptr, const char *value)
{
- bProperty *prop = (bProperty*)(ptr->data);
+ bProperty *prop = (bProperty *)(ptr->data);
BLI_strncpy_utf8(prop->name, value, sizeof(prop->name));
unique_property(NULL, prop, 1);
}
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 69d9ce05d7d..fff16650a93 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -184,10 +184,10 @@ static StructRNA *rna_RenderEngine_register(Main *bmain, ReportList *reports, vo
et->ext.free = free;
RNA_struct_blender_type_set(et->ext.srna, et);
- et->update = (have_function[0])? engine_update: NULL;
- et->render = (have_function[1])? engine_render: NULL;
- et->view_update = (have_function[2])? engine_view_update: NULL;
- et->view_draw = (have_function[3])? engine_view_draw: NULL;
+ et->update = (have_function[0]) ? engine_update : NULL;
+ et->render = (have_function[1]) ? engine_render : NULL;
+ et->view_update = (have_function[2]) ? engine_view_update : NULL;
+ et->view_draw = (have_function[3]) ? engine_view_draw : NULL;
BLI_addtail(&R_engines, et);
@@ -200,66 +200,66 @@ static void **rna_RenderEngine_instance(PointerRNA *ptr)
return &engine->py_instance;
}
-static StructRNA* rna_RenderEngine_refine(PointerRNA *ptr)
+static StructRNA *rna_RenderEngine_refine(PointerRNA *ptr)
{
- RenderEngine *engine = (RenderEngine*)ptr->data;
- return (engine->type && engine->type->ext.srna)? engine->type->ext.srna: &RNA_RenderEngine;
+ RenderEngine *engine = (RenderEngine *)ptr->data;
+ return (engine->type && engine->type->ext.srna) ? engine->type->ext.srna : &RNA_RenderEngine;
}
static void rna_RenderResult_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- RenderResult *rr = (RenderResult*)ptr->data;
+ RenderResult *rr = (RenderResult *)ptr->data;
rna_iterator_listbase_begin(iter, &rr->layers, NULL);
}
static void rna_RenderLayer_passes_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- RenderLayer *rl = (RenderLayer*)ptr->data;
+ RenderLayer *rl = (RenderLayer *)ptr->data;
rna_iterator_listbase_begin(iter, &rl->passes, NULL);
}
static int rna_RenderLayer_rect_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- RenderLayer *rl = (RenderLayer*)ptr->data;
+ RenderLayer *rl = (RenderLayer *)ptr->data;
- length[0] = rl->rectx*rl->recty;
+ length[0] = rl->rectx * rl->recty;
length[1] = 4;
- return length[0]*length[1];
+ return length[0] * length[1];
}
static void rna_RenderLayer_rect_get(PointerRNA *ptr, float *values)
{
- RenderLayer *rl = (RenderLayer*)ptr->data;
- memcpy(values, rl->rectf, sizeof(float)*rl->rectx*rl->recty*4);
+ RenderLayer *rl = (RenderLayer *)ptr->data;
+ memcpy(values, rl->rectf, sizeof(float) * rl->rectx * rl->recty * 4);
}
void rna_RenderLayer_rect_set(PointerRNA *ptr, const float *values)
{
- RenderLayer *rl = (RenderLayer*)ptr->data;
- memcpy(rl->rectf, values, sizeof(float)*rl->rectx*rl->recty*4);
+ RenderLayer *rl = (RenderLayer *)ptr->data;
+ memcpy(rl->rectf, values, sizeof(float) * rl->rectx * rl->recty * 4);
}
static int rna_RenderPass_rect_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- RenderPass *rpass = (RenderPass*)ptr->data;
+ RenderPass *rpass = (RenderPass *)ptr->data;
- length[0] = rpass->rectx*rpass->recty;
+ length[0] = rpass->rectx * rpass->recty;
length[1] = rpass->channels;
- return length[0]*length[1];
+ return length[0] * length[1];
}
static void rna_RenderPass_rect_get(PointerRNA *ptr, float *values)
{
- RenderPass *rpass = (RenderPass*)ptr->data;
- memcpy(values, rpass->rect, sizeof(float)*rpass->rectx*rpass->recty*rpass->channels);
+ RenderPass *rpass = (RenderPass *)ptr->data;
+ memcpy(values, rpass->rect, sizeof(float) * rpass->rectx * rpass->recty * rpass->channels);
}
void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values)
{
- RenderPass *rpass = (RenderPass*)ptr->data;
- memcpy(rpass->rect, values, sizeof(float)*rpass->rectx*rpass->recty*rpass->channels);
+ RenderPass *rpass = (RenderPass *)ptr->data;
+ memcpy(rpass->rect, values, sizeof(float) * rpass->rectx * rpass->recty * rpass->channels);
}
#else /* RNA_RUNTIME */
@@ -364,7 +364,7 @@ static void rna_def_render_engine(BlenderRNA *brna)
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_TRANSLATE);
RNA_def_property_string_sdna(prop, NULL, "type->name");
@@ -398,8 +398,8 @@ static void rna_def_render_result(BlenderRNA *brna)
RNA_def_function_ui_description(func, "Copies the pixels of this render result from an image file");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_string_file_name(func, "filename", "", FILE_MAX, "File Name",
- "Filename to load into this render tile, must be no smaller than "
- "the render result");
+ "Filename to load into this render tile, must be no smaller than "
+ "the render result");
RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_define_verify_sdna(0);
@@ -434,7 +434,7 @@ static void rna_def_render_layer(BlenderRNA *brna)
RNA_def_function_ui_description(func, "Copies the pixels of this renderlayer from an image file");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
prop = RNA_def_string(func, "filename", "", 0, "Filename",
- "Filename to load into this render tile, must be no smaller than the renderlayer");
+ "Filename to load into this render tile, must be no smaller than the renderlayer");
RNA_def_property_flag(prop, PROP_REQUIRED);
RNA_def_int(func, "x", 0, 0, INT_MAX, "Offset X",
"Offset the position to copy from if the image is larger than the render layer", 0, INT_MAX);
@@ -492,7 +492,8 @@ static void rna_def_render_pass(BlenderRNA *brna)
{SCE_PASS_TRANSM_DIRECT, "TRANSMISSION_DIRECT", 0, "Transmission Direct", ""},
{SCE_PASS_TRANSM_INDIRECT, "TRANSMISSION_INDIRECT", 0, "Transmission Indirect", ""},
{SCE_PASS_TRANSM_COLOR, "TRANSMISSION_COLOR", 0, "Transmission Color", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "RenderPass", NULL);
RNA_def_struct_ui_text(srna, "Render Pass", "");
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index e9f35debe72..38fbe708038 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -42,7 +42,8 @@ EnumPropertyItem property_type_items[] = {
{PROP_ENUM, "ENUM", 0, "Enumeration", ""},
{PROP_POINTER, "POINTER", 0, "Pointer", ""},
{PROP_COLLECTION, "COLLECTION", 0, "Collection", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem property_subtype_items[] = {
{PROP_NONE, "NONE", 0, "None", ""},
@@ -79,7 +80,8 @@ EnumPropertyItem property_subtype_items[] = {
/* booleans */
{PROP_LAYER, "LAYER", 0, "Layer", ""},
{PROP_LAYER_MEMBER, "LAYER_MEMBER", 0, "Layer Member", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem property_unit_items[] = {
{PROP_UNIT_NONE, "NONE", 0, "None", ""},
@@ -90,7 +92,8 @@ EnumPropertyItem property_unit_items[] = {
{PROP_UNIT_TIME, "TIME", 0, "Time", ""},
{PROP_UNIT_VELOCITY, "VELOCITY", 0, "Velocity", ""},
{PROP_UNIT_ACCELERATION, "ACCELERATION", 0, "Acceleration", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#include "MEM_guardedalloc.h"
@@ -101,57 +104,57 @@ EnumPropertyItem property_unit_items[] = {
static void rna_Struct_identifier_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((StructRNA*)ptr->data)->identifier);
+ strcpy(value, ((StructRNA *)ptr->data)->identifier);
}
static int rna_Struct_identifier_length(PointerRNA *ptr)
{
- return strlen(((StructRNA*)ptr->data)->identifier);
+ return strlen(((StructRNA *)ptr->data)->identifier);
}
static void rna_Struct_description_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((StructRNA*)ptr->data)->description);
+ strcpy(value, ((StructRNA *)ptr->data)->description);
}
static int rna_Struct_description_length(PointerRNA *ptr)
{
- return strlen(((StructRNA*)ptr->data)->description);
+ return strlen(((StructRNA *)ptr->data)->description);
}
static void rna_Struct_name_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((StructRNA*)ptr->data)->name);
+ strcpy(value, ((StructRNA *)ptr->data)->name);
}
static int rna_Struct_name_length(PointerRNA *ptr)
{
- return strlen(((StructRNA*)ptr->data)->name);
+ return strlen(((StructRNA *)ptr->data)->name);
}
static void rna_Struct_translation_context_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((StructRNA*)ptr->data)->translation_context ? ((StructRNA*)ptr->data)->translation_context : "");
+ strcpy(value, ((StructRNA *)ptr->data)->translation_context ? ((StructRNA *)ptr->data)->translation_context : "");
}
static int rna_Struct_translation_context_length(PointerRNA *ptr)
{
- return ((StructRNA*)ptr->data)->translation_context ? strlen(((StructRNA*)ptr->data)->translation_context) : 0;
+ return ((StructRNA *)ptr->data)->translation_context ? strlen(((StructRNA *)ptr->data)->translation_context) : 0;
}
static PointerRNA rna_Struct_base_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((StructRNA*)ptr->data)->base);
+ return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((StructRNA *)ptr->data)->base);
}
static PointerRNA rna_Struct_nested_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((StructRNA*)ptr->data)->nested);
+ return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((StructRNA *)ptr->data)->nested);
}
static PointerRNA rna_Struct_name_property_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_Property, ((StructRNA*)ptr->data)->nameproperty);
+ return rna_pointer_inherit_refine(ptr, &RNA_Property, ((StructRNA *)ptr->data)->nameproperty);
}
/* Struct property iteration. This is quite complicated, the purpose is to
@@ -160,7 +163,7 @@ static PointerRNA rna_Struct_name_property_get(PointerRNA *ptr)
static int rna_idproperty_known(CollectionPropertyIterator *iter, void *data)
{
- IDProperty *idprop = (IDProperty*)data;
+ IDProperty *idprop = (IDProperty *)data;
PropertyRNA *prop;
StructRNA *ptype = iter->builtin_parent.type;
@@ -177,7 +180,7 @@ static int rna_idproperty_known(CollectionPropertyIterator *iter, void *data)
static int rna_property_builtin(CollectionPropertyIterator *UNUSED(iter), void *data)
{
- PropertyRNA *prop = (PropertyRNA*)data;
+ PropertyRNA *prop = (PropertyRNA *)data;
/* function to skip builtin rna properties */
@@ -186,7 +189,7 @@ static int rna_property_builtin(CollectionPropertyIterator *UNUSED(iter), void *
static int rna_function_builtin(CollectionPropertyIterator *UNUSED(iter), void *data)
{
- FunctionRNA *func = (FunctionRNA*)data;
+ FunctionRNA *func = (FunctionRNA *)data;
/* function to skip builtin rna functions */
@@ -200,9 +203,9 @@ static void rna_inheritance_next_level_restart(CollectionPropertyIterator *iter,
StructRNA *srna;
int i;
- srna = (StructRNA*)iter->parent.data;
+ srna = (StructRNA *)iter->parent.data;
iter->level--;
- for (i = iter->level; i>0; i--)
+ for (i = iter->level; i > 0; i--)
srna = srna->base;
rna_iterator_listbase_end(iter);
@@ -363,7 +366,7 @@ int rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key, Point
do {
if (srna->cont.prophash) {
- prop = BLI_ghash_lookup(srna->cont.prophash, (void*)key);
+ prop = BLI_ghash_lookup(srna->cont.prophash, (void *)key);
if (prop) {
propptr.type = &RNA_Property;
@@ -420,7 +423,7 @@ PointerRNA rna_builtin_type_get(PointerRNA *ptr)
static StructRNA *rna_Property_refine(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr); /* XXX ptr? */
@@ -438,185 +441,185 @@ static StructRNA *rna_Property_refine(PointerRNA *ptr)
static void rna_Property_identifier_get(PointerRNA *ptr, char *value)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- strcpy(value, ((PropertyRNA*)prop)->identifier);
+ strcpy(value, ((PropertyRNA *)prop)->identifier);
}
static int rna_Property_identifier_length(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return strlen(prop->identifier);
}
static void rna_Property_name_get(PointerRNA *ptr, char *value)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
strcpy(value, prop->name);
}
static int rna_Property_name_length(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return strlen(prop->name);
}
static void rna_Property_description_get(PointerRNA *ptr, char *value)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- strcpy(value, prop->description ? prop->description:"");
+ strcpy(value, prop->description ? prop->description : "");
}
static int rna_Property_description_length(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return prop->description ? strlen(prop->description) : 0;
}
static void rna_Property_translation_context_get(PointerRNA *ptr, char *value)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- strcpy(value, prop->translation_context ? prop->translation_context:"");
+ strcpy(value, prop->translation_context ? prop->translation_context : "");
}
static int rna_Property_translation_context_length(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return prop->translation_context ? strlen(prop->translation_context) : 0;
}
static int rna_Property_type_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return prop->type;
}
static int rna_Property_subtype_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return prop->subtype;
}
static PointerRNA rna_Property_srna_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return rna_pointer_inherit_refine(ptr, &RNA_Struct, prop->srna);
}
static int rna_Property_unit_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return RNA_SUBTYPE_UNIT(prop->subtype);
}
static int rna_Property_readonly_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
/* don't use this becaure it will call functions that check the internal
* data for introspection we only need to know if it can be edited so the
* flag is better for this */
/* return RNA_property_editable(ptr, prop); */
- return prop->flag & PROP_EDITABLE ? 0:1;
+ return prop->flag & PROP_EDITABLE ? 0 : 1;
}
static int rna_Property_animatable_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
return (prop->flag & PROP_ANIMATABLE) != 0;
}
static int rna_Property_use_output_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- return prop->flag & PROP_OUTPUT ? 1:0;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ return prop->flag & PROP_OUTPUT ? 1 : 0;
}
static int rna_Property_is_required_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- return prop->flag & PROP_REQUIRED ? 1:0;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ return prop->flag & PROP_REQUIRED ? 1 : 0;
}
static int rna_Property_is_never_none_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- return prop->flag & PROP_NEVER_NULL ? 1:0;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ return prop->flag & PROP_NEVER_NULL ? 1 : 0;
}
static int rna_Property_is_hidden_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- return prop->flag & PROP_HIDDEN ? 1:0;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ return prop->flag & PROP_HIDDEN ? 1 : 0;
}
static int rna_Property_is_skip_save_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- return prop->flag & PROP_SKIP_SAVE ? 1:0;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ return prop->flag & PROP_SKIP_SAVE ? 1 : 0;
}
static int rna_Property_is_enum_flag_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- return prop->flag & PROP_ENUM_FLAG ? 1:0;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ return prop->flag & PROP_ENUM_FLAG ? 1 : 0;
}
static int rna_Property_array_length_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
return prop->totarraylength;
}
static int rna_Property_registered_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
return prop->flag & PROP_REGISTER;
}
static int rna_Property_registered_optional_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
return prop->flag & PROP_REGISTER_OPTIONAL;
}
static int rna_Property_runtime_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
return prop->flag & PROP_RUNTIME;
}
static int rna_BoolProperty_default_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((BoolPropertyRNA*)prop)->defaultvalue;
+ return ((BoolPropertyRNA *)prop)->defaultvalue;
}
static int rna_IntProperty_default_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((IntPropertyRNA*)prop)->defaultvalue;
+ return ((IntPropertyRNA *)prop)->defaultvalue;
}
/* int/float/bool */
static int rna_NumberProperty_default_array_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
length[0] = prop->totarraylength;
@@ -625,8 +628,8 @@ static int rna_NumberProperty_default_array_get_length(PointerRNA *ptr, int leng
}
static void rna_IntProperty_default_array_get(PointerRNA *ptr, int *values)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- IntPropertyRNA *nprop = (IntPropertyRNA*)prop;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ IntPropertyRNA *nprop = (IntPropertyRNA *)prop;
rna_idproperty_check(&prop, ptr);
if (nprop->defaultarray) {
@@ -640,8 +643,8 @@ static void rna_IntProperty_default_array_get(PointerRNA *ptr, int *values)
}
static void rna_BoolProperty_default_array_get(PointerRNA *ptr, int *values)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- BoolPropertyRNA *nprop = (BoolPropertyRNA*)prop;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ BoolPropertyRNA *nprop = (BoolPropertyRNA *)prop;
rna_idproperty_check(&prop, ptr);
if (nprop->defaultarray) {
@@ -655,8 +658,8 @@ static void rna_BoolProperty_default_array_get(PointerRNA *ptr, int *values)
}
static void rna_FloatProperty_default_array_get(PointerRNA *ptr, float *values)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
- FloatPropertyRNA *nprop = (FloatPropertyRNA*)prop;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+ FloatPropertyRNA *nprop = (FloatPropertyRNA *)prop;
rna_idproperty_check(&prop, ptr);
if (nprop->defaultarray) {
@@ -671,125 +674,125 @@ static void rna_FloatProperty_default_array_get(PointerRNA *ptr, float *values)
static int rna_IntProperty_hard_min_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((IntPropertyRNA*)prop)->hardmin;
+ return ((IntPropertyRNA *)prop)->hardmin;
}
static int rna_IntProperty_hard_max_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((IntPropertyRNA*)prop)->hardmax;
+ return ((IntPropertyRNA *)prop)->hardmax;
}
static int rna_IntProperty_soft_min_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((IntPropertyRNA*)prop)->softmin;
+ return ((IntPropertyRNA *)prop)->softmin;
}
static int rna_IntProperty_soft_max_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((IntPropertyRNA*)prop)->softmax;
+ return ((IntPropertyRNA *)prop)->softmax;
}
static int rna_IntProperty_step_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((IntPropertyRNA*)prop)->step;
+ return ((IntPropertyRNA *)prop)->step;
}
static float rna_FloatProperty_default_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->defaultvalue;
+ return ((FloatPropertyRNA *)prop)->defaultvalue;
}
static float rna_FloatProperty_hard_min_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->hardmin;
+ return ((FloatPropertyRNA *)prop)->hardmin;
}
static float rna_FloatProperty_hard_max_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->hardmax;
+ return ((FloatPropertyRNA *)prop)->hardmax;
}
static float rna_FloatProperty_soft_min_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->softmin;
+ return ((FloatPropertyRNA *)prop)->softmin;
}
static float rna_FloatProperty_soft_max_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->softmax;
+ return ((FloatPropertyRNA *)prop)->softmax;
}
static float rna_FloatProperty_step_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->step;
+ return ((FloatPropertyRNA *)prop)->step;
}
static int rna_FloatProperty_precision_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((FloatPropertyRNA*)prop)->precision;
+ return ((FloatPropertyRNA *)prop)->precision;
}
static void rna_StringProperty_default_get(PointerRNA *ptr, char *value)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- strcpy(value, ((StringPropertyRNA*)prop)->defaultvalue);
+ strcpy(value, ((StringPropertyRNA *)prop)->defaultvalue);
}
static int rna_StringProperty_default_length(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return strlen(((StringPropertyRNA*)prop)->defaultvalue);
+ return strlen(((StringPropertyRNA *)prop)->defaultvalue);
}
static int rna_StringProperty_max_length_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((StringPropertyRNA*)prop)->maxlength;
+ return ((StringPropertyRNA *)prop)->maxlength;
}
static EnumPropertyItem *rna_EnumProperty_default_itemf(bContext *C, PointerRNA *ptr,
PropertyRNA *prop_parent, int *free)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
EnumPropertyRNA *eprop;
rna_idproperty_check(&prop, ptr);
- eprop = (EnumPropertyRNA*)prop;
+ eprop = (EnumPropertyRNA *)prop;
/* incompatible default attributes */
if ((prop_parent->flag & PROP_ENUM_FLAG) != (prop->flag & PROP_ENUM_FLAG)) {
return NULL;
}
- if ( (eprop->itemf == NULL) ||
- (eprop->itemf == rna_EnumProperty_default_itemf) ||
- (ptr->type == &RNA_EnumProperty) ||
- (C == NULL))
+ if ((eprop->itemf == NULL) ||
+ (eprop->itemf == rna_EnumProperty_default_itemf) ||
+ (ptr->type == &RNA_EnumProperty) ||
+ (C == NULL))
{
return eprop->item;
}
@@ -800,21 +803,21 @@ static EnumPropertyItem *rna_EnumProperty_default_itemf(bContext *C, PointerRNA
/* XXX - not sure this is needed? */
static int rna_EnumProperty_default_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return ((EnumPropertyRNA*)prop)->defaultvalue;
+ return ((EnumPropertyRNA *)prop)->defaultvalue;
}
static int rna_enum_check_separator(CollectionPropertyIterator *UNUSED(iter), void *data)
{
- EnumPropertyItem *item = (EnumPropertyItem*)data;
+ EnumPropertyItem *item = (EnumPropertyItem *)data;
return (item->identifier[0] == 0);
}
static void rna_EnumProperty_items_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
/* EnumPropertyRNA *eprop; *//* UNUSED */
EnumPropertyItem *item = NULL;
int totitem, free = 0;
@@ -823,32 +826,32 @@ static void rna_EnumProperty_items_begin(CollectionPropertyIterator *iter, Point
/* eprop= (EnumPropertyRNA*)prop; */
RNA_property_enum_items(NULL, ptr, prop, &item, &totitem, &free);
- rna_iterator_array_begin(iter, (void*)item, sizeof(EnumPropertyItem), totitem, free, rna_enum_check_separator);
+ rna_iterator_array_begin(iter, (void *)item, sizeof(EnumPropertyItem), totitem, free, rna_enum_check_separator);
}
static void rna_EnumPropertyItem_identifier_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((EnumPropertyItem*)ptr->data)->identifier);
+ strcpy(value, ((EnumPropertyItem *)ptr->data)->identifier);
}
static int rna_EnumPropertyItem_identifier_length(PointerRNA *ptr)
{
- return strlen(((EnumPropertyItem*)ptr->data)->identifier);
+ return strlen(((EnumPropertyItem *)ptr->data)->identifier);
}
static void rna_EnumPropertyItem_name_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((EnumPropertyItem*)ptr->data)->name);
+ strcpy(value, ((EnumPropertyItem *)ptr->data)->name);
}
static int rna_EnumPropertyItem_name_length(PointerRNA *ptr)
{
- return strlen(((EnumPropertyItem*)ptr->data)->name);
+ return strlen(((EnumPropertyItem *)ptr->data)->name);
}
static void rna_EnumPropertyItem_description_get(PointerRNA *ptr, char *value)
{
- EnumPropertyItem *eprop = (EnumPropertyItem*)ptr->data;
+ EnumPropertyItem *eprop = (EnumPropertyItem *)ptr->data;
if (eprop->description)
strcpy(value, eprop->description);
@@ -858,7 +861,7 @@ static void rna_EnumPropertyItem_description_get(PointerRNA *ptr, char *value)
static int rna_EnumPropertyItem_description_length(PointerRNA *ptr)
{
- EnumPropertyItem *eprop = (EnumPropertyItem*)ptr->data;
+ EnumPropertyItem *eprop = (EnumPropertyItem *)ptr->data;
if (eprop->description)
return strlen(eprop->description);
@@ -868,65 +871,65 @@ static int rna_EnumPropertyItem_description_length(PointerRNA *ptr)
static int rna_EnumPropertyItem_value_get(PointerRNA *ptr)
{
- return ((EnumPropertyItem*)ptr->data)->value;
+ return ((EnumPropertyItem *)ptr->data)->value;
}
static PointerRNA rna_PointerProperty_fixed_type_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((PointerPropertyRNA*)prop)->type);
+ return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((PointerPropertyRNA *)prop)->type);
}
static PointerRNA rna_CollectionProperty_fixed_type_get(PointerRNA *ptr)
{
- PropertyRNA *prop = (PropertyRNA*)ptr->data;
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
- return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((CollectionPropertyRNA*)prop)->item_type);
+ return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((CollectionPropertyRNA *)prop)->item_type);
}
/* Function */
static void rna_Function_identifier_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((FunctionRNA*)ptr->data)->identifier);
+ strcpy(value, ((FunctionRNA *)ptr->data)->identifier);
}
static int rna_Function_identifier_length(PointerRNA *ptr)
{
- return strlen(((FunctionRNA*)ptr->data)->identifier);
+ return strlen(((FunctionRNA *)ptr->data)->identifier);
}
static void rna_Function_description_get(PointerRNA *ptr, char *value)
{
- strcpy(value, ((FunctionRNA*)ptr->data)->description);
+ strcpy(value, ((FunctionRNA *)ptr->data)->description);
}
static int rna_Function_description_length(PointerRNA *ptr)
{
- return strlen(((FunctionRNA*)ptr->data)->description);
+ return strlen(((FunctionRNA *)ptr->data)->description);
}
static void rna_Function_parameters_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- rna_iterator_listbase_begin(iter, &((FunctionRNA*)ptr->data)->cont.properties, rna_property_builtin);
+ rna_iterator_listbase_begin(iter, &((FunctionRNA *)ptr->data)->cont.properties, rna_property_builtin);
}
static int rna_Function_registered_get(PointerRNA *ptr)
{
- FunctionRNA *func = (FunctionRNA*)ptr->data;
+ FunctionRNA *func = (FunctionRNA *)ptr->data;
return func->flag & FUNC_REGISTER;
}
static int rna_Function_registered_optional_get(PointerRNA *ptr)
{
- FunctionRNA *func = (FunctionRNA*)ptr->data;
+ FunctionRNA *func = (FunctionRNA *)ptr->data;
return func->flag & FUNC_REGISTER_OPTIONAL;
}
static int rna_Function_no_self_get(PointerRNA *ptr)
{
- FunctionRNA *func = (FunctionRNA*)ptr->data;
+ FunctionRNA *func = (FunctionRNA *)ptr->data;
return !(func->flag & FUNC_NO_SELF);
}
@@ -934,17 +937,17 @@ static int rna_Function_no_self_get(PointerRNA *ptr)
static void rna_BlenderRNA_structs_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- rna_iterator_listbase_begin(iter, &((BlenderRNA*)ptr->data)->structs, NULL);
+ rna_iterator_listbase_begin(iter, &((BlenderRNA *)ptr->data)->structs, NULL);
}
/* optional, for faster lookups */
static int rna_BlenderRNA_structs_length(PointerRNA *ptr)
{
- return BLI_countlist(&((BlenderRNA*)ptr->data)->structs);
+ return BLI_countlist(&((BlenderRNA *)ptr->data)->structs);
}
static int rna_BlenderRNA_structs_lookup_int(PointerRNA *ptr, int index, PointerRNA *r_ptr)
{
- StructRNA *srna = BLI_findlink(&((BlenderRNA*)ptr->data)->structs, index);
+ StructRNA *srna = BLI_findlink(&((BlenderRNA *)ptr->data)->structs, index);
if (srna) {
RNA_pointer_create(NULL, &RNA_Struct, srna, r_ptr);
@@ -956,7 +959,7 @@ static int rna_BlenderRNA_structs_lookup_int(PointerRNA *ptr, int index, Pointer
}
static int rna_BlenderRNA_structs_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
{
- StructRNA *srna = ((BlenderRNA*)ptr->data)->structs.first;
+ StructRNA *srna = ((BlenderRNA *)ptr->data)->structs.first;
for (; srna; srna = srna->cont.next) {
if (key[0] == srna->identifier[0] && strcmp(key, srna->identifier) == 0) {
RNA_pointer_create(NULL, &RNA_Struct, srna, r_ptr);
@@ -1062,7 +1065,8 @@ static void rna_def_property(BlenderRNA *brna)
{PROP_COORDS, "COORDINATES", 0, "Vector Coordinates", ""},
{PROP_LAYER, "LAYER", 0, "Layer", ""},
{PROP_LAYER_MEMBER, "LAYER_MEMBERSHIP", 0, "Layer Membership", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Property", NULL);
RNA_def_struct_ui_text(srna, "Property Definition", "RNA property definition");
@@ -1331,7 +1335,8 @@ static void rna_def_enum_property(BlenderRNA *brna, StructRNA *srna)
/* the itemf func is used instead, keep blender happy */
static EnumPropertyItem default_dummy_items[] = {
{PROP_NONE, "DUMMY", 0, "Dummy", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
prop = RNA_def_property(srna, "default", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1457,7 +1462,7 @@ void RNA_def_rna(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Struct");
RNA_def_property_collection_funcs(prop, "rna_BlenderRNA_structs_begin", "rna_iterator_listbase_next",
"rna_iterator_listbase_end", "rna_iterator_listbase_get",
- /* included for speed, can be removed */
+ /* included for speed, can be removed */
#if 0
NULL, NULL, NULL, NULL);
#else
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index ca01d61f630..429f1d48df3 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -56,7 +56,7 @@ void rna_Scene_frame_set(Scene *scene, int frame, float subframe)
scene->r.subframe = subframe;
CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME);
- BKE_scene_update_for_newframe(G.main, scene, (1<<20) - 1);
+ BKE_scene_update_for_newframe(G.main, scene, (1 << 20) - 1);
BKE_scene_camera_switch_update(scene);
/* cant use NC_SCENE|ND_FRAME because this casues wm_event_do_notifiers to call
@@ -133,7 +133,7 @@ void RNA_api_scene_render(StructRNA *srna)
RNA_def_int(func, "frame", INT_MIN, INT_MIN, INT_MAX, "",
"Frame number to use, if unset the current frame will be used", MINAFRAME, MAXFRAME);
parm = RNA_def_string_file_path(func, "filepath", "", FILE_MAX, "File Path",
- "The resulting filepath from the scenes render settings");
+ "The resulting filepath from the scenes render settings");
RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */
RNA_def_function_output(func, parm);
}
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index db43db273bd..e442de6fc7c 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -45,7 +45,8 @@ EnumPropertyItem region_type_items[] = {
{RGN_TYPE_TOOLS, "TOOLS", 0, "Tools", ""},
{RGN_TYPE_TOOL_PROPS, "TOOL_PROPS", 0, "Tool Properties", ""},
{RGN_TYPE_PREVIEW, "PREVIEW", 0, "Preview", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#include "ED_screen.h"
@@ -58,7 +59,7 @@ EnumPropertyItem region_type_items[] = {
static void rna_Screen_scene_set(PointerRNA *ptr, PointerRNA value)
{
- bScreen *sc = (bScreen*)ptr->data;
+ bScreen *sc = (bScreen *)ptr->data;
if (value.data == NULL)
return;
@@ -68,12 +69,12 @@ static void rna_Screen_scene_set(PointerRNA *ptr, PointerRNA value)
static void rna_Screen_scene_update(bContext *C, PointerRNA *ptr)
{
- bScreen *sc = (bScreen*)ptr->data;
+ bScreen *sc = (bScreen *)ptr->data;
/* exception: must use context so notifier gets to the right window */
if (sc->newscene) {
ED_screen_set_scene(C, sc, sc->newscene);
- WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, sc->newscene);
+ WM_event_add_notifier(C, NC_SCENE | ND_SCENEBROWSE, sc->newscene);
if (G.debug & G_DEBUG)
printf("scene set %p\n", sc->newscene);
@@ -93,19 +94,19 @@ static void rna_Screen_redraw_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
static int rna_Screen_is_animation_playing_get(PointerRNA *ptr)
{
- bScreen *sc = (bScreen*)ptr->data;
+ bScreen *sc = (bScreen *)ptr->data;
return (sc->animtimer != NULL);
}
static int rna_Screen_fullscreen_get(PointerRNA *ptr)
{
- bScreen *sc = (bScreen*)ptr->data;
+ bScreen *sc = (bScreen *)ptr->data;
return (sc->full != 0);
}
static void rna_Area_type_set(PointerRNA *ptr, int value)
{
- ScrArea *sa = (ScrArea*)ptr->data;
+ ScrArea *sa = (ScrArea *)ptr->data;
sa->butspacetype = value;
}
@@ -113,12 +114,12 @@ static void rna_Area_type_update(bContext *C, PointerRNA *ptr)
{
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win;
- bScreen *sc = (bScreen*)ptr->id.data;
- ScrArea *sa = (ScrArea*)ptr->data;
+ bScreen *sc = (bScreen *)ptr->id.data;
+ ScrArea *sa = (ScrArea *)ptr->data;
/* XXX this call still use context, so we trick it to work in the right context */
- for(win=wm->windows.first; win; win=win->next) {
- if(sc == win->screen) {
+ for (win = wm->windows.first; win; win = win->next) {
+ if (sc == win->screen) {
wmWindow *prevwin = CTX_wm_window(C);
ScrArea *prevsa = CTX_wm_area(C);
ARegion *prevar = CTX_wm_region(C);
@@ -255,7 +256,7 @@ static void rna_def_screen(BlenderRNA *brna)
/* pointers */
prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
RNA_def_property_pointer_funcs(prop, NULL, "rna_Screen_scene_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the screen");
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
@@ -282,42 +283,42 @@ static void rna_def_screen(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_play_top_left_3d_editor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_REGION);
RNA_def_property_ui_text(prop, "Top-Left 3D Editor", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_3d_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_ALL_3D_WIN);
RNA_def_property_ui_text(prop, "All 3D View Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_animation_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_ALL_ANIM_WIN);
RNA_def_property_ui_text(prop, "Animation Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_properties_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_ALL_BUTS_WIN);
RNA_def_property_ui_text(prop, "Property Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_image_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_ALL_IMAGE_WIN);
RNA_def_property_ui_text(prop, "Image Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_sequence_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_SEQ);
RNA_def_property_ui_text(prop, "Sequencer Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_node_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_NODES);
RNA_def_property_ui_text(prop, "Node Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
prop = RNA_def_property(srna, "use_play_clip_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_CLIPS);
RNA_def_property_ui_text(prop, "Clip Editors", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Screen_redraw_update");
}
void RNA_def_screen(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index c8aa5ebaaca..ad40e71eb71 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -49,7 +49,8 @@ static EnumPropertyItem particle_edit_hair_brush_items[] = {
{PE_BRUSH_PUFF, "PUFF", 0, "Puff", "Make hairs stand up"},
{PE_BRUSH_CUT, "CUT", 0, "Cut", "Cut hairs"},
{PE_BRUSH_WEIGHT, "WEIGHT", 0, "Weight", "Weight hair particles"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#include "MEM_guardedalloc.h"
@@ -68,18 +69,20 @@ static EnumPropertyItem particle_edit_disconnected_hair_brush_items[] = {
{PE_BRUSH_LENGTH, "LENGTH", 0, "Length", "Make hairs longer or shorter"},
{PE_BRUSH_CUT, "CUT", 0, "Cut", "Cut hairs"},
{PE_BRUSH_WEIGHT, "WEIGHT", 0, "Weight", "Weight hair particles"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem particle_edit_cache_brush_items[] = {
{PE_BRUSH_NONE, "NONE", 0, "None", "Don't use any brush"},
{PE_BRUSH_COMB, "COMB", 0, "Comb", "Comb paths"},
{PE_BRUSH_SMOOTH, "SMOOTH", 0, "Smooth", "Smooth paths"},
{PE_BRUSH_LENGTH, "LENGTH", 0, "Length", "Make paths longer or shorter"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static PointerRNA rna_ParticleEdit_brush_get(PointerRNA *ptr)
{
- ParticleEditSettings *pset = (ParticleEditSettings*)ptr->data;
+ ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
ParticleBrushData *brush = NULL;
if (pset->brushtype != PE_BRUSH_NONE)
@@ -95,7 +98,7 @@ static PointerRNA rna_ParticleBrush_curve_get(PointerRNA *ptr)
static void rna_ParticleEdit_redo(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact)? scene->basact->object: NULL;
+ Object *ob = (scene->basact) ? scene->basact->object : NULL;
PTCacheEdit *edit = PE_get_current(scene, ob);
if (!edit)
@@ -106,20 +109,20 @@ static void rna_ParticleEdit_redo(Main *UNUSED(bmain), Scene *scene, PointerRNA
static void rna_ParticleEdit_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact)? scene->basact->object: NULL;
+ Object *ob = (scene->basact) ? scene->basact->object : NULL;
if (ob) DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
static void rna_ParticleEdit_tool_set(PointerRNA *ptr, int value)
{
- ParticleEditSettings *pset = (ParticleEditSettings*)ptr->data;
+ ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
/* redraw hair completely if weight brush is/was used */
if ((pset->brushtype == PE_BRUSH_WEIGHT || value == PE_BRUSH_WEIGHT) && pset->scene) {
- Object *ob = (pset->scene->basact)? pset->scene->basact->object: NULL;
+ Object *ob = (pset->scene->basact) ? pset->scene->basact->object : NULL;
if (ob) {
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
}
@@ -129,7 +132,7 @@ static EnumPropertyItem *rna_ParticleEdit_tool_itemf(bContext *C, PointerRNA *UN
PropertyRNA *UNUSED(prop), int *UNUSED(free))
{
Scene *scene = CTX_data_scene(C);
- Object *ob = (scene->basact)? scene->basact->object: NULL;
+ Object *ob = (scene->basact) ? scene->basact->object : NULL;
#if 0
PTCacheEdit *edit = PE_get_current(scene, ob);
ParticleSystem *psys = edit ? edit->psys : NULL;
@@ -154,13 +157,13 @@ static EnumPropertyItem *rna_ParticleEdit_tool_itemf(bContext *C, PointerRNA *UN
static int rna_ParticleEdit_editable_get(PointerRNA *ptr)
{
- ParticleEditSettings *pset = (ParticleEditSettings*)ptr->data;
+ ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
return (pset->object && pset->scene && PE_get_current(pset->scene, pset->object));
}
static int rna_ParticleEdit_hair_get(PointerRNA *ptr)
{
- ParticleEditSettings *pset = (ParticleEditSettings*)ptr->data;
+ ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
if (pset->scene) {
PTCacheEdit *edit = PE_get_current(pset->scene, pset->object);
@@ -195,11 +198,11 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value)
static void rna_Sculpt_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact)? scene->basact->object: NULL;
+ Object *ob = (scene->basact) ? scene->basact->object : NULL;
if (ob) {
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
}
@@ -218,7 +221,7 @@ static void rna_def_paint(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Brush_mode_poll");
RNA_def_property_ui_text(prop, "Brush", "Active Brush");
- RNA_def_property_update(prop, NC_BRUSH|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_BRUSH | NA_EDITED, NULL);
prop = RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_SHOW_BRUSH);
@@ -288,7 +291,7 @@ static void rna_def_sculpt(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Deform Only",
"Use only deformation modifiers (temporary disable all "
"constructive modifiers except multi-resolution)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Sculpt_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_update");
}
@@ -381,7 +384,7 @@ static void rna_def_image_paint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Angle", "Paint most on faces pointing towards the view according to this angle");
prop = RNA_def_int_array(srna, "screen_grab_size", 2, NULL, 0, 0, "screen_grab_size",
- "Size to capture the image for re-projecting", 0, 0);
+ "Size to capture the image for re-projecting", 0, 0);
RNA_def_property_range(prop, 512, 16384);
}
@@ -394,17 +397,20 @@ static void rna_def_particle_edit(BlenderRNA *brna)
{SCE_SELECT_PATH, "PATH", ICON_PARTICLE_PATH, "Path", "Path edit mode"},
{SCE_SELECT_POINT, "POINT", ICON_PARTICLE_POINT, "Point", "Point select mode"},
{SCE_SELECT_END, "TIP", ICON_PARTICLE_TIP, "Tip", "Tip select mode"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem puff_mode[] = {
{0, "ADD", 0, "Add", "Make hairs more puffy"},
{1, "SUB", 0, "Sub", "Make hairs less puffy"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem length_mode[] = {
{0, "GROW", 0, "Grow", "Make hairs longer"},
{1, "SHRINK", 0, "Shrink", "Make hairs shorter"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem edit_type_items[] = {
{PE_TYPE_PARTICLES, "PARTICLES", 0, "Particles", ""},
@@ -430,7 +436,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_enum_bitflag_sdna(prop, NULL, "selectmode");
RNA_def_property_enum_items(prop, select_mode_items);
RNA_def_property_ui_text(prop, "Selection Mode", "Particle select and display mode");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_update");
prop = RNA_def_property(srna, "use_preserve_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_KEEP_LENGTHS);
@@ -452,7 +458,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_fade_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_FADE_TIME);
RNA_def_property_ui_text(prop, "Fade Time", "Fade paths and keys further away from current frame");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_update");
prop = RNA_def_property(srna, "use_auto_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_AUTO_VELOCITY);
@@ -461,7 +467,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_DRAW_PART);
RNA_def_property_ui_text(prop, "Draw Particles", "Draw actual particles");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_redo");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_redo");
prop = RNA_def_property(srna, "use_default_interpolate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_INTERPOLATE_ADDED);
@@ -481,18 +487,18 @@ static void rna_def_particle_edit(BlenderRNA *brna)
prop = RNA_def_property(srna, "draw_step", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Steps", "How many steps to draw the path with");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_redo");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_redo");
prop = RNA_def_property(srna, "fade_frames", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Frames", "How many frames to fade");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_update");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_update");
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "edittype");
RNA_def_property_enum_items(prop, edit_type_items);
RNA_def_property_ui_text(prop, "Type", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_redo");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_redo");
prop = RNA_def_property(srna, "is_editable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleEdit_editable_get", NULL);
diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c
index 8bed95f88b2..cce0612bd68 100644
--- a/source/blender/makesrna/intern/rna_sensor.c
+++ b/source/blender/makesrna/intern/rna_sensor.c
@@ -56,16 +56,17 @@ EnumPropertyItem sensor_type_items[] = {
{SENS_RANDOM, "RANDOM", 0, "Random", ""},
{SENS_RAY, "RAY", 0, "Ray", ""},
{SENS_TOUCH, "TOUCH", 0, "Touch", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
#include "BKE_sca.h"
#include "DNA_controller_types.h"
-static StructRNA* rna_Sensor_refine(struct PointerRNA *ptr)
+static StructRNA *rna_Sensor_refine(struct PointerRNA *ptr)
{
- bSensor *sensor = (bSensor*)ptr->data;
+ bSensor *sensor = (bSensor *)ptr->data;
switch (sensor->type) {
case SENS_ALWAYS:
@@ -214,7 +215,7 @@ static void rna_Sensor_keyboard_modifier2_set(struct PointerRNA *ptr, int value)
static void rna_Sensor_tap_set(struct PointerRNA *ptr, int value)
{
- bSensor *sens = (bSensor*)ptr->data;
+ bSensor *sens = (bSensor *)ptr->data;
sens->tap = value;
if (sens->tap == 1)
@@ -223,7 +224,7 @@ static void rna_Sensor_tap_set(struct PointerRNA *ptr, int value)
static void rna_Sensor_level_set(struct PointerRNA *ptr, int value)
{
- bSensor *sens = (bSensor*)ptr->data;
+ bSensor *sens = (bSensor *)ptr->data;
sens->level = value;
if (sens->level == 1)
@@ -404,7 +405,8 @@ static void rna_def_mouse_sensor(BlenderRNA *brna)
{BL_SENS_MOUSE_MOVEMENT, "MOVEMENT", 0, "Movement", ""},
{BL_SENS_MOUSE_MOUSEOVER, "MOUSEOVER", 0, "Mouse Over", ""},
{BL_SENS_MOUSE_MOUSEOVER_ANY, "MOUSEOVERANY", 0, "Mouse Over Any", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MouseSensor", "Sensor");
RNA_def_struct_ui_text(srna, "Mouse Sensor", "Sensor to detect mouse events");
@@ -492,7 +494,8 @@ static void rna_def_property_sensor(BlenderRNA *brna)
{SENS_PROP_INTERVAL, "PROPINTERVAL", 0, "Interval", ""},
{SENS_PROP_CHANGED, "PROPCHANGED", 0, "Changed", ""},
/* {SENS_PROP_EXPRESSION, "PROPEXPRESSION", 0, "Expression", ""}, NOT_USED_IN_UI */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "PropertySensor", "Sensor");
RNA_def_struct_ui_text(srna, "Property Sensor", "Sensor to detect values and changes in values of properties");
@@ -535,7 +538,8 @@ static void rna_def_armature_sensor(BlenderRNA *brna)
{SENS_ARM_LIN_ERROR_ABOVE, "LINERRORABOVE", 0, "Lin error above", ""},
{SENS_ARM_ROT_ERROR_BELOW, "ROTERRORBELOW", 0, "Rot error below", ""},
{SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORABOVE", 0, "Rot error above", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ArmatureSensor", "Sensor");
RNA_def_struct_ui_text(srna, "Armature Sensor", "Sensor to detect values and changes in values of IK solver");
@@ -663,7 +667,8 @@ static void rna_def_radar_sensor(BlenderRNA *brna)
{SENS_RADAR_NEG_X_AXIS, "NEGXAXIS", 0, "-X axis", ""},
{SENS_RADAR_NEG_Y_AXIS, "NEGYAXIS", 0, "-Y axis", ""},
{SENS_RADAR_NEG_Z_AXIS, "NEGZAXIS", 0, "-Z axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "RadarSensor", "Sensor");
RNA_def_struct_ui_text(srna, "Radar Sensor",
@@ -719,12 +724,14 @@ static void rna_def_ray_sensor(BlenderRNA *brna)
{SENS_RAY_NEG_X_AXIS, "NEGXAXIS", 0, "-X axis", ""},
{SENS_RAY_NEG_Y_AXIS, "NEGYAXIS", 0, "-Y axis", ""},
{SENS_RAY_NEG_Z_AXIS, "NEGZAXIS", 0, "-Z axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_ray_type_items[] = {
{SENS_COLLISION_PROPERTY, "PROPERTY", ICON_LOGIC, "Property", "Use a material for ray intersections"},
{SENS_COLLISION_MATERIAL, "MATERIAL", ICON_MATERIAL_DATA, "Material", "Use a property for ray intersections"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "RaySensor", "Sensor");
RNA_def_struct_ui_text(srna, "Ray Sensor",
@@ -801,14 +808,16 @@ static void rna_def_joystick_sensor(BlenderRNA *brna)
{SENS_JOY_AXIS, "AXIS", 0, "Axis", ""},
{SENS_JOY_HAT, "HAT", 0, "Hat", ""},
{SENS_JOY_AXIS_SINGLE, "AXIS_SINGLE", 0, "Single Axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem axis_direction_items[] = {
{SENS_JOY_X_AXIS, "RIGHTAXIS", 0, "Right Axis", ""},
{SENS_JOY_Y_AXIS, "UPAXIS", 0, "Up Axis", ""},
{SENS_JOY_NEG_X_AXIS, "LEFTAXIS", 0, "Left Axis", ""},
{SENS_JOY_NEG_Y_AXIS, "DOWNAXIS", 0, "Down Axis", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem hat_direction_items[] = {
{SENS_JOY_HAT_UP, "UP", 0, "Up", ""},
@@ -820,7 +829,8 @@ static void rna_def_joystick_sensor(BlenderRNA *brna)
{SENS_JOY_HAT_DOWN_LEFT, "DOWNLEFT", 0, "Down/Left", ""},
{SENS_JOY_HAT_UP_LEFT, "UPLEFT", 0, "Up/Left", ""},
{SENS_JOY_HAT_DOWN_RIGHT, "DOWNRIGHT", 0, "Down/Right", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "JoystickSensor", "Sensor");
RNA_def_struct_ui_text(srna, "Joystick Sensor", "Sensor to detect joystick events");
@@ -829,7 +839,7 @@ static void rna_def_joystick_sensor(BlenderRNA *brna)
prop = RNA_def_property(srna, "joystick_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "joyindex");
RNA_def_property_ui_text(prop, "Index", "Which joystick to use");
- RNA_def_property_range(prop, 0, SENS_JOY_MAXINDEX-1);
+ RNA_def_property_range(prop, 0, SENS_JOY_MAXINDEX - 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop = RNA_def_property(srna, "event_type", PROP_ENUM, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index d64dd1a626e..e7b648377e9 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -561,14 +561,14 @@ static int rna_Sequence_input_count_get(PointerRNA *ptr)
#if 0
static void rna_SoundSequence_filename_set(PointerRNA *ptr, const char *value)
{
- Sequence *seq= (Sequence*)(ptr->data);
+ Sequence *seq = (Sequence *)(ptr->data);
BLI_split_dirfile(value, seq->strip->dir, seq->strip->stripdata->name, sizeof(seq->strip->dir),
sizeof(seq->strip->stripdata->name));
}
static void rna_SequenceElement_filename_set(PointerRNA *ptr, const char *value)
{
- StripElem *elem= (StripElem*)(ptr->data);
+ StripElem *elem = (StripElem *)(ptr->data);
BLI_split_file_part(value, elem->name, sizeof(elem->name));
}
#endif
@@ -953,15 +953,15 @@ static void rna_def_strip_color_balance(BlenderRNA *brna)
/* not yet used */
#if 0
- prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Exposure", "");
- RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+ RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Saturation", "");
- RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+ RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update");
#endif
}
diff --git a/source/blender/makesrna/intern/rna_sequencer_api.c b/source/blender/makesrna/intern/rna_sequencer_api.c
index 38a923f87e5..4d471ae4b41 100644
--- a/source/blender/makesrna/intern/rna_sequencer_api.c
+++ b/source/blender/makesrna/intern/rna_sequencer_api.c
@@ -202,7 +202,7 @@ static Sequence *rna_Sequences_new_sound(ID *id, Editing *ed, Main *bmain, Repor
seq = alloc_generic_sequence(ed, name, start_frame, channel, SEQ_SOUND, sound->name);
seq->sound = sound;
- seq->len = ceil(sound_get_length(sound) * FPS);
+ seq->len = ceil((double)sound_get_length(sound) * FPS);
seq->scene_sound = sound_add_scene_sound(scene, seq, start_frame, start_frame + seq->len, 0);
@@ -213,8 +213,8 @@ static Sequence *rna_Sequences_new_sound(ID *id, Editing *ed, Main *bmain, Repor
return seq;
}
#else /* WITH_AUDASPACE */
-static Sequence *rna_Sequences_new_sound(ID *UNUSED(id), Editing *UNUSED(ed), bMain *UNUSED(main), ReportList *UNUSED(reports),
- const char *UNUSED(name), bSound *UNUSED(sound), int UNUSED(channel), int UNUSED(start_frame))
+static Sequence *rna_Sequences_new_sound(ID *UNUSED(id), Editing *UNUSED(ed), Main *UNUSED(bmain), ReportList *reports,
+ const char *UNUSED(name), const char *UNUSED(file), int UNUSED(channel), int UNUSED(start_frame))
{
BKE_report(reports, RPT_ERROR, "Blender compiled without Audaspace support.");
return NULL;
@@ -316,19 +316,34 @@ static StripElem *rna_SequenceElements_push(ID *id, Sequence *seq, const char *f
return se;
}
-static void rna_SequenceElements_pop(ID *id, Sequence *seq, ReportList *reports)
+static void rna_SequenceElements_pop(ID *id, Sequence *seq, ReportList *reports, int index)
{
+ int i;
Scene *scene = (Scene *)id;
+ StripElem *new_seq, *se;
if (seq->len == 1) {
BKE_report(reports, RPT_ERROR, "SequenceElements.pop: can not pop the last element");
return;
}
- /* just chop off the end ...what could possibly go wrong? */
- seq->strip->stripdata = MEM_reallocN(seq->strip->stripdata, sizeof(StripElem) * (seq->len - 1));
+ if (seq->len <= index) {
+ BKE_report(reports, RPT_ERROR, "SequenceElements.pop: index out of range");
+ return;
+ }
+
+ new_seq = MEM_callocN(sizeof(StripElem) * (seq->len - 1), "SequenceElements_pop");
seq->len--;
+ for (i = 0, se = seq->strip->stripdata; i < seq->len; i++, se++) {
+ if (i == index)
+ se++;
+ BLI_strncpy(new_seq[i].name, se->name, sizeof(se->name));
+ }
+
+ MEM_freeN(seq->strip->stripdata);
+ seq->strip->stripdata = new_seq;
+
calc_sequence_disp(scene, seq);
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
@@ -379,6 +394,8 @@ void RNA_api_sequence_elements(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "pop", "rna_SequenceElements_pop");
RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
RNA_def_function_ui_description(func, "Pop an image off the collection");
+ parm = RNA_def_int(func, "index", 0, 0, INT_MAX, "", "Index of image to remove", 0, INT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
}
void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop)
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index b1fed62f87b..19925546de3 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -65,7 +65,7 @@ static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *p
static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data;
+ SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
smokeModifier_reset(settings->smd);
@@ -77,7 +77,7 @@ static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data;
+ SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
smokeModifier_reset(settings->smd);
@@ -89,7 +89,7 @@ static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *pt
static char *rna_SmokeDomainSettings_path(PointerRNA *ptr)
{
- SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data;
+ SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
ModifierData *md = (ModifierData *)settings->smd;
return BLI_sprintfN("modifiers[\"%s\"].domain_settings", md->name);
@@ -97,7 +97,7 @@ static char *rna_SmokeDomainSettings_path(PointerRNA *ptr)
static char *rna_SmokeFlowSettings_path(PointerRNA *ptr)
{
- SmokeFlowSettings *settings = (SmokeFlowSettings*)ptr->data;
+ SmokeFlowSettings *settings = (SmokeFlowSettings *)ptr->data;
ModifierData *md = (ModifierData *)settings->smd;
return BLI_sprintfN("modifiers[\"%s\"].flow_settings", md->name);
@@ -105,7 +105,7 @@ static char *rna_SmokeFlowSettings_path(PointerRNA *ptr)
static char *rna_SmokeCollSettings_path(PointerRNA *ptr)
{
- SmokeCollSettings *settings = (SmokeCollSettings*)ptr->data;
+ SmokeCollSettings *settings = (SmokeCollSettings *)ptr->data;
ModifierData *md = (ModifierData *)settings->smd;
return BLI_sprintfN("modifiers[\"%s\"].coll_settings", md->name);
@@ -119,24 +119,27 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_noise_type_items[] = {
- {MOD_SMOKE_NOISEWAVE, "NOISEWAVE", 0, "Wavelet", ""},
+ {MOD_SMOKE_NOISEWAVE, "NOISEWAVE", 0, "Wavelet", ""},
#ifdef WITH_FFTW3
- {MOD_SMOKE_NOISEFFT, "NOISEFFT", 0, "FFT", ""},
+ {MOD_SMOKE_NOISEFFT, "NOISEFFT", 0, "FFT", ""},
#endif
- /* {MOD_SMOKE_NOISECURL, "NOISECURL", 0, "Curl", ""}, */
- {0, NULL, 0, NULL, NULL}};
+ /* {MOD_SMOKE_NOISECURL, "NOISECURL", 0, "Curl", ""}, */
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem smoke_cache_comp_items[] = {
{SM_CACHE_LIGHT, "CACHELIGHT", 0, "Light", "Fast but not so effective compression"},
{SM_CACHE_HEAVY, "CACHEHEAVY", 0, "Heavy", "Effective but slow compression"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem smoke_domain_colli_items[] = {
{SM_BORDER_OPEN, "BORDEROPEN", 0, "Open", "Smoke doesn't collide with any border"},
{SM_BORDER_VERTICAL, "BORDERVERTICAL", 0, "Vertically Open",
- "Smoke doesn't collide with top and bottom sides"},
+ "Smoke doesn't collide with top and bottom sides"},
{SM_BORDER_CLOSED, "BORDERCLOSED", 0, "Collide All", "Smoke collides with every side"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SmokeDomainSettings", NULL);
RNA_def_struct_ui_text(srna, "Domain Settings", "Smoke domain settings");
@@ -149,7 +152,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 24, 512, 2, 0);
RNA_def_property_ui_text(prop, "Max Res", "Maximal resolution used in the fluid domain");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "amplify", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "amplify");
@@ -157,25 +160,25 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 1, 10, 1, 0);
RNA_def_property_ui_text(prop, "Amplification", "Enhance the resolution of smoke by this factor using noise");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "use_high_resolution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_HIGHRES);
RNA_def_property_ui_text(prop, "High res", "Enable high resolution (using amplification)");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "show_high_resolution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewsettings", MOD_SMOKE_VIEW_SHOWBIG);
RNA_def_property_ui_text(prop, "Show High Resolution", "Show high resolution (using amplification)");
- RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
prop = RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "noise");
RNA_def_property_enum_items(prop, prop_noise_type_items);
RNA_def_property_ui_text(prop, "Noise Method", "Noise method which is used for creating the high resolution");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "alpha");
@@ -183,7 +186,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5);
RNA_def_property_ui_text(prop, "Density",
"How much density affects smoke motion (higher value results in faster rising smoke)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "beta", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "beta");
@@ -191,52 +194,52 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5);
RNA_def_property_ui_text(prop, "Heat",
"How much heat affects smoke motion (higher value results in faster rising smoke)");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "collision_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "coll_group");
RNA_def_property_struct_type(prop, "Group");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Collision Group", "Limit collisions to this group");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset_dependancy");
prop = RNA_def_property(srna, "fluid_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "fluid_group");
RNA_def_property_struct_type(prop, "Group");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Fluid Group", "Limit fluid objects to this group");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset_dependancy");
prop = RNA_def_property(srna, "effector_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "eff_group");
RNA_def_property_struct_type(prop, "Group");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Effector Group", "Limit effectors to this group");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset_dependancy");
prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "strength");
RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_range(prop, 0.0, 10.0, 1, 2);
RNA_def_property_ui_text(prop, "Strength", "Strength of noise");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "dissolve_speed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "diss_speed");
RNA_def_property_range(prop, 1.0, 10000.0);
RNA_def_property_ui_range(prop, 1.0, 10000.0, 1, 0);
RNA_def_property_ui_text(prop, "Dissolve Speed", "Dissolve Speed");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "use_dissolve_smoke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_DISSOLVE);
RNA_def_property_ui_text(prop, "Dissolve Smoke", "Enable smoke to disappear over time");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "use_dissolve_smoke_log", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_DISSOLVE_LOG);
RNA_def_property_ui_text(prop, "Logarithmic dissolve", "Using 1/x ");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
@@ -253,7 +256,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_enum_items(prop, smoke_domain_colli_items);
RNA_def_property_ui_text(prop, "Border Collisions",
"Select which domain border will be treated as collision object");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "effector_weights", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "EffectorWeights");
@@ -263,21 +266,21 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "smooth_emitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_HIGH_SMOOTH);
RNA_def_property_ui_text(prop, "Smooth Emitter", "Smoothen emitted smoke to avoid blockiness");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "time_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "time_scale");
RNA_def_property_range(prop, 0.2, 1.5);
RNA_def_property_ui_range(prop, 0.2, 1.5, 0.02, 5);
RNA_def_property_ui_text(prop, "Time Scale", "Adjust simulation speed");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "vorticity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "vorticity");
RNA_def_property_range(prop, 0.01, 4.0);
RNA_def_property_ui_range(prop, 0.01, 4.0, 0.02, 5);
RNA_def_property_ui_text(prop, "Vorticity", "Amount of turbulence/rotation in fluid");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
}
@@ -296,14 +299,14 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0.001, 1);
RNA_def_property_ui_range(prop, 0.001, 1.0, 1.0, 4);
RNA_def_property_ui_text(prop, "Density", "");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "temperature", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "temp");
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_range(prop, -10, 10, 1, 1);
RNA_def_property_ui_text(prop, "Temp. Diff.", "Temperature difference to ambient temperature");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "psys");
@@ -315,24 +318,24 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_outflow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", MOD_SMOKE_FLOW_TYPE_OUTFLOW);
RNA_def_property_ui_text(prop, "Outflow", "Delete smoke from simulation");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "use_absolute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_FLOW_ABSOLUTE);
RNA_def_property_ui_text(prop, "Absolute Density", "Only allow given density value in emitter area");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "initial_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_FLOW_INITVELOCITY);
RNA_def_property_ui_text(prop, "Initial Velocity", "Smoke inherits its velocity from the emitter particle");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
prop = RNA_def_property(srna, "velocity_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "vel_multi");
RNA_def_property_range(prop, -2.0, 2.0);
RNA_def_property_ui_range(prop, -2.0, 2.0, 0.05, 5);
RNA_def_property_ui_text(prop, "Multiplier", "Multiplier to adjust velocity passed to smoke");
- RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
}
static void rna_def_smoke_coll_settings(BlenderRNA *brna)
@@ -341,7 +344,8 @@ static void rna_def_smoke_coll_settings(BlenderRNA *brna)
{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}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -355,7 +359,7 @@ static void rna_def_smoke_coll_settings(BlenderRNA *brna)
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");
+ RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
}
void RNA_def_smoke(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c
index 18499fa52fe..206a72a01b0 100644
--- a/source/blender/makesrna/intern/rna_sound.c
+++ b/source/blender/makesrna/intern/rna_sound.c
@@ -41,18 +41,18 @@
static void rna_Sound_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- sound_load(bmain, (bSound*)ptr->data);
+ sound_load(bmain, (bSound *)ptr->data);
}
static int rna_Sound_caching_get(PointerRNA *ptr)
{
- bSound *sound = (bSound*)(ptr->data);
+ bSound *sound = (bSound *)(ptr->data);
return (sound->flags & SOUND_FLAGS_CACHING) != 0;
}
static void rna_Sound_caching_set(PointerRNA *ptr, const int value)
{
- bSound *sound = (bSound*)(ptr->data);
+ bSound *sound = (bSound *)(ptr->data);
if (value)
sound_cache(sound);
else
@@ -61,7 +61,7 @@ static void rna_Sound_caching_set(PointerRNA *ptr, const int value)
static void rna_Sound_caching_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- sound_update_sequencer(bmain, (bSound*)(ptr->data));
+ sound_update_sequencer(bmain, (bSound *)(ptr->data));
}
#else
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index aafcc381c51..0e2fc6e8f11 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -74,7 +74,8 @@ EnumPropertyItem space_type_items[] = {
{SPACE_CONSOLE, "CONSOLE", 0, "Python Console", ""},
{SPACE_USERPREF, "USER_PREFERENCES", 0, "User Preferences", ""},
{SPACE_CLIP, "CLIP_EDITOR", 0, "Clip Editor", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem draw_channels_items[] = {
{0, "COLOR", ICON_IMAGE_RGB, "Color", "Draw image with RGB colors"},
@@ -83,7 +84,8 @@ static EnumPropertyItem draw_channels_items[] = {
{SI_SHOW_ALPHA, "ALPHA", ICON_IMAGE_ALPHA, "Alpha", "Draw alpha transparency channel"},
{SI_SHOW_ZBUF, "Z_BUFFER", ICON_IMAGE_ZDEPTH, "Z-Buffer",
"Draw Z-buffer associated with image (mapped from camera clip start to end)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem transform_orientation_items[] = {
{V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", "Align the transformation axes to world space"},
@@ -94,14 +96,16 @@ static EnumPropertyItem transform_orientation_items[] = {
"(bone Y axis for pose mode)"},
{V3D_MANIP_VIEW, "VIEW", 0, "View", "Align the transformation axes to the window"},
{V3D_MANIP_CUSTOM, "CUSTOM", 0, "Custom", "Use a custom transform orientation"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem autosnap_items[] = {
{SACTSNAP_OFF, "NONE", 0, "No Auto-Snap", ""},
{SACTSNAP_STEP, "STEP", 0, "Time Step", "Snap to 1.0 frame/second intervals"},
{SACTSNAP_FRAME, "FRAME", 0, "Nearest Frame", "Snap to actual frames/seconds (nla-action time)"},
{SACTSNAP_MARKER, "MARKER", 0, "Nearest Marker", "Snap to nearest marker"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem viewport_shade_items[] = {
{OB_BOUNDBOX, "BOUNDBOX", ICON_BBOX, "Bounding Box", "Display the object's local bounding boxes only"},
@@ -110,7 +114,8 @@ EnumPropertyItem viewport_shade_items[] = {
{OB_TEXTURE, "TEXTURED", ICON_POTATO, "Texture", "Display the object solid, with a texture"},
{OB_MATERIAL, "MATERIAL", ICON_MATERIAL_DATA, "Material", "Display objects solid, with GLSL material"},
{OB_RENDER, "RENDERED", ICON_SMOOTH, "Rendered", "Display render preview"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -138,9 +143,9 @@ EnumPropertyItem viewport_shade_items[] = {
#include "IMB_imbuf_types.h"
-static StructRNA* rna_Space_refine(struct PointerRNA *ptr)
+static StructRNA *rna_Space_refine(struct PointerRNA *ptr)
{
- SpaceLink *space = (SpaceLink*)ptr->data;
+ SpaceLink *space = (SpaceLink *)ptr->data;
switch (space->spacetype) {
case SPACE_VIEW3D:
@@ -184,8 +189,8 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr)
static ScrArea *rna_area_from_space(PointerRNA *ptr)
{
- bScreen *sc = (bScreen*)ptr->id.data;
- SpaceLink *link = (SpaceLink*)ptr->data;
+ bScreen *sc = (bScreen *)ptr->id.data;
+ SpaceLink *link = (SpaceLink *)ptr->data;
ScrArea *sa;
for (sa = sc->areabase.first; sa; sa = sa->next)
@@ -216,7 +221,7 @@ static void area_region_from_regiondata(bScreen *sc, void *regiondata, ScrArea *
static void rna_area_region_from_regiondata(PointerRNA *ptr, ScrArea **r_sa, ARegion **r_ar)
{
- bScreen *sc = (bScreen*)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->id.data;
void *regiondata = ptr->data;
area_region_from_regiondata(sc, regiondata, r_sa, r_ar);
@@ -224,8 +229,8 @@ static void rna_area_region_from_regiondata(PointerRNA *ptr, ScrArea **r_sa, ARe
static PointerRNA rna_CurrentOrientation_get(PointerRNA *ptr)
{
- Scene *scene = ((bScreen*)ptr->id.data)->scene;
- View3D *v3d = (View3D*)ptr->data;
+ Scene *scene = ((bScreen *)ptr->id.data)->scene;
+ View3D *v3d = (View3D *)ptr->data;
if (v3d->twmode < V3D_MANIP_CUSTOM)
return rna_pointer_inherit_refine(ptr, &RNA_TransformOrientation, NULL);
@@ -250,9 +255,9 @@ EnumPropertyItem *rna_TransformOrientation_itemf(bContext *C, PointerRNA *ptr, P
RNA_enum_items_add_value(&item, &totitem, transform_orientation_items, V3D_MANIP_VIEW);
if (ptr->type == &RNA_SpaceView3D)
- scene = ((bScreen*)ptr->id.data)->scene;
+ scene = ((bScreen *)ptr->id.data)->scene;
else
- scene = CTX_data_scene(C); /* can't use scene from ptr->id.data because that enum is also used by operators */
+ scene = CTX_data_scene(C); /* can't use scene from ptr->id.data because that enum is also used by operators */
if (scene) {
transform_spaces = &scene->transform_spaces;
@@ -279,8 +284,8 @@ EnumPropertyItem *rna_TransformOrientation_itemf(bContext *C, PointerRNA *ptr, P
/* Space 3D View */
static void rna_SpaceView3D_lock_camera_and_layers_set(PointerRNA *ptr, int value)
{
- View3D *v3d = (View3D*)(ptr->data);
- bScreen *sc = (bScreen*)ptr->id.data;
+ View3D *v3d = (View3D *)(ptr->data);
+ bScreen *sc = (bScreen *)ptr->id.data;
v3d->scenelock = value;
@@ -289,9 +294,9 @@ static void rna_SpaceView3D_lock_camera_and_layers_set(PointerRNA *ptr, int valu
v3d->lay = sc->scene->lay;
/* seek for layact */
bit = 0;
- while (bit<32) {
- if (v3d->lay & (1<<bit)) {
- v3d->layact = 1<<bit;
+ while (bit < 32) {
+ if (v3d->lay & (1 << bit)) {
+ v3d->layact = 1 << bit;
break;
}
bit++;
@@ -302,8 +307,8 @@ static void rna_SpaceView3D_lock_camera_and_layers_set(PointerRNA *ptr, int valu
static void rna_View3D_CursorLocation_get(PointerRNA *ptr, float *values)
{
- View3D *v3d = (View3D*)(ptr->data);
- bScreen *sc = (bScreen*)ptr->id.data;
+ View3D *v3d = (View3D *)(ptr->data);
+ bScreen *sc = (bScreen *)ptr->id.data;
Scene *scene = (Scene *)sc->scene;
float *loc = give_cursor(scene, v3d);
@@ -312,8 +317,8 @@ static void rna_View3D_CursorLocation_get(PointerRNA *ptr, float *values)
static void rna_View3D_CursorLocation_set(PointerRNA *ptr, const float *values)
{
- View3D *v3d = (View3D*)(ptr->data);
- bScreen *sc = (bScreen*)ptr->id.data;
+ View3D *v3d = (View3D *)(ptr->data);
+ bScreen *sc = (bScreen *)ptr->id.data;
Scene *scene = (Scene *)sc->scene;
float *cursor = give_cursor(scene, v3d);
@@ -322,7 +327,7 @@ static void rna_View3D_CursorLocation_set(PointerRNA *ptr, const float *values)
static void rna_SpaceView3D_layer_set(PointerRNA *ptr, const int *values)
{
- View3D *v3d = (View3D*)(ptr->data);
+ View3D *v3d = (View3D *)(ptr->data);
v3d->lay = ED_view3d_scene_layer_set(v3d->lay, values, &v3d->layact);
}
@@ -334,7 +339,7 @@ static void rna_SpaceView3D_layer_update(Main *bmain, Scene *UNUSED(scene), Poin
static void rna_SpaceView3D_viewport_shade_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- View3D *v3d = (View3D*)(ptr->data);
+ View3D *v3d = (View3D *)(ptr->data);
ScrArea *sa = rna_area_from_space(ptr);
if (v3d->drawtype != OB_RENDER) {
@@ -354,7 +359,7 @@ static void rna_SpaceView3D_viewport_shade_update(Main *UNUSED(bmain), Scene *UN
static void rna_SpaceView3D_pivot_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
if (U.uiflag & USER_LOCKAROUND) {
- View3D *v3d_act = (View3D*)(ptr->data);
+ View3D *v3d_act = (View3D *)(ptr->data);
/* TODO, space looper */
bScreen *screen;
@@ -362,7 +367,7 @@ static void rna_SpaceView3D_pivot_update(Main *bmain, Scene *UNUSED(scene), Poin
ScrArea *sa;
for (sa = screen->areabase.first; sa; sa = sa->next) {
SpaceLink *sl;
- for (sl = sa->spacedata.first; sl ;sl = sl->next) {
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
if (v3d != v3d_act) {
@@ -379,11 +384,11 @@ static void rna_SpaceView3D_pivot_update(Main *bmain, Scene *UNUSED(scene), Poin
static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)
{
- View3D *v3d = (View3D*)(ptr->data);
+ View3D *v3d = (View3D *)(ptr->data);
ScrArea *sa = rna_area_from_space(ptr);
void *regiondata = NULL;
if (sa) {
- ListBase *regionbase = (sa->spacedata.first == v3d)? &sa->regionbase: &v3d->regionbase;
+ ListBase *regionbase = (sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase;
ARegion *ar = regionbase->last; /* always last in list, weak .. */
regiondata = ar->regiondata;
}
@@ -393,14 +398,14 @@ static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)
static PointerRNA rna_SpaceView3D_region_quadview_get(PointerRNA *ptr)
{
- View3D *v3d = (View3D*)(ptr->data);
+ View3D *v3d = (View3D *)(ptr->data);
ScrArea *sa = rna_area_from_space(ptr);
void *regiondata = NULL;
if (sa) {
- ListBase *regionbase = (sa->spacedata.first == v3d)? &sa->regionbase: &v3d->regionbase;
+ ListBase *regionbase = (sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase;
ARegion *ar = regionbase->last; /* always before last in list, weak .. */
- ar = (ar->alignment == RGN_ALIGN_QSPLIT)? ar->prev: NULL;
+ ar = (ar->alignment == RGN_ALIGN_QSPLIT) ? ar->prev : NULL;
if (ar) {
regiondata = ar->regiondata;
}
@@ -483,7 +488,7 @@ void rna_RegionView3D_update(ID *id, RegionView3D *rv3d)
static EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- Scene *scene = ((bScreen*)ptr->id.data)->scene;
+ Scene *scene = ((bScreen *)ptr->id.data)->scene;
RenderEngineType *type = RE_engines_find(scene->r.engine);
EnumPropertyItem *item = NULL;
@@ -522,35 +527,35 @@ static void rna_SpaceImageEditor_paint_update(Main *bmain, Scene *scene, Pointer
static int rna_SpaceImageEditor_show_render_get(PointerRNA *ptr)
{
- SpaceImage *sima = (SpaceImage*)(ptr->data);
+ SpaceImage *sima = (SpaceImage *)(ptr->data);
return ED_space_image_show_render(sima);
}
static int rna_SpaceImageEditor_show_paint_get(PointerRNA *ptr)
{
- SpaceImage *sima = (SpaceImage*)(ptr->data);
+ SpaceImage *sima = (SpaceImage *)(ptr->data);
return ED_space_image_show_paint(sima);
}
static int rna_SpaceImageEditor_show_uvedit_get(PointerRNA *ptr)
{
- SpaceImage *sima = (SpaceImage*)(ptr->data);
- bScreen *sc = (bScreen*)ptr->id.data;
+ SpaceImage *sima = (SpaceImage *)(ptr->data);
+ bScreen *sc = (bScreen *)ptr->id.data;
return ED_space_image_show_uvedit(sima, sc->scene->obedit);
}
static void rna_SpaceImageEditor_image_set(PointerRNA *ptr, PointerRNA value)
{
- SpaceImage *sima = (SpaceImage*)(ptr->data);
- bScreen *sc = (bScreen*)ptr->id.data;
+ SpaceImage *sima = (SpaceImage *)(ptr->data);
+ bScreen *sc = (bScreen *)ptr->id.data;
- ED_space_image_set(sima, sc->scene, sc->scene->obedit, (Image*)value.data);
+ ED_space_image_set(sima, sc->scene, sc->scene->obedit, (Image *)value.data);
}
static EnumPropertyItem *rna_SpaceImageEditor_draw_channels_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), int *free)
{
- SpaceImage *sima = (SpaceImage*)ptr->data;
+ SpaceImage *sima = (SpaceImage *)ptr->data;
EnumPropertyItem *item = NULL;
ImBuf *ibuf;
void *lock;
@@ -584,7 +589,7 @@ static EnumPropertyItem *rna_SpaceImageEditor_draw_channels_itemf(bContext *UNUS
static void rna_SpaceImageEditor_zoom_get(PointerRNA *ptr, float *values)
{
- SpaceImage *sima = (SpaceImage*)ptr->data;
+ SpaceImage *sima = (SpaceImage *)ptr->data;
ScrArea *sa;
ARegion *ar;
@@ -600,7 +605,7 @@ static void rna_SpaceImageEditor_zoom_get(PointerRNA *ptr, float *values)
static void rna_SpaceImageEditor_cursor_location_get(PointerRNA *ptr, float *values)
{
- SpaceImage *sima = (SpaceImage*)ptr->data;
+ SpaceImage *sima = (SpaceImage *)ptr->data;
if (sima->flag & SI_COORDFLOATS) {
copy_v2_v2(values, sima->cursor);
@@ -616,7 +621,7 @@ static void rna_SpaceImageEditor_cursor_location_get(PointerRNA *ptr, float *val
static void rna_SpaceImageEditor_cursor_location_set(PointerRNA *ptr, const float *values)
{
- SpaceImage *sima = (SpaceImage*)ptr->data;
+ SpaceImage *sima = (SpaceImage *)ptr->data;
if (sima->flag & SI_COORDFLOATS) {
copy_v2_v2(sima->cursor, values);
@@ -632,7 +637,7 @@ static void rna_SpaceImageEditor_cursor_location_set(PointerRNA *ptr, const floa
static void rna_SpaceImageEditor_curves_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- SpaceImage *sima = (SpaceImage*)ptr->data;
+ SpaceImage *sima = (SpaceImage *)ptr->data;
ImBuf *ibuf;
void *lock;
@@ -646,7 +651,7 @@ static void rna_SpaceImageEditor_curves_update(Main *UNUSED(bmain), Scene *UNUSE
static void rna_SpaceImageEditor_scopes_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- SpaceImage *sima = (SpaceImage*)ptr->data;
+ SpaceImage *sima = (SpaceImage *)ptr->data;
ImBuf *ibuf;
void *lock;
@@ -662,7 +667,7 @@ static void rna_SpaceImageEditor_scopes_update(Main *UNUSED(bmain), Scene *scene
static void rna_SpaceTextEditor_word_wrap_set(PointerRNA *ptr, int value)
{
- SpaceText *st = (SpaceText*)(ptr->data);
+ SpaceText *st = (SpaceText *)(ptr->data);
st->wordwrap = value;
st->left = 0;
@@ -670,19 +675,19 @@ static void rna_SpaceTextEditor_word_wrap_set(PointerRNA *ptr, int value)
static void rna_SpaceTextEditor_text_set(PointerRNA *ptr, PointerRNA value)
{
- SpaceText *st = (SpaceText*)(ptr->data);
+ SpaceText *st = (SpaceText *)(ptr->data);
st->text = value.data;
- WM_main_add_notifier(NC_TEXT|NA_SELECTED, st->text);
+ WM_main_add_notifier(NC_TEXT | NA_SELECTED, st->text);
}
static void rna_SpaceTextEditor_updateEdited(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- SpaceText *st = (SpaceText*)ptr->data;
+ SpaceText *st = (SpaceText *)ptr->data;
if (st->text)
- WM_main_add_notifier(NC_TEXT|NA_EDITED, st->text);
+ WM_main_add_notifier(NC_TEXT | NA_EDITED, st->text);
}
@@ -691,13 +696,13 @@ static void rna_SpaceTextEditor_updateEdited(Main *UNUSED(bmain), Scene *UNUSED(
/* note: this function exists only to avoid id refcounting */
static void rna_SpaceProperties_pin_id_set(PointerRNA *ptr, PointerRNA value)
{
- SpaceButs *sbuts = (SpaceButs*)(ptr->data);
+ SpaceButs *sbuts = (SpaceButs *)(ptr->data);
sbuts->pinid = value.data;
}
static StructRNA *rna_SpaceProperties_pin_id_typef(PointerRNA *ptr)
{
- SpaceButs *sbuts = (SpaceButs*)(ptr->data);
+ SpaceButs *sbuts = (SpaceButs *)(ptr->data);
if (sbuts->pinid)
return ID_code_to_RNA_type(GS(sbuts->pinid->name));
@@ -707,7 +712,7 @@ static StructRNA *rna_SpaceProperties_pin_id_typef(PointerRNA *ptr)
static void rna_SpaceProperties_pin_id_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- SpaceButs *sbuts = (SpaceButs*)(ptr->data);
+ SpaceButs *sbuts = (SpaceButs *)(ptr->data);
ID *id = sbuts->pinid;
if (id == NULL) {
@@ -717,7 +722,7 @@ static void rna_SpaceProperties_pin_id_update(Main *UNUSED(bmain), Scene *UNUSED
switch (GS(id->name)) {
case ID_MA:
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING, NULL);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING, NULL);
break;
case ID_TE:
WM_main_add_notifier(NC_TEXTURE, NULL);
@@ -734,7 +739,7 @@ static void rna_SpaceProperties_pin_id_update(Main *UNUSED(bmain), Scene *UNUSED
static void rna_SpaceProperties_context_set(PointerRNA *ptr, int value)
{
- SpaceButs *sbuts = (SpaceButs*)(ptr->data);
+ SpaceButs *sbuts = (SpaceButs *)(ptr->data);
sbuts->mainb = value;
sbuts->mainbuser = value;
@@ -742,7 +747,7 @@ static void rna_SpaceProperties_context_set(PointerRNA *ptr, int value)
static void rna_SpaceProperties_align_set(PointerRNA *ptr, int value)
{
- SpaceButs *sbuts = (SpaceButs*)(ptr->data);
+ SpaceButs *sbuts = (SpaceButs *)(ptr->data);
sbuts->align = value;
sbuts->re_align = 1;
@@ -751,19 +756,19 @@ static void rna_SpaceProperties_align_set(PointerRNA *ptr, int value)
/* Space Console */
static void rna_ConsoleLine_body_get(PointerRNA *ptr, char *value)
{
- ConsoleLine *ci = (ConsoleLine*)ptr->data;
+ ConsoleLine *ci = (ConsoleLine *)ptr->data;
strcpy(value, ci->line);
}
static int rna_ConsoleLine_body_length(PointerRNA *ptr)
{
- ConsoleLine *ci = (ConsoleLine*)ptr->data;
+ ConsoleLine *ci = (ConsoleLine *)ptr->data;
return ci->len;
}
static void rna_ConsoleLine_body_set(PointerRNA *ptr, const char *value)
{
- ConsoleLine *ci = (ConsoleLine*)ptr->data;
+ ConsoleLine *ci = (ConsoleLine *)ptr->data;
int len = strlen(value);
if ((len >= ci->len_alloc) || (len * 2 < ci->len_alloc) ) { /* allocate a new string */
@@ -780,7 +785,7 @@ static void rna_ConsoleLine_body_set(PointerRNA *ptr, const char *value)
static void rna_ConsoleLine_cursor_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- ConsoleLine *ci = (ConsoleLine*)ptr->data;
+ ConsoleLine *ci = (ConsoleLine *)ptr->data;
*min = 0;
*max = ci->len; /* intentionally _not_ -1 */
@@ -790,8 +795,8 @@ static void rna_ConsoleLine_cursor_index_range(PointerRNA *ptr, int *min, int *m
static void rna_SpaceDopeSheetEditor_action_set(PointerRNA *ptr, PointerRNA value)
{
- SpaceAction *saction = (SpaceAction*)(ptr->data);
- bAction *act = (bAction*)value.data;
+ SpaceAction *saction = (SpaceAction *)(ptr->data);
+ bAction *act = (bAction *)value.data;
if ((act == NULL) || (act->idroot == 0)) {
/* just set if we're clearing the action or if the action is "amorphous" still */
@@ -805,7 +810,7 @@ static void rna_SpaceDopeSheetEditor_action_set(PointerRNA *ptr, PointerRNA valu
saction->action = act;
else
printf("ERROR: cannot assign Action '%s' to Action Editor, as action is not object-level animation\n",
- act->id.name+2);
+ act->id.name + 2);
}
else if (saction->mode == SACTCONT_SHAPEKEY) {
/* as the name says, "shapekey-level" only... */
@@ -813,7 +818,7 @@ static void rna_SpaceDopeSheetEditor_action_set(PointerRNA *ptr, PointerRNA valu
saction->action = act;
else
printf("ERROR: cannot assign Action '%s' to Shape Key Editor, as action doesn't animate Shape Keys\n",
- act->id.name+2);
+ act->id.name + 2);
}
else {
printf("ACK: who's trying to set an action while not in a mode displaying a single Action only?\n");
@@ -823,11 +828,11 @@ static void rna_SpaceDopeSheetEditor_action_set(PointerRNA *ptr, PointerRNA valu
static void rna_SpaceDopeSheetEditor_action_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- SpaceAction *saction = (SpaceAction*)(ptr->data);
- Object *obact = (scene->basact)? scene->basact->object: NULL;
+ SpaceAction *saction = (SpaceAction *)(ptr->data);
+ Object *obact = (scene->basact) ? scene->basact->object : NULL;
/* we must set this action to be the one used by active object (if not pinned) */
- if (obact/* && saction->pin == 0*/) {
+ if (obact /* && saction->pin == 0*/) {
AnimData *adt = NULL;
if (saction->mode == SACTCONT_ACTION) {
@@ -837,7 +842,7 @@ static void rna_SpaceDopeSheetEditor_action_update(Main *UNUSED(bmain), Scene *s
else if (saction->mode == SACTCONT_SHAPEKEY) {
Key *key = ob_get_key(obact);
if (key)
- adt = BKE_id_add_animdata(&key->id); /* this only adds if non-existant */
+ adt = BKE_id_add_animdata(&key->id); /* this only adds if non-existant */
}
/* set action */
@@ -851,14 +856,14 @@ static void rna_SpaceDopeSheetEditor_action_update(Main *UNUSED(bmain), Scene *s
}
/* force depsgraph flush too */
- DAG_id_tag_update(&obact->id, OB_RECALC_OB|OB_RECALC_DATA);
+ DAG_id_tag_update(&obact->id, OB_RECALC_OB | OB_RECALC_DATA);
}
}
static void rna_SpaceDopeSheetEditor_mode_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- SpaceAction *saction = (SpaceAction*)(ptr->data);
- Object *obact = (scene->basact)? scene->basact->object: NULL;
+ SpaceAction *saction = (SpaceAction *)(ptr->data);
+ Object *obact = (scene->basact) ? scene->basact->object : NULL;
/* special exceptions for ShapeKey Editor mode */
if (saction->mode == SACTCONT_SHAPEKEY) {
@@ -866,7 +871,7 @@ static void rna_SpaceDopeSheetEditor_mode_update(Main *UNUSED(bmain), Scene *sce
/* 1) update the action stored for the editor */
if (key)
- saction->action = (key->adt)? key->adt->action : NULL;
+ saction->action = (key->adt) ? key->adt->action : NULL;
else
saction->action = NULL;
@@ -881,10 +886,13 @@ static void rna_SpaceDopeSheetEditor_mode_update(Main *UNUSED(bmain), Scene *sce
/* 1) update the action stored for the editor */
/* TODO: context selector could help decide this with more control? */
if (obact)
- saction->action = (obact->adt)? obact->adt->action : NULL;
+ saction->action = (obact->adt) ? obact->adt->action : NULL;
else
saction->action = NULL;
}
+
+ /* recalculate extents of channel list */
+ saction->flag |= SACTION_TEMP_NEEDCHANSYNC;
}
/* Space Graph Editor */
@@ -901,7 +909,7 @@ static void rna_SpaceGraphEditor_display_mode_update(Main *UNUSED(bmain), Scene
static int rna_SpaceGraphEditor_has_ghost_curves_get(PointerRNA *ptr)
{
- SpaceIpo *sipo = (SpaceIpo*)(ptr->data);
+ SpaceIpo *sipo = (SpaceIpo *)(ptr->data);
return (sipo->ghostCurves.first != NULL);
}
@@ -914,7 +922,7 @@ static void rna_Sequencer_view_type_update(Main *UNUSED(bmain), Scene *UNUSED(sc
static float rna_BackgroundImage_opacity_get(PointerRNA *ptr)
{
BGpic *bgpic = (BGpic *)ptr->data;
- return 1.0f-bgpic->blend;
+ return 1.0f - bgpic->blend;
}
static void rna_BackgroundImage_opacity_set(PointerRNA *ptr, float value)
@@ -927,7 +935,7 @@ static BGpic *rna_BackgroundImage_new(View3D *v3d)
{
BGpic *bgpic = ED_view3D_background_image_new(v3d);
- WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, v3d);
+ WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, v3d);
return bgpic;
}
@@ -939,22 +947,22 @@ static void rna_BackgroundImage_remove(View3D *v3d, ReportList *reports, BGpic *
}
else {
ED_view3D_background_image_remove(v3d, bgpic);
- WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, v3d);
+ WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, v3d);
}
}
static void rna_BackgroundImage_clear(View3D *v3d)
{
ED_view3D_background_image_clear(v3d);
- WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, v3d);
+ WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, v3d);
}
/* Space Node Editor */
static int rna_SpaceNodeEditor_node_tree_poll(PointerRNA *ptr, PointerRNA value)
{
- SpaceNode *snode = (SpaceNode*)ptr->data;
- bNodeTree *ntree = (bNodeTree*)value.data;
+ SpaceNode *snode = (SpaceNode *)ptr->data;
+ bNodeTree *ntree = (bNodeTree *)value.data;
/* exclude group trees, only trees of the active type */
return (ntree->nodetype == 0 && ntree->type == snode->treetype);
@@ -962,7 +970,7 @@ static int rna_SpaceNodeEditor_node_tree_poll(PointerRNA *ptr, PointerRNA value)
static void rna_SpaceNodeEditor_node_tree_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- SpaceNode *snode = (SpaceNode*)ptr->data;
+ SpaceNode *snode = (SpaceNode *)ptr->data;
ED_node_tree_update(snode, scene);
}
@@ -1023,22 +1031,22 @@ static EnumPropertyItem *rna_SpaceProperties_texture_context_itemf(bContext *C,
static void rna_SpaceClipEditor_clip_set(PointerRNA *ptr, PointerRNA value)
{
- SpaceClip *sc = (SpaceClip*)(ptr->data);
- bScreen *screen = (bScreen*)ptr->id.data;
+ SpaceClip *sc = (SpaceClip *)(ptr->data);
+ bScreen *screen = (bScreen *)ptr->id.data;
- ED_space_clip_set(NULL, screen, sc, (MovieClip*)value.data);
+ ED_space_clip_set(NULL, screen, sc, (MovieClip *)value.data);
}
static void rna_SpaceClipEditor_clip_mode_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- SpaceClip *sc = (SpaceClip*)(ptr->data);
+ SpaceClip *sc = (SpaceClip *)(ptr->data);
sc->scopes.ok = 0;
}
static void rna_SpaceClipEditor_lock_selection_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- SpaceClip *sc = (SpaceClip*)(ptr->data);
+ SpaceClip *sc = (SpaceClip *)(ptr->data);
sc->xlockof = 0.f;
sc->ylockof = 0.f;
@@ -1080,25 +1088,29 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
"Select UVs that are at the same location and share a mesh vertex"},
{SI_STICKY_VERTEX, "SHARED_VERTEX", ICON_STICKY_UVS_VERT, "Shared Vertex",
"Select UVs that share mesh vertex, irrespective if they are in the same location"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem dt_uv_items[] = {
{SI_UVDT_OUTLINE, "OUTLINE", 0, "Outline", "Draw white edges with black outline"},
{SI_UVDT_DASH, "DASH", 0, "Dash", "Draw dashed black-white edges"},
{SI_UVDT_BLACK, "BLACK", 0, "Black", "Draw black edges"},
{SI_UVDT_WHITE, "WHITE", 0, "White", "Draw white edges"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem dt_uvstretch_items[] = {
{SI_UVDT_STRETCH_ANGLE, "ANGLE", 0, "Angle", "Angular distortion between UV and 3D angles"},
{SI_UVDT_STRETCH_AREA, "AREA", 0, "Area", "Area distortion between UV and 3D faces"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem pivot_items[] = {
{V3D_CENTER, "CENTER", ICON_ROTATE, "Bounding Box Center", ""},
{V3D_CENTROID, "MEDIAN", ICON_ROTATECENTER, "Median Point", ""},
{V3D_CURSOR, "CURSOR", ICON_CURSOR, "2D Cursor", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceUVEditor", NULL);
RNA_def_struct_sdna(srna, "SpaceImage");
@@ -1111,85 +1123,85 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
RNA_def_property_enum_items(prop, sticky_mode_items);
RNA_def_property_ui_text(prop, "Sticky Selection Mode",
"Automatically select also UVs sharing the same vertex as the ones being selected");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
/* drawing */
prop = RNA_def_property(srna, "edge_draw_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "dt_uv");
RNA_def_property_enum_items(prop, dt_uv_items);
RNA_def_property_ui_text(prop, "Edge Draw Type", "Draw type for drawing UV edges");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "show_smooth_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_SMOOTH_UV);
RNA_def_property_ui_text(prop, "Draw Smooth Edges", "Draw UV edges anti-aliased");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "show_stretch", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAW_STRETCH);
RNA_def_property_ui_text(prop, "Draw Stretch",
"Draw faces colored according to the difference in shape between UVs and "
"their 3D coordinates (blue for low distortion, red for high distortion)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "draw_stretch_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "dt_uvstretch");
RNA_def_property_enum_items(prop, dt_uvstretch_items);
RNA_def_property_ui_text(prop, "Draw Stretch Type", "Type of stretch to draw");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "show_modified_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAWSHADOW);
RNA_def_property_ui_text(prop, "Draw Modified Edges", "Draw edges after modifiers are applied");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "show_other_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAW_OTHER);
RNA_def_property_ui_text(prop, "Draw Other Objects", "Draw other selected objects that share the same image");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "show_normalized_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_COORDFLOATS);
RNA_def_property_ui_text(prop, "Normalized Coordinates",
"Display UV coordinates from 0.0 to 1.0 rather than in pixels");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SI_NO_DRAWFACES);
RNA_def_property_ui_text(prop, "Draw Faces", "Draw faces over the image");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_XYZ);
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_SpaceImageEditor_cursor_location_get",
"rna_SpaceImageEditor_cursor_location_set", NULL);
RNA_def_property_ui_text(prop, "2D Cursor Location", "2D cursor location for this view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
/* todo: move edge and face drawing options here from G.f */
prop = RNA_def_property(srna, "use_snap_to_pixels", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_PIXELSNAP);
RNA_def_property_ui_text(prop, "Snap to Pixels", "Snap UVs to pixel locations while editing");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "lock_bounds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_CLIP_UV);
RNA_def_property_ui_text(prop, "Constrain to Image Bounds",
"Constraint to stay within the image bounds while editing");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "use_live_unwrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_LIVE_UNWRAP);
RNA_def_property_ui_text(prop, "Live Unwrap",
"Continuously unwrap the selected UV island while transforming pinned vertices");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "around");
RNA_def_property_enum_items(prop, pivot_items);
RNA_def_property_ui_text(prop, "Pivot", "Rotation/Scaling Pivot");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
}
static void rna_def_space_outliner(BlenderRNA *brna)
@@ -1211,7 +1223,8 @@ static void rna_def_space_outliner(BlenderRNA *brna)
{SO_DATABLOCKS, "DATABLOCKS", 0, "Datablocks", "Display raw datablocks"},
{SO_USERDEF, "USER_PREFERENCES", 0, "User Preferences", "Display the user preference datablocks"},
{SO_KEYMAP, "KEYMAPS", 0, "Key Maps", "Display keymap datablocks"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceOutliner", "Space");
RNA_def_struct_sdna(srna, "SpaceOops");
@@ -1221,27 +1234,27 @@ static void rna_def_space_outliner(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "outlinevis");
RNA_def_property_enum_items(prop, display_mode_items);
RNA_def_property_ui_text(prop, "Display Mode", "Type of information to display");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "filter_text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "search_string");
RNA_def_property_ui_text(prop, "Display Filter", "Live search filtering string");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "use_filter_case_sensitive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "search_flags", SO_FIND_CASE_SENSITIVE);
RNA_def_property_ui_text(prop, "Case Sensitive Matches Only", "Only use case sensitive matches of search string");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "use_filter_complete", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "search_flags", SO_FIND_COMPLETE);
RNA_def_property_ui_text(prop, "Complete Matches Only", "Only use complete matches of search string");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "show_restrict_columns", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SO_HIDE_RESTRICTCOLS);
RNA_def_property_ui_text(prop, "Show Restriction Columns", "Show column");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
}
static void rna_def_background_image(BlenderRNA *brna)
@@ -1252,26 +1265,27 @@ static void rna_def_background_image(BlenderRNA *brna)
/* note: combinations work but don't flip so arnt that useful */
static EnumPropertyItem bgpic_axis_items[] = {
{0, "", 0, N_("X Axis"), ""},
- {(1<<RV3D_VIEW_LEFT), "LEFT", 0, "Left", "Show background image while looking to the left"},
- {(1<<RV3D_VIEW_RIGHT), "RIGHT", 0, "Right", "Show background image while looking to the right"},
+ {(1 << RV3D_VIEW_LEFT), "LEFT", 0, "Left", "Show background image while looking to the left"},
+ {(1 << RV3D_VIEW_RIGHT), "RIGHT", 0, "Right", "Show background image while looking to the right"},
/*{(1<<RV3D_VIEW_LEFT)|(1<<RV3D_VIEW_RIGHT), "LEFT_RIGHT", 0, "Left/Right", ""},*/
{0, "", 0, N_("Y Axis"), ""},
- {(1<<RV3D_VIEW_BACK), "BACK", 0, "Back", "Show background image in back view"},
- {(1<<RV3D_VIEW_FRONT), "FRONT", 0, "Front", "Show background image in front view"},
+ {(1 << RV3D_VIEW_BACK), "BACK", 0, "Back", "Show background image in back view"},
+ {(1 << RV3D_VIEW_FRONT), "FRONT", 0, "Front", "Show background image in front view"},
/*{(1<<RV3D_VIEW_BACK)|(1<<RV3D_VIEW_FRONT), "BACK_FRONT", 0, "Back/Front", ""},*/
{0, "", 0, N_("Z Axis"), ""},
- {(1<<RV3D_VIEW_BOTTOM), "BOTTOM", 0, "Bottom", "Show background image in bottom view"},
- {(1<<RV3D_VIEW_TOP), "TOP", 0, "Top", "Show background image in top view"},
+ {(1 << RV3D_VIEW_BOTTOM), "BOTTOM", 0, "Bottom", "Show background image in bottom view"},
+ {(1 << RV3D_VIEW_TOP), "TOP", 0, "Top", "Show background image in top view"},
/*{(1<<RV3D_VIEW_BOTTOM)|(1<<RV3D_VIEW_TOP), "BOTTOM_TOP", 0, "Top/Bottom", ""},*/
{0, "", 0, N_("Other"), ""},
{0, "ALL", 0, "All Views", "Show background image in all views"},
- {(1<<RV3D_VIEW_CAMERA), "CAMERA", 0, "Camera", "Show background image in camera view"},
- {0, NULL, 0, NULL, NULL}};
+ {(1 << RV3D_VIEW_CAMERA), "CAMERA", 0, "Camera", "Show background image in camera view"},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem bgpic_source_items[] = {
{V3D_BGPIC_IMAGE, "IMAGE", 0, "Image", ""},
{V3D_BGPIC_MOVIE, "MOVIE_CLIP", 0, "Movie Clip", ""},
- {0, NULL, 0, NULL, NULL}
+ {0, NULL, 0, NULL, NULL}
};
srna = RNA_def_struct(brna, "BackgroundImage", NULL);
@@ -1282,62 +1296,62 @@ static void rna_def_background_image(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "source");
RNA_def_property_enum_items(prop, bgpic_source_items);
RNA_def_property_ui_text(prop, "Background Source", "Data source used for background");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ima");
RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "clip");
RNA_def_property_ui_text(prop, "MovieClip", "Movie clip displayed and edited in this space");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "iuser");
RNA_def_property_ui_text(prop, "Image User",
"Parameters defining which layer, pass and frame of the image is displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "clip_user", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MovieClipUser");
RNA_def_property_pointer_sdna(prop, NULL, "cuser");
RNA_def_property_ui_text(prop, "Clip User", "Parameters defining which frame of the movie clip is displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "offset_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xof");
RNA_def_property_ui_text(prop, "X Offset", "Offset image horizontally from the world origin");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "offset_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "yof");
RNA_def_property_ui_text(prop, "Y Offset", "Offset image vertically from the world origin");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "size");
RNA_def_property_ui_text(prop, "Size", "Scaling factor for the background image");
RNA_def_property_range(prop, 0.0, FLT_MAX);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "blend");
RNA_def_property_float_funcs(prop, "rna_BackgroundImage_opacity_get", "rna_BackgroundImage_opacity_set", NULL);
RNA_def_property_ui_text(prop, "Opacity", "Image opacity to blend the image against the background color");
RNA_def_property_range(prop, 0.0, 1.0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "view_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "view");
RNA_def_property_enum_items(prop, bgpic_axis_items);
RNA_def_property_ui_text(prop, "Image Axis", "The axis to display the image on");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_EXPANDED);
@@ -1347,17 +1361,17 @@ static void rna_def_background_image(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_camera_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_CAMERACLIP);
RNA_def_property_ui_text(prop, "Camera Clip", "Use movie clip from active scene camera");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_background_image", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_BGPIC_DISABLED);
RNA_def_property_ui_text(prop, "Show Background Image", "Show this image as background");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_on_foreground", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_FOREGROUND);
RNA_def_property_ui_text(prop, "Show On Foreground", "Show this image in front of objects in viewport");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
}
static void rna_def_backgroundImages(BlenderRNA *brna, PropertyRNA *cprop)
@@ -1380,7 +1394,7 @@ static void rna_def_backgroundImages(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Remove background image");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "image", "BackgroundImage", "", "Image displayed as viewport background");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "clear", "rna_BackgroundImage_clear");
RNA_def_function_ui_description(func, "Remove all background images");
@@ -1401,13 +1415,15 @@ static void rna_def_space_view3d(BlenderRNA *brna)
{V3D_CENTROID, "MEDIAN_POINT", ICON_ROTATECENTER, "Median Point",
"Pivot around the median point of selected objects"},
{V3D_ACTIVE, "ACTIVE_ELEMENT", ICON_ROTACTIVE, "Active Element", "Pivot around active object"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem rv3d_persp_items[] = {
{RV3D_PERSP, "PERSP", 0, "Perspective", ""},
{RV3D_ORTHO, "ORTHO", 0, "Orthographic", ""},
{RV3D_CAMOB, "CAMERA", 0, "Camera", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem bundle_drawtype_items[] = {
{OB_PLAINAXES, "PLAIN_AXES", 0, "Plain Axes", ""},
@@ -1417,7 +1433,8 @@ static void rna_def_space_view3d(BlenderRNA *brna)
{OB_CUBE, "CUBE", 0, "Cube", ""},
{OB_EMPTY_SPHERE, "SPHERE", 0, "Sphere", ""},
{OB_EMPTY_CONE, "CONE", 0, "Cone", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceView3D", "Space");
RNA_def_struct_sdna(srna, "View3D");
@@ -1428,30 +1445,30 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "camera");
RNA_def_property_ui_text(prop, "Camera",
"Active camera used in this view (when unlocked from the scene's active camera)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "lock_object", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_pointer_sdna(prop, NULL, "ob_centre");
RNA_def_property_ui_text(prop, "Lock to Object", "3D View center is locked to this object's position");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "lock_bone", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "ob_centre_bone");
RNA_def_property_ui_text(prop, "Lock to Bone", "3D View center is locked to this bone's position");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "lock_cursor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ob_centre_cursor", 1);
RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "drawtype");
RNA_def_property_enum_items(prop, viewport_shade_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_SpaceView3D_viewport_shade_itemf");
RNA_def_property_ui_text(prop, "Viewport Shading", "Method to display/shade objects in the 3D View");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_SpaceView3D_viewport_shade_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_SpaceView3D_viewport_shade_update");
prop = RNA_def_property(srna, "local_view", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "localvd");
@@ -1464,163 +1481,163 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "3D Cursor Location",
"3D cursor location for this view (dependent on local view setting)");
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "lens", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "lens");
RNA_def_property_ui_text(prop, "Lens", "Lens angle (mm) in perspective view");
RNA_def_property_range(prop, 1.0f, 250.0f);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "near");
RNA_def_property_range(prop, 0.001f, FLT_MAX);
RNA_def_property_float_default(prop, 0.1f);
RNA_def_property_ui_text(prop, "Clip Start", "3D View near clipping distance");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "far");
RNA_def_property_range(prop, 1.0f, FLT_MAX);
RNA_def_property_float_default(prop, 1000.0f);
RNA_def_property_ui_text(prop, "Clip End", "3D View far clipping distance");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "grid");
RNA_def_property_ui_text(prop, "Grid Scale", "Distance between 3D View grid lines");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_float_default(prop, 1.0f);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_lines", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gridlines");
RNA_def_property_ui_text(prop, "Grid Lines", "Number of grid lines to display in perspective view");
RNA_def_property_range(prop, 0, 1024);
RNA_def_property_int_default(prop, 16);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_subdivisions", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gridsubdiv");
RNA_def_property_ui_text(prop, "Grid Subdivisions", "Number of subdivisions between grid lines");
RNA_def_property_range(prop, 1, 1024);
RNA_def_property_int_default(prop, 10);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR);
RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X);
RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y);
RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z);
RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_outline_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE);
RNA_def_property_ui_text(prop, "Outline Selected",
"Show an outline highlight around selected objects in non-wireframe views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_all_objects_origin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS);
RNA_def_property_ui_text(prop, "All Object Origins",
"Show the object origin center dot for all (selected and unselected) objects");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_relationship_lines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES);
RNA_def_property_ui_text(prop, "Relationship Lines",
"Show dashed lines indicating parent or constraint relationships");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_textured_solid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SOLID_TEX);
RNA_def_property_ui_text(prop, "Textured Solid", "Display face-assigned textures in solid view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "lock_camera", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_LOCK_CAMERA);
RNA_def_property_ui_text(prop, "Lock Camera to View", "Enable view navigation within the camera view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_only_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_RENDER_OVERRIDE);
RNA_def_property_ui_text(prop, "Only Render", "Display only objects which will be rendered");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "use_occlude_geometry", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_ZBUF_SELECT);
RNA_def_property_ui_text(prop, "Occlude Geometry", "Limit selection to visible (clipped with depth buffer)");
RNA_def_property_ui_icon(prop, ICON_ORTHO, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "background_images", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "bgpicbase", NULL);
RNA_def_property_struct_type(prop, "BackgroundImage");
RNA_def_property_ui_text(prop, "Background Images", "List of background images");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
rna_def_backgroundImages(brna, prop);
prop = RNA_def_property(srna, "show_background_images", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DISPBGPICS);
RNA_def_property_ui_text(prop, "Display Background Images",
"Display reference images behind objects in the 3D View");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "around");
RNA_def_property_enum_items(prop, pivot_items);
RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_SpaceView3D_pivot_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_SpaceView3D_pivot_update");
prop = RNA_def_property(srna, "use_pivot_point_align", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_ALIGN);
RNA_def_property_ui_text(prop, "Align", "Manipulate center points (object and pose mode only)");
RNA_def_property_ui_icon(prop, ICON_ALIGN, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_SpaceView3D_pivot_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_SpaceView3D_pivot_update");
prop = RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twflag", V3D_USE_MANIPULATOR);
RNA_def_property_ui_text(prop, "Manipulator", "Use a 3D manipulator widget for controlling transforms");
RNA_def_property_ui_icon(prop, ICON_MANIPUL, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "use_manipulator_translate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twtype", V3D_MANIP_TRANSLATE);
RNA_def_property_ui_text(prop, "Manipulator Translate", "Use the manipulator for movement transformations");
RNA_def_property_ui_icon(prop, ICON_MAN_TRANS, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "use_manipulator_rotate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twtype", V3D_MANIP_ROTATE);
RNA_def_property_ui_text(prop, "Manipulator Rotate", "Use the manipulator for rotation transformations");
RNA_def_property_ui_icon(prop, ICON_MAN_ROT, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "use_manipulator_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twtype", V3D_MANIP_SCALE);
RNA_def_property_ui_text(prop, "Manipulator Scale", "Use the manipulator for scale transformations");
RNA_def_property_ui_icon(prop, ICON_MAN_SCALE, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "transform_orientation", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "twmode");
RNA_def_property_enum_items(prop, transform_orientation_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_TransformOrientation_itemf");
RNA_def_property_ui_text(prop, "Transform Orientation", "Transformation orientation");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "current_orientation", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "TransformOrientation");
@@ -1633,14 +1650,14 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Camera and Layers",
"Use the scene's active camera and layers in this view, rather than local layers");
RNA_def_property_ui_icon(prop, ICON_LOCKVIEW_OFF, 1);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_boolean_funcs(prop, NULL, "rna_SpaceView3D_layer_set");
RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible in this 3D View");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_SpaceView3D_layer_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_SpaceView3D_layer_update");
prop = RNA_def_property(srna, "layers_used", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "lay_used", 1);
@@ -1661,29 +1678,29 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_RECONSTRUCTION);
RNA_def_property_ui_text(prop, "Show Reconstruction", "Display reconstruction data from active movie clip");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "tracks_draw_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0, FLT_MAX);
RNA_def_property_float_sdna(prop, NULL, "bundle_size");
RNA_def_property_ui_text(prop, "Tracks Size", "Display size of tracks from reconstructed data");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "tracks_draw_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "bundle_drawtype");
RNA_def_property_enum_items(prop, bundle_drawtype_items);
RNA_def_property_ui_text(prop, "Tracks Display Type", "Viewport display style for tracks");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_camera_path", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_CAMERAPATH);
RNA_def_property_ui_text(prop, "Show Camera Path", "Show reconstructed camera path");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_bundle_names", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_BUNDLENAME);
RNA_def_property_ui_text(prop, "Show 3D Marker Names", "Show names for reconstructed tracks objects");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
/* region */
@@ -1694,17 +1711,17 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop = RNA_def_property(srna, "lock_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewlock", RV3D_LOCKED);
RNA_def_property_ui_text(prop, "Lock", "Lock view rotation in side views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
prop = RNA_def_property(srna, "show_sync_view", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewlock", RV3D_BOXVIEW);
RNA_def_property_ui_text(prop, "Box", "Sync view position between side views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
prop = RNA_def_property(srna, "use_box_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewlock", RV3D_BOXCLIP);
RNA_def_property_ui_text(prop, "Clip", "Clip objects based on what's visible in other side views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_clip_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_clip_update");
prop = RNA_def_property(srna, "perspective_matrix", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "persmat");
@@ -1717,13 +1734,13 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_multi_array(prop, 2, matrix_dimsize);
RNA_def_property_float_funcs(prop, NULL, "rna_RegionView3D_view_matrix_set", NULL);
RNA_def_property_ui_text(prop, "View Matrix", "Current view matrix of the 3D region");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "view_perspective", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "persp");
RNA_def_property_enum_items(prop, rv3d_persp_items);
RNA_def_property_ui_text(prop, "Perspective", "View Perspective");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "is_perspective", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "is_persp", 1);
@@ -1751,25 +1768,25 @@ static void rna_def_space_view3d(BlenderRNA *brna)
"rna_RegionView3D_view_rotation_set", NULL);
#endif
RNA_def_property_ui_text(prop, "View Rotation", "Rotation in quaternions (keep normalized)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
/* not sure we need rna access to these but adding anyway */
prop = RNA_def_property(srna, "view_distance", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "dist");
RNA_def_property_ui_text(prop, "Distance", "Distance to the view location");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "view_camera_zoom", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "camzoom");
RNA_def_property_ui_text(prop, "Camera Zoom", "Zoom factor in camera view");
RNA_def_property_range(prop, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "view_camera_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "camdx");
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Camera Offset", "View shift in camera view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
/* until we have real api call */
{
@@ -1800,16 +1817,19 @@ static void rna_def_space_buttons(BlenderRNA *brna)
{BCONTEXT_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture"},
{BCONTEXT_PARTICLE, "PARTICLES", ICON_PARTICLES, "Particles", "Particle"},
{BCONTEXT_PHYSICS, "PHYSICS", ICON_PHYSICS, "Physics", "Physics"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem align_items[] = {
{BUT_HORIZONTAL, "HORIZONTAL", 0, "Horizontal", ""},
{BUT_VERTICAL, "VERTICAL", 0, "Vertical", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem buttons_texture_context_items[] = {
{SB_TEXC_MAT_OR_LAMP, "MATERIAL", ICON_MATERIAL, "Material", "Material"},
- {0, NULL, 0, NULL, NULL}}; /*actually populated dynamically trough a function */
+ {0, NULL, 0, NULL, NULL}
+ }; /*actually populated dynamically trough a function */
srna = RNA_def_struct(brna, "SpaceProperties", "Space");
RNA_def_struct_sdna(srna, "SpaceButs");
@@ -1820,14 +1840,14 @@ static void rna_def_space_buttons(BlenderRNA *brna)
RNA_def_property_enum_items(prop, buttons_context_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_SpaceProperties_context_set", NULL);
RNA_def_property_ui_text(prop, "Context", "Type of active data to display and edit");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_PROPERTIES, NULL);
prop = RNA_def_property(srna, "align", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "align");
RNA_def_property_enum_items(prop, align_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_SpaceProperties_align_set", NULL);
RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_PROPERTIES, NULL);
prop = RNA_def_property(srna, "texture_context", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, buttons_texture_context_items);
@@ -1843,7 +1863,7 @@ static void rna_def_space_buttons(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceProperties_pin_id_set",
"rna_SpaceProperties_pin_id_typef", NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, "rna_SpaceProperties_pin_id_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_PROPERTIES, "rna_SpaceProperties_pin_id_update");
prop = RNA_def_property(srna, "use_pin_id", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SB_PIN_CONTEXT);
@@ -1864,31 +1884,31 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceImageEditor_image_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL); /* is handled in image editor too */
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, NULL); /* is handled in image editor too */
prop = RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "iuser");
RNA_def_property_ui_text(prop, "Image User",
"Parameters defining which layer, pass and frame of the image is displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "cumap");
RNA_def_property_ui_text(prop, "Curve", "Color curve mapping to use for displaying the image");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_SpaceImageEditor_curves_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, "rna_SpaceImageEditor_curves_update");
prop = RNA_def_property(srna, "scopes", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "scopes");
RNA_def_property_struct_type(prop, "Scopes");
RNA_def_property_ui_text(prop, "Scopes", "Scopes to visualize image statistics");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_SpaceImageEditor_scopes_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, "rna_SpaceImageEditor_scopes_update");
prop = RNA_def_property(srna, "use_image_pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pin", 0);
RNA_def_property_ui_text(prop, "Image Pin", "Display current image regardless of object selection");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "sample_histogram", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "sample_line_hist");
@@ -1905,14 +1925,14 @@ static void rna_def_space_image(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_repeat", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAW_TILE);
RNA_def_property_ui_text(prop, "Draw Repeated", "Draw the image repeated outside of the main view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "draw_channels", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, draw_channels_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_SpaceImageEditor_draw_channels_itemf");
RNA_def_property_ui_text(prop, "Draw Channels", "Channels of the image to draw");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
/* uv */
prop = RNA_def_property(srna, "uv_editor", PROP_POINTER, PROP_NONE);
@@ -1926,7 +1946,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAWTOOL);
RNA_def_property_ui_text(prop, "Image Painting", "Enable image painting mode");
RNA_def_property_ui_icon(prop, ICON_TPAINT_HLT, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_SpaceImageEditor_paint_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, "rna_SpaceImageEditor_paint_update");
/* grease pencil */
prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
@@ -1934,7 +1954,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "GreasePencil");
RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for this space");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
prop = RNA_def_property(srna, "use_grease_pencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DISPGP);
@@ -1976,14 +1996,16 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
{SEQ_VIEW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""},
{SEQ_VIEW_PREVIEW, "PREVIEW", ICON_SEQ_PREVIEW, "Image Preview", ""},
{SEQ_VIEW_SEQUENCE_PREVIEW, "SEQUENCER_PREVIEW", ICON_SEQ_SPLITVIEW, "Sequencer and Image Preview", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem display_mode_items[] = {
{SEQ_DRAW_IMG_IMBUF, "IMAGE", ICON_SEQ_PREVIEW, "Image Preview", ""},
{SEQ_DRAW_IMG_WAVEFORM, "WAVEFORM", ICON_SEQ_LUMA_WAVEFORM, "Luma Waveform", ""},
{SEQ_DRAW_IMG_VECTORSCOPE, "VECTOR_SCOPE", ICON_SEQ_CHROMA_SCOPE, "Chroma Vectorscope", ""},
{SEQ_DRAW_IMG_HISTOGRAM, "HISTOGRAM", ICON_SEQ_HISTOGRAM, "Histogram", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem proxy_render_size_items[] = {
{SEQ_PROXY_RENDER_SIZE_NONE, "NONE", 0, "No display", ""},
@@ -1993,7 +2015,8 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
{SEQ_PROXY_RENDER_SIZE_75, "PROXY_75", 0, "Proxy size 75%", ""},
{SEQ_PROXY_RENDER_SIZE_100, "PROXY_100", 0, "Proxy size 100%", ""},
{SEQ_PROXY_RENDER_SIZE_FULL, "FULL", 0, "No proxy, full render", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceSequenceEditor", "Space");
RNA_def_struct_sdna(srna, "SpaceSeq");
@@ -2011,72 +2034,72 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "mainb");
RNA_def_property_enum_items(prop, display_mode_items);
RNA_def_property_ui_text(prop, "Display Mode", "View mode to use for displaying sequencer output");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
/* flag's */
prop = RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SEQ_NO_DRAW_CFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator",
"Show frame number beside the current frame indicator line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "show_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAWFRAMES);
RNA_def_property_ui_text(prop, "Draw Frames", "Draw frames rather than seconds");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "use_marker_sync", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MARKER_TRANS);
RNA_def_property_ui_text(prop, "Sync Markers", "Transform markers as well as strips");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "show_separate_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAW_COLOR_SEPARATED);
RNA_def_property_ui_text(prop, "Separate Colors", "Separate color channels in preview");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "show_safe_margin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAW_SAFE_MARGINS);
RNA_def_property_ui_text(prop, "Safe Margin", "Draw title safe margins in preview");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "use_grease_pencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAW_GPENCIL);
RNA_def_property_ui_text(prop, "Use Grease Pencil",
"Display and edit the grease pencil freehand annotations overlay");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SEQ_DRAWFRAMES);
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
/* grease pencil */
prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "gpd");
RNA_def_property_struct_type(prop, "UnknownType");
RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for this space");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "display_channel", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "chanshown");
RNA_def_property_ui_text(prop, "Display Channel",
"The channel number shown in the image preview. 0 is the result of all strips combined");
RNA_def_property_range(prop, -5, MAXSEQ);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "draw_overexposed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "zebra");
RNA_def_property_ui_text(prop, "Show Overexposed", "Show overexposed areas with zebra stripes");
RNA_def_property_range(prop, 0, 110);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "proxy_render_size", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "render_size");
RNA_def_property_enum_items(prop, proxy_render_size_items);
RNA_def_property_ui_text(prop, "Proxy render size",
"Draw preview using full resolution or different proxy resolutions");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
}
static void rna_def_space_text(BlenderRNA *brna)
@@ -2093,7 +2116,7 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Text", "Text displayed and edited in this space");
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceTextEditor_text_set", NULL, NULL);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
/* display */
prop = RNA_def_property(srna, "show_word_wrap", PROP_BOOLEAN, PROP_NONE);
@@ -2101,84 +2124,84 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, NULL, "rna_SpaceTextEditor_word_wrap_set");
RNA_def_property_ui_text(prop, "Word Wrap", "Wrap words if there is not enough horizontal space");
RNA_def_property_ui_icon(prop, ICON_WORDWRAP_OFF, 1);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "show_line_numbers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "showlinenrs", 0);
RNA_def_property_ui_text(prop, "Line Numbers", "Show line numbers next to the text");
RNA_def_property_ui_icon(prop, ICON_LINENUMBERS_OFF, 1);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "show_syntax_highlight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "showsyntax", 0);
RNA_def_property_ui_text(prop, "Syntax Highlight", "Syntax highlight for scripting");
RNA_def_property_ui_icon(prop, ICON_SYNTAX_OFF, 1);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "show_line_highlight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "line_hlight", 0);
RNA_def_property_ui_text(prop, "Highlight Line", "Highlight the current line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "tab_width", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "tabnumber");
RNA_def_property_range(prop, 2, 8);
RNA_def_property_ui_text(prop, "Tab Width", "Number of spaces to display tabs with");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, "rna_SpaceTextEditor_updateEdited");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, "rna_SpaceTextEditor_updateEdited");
prop = RNA_def_property(srna, "font_size", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "lheight");
RNA_def_property_range(prop, 8, 32);
RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "show_margin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_SHOW_MARGIN);
RNA_def_property_ui_text(prop, "Show Margin", "Show right margin");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "margin_column", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "margin_column");
RNA_def_property_range(prop, 0, 1024);
RNA_def_property_ui_text(prop, "Margin Column", "Column number to show right margin at");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
/* functionality options */
prop = RNA_def_property(srna, "use_overwrite", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "overwrite", 1);
RNA_def_property_ui_text(prop, "Overwrite", "Overwrite characters when typing rather than inserting them");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "use_live_edit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "live_edit", 1);
RNA_def_property_ui_text(prop, "Live Edit", "Run python while editing");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
/* find */
prop = RNA_def_property(srna, "use_find_all", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_FIND_ALL);
RNA_def_property_ui_text(prop, "Find All", "Search in all text datablocks, instead of only the active one");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "use_find_wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_FIND_WRAP);
RNA_def_property_ui_text(prop, "Find Wrap", "Search again from the start of the file when reaching the end");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "use_match_case", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_MATCH_CASE);
RNA_def_property_ui_text(prop, "Match case", "Search string is sensitive to uppercase and lowercase letters");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "find_text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "findstr");
RNA_def_property_ui_text(prop, "Find Text", "Text to search for with the find tool");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
prop = RNA_def_property(srna, "replace_text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "replacestr");
RNA_def_property_ui_text(prop, "Replace Text", "Text to replace selected text with using the replace tool");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
}
static void rna_def_space_dopesheet(BlenderRNA *brna)
@@ -2192,7 +2215,8 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
{SACTCONT_ACTION, "ACTION", ICON_OBJECT_DATA, "Action Editor", "Action Editor"},
{SACTCONT_SHAPEKEY, "SHAPEKEY", ICON_SHAPEKEY_DATA, "ShapeKey Editor", "ShapeKey Editor"},
{SACTCONT_GPENCIL, "GPENCIL", ICON_GREASEPENCIL, "Grease Pencil", "Grease Pencil"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceDopeSheetEditor", "Space");
@@ -2205,50 +2229,50 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceDopeSheetEditor_action_set", NULL,
"rna_Action_actedit_assign_poll");
RNA_def_property_ui_text(prop, "Action", "Action displayed and edited in this space");
- RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, "rna_SpaceDopeSheetEditor_action_update");
+ RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, "rna_SpaceDopeSheetEditor_action_update");
/* mode */
prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, mode_items);
RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, "rna_SpaceDopeSheetEditor_mode_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, "rna_SpaceDopeSheetEditor_mode_update");
/* display */
prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_DRAWTIME);
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
prop = RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NODRAWCFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator",
"Show frame number beside the current frame indicator line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
prop = RNA_def_property(srna, "show_sliders", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_SLIDERS);
RNA_def_property_ui_text(prop, "Show Sliders", "Show sliders beside F-Curve channels");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
prop = RNA_def_property(srna, "show_pose_markers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_POSEMARKERS_SHOW);
RNA_def_property_ui_text(prop, "Show Pose Markers",
"Show markers belonging to the active action instead of Scene markers "
"(Action and Shape Key Editors only)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
/* editing */
prop = RNA_def_property(srna, "use_auto_merge_keyframes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NOTRANSKEYCULL);
RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Automatically merge nearby keyframes");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
prop = RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NOREALTIMEUPDATES);
RNA_def_property_ui_text(prop, "Realtime Updates",
"When transforming keyframes, changes to the animation data are flushed to other views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
prop = RNA_def_property(srna, "use_marker_sync", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_MARKERS_MOVE);
@@ -2265,7 +2289,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "autosnap");
RNA_def_property_enum_items(prop, autosnap_items);
RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, NULL);
}
static void rna_def_space_graph(BlenderRNA *brna)
@@ -2275,18 +2299,20 @@ static void rna_def_space_graph(BlenderRNA *brna)
static EnumPropertyItem mode_items[] = {
{SIPO_MODE_ANIMATION, "FCURVES", ICON_IPO, "F-Curve Editor",
- "Edit animation/keyframes displayed as 2D curves"},
+ "Edit animation/keyframes displayed as 2D curves"},
{SIPO_MODE_DRIVERS, "DRIVERS", ICON_DRIVER, "Drivers", "Edit drivers"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
- /* this is basically the same as the one for the 3D-View, but with some entries ommitted */
+ /* this is basically the same as the one for the 3D-View, but with some entries ommitted */
static EnumPropertyItem gpivot_items[] = {
{V3D_CENTER, "BOUNDING_BOX_CENTER", ICON_ROTATE, "Bounding Box Center", ""},
{V3D_CURSOR, "CURSOR", ICON_CURSOR, "2D Cursor", ""},
{V3D_LOCAL, "INDIVIDUAL_ORIGINS", ICON_ROTATECOLLECTION, "Individual Centers", ""},
/*{V3D_CENTROID, "MEDIAN_POINT", 0, "Median Point", ""}, */
/*{V3D_ACTIVE, "ACTIVE_ELEMENT", 0, "Active Element", ""}, */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceGraphEditor", "Space");
@@ -2298,77 +2324,77 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, mode_items);
RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, "rna_SpaceGraphEditor_display_mode_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, "rna_SpaceGraphEditor_display_mode_update");
/* display */
prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_DRAWTIME);
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NODRAWCFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator",
"Show frame number beside the current frame indicator line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "show_sliders", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SLIDERS);
RNA_def_property_ui_text(prop, "Show Sliders", "Show sliders beside F-Curve channels");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "show_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOHANDLES);
RNA_def_property_ui_text(prop, "Show Handles", "Show handles of Bezier control points");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "use_only_selected_curves_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SELCUVERTSONLY);
RNA_def_property_ui_text(prop, "Only Selected Curve Keyframes",
"Only keyframes of selected F-Curves are visible and editable");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "use_only_selected_keyframe_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SELVHANDLESONLY);
RNA_def_property_ui_text(prop, "Only Selected Keyframes Handles",
"Only show and edit handles of selected keyframes");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "use_beauty_drawing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_BEAUTYDRAW_OFF);
RNA_def_property_ui_text(prop, "Use High Quality Drawing",
"Draw F-Curves using Anti-Aliasing and other fancy effects "
"(disable for better performance)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
/* editing */
prop = RNA_def_property(srna, "use_auto_merge_keyframes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOTRANSKEYCULL);
RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Automatically merge nearby keyframes");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOREALTIMEUPDATES);
RNA_def_property_ui_text(prop, "Realtime Updates",
"When transforming keyframes, changes to the animation data are flushed to other views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
/* cursor */
prop = RNA_def_property(srna, "show_cursor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NODRAWCURSOR);
RNA_def_property_ui_text(prop, "Show Cursor", "Show 2D cursor");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "cursor_position_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "cursorVal");
RNA_def_property_ui_text(prop, "Cursor Y-Value", "Graph Editor 2D-Value cursor - Y-Value component");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "around");
RNA_def_property_enum_items(prop, gpivot_items);
RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
/* dopesheet */
prop = RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE);
@@ -2381,15 +2407,15 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "autosnap");
RNA_def_property_enum_items(prop, autosnap_items);
RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
/* readonly state info */
prop = RNA_def_property(srna, "has_ghost_curves", PROP_BOOLEAN, PROP_NONE);
- /* XXX: hack to make this compile, since this property doesn't actually exist*/
+ /* XXX: hack to make this compile, since this property doesn't actually exist*/
RNA_def_property_boolean_sdna(prop, NULL, "flag", 0);
RNA_def_property_boolean_funcs(prop, "rna_SpaceGraphEditor_has_ghost_curves_get", NULL);
RNA_def_property_ui_text(prop, "Has Ghost Curves", "Graph Editor instance has some ghost curves stored");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
}
static void rna_def_space_nla(BlenderRNA *brna)
@@ -2405,25 +2431,25 @@ static void rna_def_space_nla(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SNLA_DRAWTIME);
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NLA, NULL);
prop = RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NODRAWCFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator",
"Show frame number beside the current frame indicator line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NLA, NULL);
prop = RNA_def_property(srna, "show_strip_curves", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NOSTRIPCURVES);
RNA_def_property_ui_text(prop, "Show Control F-Curves", "Show influence F-Curves on strips");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NLA, NULL);
/* editing */
prop = RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NOREALTIMEUPDATES);
RNA_def_property_ui_text(prop, "Realtime Updates",
"When transforming strips, changes to the animation data are flushed to other views");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NLA, NULL);
/* dopesheet */
prop = RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE);
@@ -2436,7 +2462,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "autosnap");
RNA_def_property_enum_items(prop, autosnap_items);
RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NLA, NULL);
}
static void rna_def_space_time(BlenderRNA *brna)
@@ -2453,49 +2479,49 @@ static void rna_def_space_time(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_ONLYACTSEL);
RNA_def_property_ui_text(prop, "Only Selected Channels",
"Show keyframes for active Object and/or its selected bones only");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_CFRA_NUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator",
"Show frame number beside the current frame indicator line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", TIME_DRAWFRAMES);
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
/* displaying cache status */
prop = RNA_def_property(srna, "show_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_DISPLAY);
RNA_def_property_ui_text(prop, "Show Cache", "Show the status of cached frames in the timeline");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "cache_softbody", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_SOFTBODY);
RNA_def_property_ui_text(prop, "Softbody", "Show the active object's softbody point cache");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "cache_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_PARTICLES);
RNA_def_property_ui_text(prop, "Particles", "Show the active object's particle point cache");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "cache_cloth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_CLOTH);
RNA_def_property_ui_text(prop, "Cloth", "Show the active object's cloth point cache");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "cache_smoke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_SMOKE);
RNA_def_property_ui_text(prop, "Smoke", "Show the active object's smoke cache");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
prop = RNA_def_property(srna, "cache_dynamicpaint", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_display", TIME_CACHE_DYNAMICPAINT);
RNA_def_property_ui_text(prop, "Dynamic Paint", "Show the active object's Dynamic Paint cache");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, NULL);
}
static void rna_def_console_line(BlenderRNA *brna)
@@ -2511,12 +2537,12 @@ static void rna_def_console_line(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, "rna_ConsoleLine_body_get", "rna_ConsoleLine_body_length",
"rna_ConsoleLine_body_set");
RNA_def_property_ui_text(prop, "Line", "Text in the line");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CONSOLE, NULL);
prop = RNA_def_property(srna, "current_character", PROP_INT, PROP_NONE); /* copied from text editor */
RNA_def_property_int_sdna(prop, NULL, "cursor");
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_ConsoleLine_cursor_index_range");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CONSOLE, NULL);
}
static void rna_def_space_console(BlenderRNA *brna)
@@ -2533,16 +2559,16 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "lheight");
RNA_def_property_range(prop, 8, 32);
RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CONSOLE, NULL);
prop = RNA_def_property(srna, "select_start", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
RNA_def_property_int_sdna(prop, NULL, "sel_start");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CONSOLE, NULL);
prop = RNA_def_property(srna, "select_end", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
RNA_def_property_int_sdna(prop, NULL, "sel_end");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CONSOLE, NULL);
prop = RNA_def_property(srna, "prompt", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Prompt", "Command line prompt");
@@ -2570,7 +2596,8 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
{FILE_SHORTDISPLAY, "FILE_SHORTDISPLAY", ICON_SHORTDISPLAY, "Short List", "Display files as short list"},
{FILE_LONGDISPLAY, "FILE_LONGDISPLAY", ICON_LONGDISPLAY, "Long List", "Display files as a detailed list"},
{FILE_IMGDISPLAY, "FILE_IMGDISPLAY", ICON_IMGDISPLAY, "Thumbnails", "Display files as thumbnails"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem file_sort_items[] = {
{FILE_SORT_ALPHA, "FILE_SORT_ALPHA", ICON_SORTALPHA, "Sort alphabetically",
@@ -2579,7 +2606,8 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
"Sort the file list by extension"},
{FILE_SORT_TIME, "FILE_SORT_TIME", ICON_SORTTIME, "Sort by time", "Sort files by modification time"},
{FILE_SORT_SIZE, "FILE_SORT_SIZE", ICON_SORTSIZE, "Sort by size", "Sort files by size"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "FileSelectParams", NULL);
RNA_def_struct_ui_text(srna, "File Select Parameters", "File Select Parameters");
@@ -2592,87 +2620,87 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "dir");
RNA_def_property_ui_text(prop, "Directory", "Directory displayed in the file browser");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_FILENAME);
RNA_def_property_string_sdna(prop, NULL, "file");
RNA_def_property_ui_text(prop, "File Name", "Active file in the file browser");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "display_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "display");
RNA_def_property_enum_items(prop, file_display_items);
RNA_def_property_ui_text(prop, "Display Mode", "Display mode for the file list");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_FILTER);
RNA_def_property_ui_text(prop, "Filter Files", "Enable filtering of files");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FILE_HIDE_DOT);
RNA_def_property_ui_text(prop, "Show Hidden", "Show hidden dot files");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "sort");
RNA_def_property_enum_items(prop, file_sort_items);
RNA_def_property_ui_text(prop, "Sort", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_image", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE);
RNA_def_property_ui_text(prop, "Filter Images", "Show image files");
RNA_def_property_ui_icon(prop, ICON_FILE_IMAGE, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_blender", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", BLENDERFILE);
RNA_def_property_ui_text(prop, "Filter Blender", "Show .blend files");
RNA_def_property_ui_icon(prop, ICON_FILE_BLEND, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_movie", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE);
RNA_def_property_ui_text(prop, "Filter Movies", "Show movie files");
RNA_def_property_ui_icon(prop, ICON_FILE_MOVIE, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_script", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", PYSCRIPTFILE);
RNA_def_property_ui_text(prop, "Filter Script", "Show script files");
RNA_def_property_ui_icon(prop, ICON_FILE_SCRIPT, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_font", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", FTFONTFILE);
RNA_def_property_ui_text(prop, "Filter Fonts", "Show font files");
RNA_def_property_ui_icon(prop, ICON_FILE_FONT, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_sound", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", SOUNDFILE);
RNA_def_property_ui_text(prop, "Filter Sound", "Show sound files");
RNA_def_property_ui_icon(prop, ICON_FILE_SOUND, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_text", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", TEXTFILE);
RNA_def_property_ui_text(prop, "Filter Text", "Show text files");
RNA_def_property_ui_icon(prop, ICON_FILE_TEXT, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "use_filter_folder", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE);
RNA_def_property_ui_text(prop, "Filter Folder", "Show folders");
RNA_def_property_ui_icon(prop, ICON_FILE_FOLDER, 0);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
prop = RNA_def_property(srna, "filter_glob", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "filter_glob");
RNA_def_property_ui_text(prop, "Extension Filter", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
}
@@ -2713,27 +2741,27 @@ static void rna_def_space_info(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_report_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_DEBUG);
RNA_def_property_ui_text(prop, "Show Debug", "Display debug reporting info");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_INFO_REPORT, NULL);
prop = RNA_def_property(srna, "show_report_info", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_INFO);
RNA_def_property_ui_text(prop, "Show Info", "Display general information");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_INFO_REPORT, NULL);
prop = RNA_def_property(srna, "show_report_operator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_OP);
RNA_def_property_ui_text(prop, "Show Operator", "Display the operator log");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_INFO_REPORT, NULL);
prop = RNA_def_property(srna, "show_report_warning", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_WARN);
RNA_def_property_ui_text(prop, "Show Warn", "Display warnings");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_INFO_REPORT, NULL);
prop = RNA_def_property(srna, "show_report_error", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_ERR);
RNA_def_property_ui_text(prop, "Show Error", "Display error text");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_INFO_REPORT, NULL);
}
static void rna_def_space_userpref(BlenderRNA *brna)
@@ -2760,19 +2788,22 @@ static void rna_def_space_node(BlenderRNA *brna)
{SNODE_TEX_OBJECT, "OBJECT", ICON_OBJECT_DATA, "Object", "Edit texture nodes from Object"},
{SNODE_TEX_WORLD, "WORLD", ICON_WORLD_DATA, "World", "Edit texture nodes from World"},
{SNODE_TEX_BRUSH, "BRUSH", ICON_BRUSH_DATA, "Brush", "Edit texture nodes from Brush"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem shader_type_items[] = {
{SNODE_SHADER_OBJECT, "OBJECT", ICON_OBJECT_DATA, "Object", "Edit shader nodes from Object"},
{SNODE_SHADER_WORLD, "WORLD", ICON_WORLD_DATA, "World", "Edit shader nodes from World"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem backdrop_channels_items[] = {
{0, "COLOR", ICON_IMAGE_RGB, "Color", "Draw image with RGB colors"},
{SNODE_USE_ALPHA, "COLOR_ALPHA", ICON_IMAGE_RGB_ALPHA, "Color and Alpha",
"Draw image with RGB colors and alpha transparency"},
{SNODE_SHOW_ALPHA, "ALPHA", ICON_IMAGE_ALPHA, "Alpha", "Draw alpha transparency channel"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceNodeEditor", "Space");
RNA_def_struct_sdna(srna, "SpaceNode");
@@ -2782,19 +2813,19 @@ static void rna_def_space_node(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "treetype");
RNA_def_property_enum_items(prop, nodetree_type_items);
RNA_def_property_ui_text(prop, "Tree Type", "Node tree type to display and edit");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, NULL);
prop = RNA_def_property(srna, "texture_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texfrom");
RNA_def_property_enum_items(prop, texture_type_items);
RNA_def_property_ui_text(prop, "Texture Type", "Type of data to take texture from");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, NULL);
prop = RNA_def_property(srna, "shader_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "shaderfrom");
RNA_def_property_enum_items(prop, shader_type_items);
RNA_def_property_ui_text(prop, "Shader Type", "Type of data to take shader from");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, NULL);
prop = RNA_def_property(srna, "id", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -2810,17 +2841,17 @@ static void rna_def_space_node(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_SpaceNodeEditor_node_tree_poll");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Node Tree", "Node tree being displayed and edited");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE, "rna_SpaceNodeEditor_node_tree_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, "rna_SpaceNodeEditor_node_tree_update");
prop = RNA_def_property(srna, "show_backdrop", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SNODE_BACKDRAW);
RNA_def_property_ui_text(prop, "Backdrop", "Use active Viewer Node output as backdrop for compositing nodes");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
prop = RNA_def_property(srna, "use_auto_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SNODE_AUTO_RENDER);
RNA_def_property_ui_text(prop, "Auto Render", "Re-render and composite changed layers on 3D edits");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
prop = RNA_def_property(srna, "backdrop_zoom", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zoom");
@@ -2828,23 +2859,23 @@ static void rna_def_space_node(BlenderRNA *brna)
RNA_def_property_range(prop, 0.01f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.01, 100, 1, 2);
RNA_def_property_ui_text(prop, "Backdrop Zoom", "Backdrop zoom factor");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
prop = RNA_def_property(srna, "backdrop_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xof");
RNA_def_property_ui_text(prop, "Backdrop X", "Backdrop X offset");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
prop = RNA_def_property(srna, "backdrop_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "yof");
RNA_def_property_ui_text(prop, "Backdrop Y", "Backdrop Y offset");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
prop = RNA_def_property(srna, "backdrop_channels", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, backdrop_channels_items);
RNA_def_property_ui_text(prop, "Draw Channels", "Channels of the image to draw");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
}
static void rna_def_space_logic(BlenderRNA *brna)
@@ -2926,19 +2957,22 @@ static void rna_def_space_clip(BlenderRNA *brna)
{SC_MODE_RECONSTRUCTION, "RECONSTRUCTION", ICON_SNAP_FACE, "Reconstruction",
"Show tracking/reconstruction tools"},
{SC_MODE_DISTORTION, "DISTORTION", ICON_GRID, "Distortion", "Show distortion tools"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem view_items[] = {
{SC_VIEW_CLIP, "CLIP", ICON_SEQUENCE, "Clip", "Show editing clip preview"},
{SC_VIEW_GRAPH, "GRAPH", ICON_IPO, "Graph", "Show graph view for active element"},
{SC_VIEW_DOPESHEET, "DOPESHEET", ICON_ACTION, "Dopesheet", "Dopesheet view for tracking data"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem dope_sort_items[] = {
{SC_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"},
{SC_DOPE_SORT_LONGEST, "LONGEST", 0, "Longest", "Sort channels by longest tracked segment"},
{SC_DOPE_SORT_TOTAL, "TOTAL", 0, "Total", "Sort channels by overall amount of tracked segments"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "SpaceClipEditor", "Space");
RNA_def_struct_sdna(srna, "SpaceClip");
@@ -2949,7 +2983,7 @@ static void rna_def_space_clip(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Movie Clip", "Movie clip displayed and edited in this space");
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceClipEditor_clip_set", NULL, NULL);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* clip user */
prop = RNA_def_property(srna, "clip_user", PROP_POINTER, PROP_NONE);
@@ -2958,83 +2992,83 @@ static void rna_def_space_clip(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "user");
RNA_def_property_ui_text(prop, "Movie Clip User",
"Parameters defining which frame of the movie clip is displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* mode */
prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, mode_items);
RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, "rna_SpaceClipEditor_clip_mode_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, "rna_SpaceClipEditor_clip_mode_update");
/* view */
prop = RNA_def_property(srna, "view", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "view");
RNA_def_property_enum_items(prop, view_items);
RNA_def_property_ui_text(prop, "View", "Type of the clip editor view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, "rna_SpaceClipEditor_view_type_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, "rna_SpaceClipEditor_view_type_update");
/* show pattern */
prop = RNA_def_property(srna, "show_marker_pattern", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Marker Pattern", "Show pattern boundbox for markers");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_MARKER_PATTERN);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show search */
prop = RNA_def_property(srna, "show_marker_search", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Marker Search", "Show search boundbox for markers");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_MARKER_SEARCH);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* lock to selection */
prop = RNA_def_property(srna, "lock_selection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Lock to Selection", "Lock viewport to selected markers during playback");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_LOCK_SELECTION);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, "rna_SpaceClipEditor_lock_selection_update");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, "rna_SpaceClipEditor_lock_selection_update");
/* lock to time cursor */
prop = RNA_def_property(srna, "lock_time_cursor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Lock to Time Cursor",
"Lock curves view to time cursor during playback and tracking");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_LOCK_TIMECURSOR);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show markers paths */
prop = RNA_def_property(srna, "show_track_path", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_TRACK_PATH);
RNA_def_property_ui_text(prop, "Show Track Path", "Show path of how track moves");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* path length */
prop = RNA_def_property(srna, "path_length", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "path_length");
RNA_def_property_range(prop, 0, 50);
RNA_def_property_ui_text(prop, "Path Length", "Length of displaying path, in frames");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show tiny markers */
prop = RNA_def_property(srna, "show_tiny_markers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Tiny Markers", "Show markers in a more compact manner");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_TINY_MARKER);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show bundles */
prop = RNA_def_property(srna, "show_bundles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Bundles", "Show projection of 3D markers into footage");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_BUNDLES);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* mute footage */
prop = RNA_def_property(srna, "use_mute_footage", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Mute Footage", "Mute footage and show black background instead");
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_MUTE_FOOTAGE);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* hide disabled */
prop = RNA_def_property(srna, "show_disabled", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Show Disabled", "Show disabled tracks from the footage");
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SC_HIDE_DISABLED);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* scopes */
prop = RNA_def_property(srna, "scopes", PROP_POINTER, PROP_NONE);
@@ -3046,38 +3080,38 @@ static void rna_def_space_clip(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_names", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_NAMES);
RNA_def_property_ui_text(prop, "Show Names", "Show track names and status");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show grid */
prop = RNA_def_property(srna, "show_grid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_GRID);
RNA_def_property_ui_text(prop, "Show Grid", "Show grid showing lens distortion");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show stable */
prop = RNA_def_property(srna, "show_stable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_STABLE);
RNA_def_property_ui_text(prop, "Show Stable", "Show stable footage in editor (if stabilization is enabled)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* manual calibration */
prop = RNA_def_property(srna, "use_manual_calibration", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_MANUAL_CALIBRATION);
RNA_def_property_ui_text(prop, "Manual Calibration", "Use manual calibration helpers");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show filters */
prop = RNA_def_property(srna, "show_filters", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_FILTERS);
RNA_def_property_ui_text(prop, "Show Filters", "Show filters for graph editor");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show graph_frames */
prop = RNA_def_property(srna, "show_graph_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_GRAPH_FRAMES);
RNA_def_property_ui_text(prop, "Show Frames",
"Show curve for per-frame average error (camera motion should be solved first)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show graph_tracks */
prop = RNA_def_property(srna, "show_graph_tracks", PROP_BOOLEAN, PROP_NONE);
@@ -3085,7 +3119,7 @@ static void rna_def_space_clip(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Tracks",
"Display the speed curves (in \"x\" direction red, in \"y\" direction green) "
"for the selected tracks");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* ** channels ** */
@@ -3093,31 +3127,31 @@ static void rna_def_space_clip(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_red_channel", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "postproc_flag", MOVIECLIP_DISABLE_RED);
RNA_def_property_ui_text(prop, "Show Red Channel", "Show red channel in the frame");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show_green_channel */
prop = RNA_def_property(srna, "show_green_channel", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "postproc_flag", MOVIECLIP_DISABLE_GREEN);
RNA_def_property_ui_text(prop, "Show Green Channel", "Show green channel in the frame");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* show_blue_channel */
prop = RNA_def_property(srna, "show_blue_channel", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "postproc_flag", MOVIECLIP_DISABLE_BLUE);
RNA_def_property_ui_text(prop, "Show Blue Channel", "Show blue channel in the frame");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* preview_grayscale */
prop = RNA_def_property(srna, "use_grayscale_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "postproc_flag", MOVIECLIP_PREVIEW_GRAYSCALE);
RNA_def_property_ui_text(prop, "Grayscale", "Display frame in grayscale mode");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
/* timeline */
prop = RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_SECONDS);
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
- RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL);
+ RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
/* ** dopesheet ** */
@@ -3126,13 +3160,13 @@ static void rna_def_space_clip(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "dope_sort");
RNA_def_property_enum_items(prop, dope_sort_items);
RNA_def_property_ui_text(prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
/* invert_dopesheet_sort */
prop = RNA_def_property(srna, "invert_dopesheet_sort", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dope_flag", SC_DOPE_SORT_INVERSE);
RNA_def_property_ui_text(prop, "Invert Dopesheet Sort", "Invert sort order of dopesheet channels");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
}
@@ -3162,4 +3196,3 @@ void RNA_def_space(BlenderRNA *brna)
}
#endif
-
diff --git a/source/blender/makesrna/intern/rna_text.c b/source/blender/makesrna/intern/rna_text.c
index 36ee361de2c..e46373b250c 100644
--- a/source/blender/makesrna/intern/rna_text.c
+++ b/source/blender/makesrna/intern/rna_text.c
@@ -46,7 +46,7 @@ int text_file_modified(Text *text); /* XXX bad level call */
static void rna_Text_filename_get(PointerRNA *ptr, char *value)
{
- Text *text = (Text*)ptr->data;
+ Text *text = (Text *)ptr->data;
if (text->name)
strcpy(value, text->name);
@@ -56,13 +56,13 @@ static void rna_Text_filename_get(PointerRNA *ptr, char *value)
static int rna_Text_filename_length(PointerRNA *ptr)
{
- Text *text = (Text*)ptr->data;
- return (text->name)? strlen(text->name): 0;
+ Text *text = (Text *)ptr->data;
+ return (text->name) ? strlen(text->name) : 0;
}
static void rna_Text_filename_set(PointerRNA *ptr, const char *value)
{
- Text *text = (Text*)ptr->data;
+ Text *text = (Text *)ptr->data;
if (text->name)
MEM_freeN(text->name);
@@ -75,13 +75,13 @@ static void rna_Text_filename_set(PointerRNA *ptr, const char *value)
static int rna_Text_modified_get(PointerRNA *ptr)
{
- Text *text = (Text*)ptr->data;
+ Text *text = (Text *)ptr->data;
return text_file_modified(text);
}
static void rna_TextLine_body_get(PointerRNA *ptr, char *value)
{
- TextLine *line = (TextLine*)ptr->data;
+ TextLine *line = (TextLine *)ptr->data;
if (line->line)
strcpy(value, line->line);
@@ -91,13 +91,13 @@ static void rna_TextLine_body_get(PointerRNA *ptr, char *value)
static int rna_TextLine_body_length(PointerRNA *ptr)
{
- TextLine *line = (TextLine*)ptr->data;
+ TextLine *line = (TextLine *)ptr->data;
return line->len;
}
static void rna_TextLine_body_set(PointerRNA *ptr, const char *value)
{
- TextLine *line = (TextLine*)ptr->data;
+ TextLine *line = (TextLine *)ptr->data;
int len = strlen(value);
if (line->line)
@@ -126,7 +126,7 @@ static void rna_def_text_line(BlenderRNA *brna)
prop = RNA_def_property(srna, "body", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_TextLine_body_get", "rna_TextLine_body_length", "rna_TextLine_body_set");
RNA_def_property_ui_text(prop, "Line", "Text in the line");
- RNA_def_property_update(prop, NC_TEXT|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_TEXT | NA_EDITED, NULL);
}
static void rna_def_text_marker(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_text_api.c b/source/blender/makesrna/intern/rna_text_api.c
index 338d0c7c52c..0366012e260 100644
--- a/source/blender/makesrna/intern/rna_text_api.c
+++ b/source/blender/makesrna/intern/rna_text_api.c
@@ -38,13 +38,13 @@
static void rna_Text_clear(Text *text)
{
BKE_text_clear(text);
- WM_main_add_notifier(NC_TEXT|NA_EDITED, text);
+ WM_main_add_notifier(NC_TEXT | NA_EDITED, text);
}
static void rna_Text_write(Text *text, const char *str)
{
BKE_text_write(text, str);
- WM_main_add_notifier(NC_TEXT|NA_EDITED, text);
+ WM_main_add_notifier(NC_TEXT | NA_EDITED, text);
}
#else
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index e8253f4b51c..646f9846e58 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -51,7 +51,8 @@ EnumPropertyItem texture_filter_items[] = {
{TXF_EWA, "EWA", 0, "EWA", ""},
{TXF_FELINE, "FELINE", 0, "FELINE", ""},
{TXF_AREA, "AREA", 0, "Area", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem texture_type_items[] = {
{0, "NONE", 0, "None", ""},
@@ -74,7 +75,8 @@ EnumPropertyItem texture_type_items[] = {
{TEX_VOXELDATA, "VOXEL_DATA", ICON_TEXTURE, "Voxel Data", "Create a 3d texture based on volumetric data"},
{TEX_WOOD, "WOOD", ICON_TEXTURE, "Wood", "Procedural - wave generated bands or rings, with optional noise"},
{TEX_OCEAN, "OCEAN", ICON_TEXTURE, "Ocean", "Use a texture generated by an Ocean modifier"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem blend_type_items[] = {
{MTEX_BLEND, "MIX", 0, "Mix", ""},
@@ -93,7 +95,8 @@ EnumPropertyItem blend_type_items[] = {
{MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""},
{MTEX_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""},
{MTEX_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -113,7 +116,7 @@ EnumPropertyItem blend_type_items[] = {
static StructRNA *rna_Texture_refine(struct PointerRNA *ptr)
{
- Tex *tex = (Tex*)ptr->data;
+ Tex *tex = (Tex *)ptr->data;
switch (tex->type) {
case TEX_BLEND:
@@ -160,7 +163,7 @@ static void rna_Texture_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *pt
DAG_id_tag_update(&tex->id, 0);
WM_main_add_notifier(NC_TEXTURE, tex);
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, NULL);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, NULL);
}
else if (GS(id->name) == ID_NT) {
bNodeTree *ntree = ptr->id.data;
@@ -205,12 +208,12 @@ static void rna_Texture_nodes_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
Tex *tex = ptr->id.data;
DAG_id_tag_update(&tex->id, 0);
- WM_main_add_notifier(NC_TEXTURE|ND_NODES, tex);
+ WM_main_add_notifier(NC_TEXTURE | ND_NODES, tex);
}
static void rna_Texture_type_set(PointerRNA *ptr, int value)
{
- Tex *tex = (Tex*)ptr->data;
+ Tex *tex = (Tex *)ptr->data;
tex_set_type(tex, value);
}
@@ -223,14 +226,14 @@ void rna_TextureSlot_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
switch (GS(id->name)) {
case ID_MA:
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING, id);
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, id);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING, id);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, id);
break;
case ID_WO:
WM_main_add_notifier(NC_WORLD, id);
break;
case ID_LA:
- WM_main_add_notifier(NC_LAMP|ND_LIGHTING, id);
+ WM_main_add_notifier(NC_LAMP | ND_LIGHTING, id);
break;
case ID_BR:
WM_main_add_notifier(NC_BRUSH, id);
@@ -246,7 +249,7 @@ void rna_TextureSlot_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
recalc |= PSYS_RECALC_CHILD;
DAG_id_tag_update(id, recalc);
- WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
break;
}
}
@@ -279,7 +282,7 @@ char *rna_TextureSlot_path(PointerRNA *ptr)
/* this is a compromise for the remaining cases... */
if (mtex->tex)
- return BLI_sprintfN("texture_slots[\"%s\"]", mtex->tex->id.name+2);
+ return BLI_sprintfN("texture_slots[\"%s\"]", mtex->tex->id.name + 2);
else
return BLI_strdup("texture_slots[0]");
}
@@ -289,7 +292,7 @@ static int rna_TextureSlot_name_length(PointerRNA *ptr)
MTex *mtex = ptr->data;
if (mtex->tex)
- return strlen(mtex->tex->id.name+2);
+ return strlen(mtex->tex->id.name + 2);
return 0;
}
@@ -299,7 +302,7 @@ static void rna_TextureSlot_name_get(PointerRNA *ptr, char *str)
MTex *mtex = ptr->data;
if (mtex->tex)
- strcpy(str, mtex->tex->id.name+2);
+ strcpy(str, mtex->tex->id.name + 2);
else
str[0] = '\0';
}
@@ -350,7 +353,7 @@ static EnumPropertyItem *rna_TextureSlot_output_node_itemf(bContext *C, PointerR
for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == TEX_NODE_OUTPUT) {
tmp.value = node->custom1;
- tmp.name = ((TexNodeOutput*)node->storage)->name;
+ tmp.name = ((TexNodeOutput *)node->storage)->name;
tmp.identifier = tmp.name;
RNA_enum_item_add(&item, &totitem, &tmp);
}
@@ -366,7 +369,7 @@ static EnumPropertyItem *rna_TextureSlot_output_node_itemf(bContext *C, PointerR
static void rna_Texture_use_color_ramp_set(PointerRNA *ptr, int value)
{
- Tex *tex = (Tex*)ptr->data;
+ Tex *tex = (Tex *)ptr->data;
if (value) tex->flag |= TEX_COLORBAND;
else tex->flag &= ~TEX_COLORBAND;
@@ -377,7 +380,7 @@ static void rna_Texture_use_color_ramp_set(PointerRNA *ptr, int value)
static void rna_Texture_use_nodes_set(PointerRNA *ptr, int v)
{
- Tex *tex = (Tex*)ptr->data;
+ Tex *tex = (Tex *)ptr->data;
tex->use_nodes = v;
tex->type = 0;
@@ -388,7 +391,7 @@ static void rna_Texture_use_nodes_set(PointerRNA *ptr, int v)
static void rna_ImageTexture_mipmap_set(PointerRNA *ptr, int value)
{
- Tex *tex = (Tex*)ptr->data;
+ Tex *tex = (Tex *)ptr->data;
if (value) tex->imaflag |= TEX_MIPMAP;
else tex->imaflag &= ~TEX_MIPMAP;
@@ -412,7 +415,7 @@ static PointerRNA rna_PointDensity_psys_get(PointerRNA *ptr)
PointerRNA value;
if (ob && pd->psys)
- psys = BLI_findlink(&ob->particlesystem, pd->psys-1);
+ psys = BLI_findlink(&ob->particlesystem, pd->psys - 1);
RNA_pointer_create(&ob->id, &RNA_ParticleSystem, psys, &value);
return value;
@@ -451,14 +454,16 @@ static void rna_def_texmapping(BlenderRNA *brna)
{MTEX_CUBE, "CUBE", 0, "Cube", "Map using the normal vector"},
{MTEX_TUBE, "TUBE", 0, "Tube", "Map with Z as central axis"},
{MTEX_SPHERE, "SPHERE", 0, "Sphere", "Map with Z as central axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_xyz_mapping_items[] = {
{0, "NONE", 0, "None", ""},
{1, "X", 0, "X", ""},
{2, "Y", 0, "Y", ""},
{3, "Z", 0, "Z", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
StructRNA *srna;
PropertyRNA *prop;
@@ -472,7 +477,7 @@ static void rna_def_texmapping(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
RNA_def_property_update(prop, 0, "rna_Texture_mapping_update");
- /* Not PROP_XYZ, this is now in radians, no more degrees */
+ /* Not PROP_XYZ, this is now in radians, no more degrees */
prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, NULL, "rot");
RNA_def_property_ui_text(prop, "Rotation", "");
@@ -584,7 +589,8 @@ static void rna_def_mtex(BlenderRNA *brna)
static EnumPropertyItem output_node_items[] = {
{0, "DUMMY", 0, "Dummy", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "TextureSlot", NULL);
RNA_def_struct_sdna(srna, "MTex");
@@ -721,12 +727,14 @@ static void rna_def_environment_map(BlenderRNA *brna)
{ENV_STATIC, "STATIC", 0, "Static", "Calculate environment map only once"},
{ENV_ANIM, "ANIMATED", 0, "Animated", "Calculate environment map at each rendering"},
{ENV_LOAD, "IMAGE_FILE", 0, "Image File", "Load a saved environment map image from disk"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_mapping_items[] = {
{ENV_CUBE, "CUBE", 0, "Cube", "Use environment map with six cube sides"},
{ENV_PLANE, "PLANE", 0, "Plane", "Only one side is rendered, with Z axis pointing in direction of image"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "EnvironmentMap", NULL);
RNA_def_struct_sdna(srna, "EnvMap");
@@ -818,12 +826,14 @@ static EnumPropertyItem prop_noise_basis_items[] = {
"Noise algorithm - Voronoi Crackle: Voronoi tessellation with sharp edges"},
{TEX_CELLNOISE, "CELL_NOISE", 0, "Cell Noise",
"Noise algorithm - Cell Noise: Square cell tessellation"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static EnumPropertyItem prop_noise_type[] = {
{TEX_NOISESOFT, "SOFT_NOISE", 0, "Soft", "Generate soft noise (smooth transitions)"},
{TEX_NOISEPERL, "HARD_NOISE", 0, "Hard", "Generate hard noise (sharp transitions)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
static void rna_def_texture_clouds(BlenderRNA *brna)
@@ -832,9 +842,10 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_clouds_stype[] = {
- {TEX_DEFAULT, "GREYSCALE", 0, "Greyscale", ""},
- {TEX_COLOR, "COLOR", 0, "Color", ""},
- {0, NULL, 0, NULL, NULL}};
+ {TEX_DEFAULT, "GREYSCALE", 0, "Greyscale", ""},
+ {TEX_COLOR, "COLOR", 0, "Color", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "CloudsTexture", "Texture");
RNA_def_struct_ui_text(srna, "Clouds Texture", "Procedural noise texture");
@@ -885,17 +896,19 @@ static void rna_def_texture_wood(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_wood_stype[] = {
- {TEX_BAND, "BANDS", 0, "Bands", "Use standard wood texture in bands"},
- {TEX_RING, "RINGS", 0, "Rings", "Use wood texture in rings"},
- {TEX_BANDNOISE, "BANDNOISE", 0, "Band Noise", "Add noise to standard wood"},
- {TEX_RINGNOISE, "RINGNOISE", 0, "Ring Noise", "Add noise to rings"},
- {0, NULL, 0, NULL, NULL}};
+ {TEX_BAND, "BANDS", 0, "Bands", "Use standard wood texture in bands"},
+ {TEX_RING, "RINGS", 0, "Rings", "Use wood texture in rings"},
+ {TEX_BANDNOISE, "BANDNOISE", 0, "Band Noise", "Add noise to standard wood"},
+ {TEX_RINGNOISE, "RINGNOISE", 0, "Ring Noise", "Add noise to rings"},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_wood_noisebasis2[] = {
- {TEX_SIN, "SIN", 0, "Sine", "Use a sine wave to produce bands"},
- {TEX_SAW, "SAW", 0, "Saw", "Use a saw wave to produce bands"},
- {TEX_TRI, "TRI", 0, "Tri", "Use a triangle wave to produce bands"},
- {0, NULL, 0, NULL, NULL}};
+ {TEX_SIN, "SIN", 0, "Sine", "Use a sine wave to produce bands"},
+ {TEX_SAW, "SAW", 0, "Saw", "Use a saw wave to produce bands"},
+ {TEX_TRI, "TRI", 0, "Tri", "Use a triangle wave to produce bands"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "WoodTexture", "Texture");
RNA_def_struct_ui_text(srna, "Wood Texture", "Procedural noise texture");
@@ -953,16 +966,18 @@ static void rna_def_texture_marble(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_marble_stype[] = {
- {TEX_SOFT, "SOFT", 0, "Soft", "Use soft marble"},
- {TEX_SHARP, "SHARP", 0, "Sharp", "Use more clearly defined marble"},
- {TEX_SHARPER, "SHARPER", 0, "Sharper", "Use very clearly defined marble"},
- {0, NULL, 0, NULL, NULL}};
+ {TEX_SOFT, "SOFT", 0, "Soft", "Use soft marble"},
+ {TEX_SHARP, "SHARP", 0, "Sharp", "Use more clearly defined marble"},
+ {TEX_SHARPER, "SHARPER", 0, "Sharper", "Use very clearly defined marble"},
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_marble_noisebasis2[] = {
- {TEX_SIN, "SIN", 0, "Sin", "Use a sine wave to produce bands"},
- {TEX_SAW, "SAW", 0, "Saw", "Use a saw wave to produce bands"},
- {TEX_TRI, "TRI", 0, "Tri", "Use a triangle wave to produce bands"},
- {0, NULL, 0, NULL, NULL}};
+ {TEX_SIN, "SIN", 0, "Sin", "Use a sine wave to produce bands"},
+ {TEX_SAW, "SAW", 0, "Saw", "Use a saw wave to produce bands"},
+ {TEX_TRI, "TRI", 0, "Tri", "Use a triangle wave to produce bands"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MarbleTexture", "Texture");
RNA_def_struct_ui_text(srna, "Marble Texture", "Procedural noise texture");
@@ -1059,12 +1074,14 @@ static void rna_def_texture_blend(BlenderRNA *brna)
{TEX_HALO, "QUADRATIC_SPHERE", 0, "Quadratic sphere",
"Create a quadratic progression in the shape of a sphere"},
{TEX_RAD, "RADIAL", 0, "Radial", "Create a radial progression"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem prop_flip_axis_items[] = {
{0, "HORIZONTAL", 0, "Horizontal", "No flipping"},
{TEX_FLIPBLEND, "VERTICAL", 0, "Vertical", "Flip the texture's X and Y axis"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "BlendTexture", "Texture");
RNA_def_struct_ui_text(srna, "Blend Texture", "Procedural color blending texture");
@@ -1090,10 +1107,11 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_stucci_stype[] = {
- {TEX_PLASTIC, "PLASTIC", 0, "Plastic", "Use standard stucci"},
- {TEX_WALLIN, "WALL_IN", 0, "Wall in", "Create Dimples"},
- {TEX_WALLOUT, "WALL_OUT", 0, "Wall out", "Create Ridges"},
- {0, NULL, 0, NULL, NULL}};
+ {TEX_PLASTIC, "PLASTIC", 0, "Plastic", "Use standard stucci"},
+ {TEX_WALLIN, "WALL_IN", 0, "Wall in", "Create Dimples"},
+ {TEX_WALLOUT, "WALL_OUT", 0, "Wall out", "Create Ridges"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "StucciTexture", "Texture");
RNA_def_struct_ui_text(srna, "Stucci Texture", "Procedural noise texture");
@@ -1153,7 +1171,8 @@ static void rna_def_texture_image(BlenderRNA *brna)
"Clip to cubic-shaped area around the image and set exterior pixels as transparent"},
{TEX_REPEAT, "REPEAT", 0, "Repeat", "Cause the image to repeat horizontally and vertically"},
{TEX_CHECKER, "CHECKER", 0, "Checker", "Cause the image to repeat in checker board pattern"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ImageTexture", "Texture");
RNA_def_struct_ui_text(srna, "Image Texture", "");
@@ -1344,7 +1363,8 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
"Use Perlin noise as a basis, with extended controls"},
{TEX_FBM, "FBM", 0, "fBM", "Fractal Brownian Motion, use Brownian noise as a basis"},
{TEX_HTERRAIN, "HETERO_TERRAIN", 0, "Hetero Terrain", "Similar to multifractal"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "MusgraveTexture", "Texture");
RNA_def_struct_ui_text(srna, "Musgrave", "Procedural musgrave texture");
@@ -1431,7 +1451,8 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
{TEX_MINKOVSKY, "MINKOVSKY", 0, "Minkovsky",
"Use the Minkowsky function to calculate distance "
"(exponent value determines the shape of the boundaries)"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_coloring_items[] = {
/* XXX: OK names / descriptions? */
@@ -1440,7 +1461,8 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
{TEX_COL2, "POSITION_OUTLINE", 0, "Position and Outline", "Use position plus an outline based on F2-F1"},
{TEX_COL3, "POSITION_OUTLINE_INTENSITY", 0, "Position, Outline, and Intensity",
"Multiply position and outline by intensity"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "VoronoiTexture", "Texture");
RNA_def_struct_ui_text(srna, "Voronoi", "Procedural voronoi texture");
@@ -1559,19 +1581,22 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
{TEX_PD_PSYS, "PARTICLE_SYSTEM", 0, "Particle System", "Generate point density from a particle system"},
{TEX_PD_OBJECT, "OBJECT", 0, "Object Vertices", "Generate point density from an object's vertices"},
/*{TEX_PD_FILE, "FILE", 0, "File", ""}, */
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem particle_cache_items[] = {
{TEX_PD_OBJECTLOC, "OBJECT_LOCATION", 0, "Emit Object Location", ""},
{TEX_PD_OBJECTSPACE, "OBJECT_SPACE", 0, "Emit Object Space", ""},
{TEX_PD_WORLDSPACE, "WORLD_SPACE", 0, "Global Space", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem vertice_cache_items[] = {
{TEX_PD_OBJECTLOC, "OBJECT_LOCATION", 0, "Object Location", ""},
{TEX_PD_OBJECTSPACE, "OBJECT_SPACE", 0, "Object Space", ""},
{TEX_PD_WORLDSPACE, "WORLD_SPACE", 0, "Global Space", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem falloff_items[] = {
{TEX_PD_FALLOFF_STD, "STANDARD", 0, "Standard", ""},
@@ -1581,7 +1606,8 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
{TEX_PD_FALLOFF_ROOT, "ROOT", 0, "Root", ""},
{TEX_PD_FALLOFF_PARTICLE_AGE, "PARTICLE_AGE", 0, "Particle Age", ""},
{TEX_PD_FALLOFF_PARTICLE_VEL, "PARTICLE_VELOCITY", 0, "Particle Velocity", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem color_source_items[] = {
{TEX_PD_COLOR_CONSTANT, "CONSTANT", 0, "Constant", ""},
@@ -1589,7 +1615,8 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
{TEX_PD_COLOR_PARTSPEED, "PARTICLE_SPEED", 0, "Particle Speed",
"Particle speed (absolute magnitude of velocity) mapped as 0.0-1.0 intensity"},
{TEX_PD_COLOR_PARTVEL, "PARTICLE_VELOCITY", 0, "Particle Velocity", "XYZ velocity mapped to RGB colors"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem turbulence_influence_items[] = {
{TEX_PD_NOISE_STATIC, "STATIC", 0, "Static",
@@ -1599,7 +1626,8 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
{TEX_PD_NOISE_AGE, "PARTICLE_AGE", 0, "Particle Age",
"Turbulent noise driven by the particle's age between birth and death"},
{TEX_PD_NOISE_TIME, "GLOBAL_TIME", 0, "Global Time", "Turbulent noise driven by the global current frame"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "PointDensity", NULL);
RNA_def_struct_sdna(srna, "PointDensity");
@@ -1751,7 +1779,8 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
{TEX_VD_TRICUBIC_CATROM, "TRICUBIC_CATROM", 0, "Cubic Catmull-Rom", "High quality interpolation, but slower"},
{TEX_VD_TRICUBIC_BSPLINE, "TRICUBIC_BSPLINE", 0, "Cubic B-Spline",
"Smoothed high quality interpolation, but slower"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem file_format_items[] = {
{TEX_VD_BLENDERVOXEL, "BLENDER_VOXEL", 0, "Blender Voxel", "Default binary voxel file format"},
@@ -1760,19 +1789,22 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
{TEX_VD_IMAGE_SEQUENCE, "IMAGE_SEQUENCE", 0, "Image Sequence",
"Generate voxels from a sequence of image slices"},
{TEX_VD_SMOKE, "SMOKE", 0, "Smoke", "Render voxels from a Blender smoke simulation"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem voxeldata_extension[] = {
{TEX_EXTEND, "EXTEND", 0, "Extend", "Extend by repeating edge pixels of the image"},
{TEX_CLIP, "CLIP", 0, "Clip", "Clip to image size and set exterior pixels as transparent"},
{TEX_REPEAT, "REPEAT", 0, "Repeat", "Cause the image to repeat horizontally and vertically"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem smoked_type_items[] = {
{TEX_VD_SMOKEDENSITY, "SMOKEDENSITY", 0, "Density", "Use smoke density as texture data"},
{TEX_VD_SMOKEHEAT, "SMOKEHEAT", 0, "Heat", "Use smoke heat as texture data. Values from -2.0 to 2.0 are used"},
{TEX_VD_SMOKEVEL, "SMOKEVEL", 0, "Velocity", "Use smoke velocity as texture data"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "VoxelData", NULL);
RNA_def_struct_sdna(srna, "VoxelData");
@@ -1874,7 +1906,8 @@ static void rna_def_texture_ocean(BlenderRNA *brna)
{TEX_OCN_JPLUS, "JPLUS", 0, "Eigenvalues", "Positive Eigenvalues"},
{TEX_OCN_EMINUS, "EMINUS", 0, "Eigenvectors (-)", "Negative Eigenvectors"},
{TEX_OCN_EPLUS, "EPLUS", 0, "Eigenvectors (+)", "Positive Eigenvectors"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "OceanTexData", NULL);
RNA_def_struct_sdna(srna, "OceanTex");
diff --git a/source/blender/makesrna/intern/rna_texture_api.c b/source/blender/makesrna/intern/rna_texture_api.c
index b801dbb4fed..ff8940129a1 100644
--- a/source/blender/makesrna/intern/rna_texture_api.c
+++ b/source/blender/makesrna/intern/rna_texture_api.c
@@ -43,7 +43,7 @@
#include "RE_pipeline.h"
#include "RE_shader_ext.h"
-void save_envmap(struct EnvMap *env, bContext *C, ReportList *reports, const char* filepath,
+void save_envmap(struct EnvMap *env, bContext *C, ReportList *reports, const char *filepath,
struct Scene *scene, float layout[12])
{
if (scene == NULL) {
@@ -62,7 +62,7 @@ void clear_envmap(struct EnvMap *env, bContext *C)
for (tex = bmain->tex.first; tex; tex = tex->id.next)
if (tex->env == env) {
- WM_event_add_notifier(C, NC_TEXTURE|NA_EDITED, tex);
+ WM_event_add_notifier(C, NC_TEXTURE | NA_EDITED, tex);
break;
}
}
@@ -112,7 +112,7 @@ void RNA_api_environment_map(StructRNA *srna)
func = RNA_def_function(srna, "save", "save_envmap");
RNA_def_function_ui_description(func, "Save the environment map to disc using the scene render settings");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
parm = RNA_def_string_file_name(func, "filepath", "", FILE_MAX, "File path", "Location of the output file");
RNA_def_property_flag(parm, PROP_REQUIRED);
diff --git a/source/blender/makesrna/intern/rna_timeline.c b/source/blender/makesrna/intern/rna_timeline.c
index a33e415ce11..3842fe95894 100644
--- a/source/blender/makesrna/intern/rna_timeline.c
+++ b/source/blender/makesrna/intern/rna_timeline.c
@@ -41,8 +41,8 @@
static void rna_TimelineMarker_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
{
- WM_main_add_notifier(NC_SCENE|ND_MARKERS, NULL);
- WM_main_add_notifier(NC_ANIMATION|ND_MARKERS, NULL);
+ WM_main_add_notifier(NC_SCENE | ND_MARKERS, NULL);
+ WM_main_add_notifier(NC_ANIMATION | ND_MARKERS, NULL);
}
#else
@@ -74,7 +74,7 @@ static void rna_def_timeline_marker(BlenderRNA *brna)
#ifdef DURIAN_CAMERA_SWITCH
prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_ui_text(prop, "Camera", "Camera this timeline sets to active");
#endif
}
diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c
index 5eb4e2190e4..7a6753ad588 100644
--- a/source/blender/makesrna/intern/rna_tracking.c
+++ b/source/blender/makesrna/intern/rna_tracking.c
@@ -611,7 +611,7 @@ static void rna_def_trackingSettings(BlenderRNA *brna)
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");
+ RNA_def_property_ui_text(prop, "Tripod Motion", "Use special solver to track a stable camera position, such as a tripod");
/* limit frames */
prop = RNA_def_property(srna, "default_frames_limit", PROP_INT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 44ece727912..7c9cb04b66a 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -52,7 +52,8 @@ EnumPropertyItem operator_context_items[] = {
{WM_OP_EXEC_REGION_PREVIEW, "EXEC_REGION_PREVIEW", 0, "Exec Region Preview", ""},
{WM_OP_EXEC_AREA, "EXEC_AREA", 0, "Exec Area", ""},
{WM_OP_EXEC_SCREEN, "EXEC_SCREEN", 0, "Exec Screen", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#ifdef RNA_RUNTIME
@@ -77,7 +78,7 @@ static ARegionType *region_type_find(ReportList *reports, int space_type, int re
st = BKE_spacetype_from_id(space_type);
- for (art = (st)? st->regiontypes.first: NULL; art; art = art->next) {
+ for (art = (st) ? st->regiontypes.first : NULL; art; art = art->next) {
if (art->regionid == region_type)
break;
}
@@ -111,7 +112,7 @@ static int panel_poll(const bContext *C, PanelType *pt)
pt->ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_get_lookup(&list, "visible", &ret);
- visible = *(int*)ret;
+ visible = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -127,7 +128,7 @@ static void panel_draw(const bContext *C, Panel *pnl)
FunctionRNA *func;
RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->ext.srna, pnl, &ptr);
- func = &rna_Panel_draw_func;/* RNA_struct_find_function(&ptr, "draw"); */
+ func = &rna_Panel_draw_func; /* RNA_struct_find_function(&ptr, "draw"); */
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
@@ -170,7 +171,7 @@ static void rna_Panel_unregister(Main *UNUSED(bmain), StructRNA *type)
RNA_struct_free(&BLENDER_RNA, type);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
}
static StructRNA *rna_Panel_register(Main *bmain, ReportList *reports, void *data, const char *identifier,
@@ -221,9 +222,9 @@ static StructRNA *rna_Panel_register(Main *bmain, ReportList *reports, void *dat
RNA_struct_blender_type_set(pt->ext.srna, pt);
RNA_def_struct_flag(pt->ext.srna, STRUCT_NO_IDPROPERTIES);
- pt->poll = (have_function[0])? panel_poll: NULL;
- pt->draw = (have_function[1])? panel_draw: NULL;
- pt->draw_header = (have_function[2])? panel_draw_header: NULL;
+ pt->poll = (have_function[0]) ? panel_poll : NULL;
+ pt->draw = (have_function[1]) ? panel_draw : NULL;
+ pt->draw_header = (have_function[2]) ? panel_draw_header : NULL;
/* XXX use "no header" flag for some ordering of panels until we have real panel ordering */
if (pt->flag & PNL_NO_HEADER) {
@@ -240,15 +241,15 @@ static StructRNA *rna_Panel_register(Main *bmain, ReportList *reports, void *dat
BLI_addtail(&art->paneltypes, pt);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
return pt->ext.srna;
}
-static StructRNA* rna_Panel_refine(PointerRNA *ptr)
+static StructRNA *rna_Panel_refine(PointerRNA *ptr)
{
- Panel *hdr = (Panel*)ptr->data;
- return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Panel;
+ Panel *hdr = (Panel *)ptr->data;
+ return (hdr->type && hdr->type->ext.srna) ? hdr->type->ext.srna : &RNA_Panel;
}
/* Header */
@@ -287,7 +288,7 @@ static void rna_Header_unregister(Main *UNUSED(bmain), StructRNA *type)
RNA_struct_free(&BLENDER_RNA, type);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
}
static StructRNA *rna_Header_register(Main *bmain, ReportList *reports, void *data, const char *identifier,
@@ -335,20 +336,20 @@ static StructRNA *rna_Header_register(Main *bmain, ReportList *reports, void *da
ht->ext.free = free;
RNA_struct_blender_type_set(ht->ext.srna, ht);
- ht->draw = (have_function[0])? header_draw: NULL;
+ ht->draw = (have_function[0]) ? header_draw : NULL;
BLI_addtail(&art->headertypes, ht);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
return ht->ext.srna;
}
-static StructRNA* rna_Header_refine(PointerRNA *htr)
+static StructRNA *rna_Header_refine(PointerRNA *htr)
{
- Header *hdr = (Header*)htr->data;
- return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Header;
+ Header *hdr = (Header *)htr->data;
+ return (hdr->type && hdr->type->ext.srna) ? hdr->type->ext.srna : &RNA_Header;
}
/* Menu */
@@ -371,7 +372,7 @@ static int menu_poll(const bContext *C, MenuType *pt)
pt->ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_get_lookup(&list, "visible", &ret);
- visible = *(int*)ret;
+ visible = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -410,7 +411,7 @@ static void rna_Menu_unregister(Main *UNUSED(bmain), StructRNA *type)
RNA_struct_free(&BLENDER_RNA, type);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
}
static char _menu_descr[RNA_DYN_DESCR_MAX];
@@ -469,29 +470,29 @@ static StructRNA *rna_Menu_register(Main *bmain, ReportList *reports, void *data
RNA_struct_blender_type_set(mt->ext.srna, mt);
RNA_def_struct_flag(mt->ext.srna, STRUCT_NO_IDPROPERTIES);
- mt->poll = (have_function[0])? menu_poll: NULL;
- mt->draw = (have_function[1])? menu_draw: NULL;
+ mt->poll = (have_function[0]) ? menu_poll : NULL;
+ mt->draw = (have_function[1]) ? menu_draw : NULL;
WM_menutype_add(mt);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
return mt->ext.srna;
}
-static StructRNA* rna_Menu_refine(PointerRNA *mtr)
+static StructRNA *rna_Menu_refine(PointerRNA *mtr)
{
- Menu *hdr = (Menu*)mtr->data;
- return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Menu;
+ Menu *hdr = (Menu *)mtr->data;
+ return (hdr->type && hdr->type->ext.srna) ? hdr->type->ext.srna : &RNA_Menu;
}
static void rna_Menu_bl_description_set(PointerRNA *ptr, const char *value)
{
- Menu *data = (Menu*)(ptr->data);
+ Menu *data = (Menu *)(ptr->data);
char *str = (char *)data->type->description;
- if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
- else assert(!"setting the bl_description on a non-builtin menu");
+ if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
+ else assert(!"setting the bl_description on a non-builtin menu");
}
static int rna_UILayout_active_get(PointerRNA *ptr)
@@ -598,7 +599,8 @@ static void rna_def_ui_layout(BlenderRNA *brna)
{UI_LAYOUT_ALIGN_LEFT, "LEFT", 0, "Left", ""},
{UI_LAYOUT_ALIGN_CENTER, "CENTER", 0, "Center", ""},
{UI_LAYOUT_ALIGN_RIGHT, "RIGHT", 0, "Right", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* layout */
@@ -647,12 +649,13 @@ static void rna_def_panel(BlenderRNA *brna)
FunctionRNA *func;
static EnumPropertyItem panel_flag_items[] = {
- {PNL_DEFAULT_CLOSED, "DEFAULT_CLOSED", 0, "Default Closed",
- "Defines if the panel has to be open or collapsed at the time of its creation"},
- {PNL_NO_HEADER, "HIDE_HEADER", 0, "Show Header",
- "If set to True, the panel shows a header, which contains a clickable "
- "arrow to collapse the panel and the label (see bl_label)"},
- {0, NULL, 0, NULL, NULL}};
+ {PNL_DEFAULT_CLOSED, "DEFAULT_CLOSED", 0, "Default Closed",
+ "Defines if the panel has to be open or collapsed at the time of its creation"},
+ {PNL_NO_HEADER, "HIDE_HEADER", 0, "Show Header",
+ "If set to True, the panel shows a header, which contains a clickable "
+ "arrow to collapse the panel and the label (see bl_label)"},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Panel", NULL);
RNA_def_struct_ui_text(srna, "Panel", "Panel containing UI elements");
@@ -663,23 +666,23 @@ static void rna_def_panel(BlenderRNA *brna)
/* poll */
func = RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "If this method returns a non-null output, then the panel can be drawn");
- RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* draw */
func = RNA_def_function(srna, "draw", NULL);
RNA_def_function_ui_description(func, "Draw UI elements into the panel UI layout");
RNA_def_function_flag(func, FUNC_REGISTER);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
func = RNA_def_function(srna, "draw_header", NULL);
RNA_def_function_ui_description(func, "Draw UI elements into the panel's header UI layout");
RNA_def_function_flag(func, FUNC_REGISTER);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
prop = RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "UILayout");
@@ -692,7 +695,7 @@ static void rna_def_panel(BlenderRNA *brna)
/* registration */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_property_ui_text(prop, "ID Name",
"If this is set, the panel gets a custom ID, otherwise it takes the "
"name of the class used to define the panel. For example, if the "
@@ -731,7 +734,7 @@ static void rna_def_panel(BlenderRNA *brna)
prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->flag");
RNA_def_property_enum_items(prop, panel_flag_items);
- RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL|PROP_ENUM_FLAG);
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
RNA_def_property_ui_text(prop, "Options", "Options for this panel type");
}
@@ -765,7 +768,7 @@ static void rna_def_header(BlenderRNA *brna)
/* registration */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_property_ui_text(prop, "ID Name",
"If this is set, the header gets a custom ID, otherwise it takes the "
"name of the class used to define the panel; for example, if the "
@@ -797,7 +800,7 @@ static void rna_def_menu(BlenderRNA *brna)
/* poll */
func = RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "If this method returns a non-null output, then the menu can be drawn");
- RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm = RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -819,7 +822,7 @@ static void rna_def_menu(BlenderRNA *brna)
/* registration */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_property_ui_text(prop, "ID Name",
"If this is set, the menu gets a custom ID, otherwise it takes the "
"name of the class used to define the menu (for example, if the "
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index b4b8ee07924..96ddcce6004 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -50,13 +50,13 @@ static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname,
return;
}
- flag |= (slider)? UI_ITEM_R_SLIDER: 0;
- flag |= (expand)? UI_ITEM_R_EXPAND: 0;
- flag |= (toggle)? UI_ITEM_R_TOGGLE: 0;
- flag |= (icon_only)? UI_ITEM_R_ICON_ONLY: 0;
- flag |= (event)? UI_ITEM_R_EVENT: 0;
- flag |= (full_event)? UI_ITEM_R_FULL_EVENT: 0;
- flag |= (emboss)? 0: UI_ITEM_R_NO_BG;
+ flag |= (slider) ? UI_ITEM_R_SLIDER : 0;
+ flag |= (expand) ? UI_ITEM_R_EXPAND : 0;
+ flag |= (toggle) ? UI_ITEM_R_TOGGLE : 0;
+ flag |= (icon_only) ? UI_ITEM_R_ICON_ONLY : 0;
+ flag |= (event) ? UI_ITEM_R_EVENT : 0;
+ flag |= (full_event) ? UI_ITEM_R_FULL_EVENT : 0;
+ flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
uiItemFullR(layout, ptr, prop, index, 0, flag, name, icon);
}
@@ -64,7 +64,7 @@ static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname,
static PointerRNA rna_uiItemO(uiLayout *layout, const char *opname, const char *name, int icon, int emboss)
{
int flag = UI_ITEM_O_RETURN_PROPS;
- flag |= (emboss)? 0: UI_ITEM_R_NO_BG;
+ flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
return uiItemFullO(layout, opname, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag);
}
@@ -75,7 +75,8 @@ static PointerRNA rna_uiItemO(uiLayout *layout, const char *opname, const char *
#define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""},
static EnumPropertyItem icon_items[] = {
#include "UI_icons.h"
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#undef DEF_ICON_BLANK_SKIP
#undef DEF_ICON
#undef DEF_VICO
@@ -110,7 +111,7 @@ static void api_ui_item_rna_common(FunctionRNA *func)
PropertyRNA *parm;
parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
RNA_def_property_flag(parm, PROP_REQUIRED);
}
@@ -124,13 +125,15 @@ void RNA_api_ui_layout(StructRNA *srna)
{0, "NONE", 0, "None", ""},
{'v', "VECTOR", 0, "Vector", ""},
{'c', "COLOR", 0, "Color", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem list_type_items[] = {
{0, "DEFAULT", 0, "None", ""},
{'c', "COMPACT", 0, "Compact", ""},
{'i', "ICONS", 0, "Icons", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* simple layout specifiers */
func = RNA_def_function(srna, "row", "uiLayoutRow");
@@ -160,7 +163,7 @@ void RNA_api_ui_layout(StructRNA *srna)
parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
RNA_def_function_return(func, parm);
RNA_def_function_ui_description(func, "Sublayout (items placed in this sublayout are placed "
- "under each other in a column and are surrounded by a box)");
+ "under each other in a column and are surrounded by a box)");
/* split layout */
func = RNA_def_function(srna, "split", "uiLayoutSplit");
@@ -201,7 +204,7 @@ void RNA_api_ui_layout(StructRNA *srna)
func = RNA_def_function(srna, "prop_search", "uiItemPointerR");
api_ui_item_rna_common(func);
parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_string(func, "search_property", "", 0, "", "Identifier of search collection property");
RNA_def_property_flag(parm, PROP_REQUIRED);
api_ui_item_common(func);
@@ -210,18 +213,11 @@ void RNA_api_ui_layout(StructRNA *srna)
api_ui_item_op_common(func);
RNA_def_boolean(func, "emboss", 1, "", "Draw the button itself, just the icon/text");
parm = RNA_def_pointer(func, "properties", "OperatorProperties", "",
- "Operator properties to fill in, return when 'properties' is set to true");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
+ "Operator properties to fill in, return when 'properties' is set to true");
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
RNA_def_function_return(func, parm);
RNA_def_function_ui_description(func, "Item. Places a button into the layout to call an Operator");
-/* func= RNA_def_function(srna, "operator_enum_single", "uiItemEnumO_string");
- api_ui_item_op_common(func);
- parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_string(func, "value", "", 0, "", "Enum property value");
- RNA_def_property_flag(parm, PROP_REQUIRED); */
-
func = RNA_def_function(srna, "operator_enum", "uiItemsEnumO");
parm = RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -234,14 +230,24 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
api_ui_item_common(func);
-/* func= RNA_def_function(srna, "operator_boolean", "uiItemBooleanO");
+ /* useful in C but not in python */
+#if 0
+
+ func= RNA_def_function(srna, "operator_enum_single", "uiItemEnumO_string");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "value", "", 0, "", "Enum property value");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "operator_boolean", "uiItemBooleanO");
api_ui_item_op_common(func);
parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_boolean(func, "value", 0, "", "Value of the property to call the operator with");
RNA_def_property_flag(parm, PROP_REQUIRED); */
-/* func= RNA_def_function(srna, "operator_int", "uiItemIntO");
+ func= RNA_def_function(srna, "operator_int", "uiItemIntO");
api_ui_item_op_common(func);
parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -249,7 +255,7 @@ void RNA_api_ui_layout(StructRNA *srna)
"Value of the property to call the operator with", INT_MIN, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED); */
-/* func= RNA_def_function(srna, "operator_float", "uiItemFloatO");
+ func= RNA_def_function(srna, "operator_float", "uiItemFloatO");
api_ui_item_op_common(func);
parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -257,12 +263,13 @@ void RNA_api_ui_layout(StructRNA *srna)
"Value of the property to call the operator with", -FLT_MAX, FLT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED); */
-/* func= RNA_def_function(srna, "operator_string", "uiItemStringO");
+ func= RNA_def_function(srna, "operator_string", "uiItemStringO");
api_ui_item_op_common(func);
parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_string(func, "value", "", 0, "", "Value of the property to call the operator with");
- RNA_def_property_flag(parm, PROP_REQUIRED); */
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+#endif
func = RNA_def_function(srna, "label", "uiItemL");
RNA_def_function_ui_description(func, "Item. Display text in the layout");
@@ -282,7 +289,7 @@ void RNA_api_ui_layout(StructRNA *srna)
parm = RNA_def_string(func, "name", "", 0, "Name", "Name of entry in the context");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_pointer(func, "data", "AnyType", "", "Pointer to put in context");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
/* templates */
func = RNA_def_function(srna, "template_header", "uiTemplateHeader");
@@ -307,35 +314,35 @@ void RNA_api_ui_layout(StructRNA *srna)
func = RNA_def_function(srna, "template_any_ID", "uiTemplateAnyID");
parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_string(func, "type_property", "", 0, "",
- "Identifier of property in data giving the type of the ID-blocks to use");
+ "Identifier of property in data giving the type of the ID-blocks to use");
RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_def_string_translate(func, "text", "", 0, "", "Custom label to display in UI");
func = RNA_def_function(srna, "template_path_builder", "uiTemplatePathBuilder");
parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_pointer(func, "root", "ID", "", "ID-block from which path is evaluated from");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
RNA_def_string_translate(func, "text", "", 0, "", "Custom label to display in UI");
func = RNA_def_function(srna, "template_modifier", "uiTemplateModifier");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
RNA_def_function_ui_description(func, "Layout . Generates the UI layout for modifiers");
parm = RNA_def_pointer(func, "data", "Modifier", "", "Modifier data");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "template_constraint", "uiTemplateConstraint");
RNA_def_function_ui_description(func, "Layout . Generates the UI layout for constraints");
parm = RNA_def_pointer(func, "data", "Constraint", "", "Constraint data");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
RNA_def_function_return(func, parm);
@@ -374,7 +381,7 @@ void RNA_api_ui_layout(StructRNA *srna)
func = RNA_def_function(srna, "template_layers", "uiTemplateLayers");
api_ui_item_rna_common(func);
parm = RNA_def_pointer(func, "used_layers_data", "AnyType", "", "Data from which to take property");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
parm = RNA_def_string(func, "used_layers_property", "", 0, "", "Identifier of property in data");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_int(func, "active_layer", 0, 0, INT_MAX, "Active Layer", "", 0, INT_MAX);
@@ -400,13 +407,13 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
api_ui_item_rna_common(func);
parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
RNA_def_boolean(func, "compact", 0, "", "Use more compact layout");
func = RNA_def_function(srna, "template_image_settings", "uiTemplateImageSettings");
RNA_def_function_ui_description(func, "User interface for setting image format options");
parm = RNA_def_pointer(func, "image_settings", "ImageFormatSettings", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
func = RNA_def_function(srna, "template_movieclip", "uiTemplateMovieClip");
RNA_def_function_ui_description(func, "Item(s). User interface for selecting movie clips and their source paths");
@@ -422,21 +429,21 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_function_ui_description(func, "Item. A widget to control single marker settings.");
api_ui_item_rna_common(func);
parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
RNA_def_boolean(func, "compact", 0, "", "Use more compact layout");
func = RNA_def_function(srna, "template_list", "uiTemplateList");
RNA_def_function_ui_description(func, "Item. A list widget to display data. e.g. vertexgroups");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
RNA_def_property_flag(parm, PROP_REQUIRED);
parm = RNA_def_pointer(func, "active_data", "AnyType", "",
"Data from which to take property for the active element");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
parm = RNA_def_string(func, "active_property", "", 0, "",
"Identifier of property in data, for the active element");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -484,10 +491,10 @@ void RNA_api_ui_layout(StructRNA *srna)
func = RNA_def_function(srna, "template_keymap_item_properties", "uiTemplateKeymapItemProperties");
parm = RNA_def_pointer(func, "item", "KeyMapItem", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
func = RNA_def_function(srna, "introspect", "uiLayoutIntrospect");
- parm = RNA_def_string(func, "string", "", 1024*1024, "Descr", "DESCR");
+ parm = RNA_def_string(func, "string", "", 1024 * 1024, "Descr", "DESCR");
RNA_def_function_return(func, parm);
}
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 83424a16b03..fa3473ca7e7 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -53,7 +53,8 @@ static EnumPropertyItem compute_device_type_items[] = {
{USER_COMPUTE_DEVICE_NONE, "NONE", 0, "None", "Don't use compute device"},
{USER_COMPUTE_DEVICE_CUDA, "CUDA", 0, "CUDA", "Use CUDA for GPU acceleration"},
{USER_COMPUTE_DEVICE_OPENCL, "OPENCL", 0, "OpenCL", "Use OpenCL for GPU acceleration"},
- { 0, NULL, 0, NULL, NULL}};
+ { 0, NULL, 0, NULL, NULL}
+};
#endif
#ifdef RNA_RUNTIME
@@ -84,9 +85,9 @@ static void rna_userdef_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe
static void rna_userdef_dpi_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
{
- U.widget_unit = (U.dpi * 20 + 36)/72;
- WM_main_add_notifier(NC_WINDOW, NULL); /* full redraw */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); /* refresh region sizes */
+ U.widget_unit = (U.dpi * 20 + 36) / 72;
+ WM_main_add_notifier(NC_WINDOW, NULL); /* full redraw */
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL); /* refresh region sizes */
}
static void rna_userdef_language_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
@@ -126,9 +127,9 @@ static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, Point
static void rna_userdef_script_autoexec_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- UserDef *userdef = (UserDef*)ptr->data;
- if (userdef->flag & USER_SCRIPT_AUTOEXEC_DISABLE) G.f &= ~G_SCRIPT_AUTOEXEC;
- else G.f |= G_SCRIPT_AUTOEXEC;
+ UserDef *userdef = (UserDef *)ptr->data;
+ if (userdef->flag & USER_SCRIPT_AUTOEXEC_DISABLE) G.f &= ~G_SCRIPT_AUTOEXEC;
+ else G.f |= G_SCRIPT_AUTOEXEC;
}
static void rna_userdef_mipmap_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -157,7 +158,7 @@ static void rna_userdef_gl_use_16bit_textures(Main *bmain, Scene *scene, Pointer
static void rna_userdef_select_mouse_set(PointerRNA *ptr, int value)
{
- UserDef *userdef = (UserDef*)ptr->data;
+ UserDef *userdef = (UserDef *)ptr->data;
if (value) {
userdef->flag |= USER_LMOUSESELECT;
@@ -169,7 +170,7 @@ static void rna_userdef_select_mouse_set(PointerRNA *ptr, int value)
static int rna_userdef_autokeymode_get(PointerRNA *ptr)
{
- UserDef *userdef = (UserDef*)ptr->data;
+ UserDef *userdef = (UserDef *)ptr->data;
short retval = userdef->autokey_mode;
if (!(userdef->autokey_mode & AUTOKEY_ON))
@@ -180,7 +181,7 @@ static int rna_userdef_autokeymode_get(PointerRNA *ptr)
static void rna_userdef_autokeymode_set(PointerRNA *ptr, int value)
{
- UserDef *userdef = (UserDef*)ptr->data;
+ UserDef *userdef = (UserDef *)ptr->data;
if (value == AUTOKEY_MODE_NORMAL) {
userdef->autokey_mode |= (AUTOKEY_MODE_NORMAL - AUTOKEY_ON);
@@ -194,7 +195,7 @@ static void rna_userdef_autokeymode_set(PointerRNA *ptr, int value)
static void rna_userdef_timecode_style_set(PointerRNA *ptr, int value)
{
- UserDef *userdef = (UserDef*)ptr->data;
+ UserDef *userdef = (UserDef *)ptr->data;
int required_size = userdef->v2d_min_gridsize;
/* set the timecode style */
@@ -265,7 +266,7 @@ static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRN
{
Object *ob;
- vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight):NULL);
+ vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight) : NULL);
for (ob = bmain->object.first; ob; ob = ob->id.next) {
if (ob->mode & OB_MODE_WEIGHT_PAINT)
@@ -284,7 +285,7 @@ static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, Pointe
light->flag |= 1;
}
- WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D|NS_VIEW3D_GPU, NULL);
+ WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D | NS_VIEW3D_GPU, NULL);
rna_userdef_update(bmain, scene, ptr);
}
@@ -375,7 +376,7 @@ static EnumPropertyItem *rna_userdef_compute_device_itemf(bContext *UNUSED(C), P
}
else {
/* get device list from cycles. it would be good to make this generic
- once we have more subsystems using opencl, for now this is easiest */
+ * once we have more subsystems using opencl, for now this is easiest */
int opencl = (U.compute_device_type == USER_COMPUTE_DEVICE_OPENCL);
CCLDeviceInfo *devices = CCL_compute_device_list(opencl);
int a;
@@ -413,7 +414,8 @@ static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna)
static EnumPropertyItem font_kerning_style[] = {
{0, "UNFITTED", 0, "Unfitted", "Use scaled but un-grid-fitted kerning distances"},
{1, "DEFAULT", 0, "Default", "Use scaled and grid-fitted kerning distances"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "ThemeFontStyle", NULL);
RNA_def_struct_sdna(srna, "uiFontStyle");
@@ -471,20 +473,23 @@ static void rna_def_userdef_theme_ui_style(BlenderRNA *brna)
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
RNA_def_struct_ui_text(srna, "Style", "Theme settings for style sets");
- /* (not used yet)
+ /* (not used yet) */
+#if 0
prop= RNA_def_property(srna, "panelzoom", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.5, 2.0);
RNA_def_property_ui_text(prop, "Panel Zoom", "Default zoom level for panel areas");
- */
+#endif
+
prop = RNA_def_property(srna, "panel_title", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "paneltitle");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Panel Style", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
+
/* (not used yet) */
#if 0
- prop= RNA_def_property(srna, "group_label", PROP_POINTER, PROP_NONE);
+ prop = RNA_def_property(srna, "group_label", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "grouplabel");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
@@ -2120,8 +2125,9 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
{15, "INFO", ICON_INFO, "Info", ""},
{16, "FILE_BROWSER", ICON_FILESEL, "File Browser", ""},
{17, "CONSOLE", ICON_CONSOLE, "Python Console", ""},
- {20, "CLIP_EDITOR", ICON_CLIP, "Movie Clip Editor", ""},
- {0, NULL, 0, NULL, NULL}};
+ {20, "CLIP_EDITOR", ICON_CLIP, "Movie Clip Editor", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "Theme", NULL);
RNA_def_struct_sdna(srna, "bTheme");
@@ -2131,7 +2137,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "Name of the theme");
RNA_def_struct_name_property(srna, prop);
- /* XXX: for now putting this in presets is silly - its just Default */
+ /* XXX: for now putting this in presets is silly - its just Default */
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
prop = RNA_def_property(srna, "theme_area", PROP_ENUM, PROP_NONE);
@@ -2352,7 +2358,8 @@ static void rna_def_userdef_view(BlenderRNA *brna)
"milliseconds are shown instead"},
{USER_TIMECODE_SECONDS_ONLY, "SECONDS_ONLY", 0, "Only Seconds",
"Direct conversion of frame numbers to seconds"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
PropertyRNA *prop;
StructRNA *srna;
@@ -2552,7 +2559,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
"Minimum number of pixels between each gridline in 2D Viewports");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- /* TODO: add a setter for this, so that we can bump up the minimum size as necessary... */
+ /* TODO: add a setter for this, so that we can bump up the minimum size as necessary... */
prop = RNA_def_property(srna, "timecode_style", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, timecode_styles);
RNA_def_property_enum_sdna(prop, NULL, "timecode_style");
@@ -2570,18 +2577,21 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
static EnumPropertyItem auto_key_modes[] = {
{AUTOKEY_MODE_NORMAL, "ADD_REPLACE_KEYS", 0, "Add/Replace", ""},
{AUTOKEY_MODE_EDITKEYS, "REPLACE_KEYS", 0, "Replace", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem material_link_items[] = {
{0, "OBDATA", 0, "ObData", "Toggle whether the material is linked to object data or the object block"},
{USER_MAT_ON_OB, "OBJECT", 0, "Object",
"Toggle whether the material is linked to object data or the object block"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static const EnumPropertyItem object_align_items[] = {
{0, "WORLD", 0, "World", "Align newly added objects to the world coordinate system"},
{USER_ADD_VIEWALIGNED, "VIEW", 0, "View", "Align newly added objects facing the active 3D View direction"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "UserPreferencesEdit", NULL);
RNA_def_struct_sdna(srna, "UserDef");
@@ -2689,7 +2699,7 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Unselected F-Curve Visibility",
"Amount that unselected F-Curves stand out from the background (Graph Editor)");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
/* grease pencil */
prop = RNA_def_property(srna, "grease_pencil_manhattan_distance", PROP_INT, PROP_NONE);
@@ -2761,11 +2771,11 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_TEX);
RNA_def_property_ui_text(prop, "Duplicate Texture", "Causes texture data to be duplicated with the object");
- /* xxx */
+ /* xxx */
prop = RNA_def_property(srna, "use_duplicate_fcurve", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_IPO);
RNA_def_property_ui_text(prop, "Duplicate F-Curve", "Causes F-curve data to be duplicated with the object");
- /* xxx */
+ /* xxx */
prop = RNA_def_property(srna, "use_duplicate_action", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_ACT);
RNA_def_property_ui_text(prop, "Duplicate Action", "Causes actions to be duplicated with the object");
@@ -2789,7 +2799,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{512, "CLAMP_512", 0, "512", ""},
{256, "CLAMP_256", 0, "256", ""},
{128, "CLAMP_128", 0, "128", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem anisotropic_items[] = {
{1, "FILTER_0", 0, "Off", ""},
@@ -2797,7 +2808,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{4, "FILTER_4", 0, "4x", ""},
{8, "FILTER_8", 0, "8x", ""},
{16, "FILTER_16", 0, "16x", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem audio_mixing_samples_items[] = {
{256, "SAMPLES_256", 0, "256", "Set audio mixing buffer size to 256 samples"},
@@ -2808,7 +2820,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{8192, "SAMPLES_8192", 0, "8192", "Set audio mixing buffer size to 8192 samples"},
{16384, "SAMPLES_16384", 0, "16384", "Set audio mixing buffer size to 16384 samples"},
{32768, "SAMPLES_32768", 0, "32768", "Set audio mixing buffer size to 32768 samples"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem audio_device_items[] = {
{0, "NONE", 0, "None", "Null device - there will be no audio output"},
@@ -2821,7 +2834,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
#ifdef WITH_JACK
{3, "JACK", 0, "Jack", "JACK - Audio Connection Kit, recommended for pro audio users"},
#endif
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem audio_rate_items[] = {
/* {8000, "RATE_8000", 0, "8 kHz", "Set audio sampling rate to 8000 samples per second"}, */
@@ -2834,7 +2848,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
/* {88200, "RATE_88200", 0, "88.2 kHz", "Set audio sampling rate to 88200 samples per second"}, */
{96000, "RATE_96000", 0, "96 kHz", "Set audio sampling rate to 96000 samples per second"},
{192000, "RATE_192000", 0, "192 kHz", "Set audio sampling rate to 192000 samples per second"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem audio_format_items[] = {
{0x01, "U8", 0, "8-bit Unsigned", "Set audio sample format to 8 bit unsigned integer"},
@@ -2843,7 +2858,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{0x14, "S32", 0, "32-bit Signed", "Set audio sample format to 32 bit signed integer"},
{0x24, "FLOAT", 0, "32-bit Float", "Set audio sample format to 32 bit float"},
{0x28, "DOUBLE", 0, "64-bit Float", "Set audio sample format to 64 bit float"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem audio_channel_items[] = {
{1, "MONO", 0, "Mono", "Set audio channels to mono"},
@@ -2851,7 +2867,8 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
{6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
{8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem draw_method_items[] = {
{USER_DRAW_AUTOMATIC, "AUTOMATIC", 0, "Automatic", "Automatically set based on graphics card and driver"},
@@ -2864,16 +2881,18 @@ static void rna_def_userdef_system(BlenderRNA *brna)
"(for graphics drivers that do flipping)"},
{USER_DRAW_FULL, "FULL", 0, "Full",
"Do a full redraw each time, slow, only use for reference or when everything else fails"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem color_picker_types[] = {
{USER_CP_CIRCLE, "CIRCLE", 0, "Circle", "A circular Hue/Saturation color wheel, with Value slider"},
{USER_CP_SQUARE_SV, "SQUARE_SV", 0, "Square (SV + H)", "A square showing Saturation/Value, with Hue slider"},
{USER_CP_SQUARE_HS, "SQUARE_HS", 0, "Square (HS + V)", "A square showing Hue/Saturation, with Value slider"},
{USER_CP_SQUARE_HV, "SQUARE_HV", 0, "Square (HV + S)", "A square showing Hue/Value, with Saturation slider"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
- /* hardcoded here, could become dynamic somehow */
+ /* hardcoded here, could become dynamic somehow */
/* locale according to http://www.roseindia.net/tutorials/I18N/locales-list.shtml */
/* if you edit here, please also edit the source/blender/blenfont/intern/blf_lang.c 's locales */
/* Note: As this list is in alphabetical order, and not defined order,
@@ -2915,12 +2934,14 @@ static void rna_def_userdef_system(BlenderRNA *brna)
{ 7, "SWEDISH", 0, "Swedish (Svenska)", "sv_SE"},
{30, "TURKISH", 0, "Turkish (Türkçe)", "tr_TR"},
{18, "UKRAINIAN", 0, "Ukrainian (Український)", "uk_UA"},
- { 0, NULL, 0, NULL, NULL}};
+ { 0, NULL, 0, NULL, NULL}
+ };
#ifdef WITH_CYCLES
static EnumPropertyItem compute_device_items[] = {
{0, "CPU", 0, "CPU", ""},
- { 0, NULL, 0, NULL, NULL}};
+ { 0, NULL, 0, NULL, NULL}
+ };
#endif
srna = RNA_def_struct(brna, "UserPreferencesSystem", NULL);
@@ -3021,12 +3042,12 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "prefetch_frames", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "prefetchframes");
RNA_def_property_range(prop, 0, 500);
- RNA_def_property_ui_text(prop, "Prefetch Frames", "Number of frames to render ahead during playback");
+ RNA_def_property_ui_text(prop, "Prefetch Frames", "Number of frames to render ahead during playback (sequencer only)");
prop = RNA_def_property(srna, "memory_cache_limit", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "memcachelimit");
- RNA_def_property_range(prop, 0, (sizeof(void *) == 8)? 1024*16: 1024); /* 32 bit 2 GB, 64 bit 16 GB */
- RNA_def_property_ui_text(prop, "Memory Cache Limit", "Memory cache limit in sequencer (megabytes)");
+ RNA_def_property_range(prop, 0, (sizeof(void *) == 8) ? 1024 * 16 : 1024); /* 32 bit 2 GB, 64 bit 16 GB */
+ RNA_def_property_ui_text(prop, "Memory Cache Limit", "Memory cache limit (in megabytes)");
RNA_def_property_update(prop, 0, "rna_Userdef_memcache_update");
prop = RNA_def_property(srna, "frame_server_port", PROP_INT, PROP_NONE);
@@ -3056,7 +3077,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_boolean_negative_sdna(prop, NULL, "gameflags", USER_DISABLE_VBO);
RNA_def_property_ui_text(prop, "VBOs",
"Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering");
- /* this isn't essential but nice to check if VBO draws any differently */
+ /* this isn't essential but nice to check if VBO draws any differently */
RNA_def_property_update(prop, NC_WINDOW, NULL);
prop = RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
@@ -3169,24 +3190,28 @@ static void rna_def_userdef_input(BlenderRNA *brna)
static EnumPropertyItem select_mouse_items[] = {
{USER_LMOUSESELECT, "LEFT", 0, "Left", "Use left Mouse Button for selection"},
{0, "RIGHT", 0, "Right", "Use Right Mouse Button for selection"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem view_rotation_items[] = {
{0, "TURNTABLE", 0, "Turntable", "Use turntable style rotation in the viewport"},
{USER_TRACKBALL, "TRACKBALL", 0, "Trackball", "Use trackball style rotation in the viewport"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem view_zoom_styles[] = {
{USER_ZOOM_CONT, "CONTINUE", 0, "Continue", "Old style zoom, continues while moving mouse up or down"},
{USER_ZOOM_DOLLY, "DOLLY", 0, "Dolly", "Zoom in and out based on vertical mouse movement"},
{USER_ZOOM_SCALE, "SCALE", 0, "Scale",
"Zoom in and out like scaling the view, mouse movements relative to center"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem view_zoom_axes[] = {
{0, "VERTICAL", 0, "Vertical", "Zoom in and out based on vertical mouse movement"},
{USER_ZOOM_HORIZ, "HORIZONTAL", 0, "Horizontal", "Zoom in and out based on horizontal mouse movement"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "UserPreferencesInput", NULL);
RNA_def_struct_sdna(srna, "UserDef");
@@ -3346,7 +3371,8 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
{4, "RV", 0, "rv", "Frame player from Tweak Software"},
{5, "MPLAYER", 0, "MPlayer", "Media player for video & png/jpeg/sgi image sequences"},
{50, "CUSTOM", 0, "Custom", "Custom animation player executable path"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "UserPreferencesFilePaths", NULL);
RNA_def_struct_sdna(srna, "UserDef");
@@ -3424,7 +3450,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "anim_player_preset");
RNA_def_property_enum_items(prop, anim_player_presets);
RNA_def_property_ui_text(prop, "Animation Player Preset", "Preset configs for external animation players");
- RNA_def_property_enum_default(prop, 1); /* set default to blender 2.4 player until an internal one is back */
+ RNA_def_property_enum_default(prop, 1); /* set default to blender 2.4 player until an internal one is back */
/* Autosave */
@@ -3479,7 +3505,7 @@ void rna_def_userdef_addon_collection(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_NO_SELF);
RNA_def_function_ui_description(func, "Remove addon");
parm = RNA_def_pointer(func, "addon", "Addon", "", "Addon to remove");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
void RNA_def_userdef(BlenderRNA *brna)
@@ -3495,7 +3521,8 @@ void RNA_def_userdef(BlenderRNA *brna)
{USER_SECTION_THEME, "THEMES", 0, "Themes", ""},
{USER_SECTION_FILE, "FILES", 0, "File", ""},
{USER_SECTION_SYSTEM, "SYSTEM", 0, "System", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
rna_def_userdef_dothemes(brna);
rna_def_userdef_solidlight(brna);
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 0eb4ef1c5c9..993d1e20bc5 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -46,7 +46,8 @@ EnumPropertyItem event_keymouse_value_items[] = {
{KM_RELEASE, "RELEASE", 0, "Release", ""},
{KM_CLICK, "CLICK", 0, "Click", ""},
{KM_DBL_CLICK, "DOUBLE_CLICK", 0, "Double Click", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem event_tweak_value_items[] = {
{KM_ANY, "ANY", 0, "Any", ""},
@@ -58,7 +59,8 @@ EnumPropertyItem event_tweak_value_items[] = {
{EVT_GESTURE_SW, "SOUTH_WEST", 0, "South-West", ""},
{EVT_GESTURE_W, "WEST", 0, "West", ""},
{EVT_GESTURE_NW, "NORTH_WEST", 0, "North-West", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem event_value_items[] = {
{KM_ANY, "ANY", 0, "Any", ""},
@@ -75,7 +77,8 @@ EnumPropertyItem event_value_items[] = {
{EVT_GESTURE_SW, "SOUTH_WEST", 0, "South-West", ""},
{EVT_GESTURE_W, "WEST", 0, "West", ""},
{EVT_GESTURE_NW, "NORTH_WEST", 0, "North-West", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem event_tweak_type_items[] = {
{EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Left", ""},
@@ -83,7 +86,8 @@ EnumPropertyItem event_tweak_type_items[] = {
{EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Right", ""},
{EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Action", ""},
{EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Select", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem event_mouse_type_items[] = {
{LEFTMOUSE, "LEFTMOUSE", 0, "Left", ""},
@@ -103,14 +107,16 @@ EnumPropertyItem event_mouse_type_items[] = {
{WHEELDOWNMOUSE, "WHEELDOWNMOUSE", 0, "Wheel Down", ""},
{WHEELINMOUSE, "WHEELINMOUSE", 0, "Wheel In", ""},
{WHEELOUTMOUSE, "WHEELOUTMOUSE", 0, "Wheel Out", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem event_timer_type_items[] = {
{TIMER, "TIMER", 0, "Timer", ""},
{TIMER0, "TIMER0", 0, "Timer 0", ""},
{TIMER1, "TIMER1", 0, "Timer 1", ""},
{TIMER2, "TIMER2", 0, "Timer 2", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem event_ndof_type_items[] = {
/* buttons on all 3dconnexion devices */
@@ -158,7 +164,8 @@ EnumPropertyItem event_ndof_type_items[] = {
{NDOF_BUTTON_A, "NDOF_BUTTON_A", 0, "Button A", ""},
{NDOF_BUTTON_B, "NDOF_BUTTON_B", 0, "Button B", ""},
{NDOF_BUTTON_C, "NDOF_BUTTON_C", 0, "Button C", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
/* not returned: CAPSLOCKKEY, UNKNOWNKEY */
EnumPropertyItem event_type_items[] = {
@@ -216,26 +223,26 @@ EnumPropertyItem event_type_items[] = {
{YKEY, "Y", 0, "Y", ""},
{ZKEY, "Z", 0, "Z", ""},
{0, "", 0, NULL, NULL},
- {ZEROKEY, "ZERO", 0, "0", ""},
- {ONEKEY, "ONE", 0, "1", ""},
- {TWOKEY, "TWO", 0, "2", ""},
- {THREEKEY, "THREE", 0, "3", ""},
- {FOURKEY, "FOUR", 0, "4", ""},
- {FIVEKEY, "FIVE", 0, "5", ""},
- {SIXKEY, "SIX", 0, "6", ""},
- {SEVENKEY, "SEVEN", 0, "7", ""},
- {EIGHTKEY, "EIGHT", 0, "8", ""},
- {NINEKEY, "NINE", 0, "9", ""},
+ {ZEROKEY, "ZERO", 0, "0", ""},
+ {ONEKEY, "ONE", 0, "1", ""},
+ {TWOKEY, "TWO", 0, "2", ""},
+ {THREEKEY, "THREE", 0, "3", ""},
+ {FOURKEY, "FOUR", 0, "4", ""},
+ {FIVEKEY, "FIVE", 0, "5", ""},
+ {SIXKEY, "SIX", 0, "6", ""},
+ {SEVENKEY, "SEVEN", 0, "7", ""},
+ {EIGHTKEY, "EIGHT", 0, "8", ""},
+ {NINEKEY, "NINE", 0, "9", ""},
{0, "", 0, NULL, NULL},
- {LEFTCTRLKEY, "LEFT_CTRL", 0, "Left Ctrl", ""},
- {LEFTALTKEY, "LEFT_ALT", 0, "Left Alt", ""},
- {LEFTSHIFTKEY, "LEFT_SHIFT", 0, "Left Shift", ""},
- {RIGHTALTKEY, "RIGHT_ALT", 0, "Right Alt", ""},
- {RIGHTCTRLKEY, "RIGHT_CTRL", 0, "Right Ctrl", ""},
- {RIGHTSHIFTKEY, "RIGHT_SHIFT", 0, "Right Shift", ""},
+ {LEFTCTRLKEY, "LEFT_CTRL", 0, "Left Ctrl", ""},
+ {LEFTALTKEY, "LEFT_ALT", 0, "Left Alt", ""},
+ {LEFTSHIFTKEY, "LEFT_SHIFT", 0, "Left Shift", ""},
+ {RIGHTALTKEY, "RIGHT_ALT", 0, "Right Alt", ""},
+ {RIGHTCTRLKEY, "RIGHT_CTRL", 0, "Right Ctrl", ""},
+ {RIGHTSHIFTKEY, "RIGHT_SHIFT", 0, "Right Shift", ""},
{0, "", 0, NULL, NULL},
- {OSKEY, "OSKEY", 0, "OS Key", ""},
- {GRLESSKEY, "GRLESS", 0, "Grless", ""},
+ {OSKEY, "OSKEY", 0, "OS Key", ""},
+ {GRLESSKEY, "GRLESS", 0, "Grless", ""},
{ESCKEY, "ESC", 0, "Esc", ""},
{TABKEY, "TAB", 0, "Tab", ""},
{RETKEY, "RET", 0, "Return", ""},
@@ -357,11 +364,13 @@ EnumPropertyItem event_type_items[] = {
{NDOF_BUTTON_A, "NDOF_BUTTON_A", 0, "NDOF Button A", ""},
{NDOF_BUTTON_B, "NDOF_BUTTON_B", 0, "NDOF Button B", ""},
{NDOF_BUTTON_C, "NDOF_BUTTON_C", 0, "NDOF Button C", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem keymap_propvalue_items[] = {
- {0, "NONE", 0, "", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, "NONE", 0, "", ""},
+ {0, NULL, 0, NULL, NULL}
+};
#if 0
static EnumPropertyItem keymap_modifiers_items[] = {
@@ -369,7 +378,8 @@ static EnumPropertyItem keymap_modifiers_items[] = {
{0, "NONE", 0, "None", ""},
{1, "FIRST", 0, "First", ""},
{2, "SECOND", 0, "Second", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
#endif
EnumPropertyItem operator_flag_items[] = {
@@ -382,15 +392,17 @@ EnumPropertyItem operator_flag_items[] = {
"is enabled"},
{OPTYPE_PRESET, "PRESET", 0, "Preset", "Display a preset button with the operators settings"},
{OPTYPE_INTERNAL, "INTERNAL", 0, "Internal", "Removes the operator from search results"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
EnumPropertyItem operator_return_items[] = {
{OPERATOR_RUNNING_MODAL, "RUNNING_MODAL", 0, "Running Modal", "Keep the operator running with blender"},
{OPERATOR_CANCELLED, "CANCELLED", 0, "Cancelled", "When no action has been taken, operator exits"},
{OPERATOR_FINISHED, "FINISHED", 0, "Finished", "When the operator is complete, operator exits"},
- /* used as a flag */
+ /* used as a flag */
{OPERATOR_PASS_THROUGH, "PASS_THROUGH", 0, "Pass Through", "Do nothing and pass the event on"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
/* flag/enum */
EnumPropertyItem wm_report_items[] = {
@@ -402,14 +414,15 @@ EnumPropertyItem wm_report_items[] = {
{RPT_ERROR_INVALID_INPUT, "ERROR_INVALID_INPUT", 0, "Invalid Input", ""},
{RPT_ERROR_INVALID_CONTEXT, "ERROR_INVALID_CONTEXT", 0, "Invalid Context", ""},
{RPT_ERROR_OUT_OF_MEMORY, "ERROR_OUT_OF_MEMORY", 0, "Out of Memory", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+};
-#define KMI_TYPE_KEYBOARD 0
-#define KMI_TYPE_MOUSE 1
-#define KMI_TYPE_TWEAK 2
-#define KMI_TYPE_TEXTINPUT 3
-#define KMI_TYPE_TIMER 4
-#define KMI_TYPE_NDOF 5
+#define KMI_TYPE_KEYBOARD 0
+#define KMI_TYPE_MOUSE 1
+#define KMI_TYPE_TWEAK 2
+#define KMI_TYPE_TEXTINPUT 3
+#define KMI_TYPE_TIMER 4
+#define KMI_TYPE_NDOF 5
#ifdef RNA_RUNTIME
@@ -424,7 +437,7 @@ EnumPropertyItem wm_report_items[] = {
static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr)
{
wmWindowManager *wm = ptr->id.data;
- IDProperty *properties = (IDProperty*)ptr->data;
+ IDProperty *properties = (IDProperty *)ptr->data;
wmOperator *op;
if (wm)
@@ -457,52 +470,52 @@ static IDProperty *rna_OperatorProperties_idprops(PointerRNA *ptr, int create)
static void rna_Operator_name_get(PointerRNA *ptr, char *value)
{
- wmOperator *op = (wmOperator*)ptr->data;
+ wmOperator *op = (wmOperator *)ptr->data;
strcpy(value, op->type->name);
}
static int rna_Operator_name_length(PointerRNA *ptr)
{
- wmOperator *op = (wmOperator*)ptr->data;
+ wmOperator *op = (wmOperator *)ptr->data;
return strlen(op->type->name);
}
static int rna_Operator_has_reports_get(PointerRNA *ptr)
{
- wmOperator *op = (wmOperator*)ptr->data;
+ wmOperator *op = (wmOperator *)ptr->data;
return (op->reports && op->reports->list.first);
}
static PointerRNA rna_Operator_properties_get(PointerRNA *ptr)
{
- wmOperator *op = (wmOperator*)ptr->data;
+ wmOperator *op = (wmOperator *)ptr->data;
return rna_pointer_inherit_refine(ptr, op->type->srna, op->properties);
}
static PointerRNA rna_OperatorMacro_properties_get(PointerRNA *ptr)
{
- wmOperatorTypeMacro *otmacro = (wmOperatorTypeMacro*)ptr->data;
+ wmOperatorTypeMacro *otmacro = (wmOperatorTypeMacro *)ptr->data;
wmOperatorType *ot = WM_operatortype_find(otmacro->idname, TRUE);
return rna_pointer_inherit_refine(ptr, ot->srna, otmacro->properties);
}
static void rna_Event_ascii_get(PointerRNA *ptr, char *value)
{
- wmEvent *event = (wmEvent*)ptr->data;
+ wmEvent *event = (wmEvent *)ptr->data;
value[0] = event->ascii;
value[1] = '\0';
}
static int rna_Event_ascii_length(PointerRNA *ptr)
{
- wmEvent *event = (wmEvent*)ptr->data;
- return (event->ascii)? 1 : 0;
+ wmEvent *event = (wmEvent *)ptr->data;
+ return (event->ascii) ? 1 : 0;
}
static void rna_Event_unicode_get(PointerRNA *ptr, char *value)
{
/* utf8 buf isn't \0 terminated */
- wmEvent *event = (wmEvent*)ptr->data;
+ wmEvent *event = (wmEvent *)ptr->data;
size_t len = 0;
if (event->utf8_buf[0]) {
@@ -518,7 +531,7 @@ static void rna_Event_unicode_get(PointerRNA *ptr, char *value)
static int rna_Event_unicode_length(PointerRNA *ptr)
{
- wmEvent *event = (wmEvent*)ptr->data;
+ wmEvent *event = (wmEvent *)ptr->data;
if (event->utf8_buf[0]) {
/* invalid value is checked on assignment so we don't need to account for this */
return BLI_str_utf8_size(event->utf8_buf);
@@ -530,7 +543,7 @@ static int rna_Event_unicode_length(PointerRNA *ptr)
static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value)
{
- wmWindow *win = (wmWindow*)ptr->data;
+ wmWindow *win = (wmWindow *)ptr->data;
if (value.data == NULL)
return;
@@ -541,12 +554,12 @@ static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value)
static void rna_Window_screen_update(bContext *C, PointerRNA *ptr)
{
- wmWindow *win = (wmWindow*)ptr->data;
+ wmWindow *win = (wmWindow *)ptr->data;
/* exception: can't set screens inside of area/region handers, and must
* use context so notifier gets to the right window */
if (win->newscreen) {
- WM_event_add_notifier(C, NC_SCREEN|ND_SCREENBROWSE, win->newscreen);
+ WM_event_add_notifier(C, NC_SCREEN | ND_SCREENBROWSE, win->newscreen);
win->newscreen = NULL;
}
}
@@ -582,30 +595,30 @@ static void rna_wmKeyMapItem_map_type_set(PointerRNA *ptr, int value)
if (value != map_type) {
switch (value) {
- case KMI_TYPE_KEYBOARD:
- kmi->type = AKEY;
- kmi->val = KM_PRESS;
- break;
- case KMI_TYPE_TWEAK:
- kmi->type = EVT_TWEAK_L;
- kmi->val = KM_ANY;
- break;
- case KMI_TYPE_MOUSE:
- kmi->type = LEFTMOUSE;
- kmi->val = KM_PRESS;
- break;
- case KMI_TYPE_TEXTINPUT:
- kmi->type = KM_TEXTINPUT;
- kmi->val = KM_NOTHING;
- break;
- case KMI_TYPE_TIMER:
- kmi->type = TIMER;
- kmi->val = KM_NOTHING;
- break;
- case KMI_TYPE_NDOF:
- kmi->type = NDOF_BUTTON_MENU;
- kmi->val = KM_PRESS;
- break;
+ case KMI_TYPE_KEYBOARD:
+ kmi->type = AKEY;
+ kmi->val = KM_PRESS;
+ break;
+ case KMI_TYPE_TWEAK:
+ kmi->type = EVT_TWEAK_L;
+ kmi->val = KM_ANY;
+ break;
+ case KMI_TYPE_MOUSE:
+ kmi->type = LEFTMOUSE;
+ kmi->val = KM_PRESS;
+ break;
+ case KMI_TYPE_TEXTINPUT:
+ kmi->type = KM_TEXTINPUT;
+ kmi->val = KM_NOTHING;
+ break;
+ case KMI_TYPE_TIMER:
+ kmi->type = TIMER;
+ kmi->val = KM_NOTHING;
+ break;
+ case KMI_TYPE_NDOF:
+ kmi->type = NDOF_BUTTON_MENU;
+ kmi->val = KM_PRESS;
+ break;
}
}
}
@@ -662,7 +675,7 @@ static EnumPropertyItem *rna_KeyMapItem_propvalue_itemf(bContext *C, PointerRNA
static int rna_KeyMapItem_any_getf(PointerRNA *ptr)
{
- wmKeyMapItem *kmi = (wmKeyMapItem*)ptr->data;
+ wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
if (kmi->shift == KM_ANY &&
kmi->ctrl == KM_ANY &&
@@ -678,7 +691,7 @@ static int rna_KeyMapItem_any_getf(PointerRNA *ptr)
static void rna_KeyMapItem_any_setf(PointerRNA *ptr, int value)
{
- wmKeyMapItem *kmi = (wmKeyMapItem*)ptr->data;
+ wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
if (value) {
kmi->shift = kmi->ctrl = kmi->alt = kmi->oskey = KM_ANY;
@@ -813,7 +826,7 @@ static void rna_Operator_unregister(struct Main *bmain, StructRNA *type)
wm = bmain->wm.first;
if (wm)
WM_operator_stack_clear(wm);
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
RNA_struct_free_extension(type, &ot->ext);
@@ -843,7 +856,7 @@ static int operator_poll(bContext *C, wmOperatorType *ot)
ot->ext.call(C, &ptr, func, &list);
RNA_parameter_get_lookup(&list, "visible", &ret);
- visible = *(int*)ret;
+ visible = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -868,7 +881,7 @@ static int operator_execute(bContext *C, wmOperator *op)
op->type->ext.call(C, &opr, func, &list);
RNA_parameter_get_lookup(&list, "result", &ret);
- result = *(int*)ret;
+ result = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -894,7 +907,7 @@ static int operator_check(bContext *C, wmOperator *op)
op->type->ext.call(C, &opr, func, &list);
RNA_parameter_get_lookup(&list, "result", &ret);
- result = *(int*)ret;
+ result = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -920,7 +933,7 @@ static int operator_invoke(bContext *C, wmOperator *op, wmEvent *event)
op->type->ext.call(C, &opr, func, &list);
RNA_parameter_get_lookup(&list, "result", &ret);
- result = *(int*)ret;
+ result = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -947,7 +960,7 @@ static int operator_modal(bContext *C, wmOperator *op, wmEvent *event)
op->type->ext.call(C, &opr, func, &list);
RNA_parameter_get_lookup(&list, "result", &ret);
- result = *(int*)ret;
+ result = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -991,7 +1004,7 @@ static int operator_cancel(bContext *C, wmOperator *op)
op->type->ext.call(C, &opr, func, &list);
RNA_parameter_get_lookup(&list, "result", &ret);
- result = *(int*)ret;
+ result = *(int *)ret;
RNA_parameter_list_free(&list);
@@ -1026,7 +1039,7 @@ static StructRNA *rna_Operator_register(Main *bmain, ReportList *reports, void *
if (validate(&dummyotr, data, have_function) != 0)
return NULL;
- { /* convert foo.bar to FOO_OT_bar
+ { /* convert foo.bar to FOO_OT_bar
* allocate the description and the idname in 1 go */
/* inconveniently long name sanity check */
@@ -1102,17 +1115,17 @@ static StructRNA *rna_Operator_register(Main *bmain, ReportList *reports, void *
dummyot.ext.call = call;
dummyot.ext.free = free;
- dummyot.pyop_poll = (have_function[0])? operator_poll: NULL;
- dummyot.exec = (have_function[1])? operator_execute: NULL;
- dummyot.check = (have_function[2])? operator_check: NULL;
- dummyot.invoke = (have_function[3])? operator_invoke: NULL;
- dummyot.modal = (have_function[4])? operator_modal: NULL;
- dummyot.ui = (have_function[5])? operator_draw: NULL;
- dummyot.cancel = (have_function[6])? operator_cancel: NULL;
+ dummyot.pyop_poll = (have_function[0]) ? operator_poll : NULL;
+ dummyot.exec = (have_function[1]) ? operator_execute : NULL;
+ dummyot.check = (have_function[2]) ? operator_check : NULL;
+ dummyot.invoke = (have_function[3]) ? operator_invoke : NULL;
+ dummyot.modal = (have_function[4]) ? operator_modal : NULL;
+ dummyot.ui = (have_function[5]) ? operator_draw : NULL;
+ dummyot.cancel = (have_function[6]) ? operator_cancel : NULL;
WM_operatortype_append_ptr(operator_wrapper, (void *)&dummyot);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
return dummyot.ext.srna;
}
@@ -1142,7 +1155,7 @@ static StructRNA *rna_MacroOperator_register(Main *bmain, ReportList *reports, v
if (validate(&dummyotr, data, have_function) != 0)
return NULL;
- { /* convert foo.bar to FOO_OT_bar
+ { /* convert foo.bar to FOO_OT_bar
* allocate the description and the idname in 1 go */
int idlen = strlen(_operator_idname) + 4;
int namelen = strlen(_operator_name) + 1;
@@ -1182,53 +1195,53 @@ static StructRNA *rna_MacroOperator_register(Main *bmain, ReportList *reports, v
dummyot.ext.call = call;
dummyot.ext.free = free;
- dummyot.pyop_poll = (have_function[0])? operator_poll: NULL;
- dummyot.ui = (have_function[3])? operator_draw: NULL;
+ dummyot.pyop_poll = (have_function[0]) ? operator_poll : NULL;
+ dummyot.ui = (have_function[3]) ? operator_draw : NULL;
WM_operatortype_append_macro_ptr(macro_wrapper, (void *)&dummyot);
/* update while blender is running */
- WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
return dummyot.ext.srna;
}
#endif /* WITH_PYTHON */
-static StructRNA* rna_Operator_refine(PointerRNA *opr)
+static StructRNA *rna_Operator_refine(PointerRNA *opr)
{
- wmOperator *op = (wmOperator*)opr->data;
- return (op->type && op->type->ext.srna)? op->type->ext.srna: &RNA_Operator;
+ wmOperator *op = (wmOperator *)opr->data;
+ return (op->type && op->type->ext.srna) ? op->type->ext.srna : &RNA_Operator;
}
-static StructRNA* rna_MacroOperator_refine(PointerRNA *opr)
+static StructRNA *rna_MacroOperator_refine(PointerRNA *opr)
{
- wmOperator *op = (wmOperator*)opr->data;
- return (op->type && op->type->ext.srna)? op->type->ext.srna: &RNA_Macro;
+ wmOperator *op = (wmOperator *)opr->data;
+ return (op->type && op->type->ext.srna) ? op->type->ext.srna : &RNA_Macro;
}
/* just to work around 'const char *' warning and to ensure this is a python op */
static void rna_Operator_bl_idname_set(PointerRNA *ptr, const char *value)
{
- wmOperator *data = (wmOperator*)(ptr->data);
+ wmOperator *data = (wmOperator *)(ptr->data);
char *str = (char *)data->type->idname;
- if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
- else assert(!"setting the bl_idname on a non-builtin operator");
+ if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
+ else assert(!"setting the bl_idname on a non-builtin operator");
}
static void rna_Operator_bl_label_set(PointerRNA *ptr, const char *value)
{
- wmOperator *data = (wmOperator*)(ptr->data);
+ wmOperator *data = (wmOperator *)(ptr->data);
char *str = (char *)data->type->name;
- if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
- else assert(!"setting the bl_label on a non-builtin operator");
+ if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
+ else assert(!"setting the bl_label on a non-builtin operator");
}
static void rna_Operator_bl_description_set(PointerRNA *ptr, const char *value)
{
- wmOperator *data = (wmOperator*)(ptr->data);
+ wmOperator *data = (wmOperator *)(ptr->data);
char *str = (char *)data->type->description;
- if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
- else assert(!"setting the bl_description on a non-builtin operator");
+ if (!str[0]) BLI_strncpy(str, value, RNA_DYN_DESCR_MAX); /* utf8 already ensured */
+ else assert(!"setting the bl_description on a non-builtin operator");
}
static void rna_KeyMapItem_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -1275,11 +1288,11 @@ static void rna_def_operator(BlenderRNA *brna)
/* Registration */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
- /* else it uses the pointer size!. -3 because '.' -> '_OT_' */
- RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME-3);
+ /* else it uses the pointer size!. -3 because '.' -> '_OT_' */
+ RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME - 3);
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Operator_bl_idname_set");
/* RNA_def_property_clear_flag(prop, PROP_EDITABLE); */
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_struct_name_property(srna, prop);
/* operator's label indeed doesn't need PROP_TRANSLATE flag: translation of label happens in runtime
@@ -1303,7 +1316,7 @@ static void rna_def_operator(BlenderRNA *brna)
prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->flag");
RNA_def_property_enum_items(prop, operator_flag_items);
- RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL|PROP_ENUM_FLAG);
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
RNA_api_operator(srna);
@@ -1346,7 +1359,7 @@ static void rna_def_macro_operator(BlenderRNA *brna)
RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME); /* else it uses the pointer size! */
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Operator_bl_idname_set");
/* RNA_def_property_clear_flag(prop, PROP_EDITABLE); */
- RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);
+ RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
RNA_def_struct_name_property(srna, prop);
/* menu's label indeed doesn't need PROP_TRANSLATE flag: translation of label happens in runtime
@@ -1370,7 +1383,7 @@ static void rna_def_macro_operator(BlenderRNA *brna)
prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->flag");
RNA_def_property_enum_items(prop, operator_flag_items);
- RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL|PROP_ENUM_FLAG);
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
RNA_api_macro(srna);
@@ -1680,7 +1693,8 @@ static void rna_def_keyconfig(BlenderRNA *brna)
{KMI_TYPE_NDOF, "NDOF", 0, "NDOF", ""},
{KMI_TYPE_TEXTINPUT, "TEXTINPUT", 0, "Text Input", ""},
{KMI_TYPE_TIMER, "TIMER", 0, "Timer", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
/* KeyConfig */
srna = RNA_def_struct(brna, "KeyConfig", NULL);
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index 9b3634bc8ac..d910ed7900c 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -72,7 +72,7 @@ static int rna_event_modal_handler_add(struct bContext *C, struct wmOperator *op
}
/* XXX, need a way for python to know event types, 0x0110 is hard coded */
-struct wmTimer *rna_event_timer_add(struct wmWindowManager *wm, float time_step, wmWindow *win)
+wmTimer *rna_event_timer_add(struct wmWindowManager *wm, float time_step, wmWindow *win)
{
return WM_event_add_timer(wm, win, 0x0110, time_step);
}
@@ -164,15 +164,15 @@ static wmKeyMap *rna_keymap_find_modal(wmKeyConfig *UNUSED(keyconf), const char
#else
-#define WM_GEN_INVOKE_EVENT (1<<0)
-#define WM_GEN_INVOKE_SIZE (1<<1)
-#define WM_GEN_INVOKE_RETURN (1<<2)
+#define WM_GEN_INVOKE_EVENT (1 << 0)
+#define WM_GEN_INVOKE_SIZE (1 << 1)
+#define WM_GEN_INVOKE_RETURN (1 << 2)
static void rna_generic_op_invoke(FunctionRNA *func, int flag)
{
PropertyRNA *parm;
- RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_USE_CONTEXT);
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
parm = RNA_def_pointer(func, "operator", "Operator", "", "Operator to call");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -204,7 +204,7 @@ void RNA_api_wm(StructRNA *srna)
rna_generic_op_invoke(func, 0);
func = RNA_def_function(srna, "modal_handler_add", "rna_event_modal_handler_add");
- RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_USE_CONTEXT);
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
parm = RNA_def_pointer(func, "operator", "Operator", "", "Operator to call");
RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_def_function_return(func, RNA_def_boolean(func, "handle", 1, "", ""));
@@ -222,18 +222,18 @@ void RNA_api_wm(StructRNA *srna)
func = RNA_def_function(srna, "event_timer_remove", "rna_event_timer_remove");
parm = RNA_def_pointer(func, "timer", "Timer", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* invoke functions, for use with python */
func = RNA_def_function(srna, "invoke_props_popup", "WM_operator_props_popup");
RNA_def_function_ui_description(func, "Operator popup invoke");
- rna_generic_op_invoke(func, WM_GEN_INVOKE_EVENT|WM_GEN_INVOKE_RETURN);
+ rna_generic_op_invoke(func, WM_GEN_INVOKE_EVENT | WM_GEN_INVOKE_RETURN);
/* invoked dialog opens popup with OK button, does not auto-exec operator. */
func = RNA_def_function(srna, "invoke_props_dialog", "WM_operator_props_dialog_popup");
RNA_def_function_ui_description(func, "Operator dialog (non-autoexec popup) invoke");
- rna_generic_op_invoke(func, WM_GEN_INVOKE_SIZE|WM_GEN_INVOKE_RETURN);
+ rna_generic_op_invoke(func, WM_GEN_INVOKE_SIZE | WM_GEN_INVOKE_RETURN);
/* invoke enum */
func = RNA_def_function(srna, "invoke_search_popup", "rna_Operator_enum_search_invoke");
@@ -242,11 +242,11 @@ void RNA_api_wm(StructRNA *srna)
/* invoke functions, for use with python */
func = RNA_def_function(srna, "invoke_popup", "WM_operator_ui_popup");
RNA_def_function_ui_description(func, "Operator popup invoke");
- rna_generic_op_invoke(func, WM_GEN_INVOKE_SIZE|WM_GEN_INVOKE_RETURN);
+ rna_generic_op_invoke(func, WM_GEN_INVOKE_SIZE | WM_GEN_INVOKE_RETURN);
func = RNA_def_function(srna, "invoke_confirm", "WM_operator_confirm");
RNA_def_function_ui_description(func, "Operator confirmation");
- rna_generic_op_invoke(func, WM_GEN_INVOKE_EVENT|WM_GEN_INVOKE_RETURN);
+ rna_generic_op_invoke(func, WM_GEN_INVOKE_EVENT | WM_GEN_INVOKE_RETURN);
}
@@ -268,19 +268,19 @@ void RNA_api_operator(StructRNA *srna)
/* poll */
func = RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "Test if the operator can be called or not");
- RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* exec */
func = RNA_def_function(srna, "execute", NULL);
RNA_def_function_ui_description(func, "Execute the operator");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
- /* better name? */
+ /* better name? */
parm = RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", "");
RNA_def_function_return(func, parm);
@@ -289,7 +289,7 @@ void RNA_api_operator(StructRNA *srna)
RNA_def_function_ui_description(func, "Check the operator settings, return True to signal a change to redraw");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_boolean(func, "result", 0, "result", ""); /* better name? */
RNA_def_function_return(func, parm);
@@ -299,11 +299,11 @@ void RNA_api_operator(StructRNA *srna)
RNA_def_function_ui_description(func, "Invoke the operator");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_pointer(func, "event", "Event", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
- /* better name? */
+ /* better name? */
parm = RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", "");
RNA_def_function_return(func, parm);
@@ -311,11 +311,11 @@ void RNA_api_operator(StructRNA *srna)
RNA_def_function_ui_description(func, "Modal operator function");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
parm = RNA_def_pointer(func, "event", "Event", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
- /* better name? */
+ /* better name? */
parm = RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", "");
RNA_def_function_return(func, parm);
@@ -324,16 +324,16 @@ void RNA_api_operator(StructRNA *srna)
RNA_def_function_ui_description(func, "Draw function for the operator");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* cancel */
func = RNA_def_function(srna, "cancel", NULL);
RNA_def_function_ui_description(func, "Called when the operator is canceled");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
- /* better name? */
+ /* better name? */
parm = RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", "");
RNA_def_function_return(func, parm);
}
@@ -356,17 +356,17 @@ void RNA_api_macro(StructRNA *srna)
/* poll */
func = RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "Test if the operator can be called or not");
- RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
/* draw */
func = RNA_def_function(srna, "draw", NULL);
RNA_def_function_ui_description(func, "Draw function for the operator");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
parm = RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
void RNA_api_keyconfig(StructRNA *srna)
@@ -391,7 +391,7 @@ void RNA_api_keymap(StructRNA *srna)
func = RNA_def_function(srna, "restore_item_to_default", "rna_keymap_restore_item_to_default");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
parm = RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
}
void RNA_api_keymapitem(StructRNA *srna)
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index 9bc1fa2e9e3..cec66831916 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -67,13 +67,13 @@ static PointerRNA rna_World_mist_get(PointerRNA *ptr)
static void rna_World_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- World *wo = (World*)ptr->data;
- rna_iterator_array_begin(iter, (void*)wo->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
+ World *wo = (World *)ptr->data;
+ rna_iterator_array_begin(iter, (void *)wo->mtex, sizeof(MTex *), MAX_MTEX, 0, NULL);
}
static PointerRNA rna_World_active_texture_get(PointerRNA *ptr)
{
- World *wo = (World*)ptr->data;
+ World *wo = (World *)ptr->data;
Tex *tex;
tex = give_current_world_texture(wo);
@@ -82,7 +82,7 @@ static PointerRNA rna_World_active_texture_get(PointerRNA *ptr)
static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value)
{
- World *wo = (World*)ptr->data;
+ World *wo = (World *)ptr->data;
set_current_world_texture(wo, value.data);
}
@@ -100,7 +100,7 @@ static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
World *wo = ptr->id.data;
DAG_id_tag_update(&wo->id, 0);
- WM_main_add_notifier(NC_WORLD|ND_WORLD_DRAW, wo);
+ WM_main_add_notifier(NC_WORLD | ND_WORLD_DRAW, wo);
}
/* so camera mist limits redraw */
@@ -109,8 +109,8 @@ static void rna_World_draw_mist_update(Main *UNUSED(bmain), Scene *UNUSED(scene)
World *wo = ptr->id.data;
DAG_id_tag_update(&wo->id, 0);
- WM_main_add_notifier(NC_WORLD|ND_WORLD_DRAW, wo);
- WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL);
+ WM_main_add_notifier(NC_WORLD | ND_WORLD_DRAW, wo);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
static void rna_World_stars_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -118,12 +118,12 @@ static void rna_World_stars_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
World *wo = ptr->id.data;
DAG_id_tag_update(&wo->id, 0);
- WM_main_add_notifier(NC_WORLD|ND_WORLD_STARS, wo);
+ WM_main_add_notifier(NC_WORLD | ND_WORLD_STARS, wo);
}
static void rna_World_use_nodes_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- World *wrld = (World*)ptr->data;
+ World *wrld = (World *)ptr->data;
if (wrld->use_nodes && wrld->nodetree == NULL)
ED_node_shader_default(scene, &wrld->id);
@@ -146,7 +146,8 @@ static void rna_def_world_mtex(BlenderRNA *brna)
{TEXCO_EQUIRECTMAP, "EQUIRECT", 0, "Equirectangular", "For 360 degree panorama sky, equirectangular mapping"},
{TEXCO_H_TUBEMAP, "TUBE", 0, "Tube", "For 360 degree panorama sky, cylindrical mapped, only top half"},
{TEXCO_OBJECT, "OBJECT", 0, "Object", "Use linked object's coordinates for texture coordinates"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "WorldTextureSlot", "TextureSlot");
RNA_def_struct_sdna(srna, "MTex");
@@ -220,24 +221,28 @@ static void rna_def_lighting(BlenderRNA *brna)
static EnumPropertyItem blend_mode_items[] = {
{WO_AOMUL, "MULTIPLY", 0, "Multiply", "Multiply direct lighting with ambient occlusion, darkening the result"},
{WO_AOADD, "ADD", 0, "Add", "Add light and shadow"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_color_items[] = {
{WO_AOPLAIN, "PLAIN", 0, "White", "Plain diffuse energy (white.)"},
{WO_AOSKYCOL, "SKY_COLOR", 0, "Sky Color", "Use horizon and zenith color for diffuse energy"},
{WO_AOSKYTEX, "SKY_TEXTURE", 0, "Sky Texture", "Does full Sky texture render for diffuse energy"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_sample_method_items[] = {
{WO_AOSAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", "Fastest and gives the most noise"},
{WO_AOSAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", "Fast in high-contrast areas"},
{WO_AOSAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", "Best quality"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
static EnumPropertyItem prop_gather_method_items[] = {
{WO_AOGATHER_RAYTRACE, "RAYTRACE", 0, "Raytrace", "Accurate, but slow when noise-free results are required"},
{WO_AOGATHER_APPROX, "APPROXIMATE", 0, "Approximate", "Inaccurate, but faster and without noise"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "WorldLighting", NULL);
RNA_def_struct_sdna(srna, "World");
@@ -398,7 +403,8 @@ static void rna_def_world_mist(BlenderRNA *brna)
{0, "QUADRATIC", 0, "Quadratic", "Use quadratic progression"},
{1, "LINEAR", 0, "Linear", "Use linear progression"},
{2, "INVERSE_QUADRATIC", 0, "Inverse Quadratic", "Use inverse quadratic progression"},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
srna = RNA_def_struct(brna, "WorldMistSettings", NULL);
RNA_def_struct_sdna(srna, "World");
@@ -496,7 +502,8 @@ void RNA_def_world(BlenderRNA *brna)
/*{WOPHY_DYNAMO, "DYNAMO", 0, "Dynamo", ""}, */
/*{WOPHY_ODE, "ODE", 0, "ODE", ""}, */
{WOPHY_BULLET, "BULLET", 0, "Bullet", ""},
- {0, NULL, 0, NULL, NULL}};
+ {0, NULL, 0, NULL, NULL}
+ };
#endif
srna = RNA_def_struct(brna, "World", "ID");
@@ -506,7 +513,7 @@ void RNA_def_world(BlenderRNA *brna)
rna_def_animdata_common(srna);
rna_def_mtex_common(brna, srna, "rna_World_mtex_begin", "rna_World_active_texture_get",
- "rna_World_active_texture_set", NULL, "WorldTextureSlot", "WorldTextureSlots", "rna_World_update");
+ "rna_World_active_texture_set", NULL, "WorldTextureSlot", "WorldTextureSlots", "rna_World_update");
/* colors */
prop = RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR);
@@ -515,7 +522,7 @@ void RNA_def_world(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Horizon Color", "Color at the horizon");
/* RNA_def_property_update(prop, 0, "rna_World_update"); */
/* render-only uses this */
- RNA_def_property_update(prop, NC_WORLD|ND_WORLD_DRAW, "rna_World_update");
+ RNA_def_property_update(prop, NC_WORLD | ND_WORLD_DRAW, "rna_World_update");
prop = RNA_def_property(srna, "zenith_color", PROP_FLOAT, PROP_COLOR);
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c
index 39344aad5a9..1b4d9444fd9 100644
--- a/source/blender/modifiers/intern/MOD_boolean_util.c
+++ b/source/blender/modifiers/intern/MOD_boolean_util.c
@@ -381,7 +381,7 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh(
}
// a hash table to remap materials to indices
- material_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "CSG_mat gh");
+ material_hash = BLI_ghash_ptr_new("CSG_mat gh");
if (mat)
*totmat = 0;
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 9285ec6674c..121b0ee89e3 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -90,13 +90,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
MLoop *ml_dst, *ml_src /*, *mloop_dst */;
GHashIterator *hashIter;
/* maps vert indices in old mesh to indices in new mesh */
- GHash *vertHash = BLI_ghash_new(BLI_ghashutil_inthash,
- BLI_ghashutil_intcmp, "build ve apply gh");
+ GHash *vertHash = BLI_ghash_int_new("build ve apply gh");
/* maps edge indices in new mesh to indices in old mesh */
- GHash *edgeHash = BLI_ghash_new(BLI_ghashutil_inthash,
- BLI_ghashutil_intcmp, "build ed apply gh");
- GHash *edgeHash2 = BLI_ghash_new(BLI_ghashutil_inthash,
- BLI_ghashutil_intcmp, "build ed apply gh");
+ GHash *edgeHash = BLI_ghash_int_new("build ed apply gh");
+ GHash *edgeHash2 = BLI_ghash_int_new("build ed apply gh");
const int numVert_src = dm->getNumVerts(dm);
const int numEdge_src = dm->getNumEdges(dm);
diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c
index c4772895b03..5e791a9f748 100644
--- a/source/blender/modifiers/intern/MOD_cast.c
+++ b/source/blender/modifiers/intern/MOD_cast.c
@@ -367,16 +367,16 @@ static void cuboid_do(
float vec[3];
/* let the center of the ctrl_ob be part of the bound box: */
- DO_MINMAX(center, min, max);
+ minmax_v3v3_v3(min, max, center);
for (i = 0; i < numVerts; i++) {
sub_v3_v3v3(vec, vertexCos[i], center);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
}
}
else {
for (i = 0; i < numVerts; i++) {
- DO_MINMAX(vertexCos[i], min, max);
+ minmax_v3v3_v3(min, max, vertexCos[i]);
}
}
diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c
index 396e48df50c..5206aa281f7 100644
--- a/source/blender/modifiers/intern/MOD_mask.c
+++ b/source/blender/modifiers/intern/MOD_mask.c
@@ -167,7 +167,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
* - vgroups to indices -> vgroupHash (string, int)
* - bones to vgroup indices -> boneHash (index of vgroup, dummy)
*/
- vgroupHash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "mask vgroup gh");
+ vgroupHash = BLI_ghash_str_new("mask vgroup gh");
/* build mapping of names of vertex groups to indices */
for (i = 0, def = ob->defbase.first; def; def = def->next, i++)
@@ -191,7 +191,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* hashes for quickly providing a mapping from old to new - use key=oldindex, value=newindex */
- vertHash = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "mask vert gh");
+ vertHash = BLI_ghash_int_new("mask vert gh");
/* add vertices which exist in vertexgroups into vertHash for filtering */
for (i = 0, dv = dvert; i < maxVerts; i++, dv++) {
@@ -239,7 +239,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
return dm;
/* hashes for quickly providing a mapping from old to new - use key=oldindex, value=newindex */
- vertHash = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "mask vert2 bh");
+ vertHash = BLI_ghash_int_new("mask vert2 bh");
/* add vertices which exist in vertexgroup into ghash for filtering */
for (i = 0, dv = dvert; i < maxVerts; i++, dv++) {
@@ -262,8 +262,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* hashes for quickly providing a mapping from old to new - use key=oldindex, value=newindex */
- edgeHash = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "mask ed2 gh");
- polyHash = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "mask fa2 gh");
+ edgeHash = BLI_ghash_int_new("mask ed2 gh");
+ polyHash = BLI_ghash_int_new("mask fa2 gh");
mpoly = dm->getPolyArray(dm);
mloop = dm->getLoopArray(dm);
diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c
index 5c9c4e76076..6f3d47b3426 100644
--- a/source/blender/modifiers/intern/MOD_mirror.c
+++ b/source/blender/modifiers/intern/MOD_mirror.c
@@ -258,7 +258,7 @@ static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd,
MLoopUV *dmloopuv = CustomData_get_layer_n(&result->loopData, CD_MLOOPUV, a);
int j = maxLoops;
dmloopuv += j; /* second set of loops only */
- for (; i-- > 0; dmloopuv++) {
+ for (; j-- > 0; dmloopuv++) {
if (do_mirr_u) dmloopuv->uv[0] = 1.0f - dmloopuv->uv[0];
if (do_mirr_v) dmloopuv->uv[1] = 1.0f - dmloopuv->uv[1];
}
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index 37bfd0e6f45..57966b5824b 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -190,6 +190,16 @@ static DerivedMesh *applyModifier(ModifierData *md,
result = output->dm;
MEM_freeN(output);
+ if (rmd->flag & MOD_REMESH_SMOOTH_SHADING) {
+ MPoly *mpoly = CDDM_get_polys(result);
+ int i, totpoly = result->getNumPolys(result);
+
+ /* Apply smooth shading to output faces */
+ for (i = 0; i < totpoly; i++) {
+ mpoly[i].flag |= ME_SMOOTH;
+ }
+ }
+
CDDM_calc_edges(result);
CDDM_calc_normals(result);
return result;
@@ -212,6 +222,7 @@ ModifierTypeInfo modifierType_Remesh = {
/* structSize */ sizeof(RemeshModifierData),
/* type */ eModifierTypeType_Nonconstructive,
/* flags */ eModifierTypeFlag_AcceptsMesh |
+ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData,
/* deformVerts */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index 6a57cd82b50..f45cc9c2ade 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -111,7 +111,7 @@ static void initData(ModifierData *md)
ltmd->ob_axis = NULL;
ltmd->angle = M_PI * 2.0;
ltmd->axis = 2;
- ltmd->flag = 0;
+ ltmd->flag = MOD_SCREW_SMOOTH_SHADING;
ltmd->steps = 16;
ltmd->render_steps = 16;
ltmd->iter = 1;
@@ -175,6 +175,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
ScrewVertConnect *vc, *vc_tmp, *vert_connect = NULL;
+ const char mpoly_flag = (ltmd->flag & MOD_SCREW_SMOOTH_SHADING) ? ME_SMOOTH : 0;
+
/* don't do anything? */
if (!totvert)
return CDDM_from_template(dm, 0, 0, 0, 0, 0);
@@ -810,7 +812,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
mp_new->loopstart = mpoly_index * 4;
mp_new->totloop = 4;
- mp_new->flag = ME_SMOOTH;
+ mp_new->flag = mpoly_flag;
origindex[mpoly_index] = ORIGINDEX_NONE;
mp_new++;
ml_new += 4;
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index 264d84af81e..0ca4d8dcd4f 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -558,9 +558,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* flip vertex normals for copied verts */
mv = mvert + numVerts;
for (i = 0; i < numVerts; i++, mv++) {
- mv->no[0] = -mv->no[0];
- mv->no[1] = -mv->no[1];
- mv->no[2] = -mv->no[2];
+ negate_v3_short(mv->no);
}
if (smd->flag & MOD_SOLIDIFY_RIM) {
@@ -692,7 +690,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
#ifdef SOLIDIFY_SIDE_NORMALS
- normal_quad_v3(nor, mvert[ml[j - 4].v].co,
+ normal_quad_v3(nor,
+ mvert[ml[j - 4].v].co,
mvert[ml[j - 3].v].co,
mvert[ml[j - 2].v].co,
mvert[ml[j - 1].v].co);
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index aff6bf548e6..98fa6e8e26d 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -81,7 +81,7 @@ void get_texture_value(Tex *texture, float *tex_co, TexResult *texres)
* if the texture didn't give an RGB value, copy the intensity across
*/
if (result_type & TEX_RGB) {
- texres->tin= (1.0f / 3.0f) * (texres->tr + texres->tg + texres->tb);
+ texres->tin = (1.0f / 3.0f) * (texres->tr + texres->tg + texres->tb);
}
else {
copy_v3_fl(&texres->tr, texres->tin);
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index be9dd10b71d..772ce376cb8 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -35,6 +35,7 @@ set(INC
../makesrna
../render/extern/include
../../../intern/guardedalloc
+ ../compositor
)
set(INC_SYS
@@ -107,6 +108,13 @@ set(SRC
composite/nodes/node_composite_vecBlur.c
composite/nodes/node_composite_viewer.c
composite/nodes/node_composite_zcombine.c
+ composite/nodes/node_composite_bokehblur.c
+ composite/nodes/node_composite_bokehimage.c
+ composite/nodes/node_composite_boxmask.c
+ composite/nodes/node_composite_ellipsemask.c
+ composite/nodes/node_composite_switch.c
+ composite/nodes/node_composite_colorcorrection.c
+
composite/node_composite_tree.c
composite/node_composite_util.c
diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h
index 284b89bc095..ca925c82afd 100644
--- a/source/blender/nodes/NOD_composite.h
+++ b/source/blender/nodes/NOD_composite.h
@@ -120,4 +120,12 @@ void register_node_type_cmp_glare(struct bNodeTreeType *ttype);
void register_node_type_cmp_tonemap(struct bNodeTreeType *ttype);
void register_node_type_cmp_lensdist(struct bNodeTreeType *ttype);
+
+void register_node_type_cmp_colorcorrection(struct bNodeTreeType *ttype);
+void register_node_type_cmp_boxmask(struct bNodeTreeType *ttype);
+void register_node_type_cmp_ellipsemask(struct bNodeTreeType *ttype);
+void register_node_type_cmp_bokehimage(struct bNodeTreeType *ttype);
+void register_node_type_cmp_bokehblur(struct bNodeTreeType *ttype);
+void register_node_type_cmp_switch(struct bNodeTreeType *ttype);
+
#endif
diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript
index c8b13e24533..86178b31688 100644
--- a/source/blender/nodes/SConscript
+++ b/source/blender/nodes/SConscript
@@ -13,6 +13,7 @@ incs += ' ../imbuf ../avi '
incs += ' ../blenloader'
incs += ' ../blenfont ../blenkernel ../renderconverter '
incs += ' ../gpu #/extern/glew/include '
+incs += ' ../compositor '
incs += ' ' + env['BF_OPENGL_INC']
incs += ' ' + env['BF_ZLIB_INC']
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c
index b526c25e2dc..b266af15060 100644
--- a/source/blender/nodes/composite/node_composite_tree.c
+++ b/source/blender/nodes/composite/node_composite_tree.c
@@ -59,6 +59,7 @@
#include "NOD_composite.h"
#include "node_composite_util.h"
+#include "COM_compositor.h"
static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
{
@@ -72,16 +73,16 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)
{
- func(calldata, NODE_CLASS_INPUT, IFACE_("Input"));
- func(calldata, NODE_CLASS_OUTPUT, IFACE_("Output"));
- func(calldata, NODE_CLASS_OP_COLOR, IFACE_("Color"));
- func(calldata, NODE_CLASS_OP_VECTOR, IFACE_("Vector"));
- func(calldata, NODE_CLASS_OP_FILTER, IFACE_("Filter"));
- func(calldata, NODE_CLASS_CONVERTOR, IFACE_("Convertor"));
- func(calldata, NODE_CLASS_MATTE, IFACE_("Matte"));
- func(calldata, NODE_CLASS_DISTORT, IFACE_("Distort"));
- func(calldata, NODE_CLASS_GROUP, IFACE_("Group"));
- func(calldata, NODE_CLASS_LAYOUT, IFACE_("Layout"));
+ func(calldata, NODE_CLASS_INPUT, N_("Input"));
+ func(calldata, NODE_CLASS_OUTPUT, N_("Output"));
+ func(calldata, NODE_CLASS_OP_COLOR, N_("Color"));
+ func(calldata, NODE_CLASS_OP_VECTOR, N_("Vector"));
+ func(calldata, NODE_CLASS_OP_FILTER, N_("Filter"));
+ func(calldata, NODE_CLASS_CONVERTOR, N_("Convertor"));
+ func(calldata, NODE_CLASS_MATTE, N_("Matte"));
+ func(calldata, NODE_CLASS_DISTORT, N_("Distort"));
+ func(calldata, NODE_CLASS_GROUP, N_("Group"));
+ func(calldata, NODE_CLASS_LAYOUT, N_("Layout"));
}
static void free_node_cache(bNodeTree *UNUSED(ntree), bNode *node)
@@ -136,7 +137,7 @@ static void localize(bNodeTree *localtree, bNodeTree *ntree)
if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
if (node->id) {
if (node->flag & NODE_DO_OUTPUT)
- node->new_node->id= (ID *)BKE_image_copy((Image *)node->id);
+ node->new_node->id= (ID *)node->id;
else
node->new_node->id= NULL;
}
@@ -575,20 +576,19 @@ static void ntree_composite_texnode(bNodeTree *ntree, int init)
}
/* optimized tree execute test for compositing */
-void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
+/* optimized tree execute test for compositing */
+static void ntreeCompositExecTreeOld(bNodeTree *ntree, RenderData *rd, int do_preview)
{
bNodeExec *nodeexec;
bNode *node;
ListBase threads;
ThreadData thdata;
int totnode, curnode, rendering= 1, n;
- bNodeTreeExec *exec;
-
- if (ntree==NULL) return;
-
- exec = ntree->execdata;
-
- if (do_preview)
+ bNodeTreeExec *exec= ntree->execdata;
+
+ if(ntree==NULL) return;
+
+ if(do_preview)
ntreeInitPreview(ntree, 0, 0);
if (!ntree->execdata) {
@@ -598,7 +598,7 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
ntree_composite_texnode(ntree, 1);
/* prevent unlucky accidents */
- if (G.background)
+ if(G.background)
rd->scemode &= ~R_COMP_CROP;
/* setup callerdata for thread callback */
@@ -613,15 +613,15 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
BLI_init_threads(&threads, exec_composite_node, rd->threads);
- while (rendering) {
+ while(rendering) {
- if (BLI_available_threads(&threads)) {
+ if(BLI_available_threads(&threads)) {
nodeexec= getExecutableNode(exec);
- if (nodeexec) {
+ if(nodeexec) {
node = nodeexec->node;
- if (ntree->progress && totnode)
+ if(ntree->progress && totnode)
ntree->progress(ntree->prh, (1.0f - curnode/(float)totnode));
- if (ntree->stats_draw) {
+ if(ntree->stats_draw) {
char str[128];
BLI_snprintf(str, sizeof(str), "Compositing %d %s", curnode, node->name);
ntree->stats_draw(ntree->sdh, str);
@@ -640,21 +640,21 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
rendering= 0;
/* test for ESC */
- if (ntree->test_break && ntree->test_break(ntree->tbh)) {
- for (node= ntree->nodes.first; node; node= node->next)
+ if(ntree->test_break && ntree->test_break(ntree->tbh)) {
+ for(node= ntree->nodes.first; node; node= node->next)
node->exec |= NODE_READY;
}
/* check for ready ones, and if we need to continue */
- for (n=0, nodeexec=exec->nodeexec; n < exec->totnodes; ++n, ++nodeexec) {
+ for(n=0, nodeexec=exec->nodeexec; n < exec->totnodes; ++n, ++nodeexec) {
node = nodeexec->node;
- if (node->exec & NODE_READY) {
- if ((node->exec & NODE_FINISHED)==0) {
+ if(node->exec & NODE_READY) {
+ if((node->exec & NODE_FINISHED)==0) {
BLI_remove_thread(&threads, nodeexec); /* this waits for running thread to finish btw */
node->exec |= NODE_FINISHED;
/* freeing unused buffers */
- if (rd->scemode & R_COMP_FREE)
+ if(rd->scemode & R_COMP_FREE)
freeExecutableNode(exec);
}
}
@@ -668,6 +668,14 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
ntreeCompositEndExecTree(exec, 1);
}
+void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int rendering, int do_preview)
+{
+ if(G.rt == 200)
+ ntreeCompositExecTreeOld(ntree, rd, do_preview);
+ else
+ COM_execute(ntree, rendering);
+}
+
/* *********************************************** */
/* clumsy checking... should do dynamic outputs once */
diff --git a/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c b/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c
index 5b26927b694..b8aabdae77f 100644
--- a/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c
+++ b/source/blender/nodes/composite/nodes/node_composite_bilateralblur.c
@@ -92,7 +92,7 @@ static bNodeSocketTemplate cmp_node_bilateralblur_out[]= {
/* code of this node was heavily inspired by the smooth function of opencv library.
-The main change is an optional image input */
+ * The main change is an optional image input */
static void node_composit_exec_bilateralblur(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **out)
{
NodeBilateralBlurData *nbbd= node->storage;
diff --git a/source/blender/nodes/composite/nodes/node_composite_bokehblur.c b/source/blender/nodes/composite/nodes/node_composite_bokehblur.c
new file mode 100644
index 00000000000..f239267a128
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_bokehblur.c
@@ -0,0 +1,60 @@
+/*
+ * $Id$
+ *
+ * ***** 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) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell Barton, Alfredo de Greef, David Millan Escriva,
+ * Juho Vepsäläinen
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/intern/CMP_nodes/CMP_blur.c
+ * \ingroup cmpnodes
+ */
+
+
+#include "../node_composite_util.h"
+
+/* **************** BLUR ******************** */
+static bNodeSocketTemplate cmp_node_bokehblur_in[]= {
+ { SOCK_RGBA, 1, "Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "Bokeh", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_FLOAT, 1, "Size", 0.01f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f},
+ { SOCK_FLOAT, 1, "Bounding box", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketTemplate cmp_node_bokehblur_out[]= {
+ { SOCK_RGBA, 0, "Image", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+void register_node_type_cmp_bokehblur(bNodeTreeType *ttype)
+{
+ static bNodeType ntype;
+
+ node_type_base(ttype, &ntype, CMP_NODE_BOKEHBLUR, "Bokeh Blur", NODE_CLASS_OP_FILTER, NODE_OPTIONS);
+ node_type_socket_templates(&ntype, cmp_node_bokehblur_in, cmp_node_bokehblur_out);
+ node_type_size(&ntype, 120, 80, 200);
+ nodeRegisterType(ttype, &ntype);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_bokehimage.c b/source/blender/nodes/composite/nodes/node_composite_bokehimage.c
new file mode 100644
index 00000000000..15dba89d12b
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_bokehimage.c
@@ -0,0 +1,66 @@
+/*
+* $Id$
+*
+* ***** 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) 2006 Blender Foundation.
+* All rights reserved.
+*
+* The Original Code is: all of this file.
+*
+* Contributor(s): none yet.
+*
+* ***** END GPL LICENSE BLOCK *****
+
+*/
+
+/** \file blender/nodes/intern/CMP_nodes/CMP_gamma.c
+ * \ingroup cmpnodes
+ */
+
+
+#include "../node_composite_util.h"
+
+/* **************** Bokeh image Tools ******************** */
+
+static bNodeSocketTemplate cmp_node_bokehimage_out[]= {
+ { SOCK_RGBA, 0, "Image", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static void node_composit_init_bokehimage(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
+{
+ NodeBokehImage * data = MEM_callocN(sizeof(NodeBokehImage), "NodeBokehImage");
+ data->angle = 0.0f;
+ data->flaps = 5;
+ data->rounding = 0.0f;
+ data->catadioptric = 0.0f;
+ data->lensshift = 0.0f;
+ node->storage = data;
+}
+
+void register_node_type_cmp_bokehimage(bNodeTreeType *ttype)
+{
+ static bNodeType ntype;
+
+ node_type_base(ttype, &ntype, CMP_NODE_BOKEHIMAGE, "Bokeh Image", NODE_CLASS_INPUT, NODE_PREVIEW|NODE_OPTIONS);
+ node_type_socket_templates(&ntype, NULL, cmp_node_bokehimage_out);
+ node_type_size(&ntype, 140, 100, 320);
+ node_type_init(&ntype, node_composit_init_bokehimage);
+ node_type_storage(&ntype, "NodeBokehImage", node_free_standard_storage, node_copy_standard_storage);
+
+ nodeRegisterType(ttype, &ntype);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_boxmask.c b/source/blender/nodes/composite/nodes/node_composite_boxmask.c
new file mode 100644
index 00000000000..be5d25f60c3
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_boxmask.c
@@ -0,0 +1,75 @@
+/*
+ * $Id: CMP_math.c 36271 2011-04-21 13:11:51Z campbellbarton $
+ *
+ * ***** 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) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/intern/CMP_nodes/CMP_math.c
+ * \ingroup cmpnodes
+ */
+
+
+#include "../node_composite_util.h"
+
+/* **************** SCALAR MATH ******************** */
+static bNodeSocketTemplate cmp_node_boxmask_in[]= {
+ { SOCK_FLOAT, 1, "Mask", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_FLOAT, 1, "Value", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketTemplate cmp_node_boxmask_out[]= {
+ { SOCK_FLOAT, 0, "Mask", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void node_composit_init_boxmask(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
+{
+ NodeBoxMask *data = MEM_callocN(sizeof(NodeBoxMask), "NodeBoxMask");
+ data->x = 0.5;
+ data->y = 0.5;
+ data->width = 0.2;
+ data->height = 0.1;
+ data->rotation = 0.0;
+ node->storage = data;
+}
+
+void register_node_type_cmp_boxmask(bNodeTreeType *ttype)
+{
+ static bNodeType ntype;
+
+ node_type_base(ttype, &ntype, CMP_NODE_MASK_BOX, "Box Mask", NODE_CLASS_MATTE, NODE_OPTIONS);
+ node_type_socket_templates(&ntype, cmp_node_boxmask_in, cmp_node_boxmask_out);
+ node_type_size(&ntype, 120, 110, 160);
+ node_type_init(&ntype, node_composit_init_boxmask);
+ node_type_storage(&ntype, "NodeBoxMask", node_free_standard_storage, node_copy_standard_storage);
+
+ nodeRegisterType(ttype, &ntype);
+}
+
+
+
+
diff --git a/source/blender/nodes/composite/nodes/node_composite_brightness.c b/source/blender/nodes/composite/nodes/node_composite_brightness.c
index caae5f313cd..9168a982b5d 100644
--- a/source/blender/nodes/composite/nodes/node_composite_brightness.c
+++ b/source/blender/nodes/composite/nodes/node_composite_brightness.c
@@ -57,10 +57,10 @@ static void do_brightnesscontrast(bNode *UNUSED(node), float *out, float *in, fl
float delta = contrast / 200.0f;
a = 1.0f - delta * 2.0f;
/*
- * The algorithm is by Werner D. Streidt
- * (http://visca.com/ffactory/archives/5-99/msg00021.html)
- * Extracted of OpenCV demhist.c
- */
+ * The algorithm is by Werner D. Streidt
+ * (http://visca.com/ffactory/archives/5-99/msg00021.html)
+ * Extracted of OpenCV demhist.c
+ */
if (contrast > 0) {
a = 1.0f / a;
b = a * (brightness - delta);
diff --git a/source/blender/nodes/composite/nodes/node_composite_colorcorrection.c b/source/blender/nodes/composite/nodes/node_composite_colorcorrection.c
new file mode 100644
index 00000000000..af085418c0e
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_colorcorrection.c
@@ -0,0 +1,89 @@
+/*
+ * ***** 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) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Jeroen Bakker.
+ * Monique Dewanchand
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/composite/nodes/node_composite_colorcorrection.c
+ * \ingroup cmpnodes
+ */
+
+
+
+#include "node_composite_util.h"
+
+
+/* ******************* Color Balance ********************************* */
+static bNodeSocketTemplate cmp_node_colorcorrection_in[]={
+ { SOCK_RGBA,1,"Image", 1.0f, 1.0f, 1.0f, 1.0f},
+ { SOCK_FLOAT, 1, "Mask", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { -1,0,""}
+};
+
+static bNodeSocketTemplate cmp_node_colorcorrection_out[]={
+ { SOCK_RGBA,0,"Image"},
+ { -1,0,""}
+};
+
+static void node_composit_init_colorcorrection(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
+{
+ NodeColorCorrection *n= node->storage= MEM_callocN(sizeof(NodeColorCorrection), "node colorcorrection");
+ n->startmidtones = 0.2f;
+ n->endmidtones = 0.7f;
+ n->master.contrast = 1.0f;
+ n->master.gain = 1.0f;
+ n->master.gamma = 1.0f;
+ n->master.lift= 0.0f;
+ n->master.saturation= 1.0f;
+ n->midtones.contrast = 1.0f;
+ n->midtones.gain = 1.0f;
+ n->midtones.gamma = 1.0f;
+ n->midtones.lift= 0.0f;
+ n->midtones.saturation= 1.0f;
+ n->shadows.contrast = 1.0f;
+ n->shadows.gain = 1.0f;
+ n->shadows.gamma = 1.0f;
+ n->shadows.lift= 0.0f;
+ n->shadows.saturation= 1.0f;
+ n->highlights.contrast = 1.0f;
+ n->highlights.gain = 1.0f;
+ n->highlights.gamma = 1.0f;
+ n->highlights.lift= 0.0f;
+ n->highlights.saturation= 1.0f;
+ node->custom1 = 7; // red + green + blue enabled
+}
+
+void register_node_type_cmp_colorcorrection(bNodeTreeType *ttype)
+{
+ static bNodeType ntype;
+
+ node_type_base(ttype, &ntype, CMP_NODE_COLORCORRECTION, "Color Correction", NODE_CLASS_OP_COLOR, NODE_OPTIONS);
+ node_type_socket_templates(&ntype, cmp_node_colorcorrection_in, cmp_node_colorcorrection_out);
+ node_type_size(&ntype, 400, 200, 400);
+ node_type_init(&ntype, node_composit_init_colorcorrection);
+ node_type_storage(&ntype, "NodeColorCorrection", node_free_standard_storage, node_copy_standard_storage);
+
+ nodeRegisterType(ttype, &ntype);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_displace.c b/source/blender/nodes/composite/nodes/node_composite_displace.c
index 6e4bbc632ea..3d6e61d1f04 100644
--- a/source/blender/nodes/composite/nodes/node_composite_displace.c
+++ b/source/blender/nodes/composite/nodes/node_composite_displace.c
@@ -105,7 +105,7 @@ static void do_displace(bNode *node, CompBuf *stackbuf, CompBuf *cbuf, CompBuf *
qd_getPixel(vecbuf, x-vecbuf->xof+1, y-vecbuf->yof, vecdx);
qd_getPixel(vecbuf, x-vecbuf->xof, y-vecbuf->yof+1, vecdy);
d_dx = vecdx[0] * xs;
- d_dy = vecdy[0] * ys;
+ d_dy = vecdy[1] * ys;
/* clamp derivatives to minimum displacement distance in UV space */
dxt = p_dx - d_dx;
diff --git a/source/blender/nodes/composite/nodes/node_composite_ellipsemask.c b/source/blender/nodes/composite/nodes/node_composite_ellipsemask.c
new file mode 100644
index 00000000000..556ad1ab6c6
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_ellipsemask.c
@@ -0,0 +1,75 @@
+/*
+ * $Id: CMP_math.c 36271 2011-04-21 13:11:51Z campbellbarton $
+ *
+ * ***** 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) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/intern/CMP_nodes/CMP_math.c
+ * \ingroup cmpnodes
+ */
+
+
+#include "../node_composite_util.h"
+
+/* **************** SCALAR MATH ******************** */
+static bNodeSocketTemplate cmp_node_ellipsemask_in[]= {
+ { SOCK_FLOAT, 1, "Mask", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_FLOAT, 1, "Value", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketTemplate cmp_node_ellipsemask_out[]= {
+ { SOCK_FLOAT, 0, "Mask", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void node_composit_init_ellipsemask(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
+{
+ NodeEllipseMask *data = MEM_callocN(sizeof(NodeEllipseMask), "NodeEllipseMask");
+ data->x = 0.5;
+ data->y = 0.5;
+ data->width = 0.2;
+ data->height = 0.1;
+ data->rotation = 0.0;
+ node->storage = data;
+}
+
+void register_node_type_cmp_ellipsemask(bNodeTreeType *ttype)
+{
+ static bNodeType ntype;
+
+ node_type_base(ttype, &ntype, CMP_NODE_MASK_ELLIPSE, "Ellipse Mask", NODE_CLASS_MATTE, NODE_OPTIONS);
+ node_type_socket_templates(&ntype, cmp_node_ellipsemask_in, cmp_node_ellipsemask_out);
+ node_type_size(&ntype, 120, 110, 160);
+ node_type_init(&ntype, node_composit_init_ellipsemask);
+ node_type_storage(&ntype, "NodeEllipseMask", node_free_standard_storage, node_copy_standard_storage);
+
+ nodeRegisterType(ttype, &ntype);
+}
+
+
+
+
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c
index 4467fb1f193..70d68737032 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@ -145,37 +145,26 @@ static void cmp_node_image_add_render_pass_outputs(bNodeTree *ntree, bNode *node
cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_COLOR, RRES_OUT_TRANSM_COLOR);
}
-static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, ListBase *layers)
+static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, RenderLayer *rl)
{
bNodeSocket *sock;
NodeImageLayer *sockdata;
- RenderLayer *rl;
RenderPass *rpass;
- int layer_index, pass_index;
- char name[30]; /* EXR_TOT_MAXNAME-2 ('.' and channel char are appended) */
- int type;
-
- for (rl=layers->first, layer_index=0; rl; rl=rl->next, ++layer_index) {
- for (rpass=rl->passes.first, pass_index=0; rpass; rpass=rpass->next, ++pass_index) {
- /* reconstruct layer name from <render layer>.<render pass> strings */
- if (rl->name[0] != '\0')
- BLI_snprintf(name, sizeof(name), "%s.%s", rl->name, rpass->name);
- else
- BLI_strncpy(name, rpass->name, sizeof(name));
-
- if (rpass->channels == 1)
- type = SOCK_FLOAT;
- else
- type = SOCK_RGBA;
-
- sock = nodeAddSocket(ntree, node, SOCK_OUT, name, type);
- /* extra socket info */
- sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
- sock->storage = sockdata;
-
- sockdata->layer_index = layer_index;
- sockdata->pass_index = pass_index;
- }
+ int index;
+ for (rpass=rl->passes.first, index=0; rpass; rpass=rpass->next, ++index) {
+ int type;
+ if (rpass->channels == 1)
+ type = SOCK_FLOAT;
+ else
+ type = SOCK_RGBA;
+
+ sock = nodeAddSocket(ntree, node, SOCK_OUT, rpass->name, type);
+ /* extra socket info */
+ sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
+ sock->storage = sockdata;
+
+ sockdata->pass_index = index;
+ sockdata->pass_flag = rpass->passtype;
}
}
@@ -189,16 +178,16 @@ static void cmp_node_image_create_outputs(bNodeTree *ntree, bNode *node)
BKE_image_get_ibuf(ima, iuser);
if (ima->rr) {
- if (ima->type == IMA_TYPE_MULTILAYER) {
- cmp_node_image_add_multilayer_outputs(ntree, node, &ima->rr->layers);
- }
- else {
- RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer);
- if (rl)
+ RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer);
+
+ if (rl) {
+ if (ima->type!=IMA_TYPE_MULTILAYER)
cmp_node_image_add_render_pass_outputs(ntree, node, rl->passflag);
else
- cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA);
+ cmp_node_image_add_multilayer_outputs(ntree, node, rl);
}
+ else
+ cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA);
}
else
cmp_node_image_add_render_pass_outputs(ntree, node, RRES_OUT_IMAGE|RRES_OUT_ALPHA|RRES_OUT_Z);
@@ -415,28 +404,23 @@ static CompBuf *node_composit_get_zimage(bNode *node, RenderData *rd)
}
/* check if layer is available, returns pass buffer */
-static CompBuf *compbuf_multilayer_get(RenderData *rd, Image *ima, ImageUser *iuser, int layer_index, int pass_index)
+static CompBuf *compbuf_multilayer_get(RenderData *rd, RenderLayer *rl, Image *ima, ImageUser *iuser, int passindex)
{
- RenderLayer *rl = BLI_findlink(&ima->rr->layers, layer_index);
- if (rl) {
- RenderPass *rpass = BLI_findlink(&rl->passes, pass_index);
- if (rpass) {
- CompBuf *cbuf;
-
- iuser->layer = layer_index;
- iuser->pass = pass_index;
- BKE_image_multilayer_index(ima->rr, iuser);
- cbuf = node_composit_get_image(rd, ima, iuser);
-
- return cbuf;
- }
+ RenderPass *rpass = BLI_findlink(&rl->passes, passindex);
+ if (rpass) {
+ CompBuf *cbuf;
+
+ iuser->pass = passindex;
+ BKE_image_multilayer_index(ima->rr, iuser);
+ cbuf = node_composit_get_image(rd, ima, iuser);
+
+ return cbuf;
}
return NULL;
}
static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **out)
{
-
/* image assigned to output */
/* stack order input sockets: col, alpha */
if (node->id) {
@@ -447,11 +431,14 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE
/* first set the right frame number in iuser */
BKE_image_user_frame_calc(iuser, rd->cfra, 0);
- if (ima->type==IMA_TYPE_MULTILAYER) {
- /* force a load, we assume iuser index will be set OK anyway */
+ /* force a load, we assume iuser index will be set OK anyway */
+ if (ima->type==IMA_TYPE_MULTILAYER)
BKE_image_get_ibuf(ima, iuser);
- if (ima->rr) {
+ if (ima->type==IMA_TYPE_MULTILAYER && ima->rr) {
+ RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer);
+
+ if (rl) {
bNodeSocket *sock;
NodeImageLayer *sockdata;
int out_index;
@@ -460,7 +447,7 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE
for (sock=node->outputs.first, out_index=0; sock; sock=sock->next, ++out_index) {
sockdata = sock->storage;
if (out[out_index]->hasoutput) {
- CompBuf *stackbuf = out[out_index]->data = compbuf_multilayer_get(rd, ima, iuser, sockdata->layer_index, sockdata->pass_index);
+ CompBuf *stackbuf = out[out_index]->data = compbuf_multilayer_get(rd, rl, ima, iuser, sockdata->pass_index);
if (stackbuf) {
/* preview policy: take first 'Combined' pass if available,
* otherwise just use the first layer.
@@ -469,7 +456,7 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE
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;
}
@@ -715,7 +702,6 @@ static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **UNU
RE_ReleaseResult(re);
}
-
void register_node_type_cmp_rlayers(bNodeTreeType *ttype)
{
static bNodeType ntype;
diff --git a/source/blender/nodes/composite/nodes/node_composite_switch.c b/source/blender/nodes/composite/nodes/node_composite_switch.c
new file mode 100644
index 00000000000..ee7e3124a7b
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_switch.c
@@ -0,0 +1,58 @@
+/*
+ * $Id$
+ *
+ * ***** 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) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/intern/CMP_nodes/CMP_switch.c
+ * \ingroup cmpnodes
+ */
+
+#include "../node_composite_util.h"
+
+/* **************** MIX RGB ******************** */
+static bNodeSocketTemplate cmp_node_switch_in[]= {
+ { SOCK_RGBA, 1, "Off", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "On", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketTemplate cmp_node_switch_out[]= {
+ { SOCK_RGBA, 0, "Image", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+/* custom1 = mix type */
+void register_node_type_cmp_switch(bNodeTreeType *ttype)
+{
+ static bNodeType ntype;
+
+ node_type_base(ttype, &ntype, CMP_NODE_SWITCH, "Switch", NODE_CLASS_LAYOUT, NODE_OPTIONS);
+ node_type_socket_templates(&ntype, cmp_node_switch_in, cmp_node_switch_out);
+ node_type_size(&ntype, 110, 60, 120);
+ nodeRegisterType(ttype, &ntype);
+}
+
diff --git a/source/blender/nodes/composite/nodes/node_composite_viewer.c b/source/blender/nodes/composite/nodes/node_composite_viewer.c
index 3fdedbb2e42..4a0726e473b 100644
--- a/source/blender/nodes/composite/nodes/node_composite_viewer.c
+++ b/source/blender/nodes/composite/nodes/node_composite_viewer.c
@@ -129,6 +129,8 @@ static void node_composit_init_viewer(bNodeTree *UNUSED(ntree), bNode* node, bNo
iuser->sfra= 1;
iuser->fie_ima= 2;
iuser->ok= 1;
+ node->custom3 = 0.5f;
+ node->custom4 = 0.5f;
}
void register_node_type_cmp_viewer(bNodeTreeType *ttype)
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 716d31a8cd1..4794a66d064 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -80,19 +80,19 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
static void foreach_nodeclass(Scene *scene, void *calldata, bNodeClassCallback func)
{
- func(calldata, NODE_CLASS_INPUT, IFACE_("Input"));
- func(calldata, NODE_CLASS_OUTPUT, IFACE_("Output"));
+ func(calldata, NODE_CLASS_INPUT, N_("Input"));
+ func(calldata, NODE_CLASS_OUTPUT, N_("Output"));
if (BKE_scene_use_new_shading_nodes(scene)) {
- func(calldata, NODE_CLASS_SHADER, IFACE_("Shader"));
- func(calldata, NODE_CLASS_TEXTURE, IFACE_("Texture"));
+ func(calldata, NODE_CLASS_SHADER, N_("Shader"));
+ func(calldata, NODE_CLASS_TEXTURE, N_("Texture"));
}
- func(calldata, NODE_CLASS_OP_COLOR, IFACE_("Color"));
- func(calldata, NODE_CLASS_OP_VECTOR, IFACE_("Vector"));
- func(calldata, NODE_CLASS_CONVERTOR, IFACE_("Convertor"));
- func(calldata, NODE_CLASS_GROUP, IFACE_("Group"));
- func(calldata, NODE_CLASS_LAYOUT, IFACE_("Layout"));
+ func(calldata, NODE_CLASS_OP_COLOR, N_("Color"));
+ func(calldata, NODE_CLASS_OP_VECTOR, N_("Vector"));
+ func(calldata, NODE_CLASS_CONVERTOR, N_("Convertor"));
+ func(calldata, NODE_CLASS_GROUP, N_("Group"));
+ func(calldata, NODE_CLASS_LAYOUT, N_("Layout"));
}
static void localize(bNodeTree *localtree, bNodeTree *UNUSED(ntree))
diff --git a/source/blender/nodes/shader/nodes/node_shader_squeeze.c b/source/blender/nodes/shader/nodes/node_shader_squeeze.c
index 64838512eab..4d71aca56be 100644
--- a/source/blender/nodes/shader/nodes/node_shader_squeeze.c
+++ b/source/blender/nodes/shader/nodes/node_shader_squeeze.c
@@ -54,7 +54,7 @@ bNodeStack **out)
nodestack_get_vec(vec+1, SOCK_FLOAT, in[1]);
nodestack_get_vec(vec+2, SOCK_FLOAT, in[2]);
- out[0]->vec[0] = 1.0f / (1.0f + pow(2.71828183, -((vec[0] - vec[2]) * vec[1])));
+ out[0]->vec[0] = 1.0f / (1.0f + pow(M_E, -((vec[0] - vec[2]) * vec[1])));
}
static int gpu_shader_squeeze(GPUMaterial *mat, bNode *UNUSED(node), GPUNodeStack *in, GPUNodeStack *out)
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
index 852c056dc28..9e80f79b0c5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
@@ -55,11 +55,8 @@ static int node_shader_gpu_tex_environment(GPUMaterial *mat, bNode *node, GPUNod
Image *ima= (Image*)node->id;
ImageUser *iuser= NULL;
- if (!ima) {
- float black[4] = {0.0f, 0.0f, 0.0f, 1.0f};
- GPUNodeLink *vec = GPU_uniform(black);
- return GPU_stack_link(mat, "set_rgba", out, out, vec);
- }
+ if (!ima)
+ return GPU_stack_link(mat, "node_tex_environment_empty", in, out);
if (!in[0].link)
in[0].link = GPU_builtin(GPU_VIEW_POSITION);
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_image.c b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
index 28dcada3d33..e00467a52ef 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_image.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
@@ -55,11 +55,8 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat, bNode *node, GPUNodeStack
Image *ima= (Image*)node->id;
ImageUser *iuser= NULL;
- if (!ima) {
- float black[4] = {0.0f, 0.0f, 0.0f, 1.0f};
- GPUNodeLink *vec = GPU_uniform(black);
- return GPU_stack_link(mat, "set_rgba", out, out, vec);
- }
+ if (!ima)
+ return GPU_stack_link(mat, "node_tex_image_empty", in, out);
if (!in[0].link)
in[0].link = GPU_attribute(CD_MTFACE, "");
diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c
index add9fdb0b30..ba5682ee8ad 100644
--- a/source/blender/nodes/texture/node_texture_tree.c
+++ b/source/blender/nodes/texture/node_texture_tree.c
@@ -66,15 +66,15 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)
{
- func(calldata, NODE_CLASS_INPUT, IFACE_("Input"));
- func(calldata, NODE_CLASS_OUTPUT, IFACE_("Output"));
- func(calldata, NODE_CLASS_OP_COLOR, IFACE_("Color"));
- func(calldata, NODE_CLASS_PATTERN, IFACE_("Patterns"));
- func(calldata, NODE_CLASS_TEXTURE, IFACE_("Textures"));
- func(calldata, NODE_CLASS_CONVERTOR, IFACE_("Convertor"));
- func(calldata, NODE_CLASS_DISTORT, IFACE_("Distort"));
- func(calldata, NODE_CLASS_GROUP, IFACE_("Group"));
- func(calldata, NODE_CLASS_LAYOUT, IFACE_("Layout"));
+ func(calldata, NODE_CLASS_INPUT, N_("Input"));
+ func(calldata, NODE_CLASS_OUTPUT, N_("Output"));
+ func(calldata, NODE_CLASS_OP_COLOR, N_("Color"));
+ func(calldata, NODE_CLASS_PATTERN, N_("Patterns"));
+ func(calldata, NODE_CLASS_TEXTURE, N_("Textures"));
+ func(calldata, NODE_CLASS_CONVERTOR, N_("Convertor"));
+ func(calldata, NODE_CLASS_DISTORT, N_("Distort"));
+ func(calldata, NODE_CLASS_GROUP, N_("Group"));
+ func(calldata, NODE_CLASS_LAYOUT, N_("Layout"));
}
static void localize(bNodeTree *localtree, bNodeTree *UNUSED(ntree))
diff --git a/source/blender/opencl/CMakeLists.txt b/source/blender/opencl/CMakeLists.txt
new file mode 100644
index 00000000000..9c8ce830316
--- /dev/null
+++ b/source/blender/opencl/CMakeLists.txt
@@ -0,0 +1,39 @@
+# $Id: CMakeLists.txt 14444 2008-04-16 22:40:48Z hos $
+# ***** 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) 2006, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Jacques Beaurain.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+ .
+)
+
+set(SRC
+ OCL_opencl.h
+ intern/clew.h
+ intern/clew.c
+ intern/OCL_opencl.c
+)
+
+
+blender_add_lib(bf_opencl "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/opencl/OCL_opencl.h b/source/blender/opencl/OCL_opencl.h
new file mode 100644
index 00000000000..4ee167b2fb4
--- /dev/null
+++ b/source/blender/opencl/OCL_opencl.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef OCL_OPENCL_H
+#define OCL_OPENCL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "intern/clew.h"
+void OCL_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/source/blender/opencl/SConscript b/source/blender/opencl/SConscript
new file mode 100644
index 00000000000..e91a99d5075
--- /dev/null
+++ b/source/blender/opencl/SConscript
@@ -0,0 +1,8 @@
+#!/usr/bin/python
+Import ('env')
+
+sources = env.Glob('intern/*.c')
+
+incs = '.'
+
+env.BlenderLib ( 'bf_opencl', sources, Split(incs), libtype=['core','player'], priority = [192,192] )
diff --git a/source/blender/opencl/intern/OCL_opencl.c b/source/blender/opencl/intern/OCL_opencl.c
new file mode 100644
index 00000000000..fa22acbc1a2
--- /dev/null
+++ b/source/blender/opencl/intern/OCL_opencl.c
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "OCL_opencl.h"
+
+void OCL_init()
+{
+#ifdef _WIN32
+ const char *path = "OpenCL.dll";
+#elif defined(__APPLE__)
+ const char *path = "/Library/Frameworks/OpenCL.framework/OpenCL";
+#else
+ const char *path = "libOpenCL.so";
+#endif
+
+ clewInit(path);
+}
+
diff --git a/source/blender/opencl/intern/clew.c b/source/blender/opencl/intern/clew.c
new file mode 100644
index 00000000000..d68eb17288f
--- /dev/null
+++ b/source/blender/opencl/intern/clew.c
@@ -0,0 +1,311 @@
+//////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2009 Organic Vectory B.V.
+// Written by George van Venrooij
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file license.txt)
+//////////////////////////////////////////////////////////////////////////
+
+#include "clew.h"
+
+//! \file clew.c
+//! \brief OpenCL run-time loader source
+
+#ifndef CLCC_GENERATE_DOCUMENTATION
+#ifdef _WIN32
+ #define WIN32_LEAN_AND_MEAN
+ #define VC_EXTRALEAN
+ #include <windows.h>
+
+ typedef HMODULE CLCC_DYNLIB_HANDLE;
+
+ #define CLCC_DYNLIB_OPEN LoadLibrary
+ #define CLCC_DYNLIB_CLOSE FreeLibrary
+ #define CLCC_DYNLIB_IMPORT GetProcAddress
+#else
+ #include <dlfcn.h>
+
+ typedef void* CLCC_DYNLIB_HANDLE;
+
+ #define CLCC_DYNLIB_OPEN(path) dlopen(path, RTLD_NOW | RTLD_GLOBAL)
+ #define CLCC_DYNLIB_CLOSE dlclose
+ #define CLCC_DYNLIB_IMPORT dlsym
+#endif
+#else
+ //typedef implementation_defined CLCC_DYNLIB_HANDLE;
+ //#define CLCC_DYNLIB_OPEN(path) implementation_defined
+ //#define CLCC_DYNLIB_CLOSE implementation_defined
+ //#define CLCC_DYNLIB_IMPORT implementation_defined
+#endif
+
+#include <stdlib.h>
+
+//! \brief module handle
+static CLCC_DYNLIB_HANDLE module = NULL;
+
+// Variables holding function entry points
+#ifndef CLCC_GENERATE_DOCUMENTATION
+PFNCLGETPLATFORMIDS __oclGetPlatformIDs = NULL;
+PFNCLGETPLATFORMINFO __oclGetPlatformInfo = NULL;
+PFNCLGETDEVICEIDS __oclGetDeviceIDs = NULL;
+PFNCLGETDEVICEINFO __oclGetDeviceInfo = NULL;
+PFNCLCREATECONTEXT __oclCreateContext = NULL;
+PFNCLCREATECONTEXTFROMTYPE __oclCreateContextFromType = NULL;
+PFNCLRETAINCONTEXT __oclRetainContext = NULL;
+PFNCLRELEASECONTEXT __oclReleaseContext = NULL;
+PFNCLGETCONTEXTINFO __oclGetContextInfo = NULL;
+PFNCLCREATECOMMANDQUEUE __oclCreateCommandQueue = NULL;
+PFNCLRETAINCOMMANDQUEUE __oclRetainCommandQueue = NULL;
+PFNCLRELEASECOMMANDQUEUE __oclReleaseCommandQueue = NULL;
+PFNCLGETCOMMANDQUEUEINFO __oclGetCommandQueueInfo = NULL;
+PFNCLSETCOMMANDQUEUEPROPERTY __oclSetCommandQueueProperty = NULL;
+PFNCLCREATEBUFFER __oclCreateBuffer = NULL;
+PFNCLCREATEIMAGE2D __oclCreateImage2D = NULL;
+PFNCLCREATEIMAGE3D __oclCreateImage3D = NULL;
+PFNCLRETAINMEMOBJECT __oclRetainMemObject = NULL;
+PFNCLRELEASEMEMOBJECT __oclReleaseMemObject = NULL;
+PFNCLGETSUPPORTEDIMAGEFORMATS __oclGetSupportedImageFormats = NULL;
+PFNCLGETMEMOBJECTINFO __oclGetMemObjectInfo = NULL;
+PFNCLGETIMAGEINFO __oclGetImageInfo = NULL;
+PFNCLCREATESAMPLER __oclCreateSampler = NULL;
+PFNCLRETAINSAMPLER __oclRetainSampler = NULL;
+PFNCLRELEASESAMPLER __oclReleaseSampler = NULL;
+PFNCLGETSAMPLERINFO __oclGetSamplerInfo = NULL;
+PFNCLCREATEPROGRAMWITHSOURCE __oclCreateProgramWithSource = NULL;
+PFNCLCREATEPROGRAMWITHBINARY __oclCreateProgramWithBinary = NULL;
+PFNCLRETAINPROGRAM __oclRetainProgram = NULL;
+PFNCLRELEASEPROGRAM __oclReleaseProgram = NULL;
+PFNCLBUILDPROGRAM __oclBuildProgram = NULL;
+PFNCLUNLOADCOMPILER __oclUnloadCompiler = NULL;
+PFNCLGETPROGRAMINFO __oclGetProgramInfo = NULL;
+PFNCLGETPROGRAMBUILDINFO __oclGetProgramBuildInfo = NULL;
+PFNCLCREATEKERNEL __oclCreateKernel = NULL;
+PFNCLCREATEKERNELSINPROGRAM __oclCreateKernelsInProgram = NULL;
+PFNCLRETAINKERNEL __oclRetainKernel = NULL;
+PFNCLRELEASEKERNEL __oclReleaseKernel = NULL;
+PFNCLSETKERNELARG __oclSetKernelArg = NULL;
+PFNCLGETKERNELINFO __oclGetKernelInfo = NULL;
+PFNCLGETKERNELWORKGROUPINFO __oclGetKernelWorkGroupInfo = NULL;
+PFNCLWAITFOREVENTS __oclWaitForEvents = NULL;
+PFNCLGETEVENTINFO __oclGetEventInfo = NULL;
+PFNCLRETAINEVENT __oclRetainEvent = NULL;
+PFNCLRELEASEEVENT __oclReleaseEvent = NULL;
+PFNCLGETEVENTPROFILINGINFO __oclGetEventProfilingInfo = NULL;
+PFNCLFLUSH __oclFlush = NULL;
+PFNCLFINISH __oclFinish = NULL;
+PFNCLENQUEUEREADBUFFER __oclEnqueueReadBuffer = NULL;
+PFNCLENQUEUEWRITEBUFFER __oclEnqueueWriteBuffer = NULL;
+PFNCLENQUEUECOPYBUFFER __oclEnqueueCopyBuffer = NULL;
+PFNCLENQUEUEREADIMAGE __oclEnqueueReadImage = NULL;
+PFNCLENQUEUEWRITEIMAGE __oclEnqueueWriteImage = NULL;
+PFNCLENQUEUECOPYIMAGE __oclEnqueueCopyImage = NULL;
+PFNCLENQUEUECOPYIMAGETOBUFFER __oclEnqueueCopyImageToBuffer = NULL;
+PFNCLENQUEUECOPYBUFFERTOIMAGE __oclEnqueueCopyBufferToImage = NULL;
+PFNCLENQUEUEMAPBUFFER __oclEnqueueMapBuffer = NULL;
+PFNCLENQUEUEMAPIMAGE __oclEnqueueMapImage = NULL;
+PFNCLENQUEUEUNMAPMEMOBJECT __oclEnqueueUnmapMemObject = NULL;
+PFNCLENQUEUENDRANGEKERNEL __oclEnqueueNDRangeKernel = NULL;
+PFNCLENQUEUETASK __oclEnqueueTask = NULL;
+PFNCLENQUEUENATIVEKERNEL __oclEnqueueNativeKernel = NULL;
+PFNCLENQUEUEMARKER __oclEnqueueMarker = NULL;
+PFNCLENQUEUEWAITFOREVENTS __oclEnqueueWaitForEvents = NULL;
+PFNCLENQUEUEBARRIER __oclEnqueueBarrier = NULL;
+PFNCLGETEXTENSIONFUNCTIONADDRESS __oclGetExtensionFunctionAddress = NULL;
+#endif // CLCC_GENERATE_DOCUMENTATION
+
+
+//! \brief Unloads OpenCL dynamic library, should not be called directly
+static void clewExit(void)
+{
+ if (module != NULL)
+ {
+ // Ignore errors
+ CLCC_DYNLIB_CLOSE(module);
+ module = NULL;
+ }
+}
+
+//! \param path path to dynamic library to load
+//! \return CLEW_ERROR_OPEN_FAILED if the library could not be opened
+//! CLEW_ERROR_ATEXIT_FAILED if atexit(clewExit) failed
+//! CLEW_SUCCESS when the library was succesfully loaded
+int clewInit(const char* path)
+{
+ int error = 0;
+
+ // Check if already initialized
+ if (module != NULL)
+ {
+ return CLEW_SUCCESS;
+ }
+
+ // Load library
+ module = CLCC_DYNLIB_OPEN(path);
+
+ // Check for errors
+ if (module == NULL)
+ {
+ return CLEW_ERROR_OPEN_FAILED;
+ }
+
+ // Set unloading
+ error = atexit(clewExit);
+
+ if (error)
+ {
+ // Failure queing atexit, shutdown with error
+ CLCC_DYNLIB_CLOSE(module);
+ module = NULL;
+
+ return CLEW_ERROR_ATEXIT_FAILED;
+ }
+
+ // Determine function entry-points
+ __oclGetPlatformIDs = (PFNCLGETPLATFORMIDS )CLCC_DYNLIB_IMPORT(module, "clGetPlatformIDs");
+ __oclGetPlatformInfo = (PFNCLGETPLATFORMINFO )CLCC_DYNLIB_IMPORT(module, "clGetPlatformInfo");
+ __oclGetDeviceIDs = (PFNCLGETDEVICEIDS )CLCC_DYNLIB_IMPORT(module, "clGetDeviceIDs");
+ __oclGetDeviceInfo = (PFNCLGETDEVICEINFO )CLCC_DYNLIB_IMPORT(module, "clGetDeviceInfo");
+ __oclCreateContext = (PFNCLCREATECONTEXT )CLCC_DYNLIB_IMPORT(module, "clCreateContext");
+ __oclCreateContextFromType = (PFNCLCREATECONTEXTFROMTYPE )CLCC_DYNLIB_IMPORT(module, "clCreateContextFromType");
+ __oclRetainContext = (PFNCLRETAINCONTEXT )CLCC_DYNLIB_IMPORT(module, "clRetainContext");
+ __oclReleaseContext = (PFNCLRELEASECONTEXT )CLCC_DYNLIB_IMPORT(module, "clReleaseContext");
+ __oclGetContextInfo = (PFNCLGETCONTEXTINFO )CLCC_DYNLIB_IMPORT(module, "clGetContextInfo");
+ __oclCreateCommandQueue = (PFNCLCREATECOMMANDQUEUE )CLCC_DYNLIB_IMPORT(module, "clCreateCommandQueue");
+ __oclRetainCommandQueue = (PFNCLRETAINCOMMANDQUEUE )CLCC_DYNLIB_IMPORT(module, "clRetainCommandQueue");
+ __oclReleaseCommandQueue = (PFNCLRELEASECOMMANDQUEUE )CLCC_DYNLIB_IMPORT(module, "clReleaseCommandQueue");
+ __oclGetCommandQueueInfo = (PFNCLGETCOMMANDQUEUEINFO )CLCC_DYNLIB_IMPORT(module, "clGetCommandQueueInfo");
+ __oclSetCommandQueueProperty = (PFNCLSETCOMMANDQUEUEPROPERTY )CLCC_DYNLIB_IMPORT(module, "clSetCommandQueueProperty");
+ __oclCreateBuffer = (PFNCLCREATEBUFFER )CLCC_DYNLIB_IMPORT(module, "clCreateBuffer");
+ __oclCreateImage2D = (PFNCLCREATEIMAGE2D )CLCC_DYNLIB_IMPORT(module, "clCreateImage2D");
+ __oclCreateImage3D = (PFNCLCREATEIMAGE3D )CLCC_DYNLIB_IMPORT(module, "clCreateImage3D");
+ __oclRetainMemObject = (PFNCLRETAINMEMOBJECT )CLCC_DYNLIB_IMPORT(module, "clRetainMemObject");
+ __oclReleaseMemObject = (PFNCLRELEASEMEMOBJECT )CLCC_DYNLIB_IMPORT(module, "clReleaseMemObject");
+ __oclGetSupportedImageFormats = (PFNCLGETSUPPORTEDIMAGEFORMATS )CLCC_DYNLIB_IMPORT(module, "clGetSupportedImageFormats");
+ __oclGetMemObjectInfo = (PFNCLGETMEMOBJECTINFO )CLCC_DYNLIB_IMPORT(module, "clGetMemObjectInfo");
+ __oclGetImageInfo = (PFNCLGETIMAGEINFO )CLCC_DYNLIB_IMPORT(module, "clGetImageInfo");
+ __oclCreateSampler = (PFNCLCREATESAMPLER )CLCC_DYNLIB_IMPORT(module, "clCreateSampler");
+ __oclRetainSampler = (PFNCLRETAINSAMPLER )CLCC_DYNLIB_IMPORT(module, "clRetainSampler");
+ __oclReleaseSampler = (PFNCLRELEASESAMPLER )CLCC_DYNLIB_IMPORT(module, "clReleaseSampler");
+ __oclGetSamplerInfo = (PFNCLGETSAMPLERINFO )CLCC_DYNLIB_IMPORT(module, "clGetSamplerInfo");
+ __oclCreateProgramWithSource = (PFNCLCREATEPROGRAMWITHSOURCE )CLCC_DYNLIB_IMPORT(module, "clCreateProgramWithSource");
+ __oclCreateProgramWithBinary = (PFNCLCREATEPROGRAMWITHBINARY )CLCC_DYNLIB_IMPORT(module, "clCreateProgramWithBinary");
+ __oclRetainProgram = (PFNCLRETAINPROGRAM )CLCC_DYNLIB_IMPORT(module, "clRetainProgram");
+ __oclReleaseProgram = (PFNCLRELEASEPROGRAM )CLCC_DYNLIB_IMPORT(module, "clReleaseProgram");
+ __oclBuildProgram = (PFNCLBUILDPROGRAM )CLCC_DYNLIB_IMPORT(module, "clBuildProgram");
+ __oclUnloadCompiler = (PFNCLUNLOADCOMPILER )CLCC_DYNLIB_IMPORT(module, "clUnloadCompiler");
+ __oclGetProgramInfo = (PFNCLGETPROGRAMINFO )CLCC_DYNLIB_IMPORT(module, "clGetProgramInfo");
+ __oclGetProgramBuildInfo = (PFNCLGETPROGRAMBUILDINFO )CLCC_DYNLIB_IMPORT(module, "clGetProgramBuildInfo");
+ __oclCreateKernel = (PFNCLCREATEKERNEL )CLCC_DYNLIB_IMPORT(module, "clCreateKernel");
+ __oclCreateKernelsInProgram = (PFNCLCREATEKERNELSINPROGRAM )CLCC_DYNLIB_IMPORT(module, "clCreateKernelsInProgram");
+ __oclRetainKernel = (PFNCLRETAINKERNEL )CLCC_DYNLIB_IMPORT(module, "clRetainKernel");
+ __oclReleaseKernel = (PFNCLRELEASEKERNEL )CLCC_DYNLIB_IMPORT(module, "clReleaseKernel");
+ __oclSetKernelArg = (PFNCLSETKERNELARG )CLCC_DYNLIB_IMPORT(module, "clSetKernelArg");
+ __oclGetKernelInfo = (PFNCLGETKERNELINFO )CLCC_DYNLIB_IMPORT(module, "clGetKernelInfo");
+ __oclGetKernelWorkGroupInfo = (PFNCLGETKERNELWORKGROUPINFO )CLCC_DYNLIB_IMPORT(module, "clGetKernelWorkGroupInfo");
+ __oclWaitForEvents = (PFNCLWAITFOREVENTS )CLCC_DYNLIB_IMPORT(module, "clWaitForEvents");
+ __oclGetEventInfo = (PFNCLGETEVENTINFO )CLCC_DYNLIB_IMPORT(module, "clGetEventInfo");
+ __oclRetainEvent = (PFNCLRETAINEVENT )CLCC_DYNLIB_IMPORT(module, "clRetainEvent");
+ __oclReleaseEvent = (PFNCLRELEASEEVENT )CLCC_DYNLIB_IMPORT(module, "clReleaseEvent");
+ __oclGetEventProfilingInfo = (PFNCLGETEVENTPROFILINGINFO )CLCC_DYNLIB_IMPORT(module, "clGetEventProfilingInfo");
+ __oclFlush = (PFNCLFLUSH )CLCC_DYNLIB_IMPORT(module, "clFlush");
+ __oclFinish = (PFNCLFINISH )CLCC_DYNLIB_IMPORT(module, "clFinish");
+ __oclEnqueueReadBuffer = (PFNCLENQUEUEREADBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueReadBuffer");
+ __oclEnqueueWriteBuffer = (PFNCLENQUEUEWRITEBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueWriteBuffer");
+ __oclEnqueueCopyBuffer = (PFNCLENQUEUECOPYBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyBuffer");
+ __oclEnqueueReadImage = (PFNCLENQUEUEREADIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueReadImage");
+ __oclEnqueueWriteImage = (PFNCLENQUEUEWRITEIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueWriteImage");
+ __oclEnqueueCopyImage = (PFNCLENQUEUECOPYIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyImage");
+ __oclEnqueueCopyImageToBuffer = (PFNCLENQUEUECOPYIMAGETOBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyImageToBuffer");
+ __oclEnqueueCopyBufferToImage = (PFNCLENQUEUECOPYBUFFERTOIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueCopyBufferToImage");
+ __oclEnqueueMapBuffer = (PFNCLENQUEUEMAPBUFFER )CLCC_DYNLIB_IMPORT(module, "clEnqueueMapBuffer");
+ __oclEnqueueMapImage = (PFNCLENQUEUEMAPIMAGE )CLCC_DYNLIB_IMPORT(module, "clEnqueueMapImage");
+ __oclEnqueueUnmapMemObject = (PFNCLENQUEUEUNMAPMEMOBJECT )CLCC_DYNLIB_IMPORT(module, "clEnqueueUnmapMemObject");
+ __oclEnqueueNDRangeKernel = (PFNCLENQUEUENDRANGEKERNEL )CLCC_DYNLIB_IMPORT(module, "clEnqueueNDRangeKernel");
+ __oclEnqueueTask = (PFNCLENQUEUETASK )CLCC_DYNLIB_IMPORT(module, "clEnqueueTask");
+ __oclEnqueueNativeKernel = (PFNCLENQUEUENATIVEKERNEL )CLCC_DYNLIB_IMPORT(module, "clEnqueueNativeKernel");
+ __oclEnqueueMarker = (PFNCLENQUEUEMARKER )CLCC_DYNLIB_IMPORT(module, "clEnqueueMarker");
+ __oclEnqueueWaitForEvents = (PFNCLENQUEUEWAITFOREVENTS )CLCC_DYNLIB_IMPORT(module, "clEnqueueWaitForEvents");
+ __oclEnqueueBarrier = (PFNCLENQUEUEBARRIER )CLCC_DYNLIB_IMPORT(module, "clEnqueueBarrier");
+ __oclGetExtensionFunctionAddress = (PFNCLGETEXTENSIONFUNCTIONADDRESS )CLCC_DYNLIB_IMPORT(module, "clGetExtensionFunctionAddress");
+
+ return CLEW_SUCCESS;
+}
+
+//! \param error CL error code
+//! \return a string representation of the error code
+const char* clewErrorString(cl_int error)
+{
+ static const char* strings[] =
+ {
+ // Error Codes
+ "CL_SUCCESS" // 0
+ , "CL_DEVICE_NOT_FOUND" // -1
+ , "CL_DEVICE_NOT_AVAILABLE" // -2
+ , "CL_COMPILER_NOT_AVAILABLE" // -3
+ , "CL_MEM_OBJECT_ALLOCATION_FAILURE" // -4
+ , "CL_OUT_OF_RESOURCES" // -5
+ , "CL_OUT_OF_HOST_MEMORY" // -6
+ , "CL_PROFILING_INFO_NOT_AVAILABLE" // -7
+ , "CL_MEM_COPY_OVERLAP" // -8
+ , "CL_IMAGE_FORMAT_MISMATCH" // -9
+ , "CL_IMAGE_FORMAT_NOT_SUPPORTED" // -10
+ , "CL_BUILD_PROGRAM_FAILURE" // -11
+ , "CL_MAP_FAILURE" // -12
+
+ , "" // -13
+ , "" // -14
+ , "" // -15
+ , "" // -16
+ , "" // -17
+ , "" // -18
+ , "" // -19
+
+ , "" // -20
+ , "" // -21
+ , "" // -22
+ , "" // -23
+ , "" // -24
+ , "" // -25
+ , "" // -26
+ , "" // -27
+ , "" // -28
+ , "" // -29
+
+ , "CL_INVALID_VALUE" // -30
+ , "CL_INVALID_DEVICE_TYPE" // -31
+ , "CL_INVALID_PLATFORM" // -32
+ , "CL_INVALID_DEVICE" // -33
+ , "CL_INVALID_CONTEXT" // -34
+ , "CL_INVALID_QUEUE_PROPERTIES" // -35
+ , "CL_INVALID_COMMAND_QUEUE" // -36
+ , "CL_INVALID_HOST_PTR" // -37
+ , "CL_INVALID_MEM_OBJECT" // -38
+ , "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR" // -39
+ , "CL_INVALID_IMAGE_SIZE" // -40
+ , "CL_INVALID_SAMPLER" // -41
+ , "CL_INVALID_BINARY" // -42
+ , "CL_INVALID_BUILD_OPTIONS" // -43
+ , "CL_INVALID_PROGRAM" // -44
+ , "CL_INVALID_PROGRAM_EXECUTABLE" // -45
+ , "CL_INVALID_KERNEL_NAME" // -46
+ , "CL_INVALID_KERNEL_DEFINITION" // -47
+ , "CL_INVALID_KERNEL" // -48
+ , "CL_INVALID_ARG_INDEX" // -49
+ , "CL_INVALID_ARG_VALUE" // -50
+ , "CL_INVALID_ARG_SIZE" // -51
+ , "CL_INVALID_KERNEL_ARGS" // -52
+ , "CL_INVALID_WORK_DIMENSION" // -53
+ , "CL_INVALID_WORK_GROUP_SIZE" // -54
+ , "CL_INVALID_WORK_ITEM_SIZE" // -55
+ , "CL_INVALID_GLOBAL_OFFSET" // -56
+ , "CL_INVALID_EVENT_WAIT_LIST" // -57
+ , "CL_INVALID_EVENT" // -58
+ , "CL_INVALID_OPERATION" // -59
+ , "CL_INVALID_GL_OBJECT" // -60
+ , "CL_INVALID_BUFFER_SIZE" // -61
+ , "CL_INVALID_MIP_LEVEL" // -62
+ , "CL_INVALID_GLOBAL_WORK_SIZE" // -63
+ };
+
+ return strings[-error];
+}
diff --git a/source/blender/opencl/intern/clew.h b/source/blender/opencl/intern/clew.h
new file mode 100644
index 00000000000..bb7e0134dcf
--- /dev/null
+++ b/source/blender/opencl/intern/clew.h
@@ -0,0 +1,1317 @@
+#ifndef CLCC_CLEW_HPP_INCLUDED
+#define CLCC_CLEW_HPP_INCLUDED
+
+//////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2009 Organic Vectory B.V.
+// Written by George van Venrooij
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file license.txt)
+//////////////////////////////////////////////////////////////////////////
+
+//! \file clew.h
+//! \brief OpenCL run-time loader header
+//!
+//! This file contains a copy of the contents of CL.H and CL_PLATFORM.H from the
+//! official OpenCL spec. The purpose of this code is to load the OpenCL dynamic
+//! library at run-time and thus allow the executable to function on many
+//! platforms regardless of the vendor of the OpenCL driver actually installed.
+//! Some of the techniques used here were inspired by work done in the GLEW
+//! library (http://glew.sourceforge.net/)
+
+// Run-time dynamic linking functionality based on concepts used in GLEW
+#ifdef __OPENCL_CL_H
+#error cl.h included before clew.h
+#endif
+
+#ifdef __OPENCL_CL_PLATFORM_H
+#error cl_platform.h included before clew.h
+#endif
+
+#ifndef CLCC_GENERATE_DOCUMENTATION
+// Prevent cl.h inclusion
+#define __OPENCL_CL_H
+// Prevent cl_platform.h inclusion
+#define __CL_PLATFORM_H
+#endif // CLCC_GENERATE_DOCUMENTATION
+
+/*******************************************************************************
+* Copyright (c) 2008-2009 The Khronos Group Inc.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and/or associated documentation files (the
+* "Materials"), to deal in the Materials without restriction, including
+* without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Materials, and to
+* permit persons to whom the Materials are 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 Materials.
+*
+* THE MATERIALS ARE 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
+* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+******************************************************************************/
+#ifdef __APPLE__
+/* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */
+#include <AvailabilityMacros.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef CLCC_GENERATE_DOCUMENTATION
+
+#if defined(_WIN32)
+#define CL_API_ENTRY
+#define CL_API_CALL __stdcall
+#else
+#define CL_API_ENTRY
+#define CL_API_CALL
+#endif
+
+#if defined(__APPLE__)
+//JBKK removed for compatibility with blender trunk #define CL_API_SUFFIX__VERSION_1_0 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+#define CL_API_SUFFIX__VERSION_1_0
+#define CL_EXTENSION_WEAK_LINK __attribute__((weak_import))
+#else
+#define CL_API_SUFFIX__VERSION_1_0
+#define CL_EXTENSION_WEAK_LINK
+#endif
+
+#if defined(_WIN32) && defined(_MSC_VER)
+
+/* scalar types */
+typedef signed __int8 cl_char;
+typedef unsigned __int8 cl_uchar;
+typedef signed __int16 cl_short;
+typedef unsigned __int16 cl_ushort;
+typedef signed __int32 cl_int;
+typedef unsigned __int32 cl_uint;
+typedef signed __int64 cl_long;
+typedef unsigned __int64 cl_ulong;
+
+typedef unsigned __int16 cl_half;
+typedef float cl_float;
+typedef double cl_double;
+
+
+/*
+* Vector types
+*
+* Note: OpenCL requires that all types be naturally aligned.
+* This means that vector types must be naturally aligned.
+* For example, a vector of four floats must be aligned to
+* a 16 byte boundary (calculated as 4 * the natural 4-byte
+* alignment of the float). The alignment qualifiers here
+* will only function properly if your compiler supports them
+* and if you don't actively work to defeat them. For example,
+* in order for a cl_float4 to be 16 byte aligned in a struct,
+* the start of the struct must itself be 16-byte aligned.
+*
+* Maintaining proper alignment is the user's responsibility.
+*/
+typedef signed __int8 cl_char2[2];
+typedef signed __int8 cl_char4[4];
+typedef signed __int8 cl_char8[8];
+typedef signed __int8 cl_char16[16];
+typedef unsigned __int8 cl_uchar2[2];
+typedef unsigned __int8 cl_uchar4[4];
+typedef unsigned __int8 cl_uchar8[8];
+typedef unsigned __int8 cl_uchar16[16];
+
+typedef signed __int16 cl_short2[2];
+typedef signed __int16 cl_short4[4];
+typedef signed __int16 cl_short8[8];
+typedef signed __int16 cl_short16[16];
+typedef unsigned __int16 cl_ushort2[2];
+typedef unsigned __int16 cl_ushort4[4];
+typedef unsigned __int16 cl_ushort8[8];
+typedef unsigned __int16 cl_ushort16[16];
+
+typedef signed __int32 cl_int2[2];
+typedef signed __int32 cl_int4[4];
+typedef signed __int32 cl_int8[8];
+typedef signed __int32 cl_int16[16];
+typedef unsigned __int32 cl_uint2[2];
+typedef unsigned __int32 cl_uint4[4];
+typedef unsigned __int32 cl_uint8[8];
+typedef unsigned __int32 cl_uint16[16];
+
+typedef signed __int64 cl_long2[2];
+typedef signed __int64 cl_long4[4];
+typedef signed __int64 cl_long8[8];
+typedef signed __int64 cl_long16[16];
+typedef unsigned __int64 cl_ulong2[2];
+typedef unsigned __int64 cl_ulong4[4];
+typedef unsigned __int64 cl_ulong8[8];
+typedef unsigned __int64 cl_ulong16[16];
+
+typedef float cl_float2[2];
+typedef float cl_float4[4];
+typedef float cl_float8[8];
+typedef float cl_float16[16];
+
+typedef double cl_double2[2];
+typedef double cl_double4[4];
+typedef double cl_double8[8];
+typedef double cl_double16[16];
+/* There are no vector types for half */
+
+#else
+
+#include <stdint.h>
+
+/* scalar types */
+typedef int8_t cl_char;
+typedef uint8_t cl_uchar;
+typedef int16_t cl_short __attribute__((aligned(2)));
+typedef uint16_t cl_ushort __attribute__((aligned(2)));
+typedef int32_t cl_int __attribute__((aligned(4)));
+typedef uint32_t cl_uint __attribute__((aligned(4)));
+typedef int64_t cl_long __attribute__((aligned(8)));
+typedef uint64_t cl_ulong __attribute__((aligned(8)));
+
+typedef uint16_t cl_half __attribute__((aligned(2)));
+typedef float cl_float __attribute__((aligned(4)));
+typedef double cl_double __attribute__((aligned(8)));
+
+/*
+* Vector types
+*
+* Note: OpenCL requires that all types be naturally aligned.
+* This means that vector types must be naturally aligned.
+* For example, a vector of four floats must be aligned to
+* a 16 byte boundary (calculated as 4 * the natural 4-byte
+* alignment of the float). The alignment qualifiers here
+* will only function properly if your compiler supports them
+* and if you don't actively work to defeat them. For example,
+* in order for a cl_float4 to be 16 byte aligned in a struct,
+* the start of the struct must itself be 16-byte aligned.
+*
+* Maintaining proper alignment is the user's responsibility.
+*/
+typedef int8_t cl_char2[2] __attribute__((aligned(2)));
+typedef int8_t cl_char4[4] __attribute__((aligned(4)));
+typedef int8_t cl_char8[8] __attribute__((aligned(8)));
+typedef int8_t cl_char16[16] __attribute__((aligned(16)));
+typedef uint8_t cl_uchar2[2] __attribute__((aligned(2)));
+typedef uint8_t cl_uchar4[4] __attribute__((aligned(4)));
+typedef uint8_t cl_uchar8[8] __attribute__((aligned(8)));
+typedef uint8_t cl_uchar16[16] __attribute__((aligned(16)));
+
+typedef int16_t cl_short2[2] __attribute__((aligned(4)));
+typedef int16_t cl_short4[4] __attribute__((aligned(8)));
+typedef int16_t cl_short8[8] __attribute__((aligned(16)));
+typedef int16_t cl_short16[16] __attribute__((aligned(32)));
+typedef uint16_t cl_ushort2[2] __attribute__((aligned(4)));
+typedef uint16_t cl_ushort4[4] __attribute__((aligned(8)));
+typedef uint16_t cl_ushort8[8] __attribute__((aligned(16)));
+typedef uint16_t cl_ushort16[16] __attribute__((aligned(32)));
+
+typedef int32_t cl_int2[2] __attribute__((aligned(8)));
+typedef int32_t cl_int4[4] __attribute__((aligned(16)));
+typedef int32_t cl_int8[8] __attribute__((aligned(32)));
+typedef int32_t cl_int16[16] __attribute__((aligned(64)));
+typedef uint32_t cl_uint2[2] __attribute__((aligned(8)));
+typedef uint32_t cl_uint4[4] __attribute__((aligned(16)));
+typedef uint32_t cl_uint8[8] __attribute__((aligned(32)));
+typedef uint32_t cl_uint16[16] __attribute__((aligned(64)));
+
+typedef int64_t cl_long2[2] __attribute__((aligned(16)));
+typedef int64_t cl_long4[4] __attribute__((aligned(32)));
+typedef int64_t cl_long8[8] __attribute__((aligned(64)));
+typedef int64_t cl_long16[16] __attribute__((aligned(128)));
+typedef uint64_t cl_ulong2[2] __attribute__((aligned(16)));
+typedef uint64_t cl_ulong4[4] __attribute__((aligned(32)));
+typedef uint64_t cl_ulong8[8] __attribute__((aligned(64)));
+typedef uint64_t cl_ulong16[16] __attribute__((aligned(128)));
+
+typedef float cl_float2[2] __attribute__((aligned(8)));
+typedef float cl_float4[4] __attribute__((aligned(16)));
+typedef float cl_float8[8] __attribute__((aligned(32)));
+typedef float cl_float16[16] __attribute__((aligned(64)));
+
+typedef double cl_double2[2] __attribute__((aligned(16)));
+typedef double cl_double4[4] __attribute__((aligned(32)));
+typedef double cl_double8[8] __attribute__((aligned(64)));
+typedef double cl_double16[16] __attribute__((aligned(128)));
+
+/* There are no vector types for half */
+
+#endif
+
+/******************************************************************************/
+
+// Macro names and corresponding values defined by OpenCL
+
+#define CL_CHAR_BIT 8
+#define CL_SCHAR_MAX 127
+#define CL_SCHAR_MIN (-127-1)
+#define CL_CHAR_MAX CL_SCHAR_MAX
+#define CL_CHAR_MIN CL_SCHAR_MIN
+#define CL_UCHAR_MAX 255
+#define CL_SHRT_MAX 32767
+#define CL_SHRT_MIN (-32767-1)
+#define CL_USHRT_MAX 65535
+#define CL_INT_MAX 2147483647
+#define CL_INT_MIN (-2147483647-1)
+#define CL_UINT_MAX 0xffffffffU
+#define CL_LONG_MAX ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
+#define CL_LONG_MIN ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
+#define CL_ULONG_MAX ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
+
+#define CL_FLT_DIG 6
+#define CL_FLT_MANT_DIG 24
+#define CL_FLT_MAX_10_EXP +38
+#define CL_FLT_MAX_EXP +128
+#define CL_FLT_MIN_10_EXP -37
+#define CL_FLT_MIN_EXP -125
+#define CL_FLT_RADIX 2
+#if defined(_MSC_VER)
+// MSVC doesn't understand hex floats
+#define CL_FLT_MAX 3.402823466e+38F
+#define CL_FLT_MIN 1.175494351e-38F
+#define CL_FLT_EPSILON 1.192092896e-07F
+#else
+#define CL_FLT_MAX 0x1.fffffep127f
+#define CL_FLT_MIN 0x1.0p-126f
+#define CL_FLT_EPSILON 0x1.0p-23f
+#endif
+
+#define CL_DBL_DIG 15
+#define CL_DBL_MANT_DIG 53
+#define CL_DBL_MAX_10_EXP +308
+#define CL_DBL_MAX_EXP +1024
+#define CL_DBL_MIN_10_EXP -307
+#define CL_DBL_MIN_EXP -1021
+#define CL_DBL_RADIX 2
+#if defined(_MSC_VER)
+// MSVC doesn't understand hex floats
+#define CL_DBL_MAX 1.7976931348623158e+308
+#define CL_DBL_MIN 2.2250738585072014e-308
+#define CL_DBL_EPSILON 2.2204460492503131e-016
+#else
+#define CL_DBL_MAX 0x1.fffffffffffffp1023
+#define CL_DBL_MIN 0x1.0p-1022
+#define CL_DBL_EPSILON 0x1.0p-52
+#endif
+
+#include <stddef.h>
+
+
+// CL.h contents
+/******************************************************************************/
+
+typedef struct _cl_platform_id * cl_platform_id;
+typedef struct _cl_device_id * cl_device_id;
+typedef struct _cl_context * cl_context;
+typedef struct _cl_command_queue * cl_command_queue;
+typedef struct _cl_mem * cl_mem;
+typedef struct _cl_program * cl_program;
+typedef struct _cl_kernel * cl_kernel;
+typedef struct _cl_event * cl_event;
+typedef struct _cl_sampler * cl_sampler;
+
+typedef cl_uint cl_bool; /* WARNING! Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */
+typedef cl_ulong cl_bitfield;
+typedef cl_bitfield cl_device_type;
+typedef cl_uint cl_platform_info;
+typedef cl_uint cl_device_info;
+typedef cl_bitfield cl_device_address_info;
+typedef cl_bitfield cl_device_fp_config;
+typedef cl_uint cl_device_mem_cache_type;
+typedef cl_uint cl_device_local_mem_type;
+typedef cl_bitfield cl_device_exec_capabilities;
+typedef cl_bitfield cl_command_queue_properties;
+
+typedef intptr_t cl_context_properties;
+typedef cl_uint cl_context_info;
+typedef cl_uint cl_command_queue_info;
+typedef cl_uint cl_channel_order;
+typedef cl_uint cl_channel_type;
+typedef cl_bitfield cl_mem_flags;
+typedef cl_uint cl_mem_object_type;
+typedef cl_uint cl_mem_info;
+typedef cl_uint cl_image_info;
+typedef cl_uint cl_addressing_mode;
+typedef cl_uint cl_filter_mode;
+typedef cl_uint cl_sampler_info;
+typedef cl_bitfield cl_map_flags;
+typedef cl_uint cl_program_info;
+typedef cl_uint cl_program_build_info;
+typedef cl_int cl_build_status;
+typedef cl_uint cl_kernel_info;
+typedef cl_uint cl_kernel_work_group_info;
+typedef cl_uint cl_event_info;
+typedef cl_uint cl_command_type;
+typedef cl_uint cl_profiling_info;
+
+typedef struct _cl_image_format {
+ cl_channel_order image_channel_order;
+ cl_channel_type image_channel_data_type;
+} cl_image_format;
+
+
+
+/******************************************************************************/
+
+// Error Codes
+#define CL_SUCCESS 0
+#define CL_DEVICE_NOT_FOUND -1
+#define CL_DEVICE_NOT_AVAILABLE -2
+#define CL_COMPILER_NOT_AVAILABLE -3
+#define CL_MEM_OBJECT_ALLOCATION_FAILURE -4
+#define CL_OUT_OF_RESOURCES -5
+#define CL_OUT_OF_HOST_MEMORY -6
+#define CL_PROFILING_INFO_NOT_AVAILABLE -7
+#define CL_MEM_COPY_OVERLAP -8
+#define CL_IMAGE_FORMAT_MISMATCH -9
+#define CL_IMAGE_FORMAT_NOT_SUPPORTED -10
+#define CL_BUILD_PROGRAM_FAILURE -11
+#define CL_MAP_FAILURE -12
+
+#define CL_INVALID_VALUE -30
+#define CL_INVALID_DEVICE_TYPE -31
+#define CL_INVALID_PLATFORM -32
+#define CL_INVALID_DEVICE -33
+#define CL_INVALID_CONTEXT -34
+#define CL_INVALID_QUEUE_PROPERTIES -35
+#define CL_INVALID_COMMAND_QUEUE -36
+#define CL_INVALID_HOST_PTR -37
+#define CL_INVALID_MEM_OBJECT -38
+#define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR -39
+#define CL_INVALID_IMAGE_SIZE -40
+#define CL_INVALID_SAMPLER -41
+#define CL_INVALID_BINARY -42
+#define CL_INVALID_BUILD_OPTIONS -43
+#define CL_INVALID_PROGRAM -44
+#define CL_INVALID_PROGRAM_EXECUTABLE -45
+#define CL_INVALID_KERNEL_NAME -46
+#define CL_INVALID_KERNEL_DEFINITION -47
+#define CL_INVALID_KERNEL -48
+#define CL_INVALID_ARG_INDEX -49
+#define CL_INVALID_ARG_VALUE -50
+#define CL_INVALID_ARG_SIZE -51
+#define CL_INVALID_KERNEL_ARGS -52
+#define CL_INVALID_WORK_DIMENSION -53
+#define CL_INVALID_WORK_GROUP_SIZE -54
+#define CL_INVALID_WORK_ITEM_SIZE -55
+#define CL_INVALID_GLOBAL_OFFSET -56
+#define CL_INVALID_EVENT_WAIT_LIST -57
+#define CL_INVALID_EVENT -58
+#define CL_INVALID_OPERATION -59
+#define CL_INVALID_GL_OBJECT -60
+#define CL_INVALID_BUFFER_SIZE -61
+#define CL_INVALID_MIP_LEVEL -62
+#define CL_INVALID_GLOBAL_WORK_SIZE -63
+
+// OpenCL Version
+#define CL_VERSION_1_0 1
+
+// cl_bool
+#define CL_FALSE 0
+#define CL_TRUE 1
+
+// cl_platform_info
+#define CL_PLATFORM_PROFILE 0x0900
+#define CL_PLATFORM_VERSION 0x0901
+#define CL_PLATFORM_NAME 0x0902
+#define CL_PLATFORM_VENDOR 0x0903
+#define CL_PLATFORM_EXTENSIONS 0x0904
+
+// cl_device_type - bitfield
+#define CL_DEVICE_TYPE_DEFAULT (1 << 0)
+#define CL_DEVICE_TYPE_CPU (1 << 1)
+#define CL_DEVICE_TYPE_GPU (1 << 2)
+#define CL_DEVICE_TYPE_ACCELERATOR (1 << 3)
+#define CL_DEVICE_TYPE_ALL 0xFFFFFFFF
+
+// cl_device_info
+#define CL_DEVICE_TYPE 0x1000
+#define CL_DEVICE_VENDOR_ID 0x1001
+#define CL_DEVICE_MAX_COMPUTE_UNITS 0x1002
+#define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS 0x1003
+#define CL_DEVICE_MAX_WORK_GROUP_SIZE 0x1004
+#define CL_DEVICE_MAX_WORK_ITEM_SIZES 0x1005
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 0x1006
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT 0x1007
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 0x1008
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG 0x1009
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT 0x100A
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE 0x100B
+#define CL_DEVICE_MAX_CLOCK_FREQUENCY 0x100C
+#define CL_DEVICE_ADDRESS_BITS 0x100D
+#define CL_DEVICE_MAX_READ_IMAGE_ARGS 0x100E
+#define CL_DEVICE_MAX_WRITE_IMAGE_ARGS 0x100F
+#define CL_DEVICE_MAX_MEM_ALLOC_SIZE 0x1010
+#define CL_DEVICE_IMAGE2D_MAX_WIDTH 0x1011
+#define CL_DEVICE_IMAGE2D_MAX_HEIGHT 0x1012
+#define CL_DEVICE_IMAGE3D_MAX_WIDTH 0x1013
+#define CL_DEVICE_IMAGE3D_MAX_HEIGHT 0x1014
+#define CL_DEVICE_IMAGE3D_MAX_DEPTH 0x1015
+#define CL_DEVICE_IMAGE_SUPPORT 0x1016
+#define CL_DEVICE_MAX_PARAMETER_SIZE 0x1017
+#define CL_DEVICE_MAX_SAMPLERS 0x1018
+#define CL_DEVICE_MEM_BASE_ADDR_ALIGN 0x1019
+#define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE 0x101A
+#define CL_DEVICE_SINGLE_FP_CONFIG 0x101B
+#define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE 0x101C
+#define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE 0x101D
+#define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE 0x101E
+#define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F
+#define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE 0x1020
+#define CL_DEVICE_MAX_CONSTANT_ARGS 0x1021
+#define CL_DEVICE_LOCAL_MEM_TYPE 0x1022
+#define CL_DEVICE_LOCAL_MEM_SIZE 0x1023
+#define CL_DEVICE_ERROR_CORRECTION_SUPPORT 0x1024
+#define CL_DEVICE_PROFILING_TIMER_RESOLUTION 0x1025
+#define CL_DEVICE_ENDIAN_LITTLE 0x1026
+#define CL_DEVICE_AVAILABLE 0x1027
+#define CL_DEVICE_COMPILER_AVAILABLE 0x1028
+#define CL_DEVICE_EXECUTION_CAPABILITIES 0x1029
+#define CL_DEVICE_QUEUE_PROPERTIES 0x102A
+#define CL_DEVICE_NAME 0x102B
+#define CL_DEVICE_VENDOR 0x102C
+#define CL_DRIVER_VERSION 0x102D
+#define CL_DEVICE_PROFILE 0x102E
+#define CL_DEVICE_VERSION 0x102F
+#define CL_DEVICE_EXTENSIONS 0x1030
+#define CL_DEVICE_PLATFORM 0x1031
+
+// cl_device_fp_config - bitfield
+#define CL_FP_DENORM (1 << 0)
+#define CL_FP_INF_NAN (1 << 1)
+#define CL_FP_ROUND_TO_NEAREST (1 << 2)
+#define CL_FP_ROUND_TO_ZERO (1 << 3)
+#define CL_FP_ROUND_TO_INF (1 << 4)
+#define CL_FP_FMA (1 << 5)
+
+// cl_device_mem_cache_type
+#define CL_NONE 0x0
+#define CL_READ_ONLY_CACHE 0x1
+#define CL_READ_WRITE_CACHE 0x2
+
+// cl_device_local_mem_type
+#define CL_LOCAL 0x1
+#define CL_GLOBAL 0x2
+
+// cl_device_exec_capabilities - bitfield
+#define CL_EXEC_KERNEL (1 << 0)
+#define CL_EXEC_NATIVE_KERNEL (1 << 1)
+
+// cl_command_queue_properties - bitfield
+#define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE (1 << 0)
+#define CL_QUEUE_PROFILING_ENABLE (1 << 1)
+
+// cl_context_info
+#define CL_CONTEXT_REFERENCE_COUNT 0x1080
+#define CL_CONTEXT_DEVICES 0x1081
+#define CL_CONTEXT_PROPERTIES 0x1082
+
+// cl_context_properties
+#define CL_CONTEXT_PLATFORM 0x1084
+
+// cl_command_queue_info
+#define CL_QUEUE_CONTEXT 0x1090
+#define CL_QUEUE_DEVICE 0x1091
+#define CL_QUEUE_REFERENCE_COUNT 0x1092
+#define CL_QUEUE_PROPERTIES 0x1093
+
+// cl_mem_flags - bitfield
+#define CL_MEM_READ_WRITE (1 << 0)
+#define CL_MEM_WRITE_ONLY (1 << 1)
+#define CL_MEM_READ_ONLY (1 << 2)
+#define CL_MEM_USE_HOST_PTR (1 << 3)
+#define CL_MEM_ALLOC_HOST_PTR (1 << 4)
+#define CL_MEM_COPY_HOST_PTR (1 << 5)
+
+// cl_channel_order
+#define CL_R 0x10B0
+#define CL_A 0x10B1
+#define CL_RG 0x10B2
+#define CL_RA 0x10B3
+#define CL_RGB 0x10B4
+#define CL_RGBA 0x10B5
+#define CL_BGRA 0x10B6
+#define CL_ARGB 0x10B7
+#define CL_INTENSITY 0x10B8
+#define CL_LUMINANCE 0x10B9
+
+// cl_channel_type
+#define CL_SNORM_INT8 0x10D0
+#define CL_SNORM_INT16 0x10D1
+#define CL_UNORM_INT8 0x10D2
+#define CL_UNORM_INT16 0x10D3
+#define CL_UNORM_SHORT_565 0x10D4
+#define CL_UNORM_SHORT_555 0x10D5
+#define CL_UNORM_INT_101010 0x10D6
+#define CL_SIGNED_INT8 0x10D7
+#define CL_SIGNED_INT16 0x10D8
+#define CL_SIGNED_INT32 0x10D9
+#define CL_UNSIGNED_INT8 0x10DA
+#define CL_UNSIGNED_INT16 0x10DB
+#define CL_UNSIGNED_INT32 0x10DC
+#define CL_HALF_FLOAT 0x10DD
+#define CL_FLOAT 0x10DE
+
+// cl_mem_object_type
+#define CL_MEM_OBJECT_BUFFER 0x10F0
+#define CL_MEM_OBJECT_IMAGE2D 0x10F1
+#define CL_MEM_OBJECT_IMAGE3D 0x10F2
+
+// cl_mem_info
+#define CL_MEM_TYPE 0x1100
+#define CL_MEM_FLAGS 0x1101
+#define CL_MEM_SIZE 0x1102
+#define CL_MEM_HOST_PTR 0x1103
+#define CL_MEM_MAP_COUNT 0x1104
+#define CL_MEM_REFERENCE_COUNT 0x1105
+#define CL_MEM_CONTEXT 0x1106
+
+// cl_image_info
+#define CL_IMAGE_FORMAT 0x1110
+#define CL_IMAGE_ELEMENT_SIZE 0x1111
+#define CL_IMAGE_ROW_PITCH 0x1112
+#define CL_IMAGE_SLICE_PITCH 0x1113
+#define CL_IMAGE_WIDTH 0x1114
+#define CL_IMAGE_HEIGHT 0x1115
+#define CL_IMAGE_DEPTH 0x1116
+
+// cl_addressing_mode
+#define CL_ADDRESS_NONE 0x1130
+#define CL_ADDRESS_CLAMP_TO_EDGE 0x1131
+#define CL_ADDRESS_CLAMP 0x1132
+#define CL_ADDRESS_REPEAT 0x1133
+
+// cl_filter_mode
+#define CL_FILTER_NEAREST 0x1140
+#define CL_FILTER_LINEAR 0x1141
+
+// cl_sampler_info
+#define CL_SAMPLER_REFERENCE_COUNT 0x1150
+#define CL_SAMPLER_CONTEXT 0x1151
+#define CL_SAMPLER_NORMALIZED_COORDS 0x1152
+#define CL_SAMPLER_ADDRESSING_MODE 0x1153
+#define CL_SAMPLER_FILTER_MODE 0x1154
+
+// cl_map_flags - bitfield
+#define CL_MAP_READ (1 << 0)
+#define CL_MAP_WRITE (1 << 1)
+
+// cl_program_info
+#define CL_PROGRAM_REFERENCE_COUNT 0x1160
+#define CL_PROGRAM_CONTEXT 0x1161
+#define CL_PROGRAM_NUM_DEVICES 0x1162
+#define CL_PROGRAM_DEVICES 0x1163
+#define CL_PROGRAM_SOURCE 0x1164
+#define CL_PROGRAM_BINARY_SIZES 0x1165
+#define CL_PROGRAM_BINARIES 0x1166
+
+// cl_program_build_info
+#define CL_PROGRAM_BUILD_STATUS 0x1181
+#define CL_PROGRAM_BUILD_OPTIONS 0x1182
+#define CL_PROGRAM_BUILD_LOG 0x1183
+
+// cl_build_status
+#define CL_BUILD_SUCCESS 0
+#define CL_BUILD_NONE -1
+#define CL_BUILD_ERROR -2
+#define CL_BUILD_IN_PROGRESS -3
+
+// cl_kernel_info
+#define CL_KERNEL_FUNCTION_NAME 0x1190
+#define CL_KERNEL_NUM_ARGS 0x1191
+#define CL_KERNEL_REFERENCE_COUNT 0x1192
+#define CL_KERNEL_CONTEXT 0x1193
+#define CL_KERNEL_PROGRAM 0x1194
+
+// cl_kernel_work_group_info
+#define CL_KERNEL_WORK_GROUP_SIZE 0x11B0
+#define CL_KERNEL_COMPILE_WORK_GROUP_SIZE 0x11B1
+#define CL_KERNEL_LOCAL_MEM_SIZE 0x11B2
+
+// cl_event_info
+#define CL_EVENT_COMMAND_QUEUE 0x11D0
+#define CL_EVENT_COMMAND_TYPE 0x11D1
+#define CL_EVENT_REFERENCE_COUNT 0x11D2
+#define CL_EVENT_COMMAND_EXECUTION_STATUS 0x11D3
+
+// cl_command_type
+#define CL_COMMAND_NDRANGE_KERNEL 0x11F0
+#define CL_COMMAND_TASK 0x11F1
+#define CL_COMMAND_NATIVE_KERNEL 0x11F2
+#define CL_COMMAND_READ_BUFFER 0x11F3
+#define CL_COMMAND_WRITE_BUFFER 0x11F4
+#define CL_COMMAND_COPY_BUFFER 0x11F5
+#define CL_COMMAND_READ_IMAGE 0x11F6
+#define CL_COMMAND_WRITE_IMAGE 0x11F7
+#define CL_COMMAND_COPY_IMAGE 0x11F8
+#define CL_COMMAND_COPY_IMAGE_TO_BUFFER 0x11F9
+#define CL_COMMAND_COPY_BUFFER_TO_IMAGE 0x11FA
+#define CL_COMMAND_MAP_BUFFER 0x11FB
+#define CL_COMMAND_MAP_IMAGE 0x11FC
+#define CL_COMMAND_UNMAP_MEM_OBJECT 0x11FD
+#define CL_COMMAND_MARKER 0x11FE
+#define CL_COMMAND_ACQUIRE_GL_OBJECTS 0x11FF
+#define CL_COMMAND_RELEASE_GL_OBJECTS 0x1200
+
+// command execution status
+#define CL_COMPLETE 0x0
+#define CL_RUNNING 0x1
+#define CL_SUBMITTED 0x2
+#define CL_QUEUED 0x3
+
+// cl_profiling_info
+#define CL_PROFILING_COMMAND_QUEUED 0x1280
+#define CL_PROFILING_COMMAND_SUBMIT 0x1281
+#define CL_PROFILING_COMMAND_START 0x1282
+#define CL_PROFILING_COMMAND_END 0x1283
+
+/********************************************************************************************************/
+
+/********************************************************************************************************/
+
+// Function signature typedef's
+
+// Platform API
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETPLATFORMIDS)(cl_uint /* num_entries */,
+ cl_platform_id * /* platforms */,
+ cl_uint * /* num_platforms */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETPLATFORMINFO)(cl_platform_id /* platform */,
+ cl_platform_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Device APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETDEVICEIDS)(cl_platform_id /* platform */,
+ cl_device_type /* device_type */,
+ cl_uint /* num_entries */,
+ cl_device_id * /* devices */,
+ cl_uint * /* num_devices */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETDEVICEINFO)(cl_device_id /* device */,
+ cl_device_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Context APIs
+typedef CL_API_ENTRY cl_context (CL_API_CALL *
+PFNCLCREATECONTEXT)(const cl_context_properties * /* properties */,
+ cl_uint /* num_devices */,
+ const cl_device_id * /* devices */,
+ void (*pfn_notify)(const char *, const void *, size_t, void *) /* pfn_notify */,
+ void * /* user_data */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_context (CL_API_CALL *
+PFNCLCREATECONTEXTFROMTYPE)(const cl_context_properties * /* properties */,
+ cl_device_type /* device_type */,
+ void (*pfn_notify)(const char *, const void *, size_t, void *) /* pfn_notify */,
+ void * /* user_data */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINCONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASECONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETCONTEXTINFO)(cl_context /* context */,
+ cl_context_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Command Queue APIs
+typedef CL_API_ENTRY cl_command_queue (CL_API_CALL *
+PFNCLCREATECOMMANDQUEUE)(cl_context /* context */,
+ cl_device_id /* device */,
+ cl_command_queue_properties /* properties */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINCOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASECOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETCOMMANDQUEUEINFO)(cl_command_queue /* command_queue */,
+ cl_command_queue_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLSETCOMMANDQUEUEPROPERTY)(cl_command_queue /* command_queue */,
+ cl_command_queue_properties /* properties */,
+ cl_bool /* enable */,
+ cl_command_queue_properties * /* old_properties */) CL_API_SUFFIX__VERSION_1_0;
+
+// Memory Object APIs
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *
+PFNCLCREATEBUFFER)(cl_context /* context */,
+ cl_mem_flags /* flags */,
+ size_t /* size */,
+ void * /* host_ptr */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *
+PFNCLCREATEIMAGE2D)(cl_context /* context */,
+ cl_mem_flags /* flags */,
+ const cl_image_format * /* image_format */,
+ size_t /* image_width */,
+ size_t /* image_height */,
+ size_t /* image_row_pitch */,
+ void * /* host_ptr */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *
+PFNCLCREATEIMAGE3D)(cl_context /* context */,
+ cl_mem_flags /* flags */,
+ const cl_image_format * /* image_format */,
+ size_t /* image_width */,
+ size_t /* image_height */,
+ size_t /* image_depth */,
+ size_t /* image_row_pitch */,
+ size_t /* image_slice_pitch */,
+ void * /* host_ptr */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASEMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETSUPPORTEDIMAGEFORMATS)(cl_context /* context */,
+ cl_mem_flags /* flags */,
+ cl_mem_object_type /* image_type */,
+ cl_uint /* num_entries */,
+ cl_image_format * /* image_formats */,
+ cl_uint * /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETMEMOBJECTINFO)(cl_mem /* memobj */,
+ cl_mem_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETIMAGEINFO)(cl_mem /* image */,
+ cl_image_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Sampler APIs
+typedef CL_API_ENTRY cl_sampler (CL_API_CALL *
+PFNCLCREATESAMPLER)(cl_context /* context */,
+ cl_bool /* normalized_coords */,
+ cl_addressing_mode /* addressing_mode */,
+ cl_filter_mode /* filter_mode */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINSAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASESAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETSAMPLERINFO)(cl_sampler /* sampler */,
+ cl_sampler_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Program Object APIs
+typedef CL_API_ENTRY cl_program (CL_API_CALL *
+PFNCLCREATEPROGRAMWITHSOURCE)(cl_context /* context */,
+ cl_uint /* count */,
+ const char ** /* strings */,
+ const size_t * /* lengths */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_program (CL_API_CALL *
+PFNCLCREATEPROGRAMWITHBINARY)(cl_context /* context */,
+ cl_uint /* num_devices */,
+ const cl_device_id * /* device_list */,
+ const size_t * /* lengths */,
+ const unsigned char ** /* binaries */,
+ cl_int * /* binary_status */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASEPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLBUILDPROGRAM)(cl_program /* program */,
+ cl_uint /* num_devices */,
+ const cl_device_id * /* device_list */,
+ const char * /* options */,
+ void (*pfn_notify)(cl_program /* program */, void * /* user_data */),
+ void * /* user_data */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLUNLOADCOMPILER)(void) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETPROGRAMINFO)(cl_program /* program */,
+ cl_program_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETPROGRAMBUILDINFO)(cl_program /* program */,
+ cl_device_id /* device */,
+ cl_program_build_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Kernel Object APIs
+typedef CL_API_ENTRY cl_kernel (CL_API_CALL *
+PFNCLCREATEKERNEL)(cl_program /* program */,
+ const char * /* kernel_name */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLCREATEKERNELSINPROGRAM)(cl_program /* program */,
+ cl_uint /* num_kernels */,
+ cl_kernel * /* kernels */,
+ cl_uint * /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASEKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLSETKERNELARG)(cl_kernel /* kernel */,
+ cl_uint /* arg_index */,
+ size_t /* arg_size */,
+ const void * /* arg_value */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETKERNELINFO)(cl_kernel /* kernel */,
+ cl_kernel_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETKERNELWORKGROUPINFO)(cl_kernel /* kernel */,
+ cl_device_id /* device */,
+ cl_kernel_work_group_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Event Object APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLWAITFOREVENTS)(cl_uint /* num_events */,
+ const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETEVENTINFO)(cl_event /* event */,
+ cl_event_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRETAINEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLRELEASEEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+// Profiling APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLGETEVENTPROFILINGINFO)(cl_event /* event */,
+ cl_profiling_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+// Flush and Finish APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLFLUSH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLFINISH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
+
+// Enqueued Commands APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEREADBUFFER)(cl_command_queue /* command_queue */,
+ cl_mem /* buffer */,
+ cl_bool /* blocking_read */,
+ size_t /* offset */,
+ size_t /* cb */,
+ void * /* ptr */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEWRITEBUFFER)(cl_command_queue /* command_queue */,
+ cl_mem /* buffer */,
+ cl_bool /* blocking_write */,
+ size_t /* offset */,
+ size_t /* cb */,
+ const void * /* ptr */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUECOPYBUFFER)(cl_command_queue /* command_queue */,
+ cl_mem /* src_buffer */,
+ cl_mem /* dst_buffer */,
+ size_t /* src_offset */,
+ size_t /* dst_offset */,
+ size_t /* cb */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEREADIMAGE)(cl_command_queue /* command_queue */,
+ cl_mem /* image */,
+ cl_bool /* blocking_read */,
+ const size_t * /* origin[3] */,
+ const size_t * /* region[3] */,
+ size_t /* row_pitch */,
+ size_t /* slice_pitch */,
+ void * /* ptr */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEWRITEIMAGE)(cl_command_queue /* command_queue */,
+ cl_mem /* image */,
+ cl_bool /* blocking_write */,
+ const size_t * /* origin[3] */,
+ const size_t * /* region[3] */,
+ size_t /* input_row_pitch */,
+ size_t /* input_slice_pitch */,
+ const void * /* ptr */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUECOPYIMAGE)(cl_command_queue /* command_queue */,
+ cl_mem /* src_image */,
+ cl_mem /* dst_image */,
+ const size_t * /* src_origin[3] */,
+ const size_t * /* dst_origin[3] */,
+ const size_t * /* region[3] */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUECOPYIMAGETOBUFFER)(cl_command_queue /* command_queue */,
+ cl_mem /* src_image */,
+ cl_mem /* dst_buffer */,
+ const size_t * /* src_origin[3] */,
+ const size_t * /* region[3] */,
+ size_t /* dst_offset */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUECOPYBUFFERTOIMAGE)(cl_command_queue /* command_queue */,
+ cl_mem /* src_buffer */,
+ cl_mem /* dst_image */,
+ size_t /* src_offset */,
+ const size_t * /* dst_origin[3] */,
+ const size_t * /* region[3] */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *
+PFNCLENQUEUEMAPBUFFER)(cl_command_queue /* command_queue */,
+ cl_mem /* buffer */,
+ cl_bool /* blocking_map */,
+ cl_map_flags /* map_flags */,
+ size_t /* offset */,
+ size_t /* cb */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *
+PFNCLENQUEUEMAPIMAGE)(cl_command_queue /* command_queue */,
+ cl_mem /* image */,
+ cl_bool /* blocking_map */,
+ cl_map_flags /* map_flags */,
+ const size_t * /* origin[3] */,
+ const size_t * /* region[3] */,
+ size_t * /* image_row_pitch */,
+ size_t * /* image_slice_pitch */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEUNMAPMEMOBJECT)(cl_command_queue /* command_queue */,
+ cl_mem /* memobj */,
+ void * /* mapped_ptr */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUENDRANGEKERNEL)(cl_command_queue /* command_queue */,
+ cl_kernel /* kernel */,
+ cl_uint /* work_dim */,
+ const size_t * /* global_work_offset */,
+ const size_t * /* global_work_size */,
+ const size_t * /* local_work_size */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUETASK)(cl_command_queue /* command_queue */,
+ cl_kernel /* kernel */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUENATIVEKERNEL)(cl_command_queue /* command_queue */,
+ void (*user_func)(void *),
+ void * /* args */,
+ size_t /* cb_args */,
+ cl_uint /* num_mem_objects */,
+ const cl_mem * /* mem_list */,
+ const void ** /* args_mem_loc */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEMARKER)(cl_command_queue /* command_queue */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEWAITFOREVENTS)(cl_command_queue /* command_queue */,
+ cl_uint /* num_events */,
+ const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *
+PFNCLENQUEUEBARRIER)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
+
+// Extension function access
+//
+// Returns the extension function address for the given function name,
+// or NULL if a valid function can not be found. The client must
+// check to make sure the address is not NULL, before using or
+// calling the returned function address.
+//
+typedef CL_API_ENTRY void * (CL_API_CALL * PFNCLGETEXTENSIONFUNCTIONADDRESS)(const char * /* func_name */) CL_API_SUFFIX__VERSION_1_0;
+
+
+#define CLEW_STATIC
+
+#ifdef CLEW_STATIC
+# define CLEWAPI extern
+#else
+# ifdef CLEW_BUILD
+# define CLEWAPI extern __declspec(dllexport)
+# else
+# define CLEWAPI extern __declspec(dllimport)
+# endif
+#endif
+
+#if defined(_WIN32)
+#define CLEW_FUN_EXPORT extern
+#else
+#define CLEW_FUN_EXPORT CLEWAPI
+#endif
+
+#define CLEW_GET_FUN(x) x
+
+
+// Variables holding function entry points
+CLEW_FUN_EXPORT PFNCLGETPLATFORMIDS __oclGetPlatformIDs ;
+CLEW_FUN_EXPORT PFNCLGETPLATFORMINFO __oclGetPlatformInfo ;
+CLEW_FUN_EXPORT PFNCLGETDEVICEIDS __oclGetDeviceIDs ;
+CLEW_FUN_EXPORT PFNCLGETDEVICEINFO __oclGetDeviceInfo ;
+CLEW_FUN_EXPORT PFNCLCREATECONTEXT __oclCreateContext ;
+CLEW_FUN_EXPORT PFNCLCREATECONTEXTFROMTYPE __oclCreateContextFromType ;
+CLEW_FUN_EXPORT PFNCLRETAINCONTEXT __oclRetainContext ;
+CLEW_FUN_EXPORT PFNCLRELEASECONTEXT __oclReleaseContext ;
+CLEW_FUN_EXPORT PFNCLGETCONTEXTINFO __oclGetContextInfo ;
+CLEW_FUN_EXPORT PFNCLCREATECOMMANDQUEUE __oclCreateCommandQueue ;
+CLEW_FUN_EXPORT PFNCLRETAINCOMMANDQUEUE __oclRetainCommandQueue ;
+CLEW_FUN_EXPORT PFNCLRELEASECOMMANDQUEUE __oclReleaseCommandQueue ;
+CLEW_FUN_EXPORT PFNCLGETCOMMANDQUEUEINFO __oclGetCommandQueueInfo ;
+CLEW_FUN_EXPORT PFNCLSETCOMMANDQUEUEPROPERTY __oclSetCommandQueueProperty ;
+CLEW_FUN_EXPORT PFNCLCREATEBUFFER __oclCreateBuffer ;
+CLEW_FUN_EXPORT PFNCLCREATEIMAGE2D __oclCreateImage2D ;
+CLEW_FUN_EXPORT PFNCLCREATEIMAGE3D __oclCreateImage3D ;
+CLEW_FUN_EXPORT PFNCLRETAINMEMOBJECT __oclRetainMemObject ;
+CLEW_FUN_EXPORT PFNCLRELEASEMEMOBJECT __oclReleaseMemObject ;
+CLEW_FUN_EXPORT PFNCLGETSUPPORTEDIMAGEFORMATS __oclGetSupportedImageFormats ;
+CLEW_FUN_EXPORT PFNCLGETMEMOBJECTINFO __oclGetMemObjectInfo ;
+CLEW_FUN_EXPORT PFNCLGETIMAGEINFO __oclGetImageInfo ;
+CLEW_FUN_EXPORT PFNCLCREATESAMPLER __oclCreateSampler ;
+CLEW_FUN_EXPORT PFNCLRETAINSAMPLER __oclRetainSampler ;
+CLEW_FUN_EXPORT PFNCLRELEASESAMPLER __oclReleaseSampler ;
+CLEW_FUN_EXPORT PFNCLGETSAMPLERINFO __oclGetSamplerInfo ;
+CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHSOURCE __oclCreateProgramWithSource ;
+CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHBINARY __oclCreateProgramWithBinary ;
+CLEW_FUN_EXPORT PFNCLRETAINPROGRAM __oclRetainProgram ;
+CLEW_FUN_EXPORT PFNCLRELEASEPROGRAM __oclReleaseProgram ;
+CLEW_FUN_EXPORT PFNCLBUILDPROGRAM __oclBuildProgram ;
+CLEW_FUN_EXPORT PFNCLUNLOADCOMPILER __oclUnloadCompiler ;
+CLEW_FUN_EXPORT PFNCLGETPROGRAMINFO __oclGetProgramInfo ;
+CLEW_FUN_EXPORT PFNCLGETPROGRAMBUILDINFO __oclGetProgramBuildInfo ;
+CLEW_FUN_EXPORT PFNCLCREATEKERNEL __oclCreateKernel ;
+CLEW_FUN_EXPORT PFNCLCREATEKERNELSINPROGRAM __oclCreateKernelsInProgram ;
+CLEW_FUN_EXPORT PFNCLRETAINKERNEL __oclRetainKernel ;
+CLEW_FUN_EXPORT PFNCLRELEASEKERNEL __oclReleaseKernel ;
+CLEW_FUN_EXPORT PFNCLSETKERNELARG __oclSetKernelArg ;
+CLEW_FUN_EXPORT PFNCLGETKERNELINFO __oclGetKernelInfo ;
+CLEW_FUN_EXPORT PFNCLGETKERNELWORKGROUPINFO __oclGetKernelWorkGroupInfo ;
+CLEW_FUN_EXPORT PFNCLWAITFOREVENTS __oclWaitForEvents ;
+CLEW_FUN_EXPORT PFNCLGETEVENTINFO __oclGetEventInfo ;
+CLEW_FUN_EXPORT PFNCLRETAINEVENT __oclRetainEvent ;
+CLEW_FUN_EXPORT PFNCLRELEASEEVENT __oclReleaseEvent ;
+CLEW_FUN_EXPORT PFNCLGETEVENTPROFILINGINFO __oclGetEventProfilingInfo ;
+CLEW_FUN_EXPORT PFNCLFLUSH __oclFlush ;
+CLEW_FUN_EXPORT PFNCLFINISH __oclFinish ;
+CLEW_FUN_EXPORT PFNCLENQUEUEREADBUFFER __oclEnqueueReadBuffer ;
+CLEW_FUN_EXPORT PFNCLENQUEUEWRITEBUFFER __oclEnqueueWriteBuffer ;
+CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFER __oclEnqueueCopyBuffer ;
+CLEW_FUN_EXPORT PFNCLENQUEUEREADIMAGE __oclEnqueueReadImage ;
+CLEW_FUN_EXPORT PFNCLENQUEUEWRITEIMAGE __oclEnqueueWriteImage ;
+CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGE __oclEnqueueCopyImage ;
+CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGETOBUFFER __oclEnqueueCopyImageToBuffer ;
+CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFERTOIMAGE __oclEnqueueCopyBufferToImage ;
+CLEW_FUN_EXPORT PFNCLENQUEUEMAPBUFFER __oclEnqueueMapBuffer ;
+CLEW_FUN_EXPORT PFNCLENQUEUEMAPIMAGE __oclEnqueueMapImage ;
+CLEW_FUN_EXPORT PFNCLENQUEUEUNMAPMEMOBJECT __oclEnqueueUnmapMemObject ;
+CLEW_FUN_EXPORT PFNCLENQUEUENDRANGEKERNEL __oclEnqueueNDRangeKernel ;
+CLEW_FUN_EXPORT PFNCLENQUEUETASK __oclEnqueueTask ;
+CLEW_FUN_EXPORT PFNCLENQUEUENATIVEKERNEL __oclEnqueueNativeKernel ;
+CLEW_FUN_EXPORT PFNCLENQUEUEMARKER __oclEnqueueMarker ;
+CLEW_FUN_EXPORT PFNCLENQUEUEWAITFOREVENTS __oclEnqueueWaitForEvents ;
+CLEW_FUN_EXPORT PFNCLENQUEUEBARRIER __oclEnqueueBarrier ;
+CLEW_FUN_EXPORT PFNCLGETEXTENSIONFUNCTIONADDRESS __oclGetExtensionFunctionAddress ;
+
+
+#define clGetPlatformIDs CLEW_GET_FUN(__oclGetPlatformIDs )
+#define clGetPlatformInfo CLEW_GET_FUN(__oclGetPlatformInfo )
+#define clGetDeviceIDs CLEW_GET_FUN(__oclGetDeviceIDs )
+#define clGetDeviceInfo CLEW_GET_FUN(__oclGetDeviceInfo )
+#define clCreateContext CLEW_GET_FUN(__oclCreateContext )
+#define clCreateContextFromType CLEW_GET_FUN(__oclCreateContextFromType )
+#define clRetainContext CLEW_GET_FUN(__oclRetainContext )
+#define clReleaseContext CLEW_GET_FUN(__oclReleaseContext )
+#define clGetContextInfo CLEW_GET_FUN(__oclGetContextInfo )
+#define clCreateCommandQueue CLEW_GET_FUN(__oclCreateCommandQueue )
+#define clRetainCommandQueue CLEW_GET_FUN(__oclRetainCommandQueue )
+#define clReleaseCommandQueue CLEW_GET_FUN(__oclReleaseCommandQueue )
+#define clGetCommandQueueInfo CLEW_GET_FUN(__oclGetCommandQueueInfo )
+#define clSetCommandQueueProperty CLEW_GET_FUN(__oclSetCommandQueueProperty )
+#define clCreateBuffer CLEW_GET_FUN(__oclCreateBuffer )
+#define clCreateImage2D CLEW_GET_FUN(__oclCreateImage2D )
+#define clCreateImage3D CLEW_GET_FUN(__oclCreateImage3D )
+#define clRetainMemObject CLEW_GET_FUN(__oclRetainMemObject )
+#define clReleaseMemObject CLEW_GET_FUN(__oclReleaseMemObject )
+#define clGetSupportedImageFormats CLEW_GET_FUN(__oclGetSupportedImageFormats )
+#define clGetMemObjectInfo CLEW_GET_FUN(__oclGetMemObjectInfo )
+#define clGetImageInfo CLEW_GET_FUN(__oclGetImageInfo )
+#define clCreateSampler CLEW_GET_FUN(__oclCreateSampler )
+#define clRetainSampler CLEW_GET_FUN(__oclRetainSampler )
+#define clReleaseSampler CLEW_GET_FUN(__oclReleaseSampler )
+#define clGetSamplerInfo CLEW_GET_FUN(__oclGetSamplerInfo )
+#define clCreateProgramWithSource CLEW_GET_FUN(__oclCreateProgramWithSource )
+#define clCreateProgramWithBinary CLEW_GET_FUN(__oclCreateProgramWithBinary )
+#define clRetainProgram CLEW_GET_FUN(__oclRetainProgram )
+#define clReleaseProgram CLEW_GET_FUN(__oclReleaseProgram )
+#define clBuildProgram CLEW_GET_FUN(__oclBuildProgram )
+#define clUnloadCompiler CLEW_GET_FUN(__oclUnloadCompiler )
+#define clGetProgramInfo CLEW_GET_FUN(__oclGetProgramInfo )
+#define clGetProgramBuildInfo CLEW_GET_FUN(__oclGetProgramBuildInfo )
+#define clCreateKernel CLEW_GET_FUN(__oclCreateKernel )
+#define clCreateKernelsInProgram CLEW_GET_FUN(__oclCreateKernelsInProgram )
+#define clRetainKernel CLEW_GET_FUN(__oclRetainKernel )
+#define clReleaseKernel CLEW_GET_FUN(__oclReleaseKernel )
+#define clSetKernelArg CLEW_GET_FUN(__oclSetKernelArg )
+#define clGetKernelInfo CLEW_GET_FUN(__oclGetKernelInfo )
+#define clGetKernelWorkGroupInfo CLEW_GET_FUN(__oclGetKernelWorkGroupInfo )
+#define clWaitForEvents CLEW_GET_FUN(__oclWaitForEvents )
+#define clGetEventInfo CLEW_GET_FUN(__oclGetEventInfo )
+#define clRetainEvent CLEW_GET_FUN(__oclRetainEvent )
+#define clReleaseEvent CLEW_GET_FUN(__oclReleaseEvent )
+#define clGetEventProfilingInfo CLEW_GET_FUN(__oclGetEventProfilingInfo )
+#define clFlush CLEW_GET_FUN(__oclFlush )
+#define clFinish CLEW_GET_FUN(__oclFinish )
+#define clEnqueueReadBuffer CLEW_GET_FUN(__oclEnqueueReadBuffer )
+#define clEnqueueWriteBuffer CLEW_GET_FUN(__oclEnqueueWriteBuffer )
+#define clEnqueueCopyBuffer CLEW_GET_FUN(__oclEnqueueCopyBuffer )
+#define clEnqueueReadImage CLEW_GET_FUN(__oclEnqueueReadImage )
+#define clEnqueueWriteImage CLEW_GET_FUN(__oclEnqueueWriteImage )
+#define clEnqueueCopyImage CLEW_GET_FUN(__oclEnqueueCopyImage )
+#define clEnqueueCopyImageToBuffer CLEW_GET_FUN(__oclEnqueueCopyImageToBuffer )
+#define clEnqueueCopyBufferToImage CLEW_GET_FUN(__oclEnqueueCopyBufferToImage )
+#define clEnqueueMapBuffer CLEW_GET_FUN(__oclEnqueueMapBuffer )
+#define clEnqueueMapImage CLEW_GET_FUN(__oclEnqueueMapImage )
+#define clEnqueueUnmapMemObject CLEW_GET_FUN(__oclEnqueueUnmapMemObject )
+#define clEnqueueNDRangeKernel CLEW_GET_FUN(__oclEnqueueNDRangeKernel )
+#define clEnqueueTask CLEW_GET_FUN(__oclEnqueueTask )
+#define clEnqueueNativeKernel CLEW_GET_FUN(__oclEnqueueNativeKernel )
+#define clEnqueueMarker CLEW_GET_FUN(__oclEnqueueMarker )
+#define clEnqueueWaitForEvents CLEW_GET_FUN(__oclEnqueueWaitForEvents )
+#define clEnqueueBarrier CLEW_GET_FUN(__oclEnqueueBarrier )
+#define clGetExtensionFunctionAddress CLEW_GET_FUN(__oclGetExtensionFunctionAddress )
+
+#endif // CLCC_GENERATE_DOCUMENTATION
+
+#define CLEW_SUCCESS 0 //!< Success error code
+#define CLEW_ERROR_OPEN_FAILED -1 //!< Error code for failing to open the dynamic library
+#define CLEW_ERROR_ATEXIT_FAILED -2 //!< Error code for failing to queue the closing of the dynamic library to atexit()
+
+//! \brief Load OpenCL dynamic library and set function entry points
+int clewInit (const char*);
+//! \brief Convert an OpenCL error code to its string equivalent
+const char* clewErrorString (cl_int error);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // CLCC_CLEW_HPP_INCLUDED
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index f3f05e93930..b9d4c1ae94f 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -223,6 +223,7 @@ void BPY_python_start(int argc, const char **argv)
{
#ifndef WITH_PYTHON_MODULE
PyThreadState *py_tstate = NULL;
+ const char *py_path_bundle = BLI_get_folder(BLENDER_SYSTEM_PYTHON, NULL);
/* not essential but nice to set our name */
static wchar_t program_path_wchar[FILE_MAX]; /* python holds a reference */
@@ -233,7 +234,7 @@ void BPY_python_start(int argc, const char **argv)
PyImport_ExtendInittab(bpy_internal_modules);
/* allow to use our own included python */
- PyC_SetHomePath(BLI_get_folder(BLENDER_SYSTEM_PYTHON, NULL));
+ PyC_SetHomePath(py_path_bundle);
/* without this the sys.stdout may be set to 'ascii'
* (it is on my system at least), where printing unicode values will raise
@@ -245,7 +246,11 @@ void BPY_python_start(int argc, const char **argv)
/* Python 3.2 now looks for '2.xx/python/include/python3.2d/pyconfig.h' to
* parse from the 'sysconfig' module which is used by 'site',
* so for now disable site. alternatively we could copy the file. */
- Py_NoSiteFlag = 1;
+ if (py_path_bundle) {
+ Py_NoSiteFlag = 1;
+ }
+
+ Py_FrozenFlag = 1;
Py_Initialize();
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 6c1e811aae0..e9b6f15033c 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -176,13 +176,13 @@ static GHash *id_weakref_pool_get(ID *id)
}
else {
/* first time, allocate pool */
- id_weakref_pool = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "rna_global_pool");
+ id_weakref_pool = BLI_ghash_ptr_new("rna_global_pool");
weakinfo_hash = NULL;
}
if (weakinfo_hash == NULL) {
/* we're using a ghash as a set, could use libHX's HXMAP_SINGULAR but would be an extra dep. */
- weakinfo_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "rna_id");
+ weakinfo_hash = BLI_ghash_ptr_new("rna_id");
BLI_ghash_insert(id_weakref_pool, (void *)id, weakinfo_hash);
}
@@ -986,7 +986,7 @@ static PyObject *pyrna_prop_repr(BPy_PropertyRNA *self)
ret = PyUnicode_FromFormat("bpy.data.%s[%R].%s",
BKE_idcode_to_name_plural(GS(id->name)),
tmp_str,
- path);
+ path);
}
MEM_freeN((void *)path);
diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c
index 13532b24e55..f7114115a91 100644
--- a/source/blender/python/intern/bpy_rna_callback.c
+++ b/source/blender/python/intern/bpy_rna_callback.c
@@ -107,7 +107,7 @@ PyObject *pyrna_callback_add(BPy_StructRNA *self, PyObject *args)
Py_INCREF(args);
}
else {
- PyErr_SetString(PyExc_TypeError, "callback_add(): type does not suppport callbacks");
+ PyErr_SetString(PyExc_TypeError, "callback_add(): type does not support callbacks");
return NULL;
}
diff --git a/source/blender/quicktime/apple/quicktime_export.c b/source/blender/quicktime/apple/quicktime_export.c
index e25fc0f04bd..a071c0be611 100644
--- a/source/blender/quicktime/apple/quicktime_export.c
+++ b/source/blender/quicktime/apple/quicktime_export.c
@@ -79,52 +79,52 @@
#include <sys/stat.h> /* file permissions */
#endif /* __APPLE__ */
-#define kMyCreatorType FOUR_CHAR_CODE('TVOD')
-#define kTrackStart 0
-#define kMediaStart 0
-
-static void QT_StartAddVideoSamplesToMedia (const Rect *trackFrame, int rectx, int recty, struct ReportList *reports);
-static void QT_DoAddVideoSamplesToMedia (int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
-static void QT_EndAddVideoSamplesToMedia (void);
-static void QT_CreateMyVideoTrack (int rectx, int recty, struct ReportList *reports);
-static void QT_EndCreateMyVideoTrack (struct ReportList *reports);
+#define kMyCreatorType FOUR_CHAR_CODE('TVOD')
+#define kTrackStart 0
+#define kMediaStart 0
+
+static void QT_StartAddVideoSamplesToMedia(const Rect *trackFrame, int rectx, int recty, struct ReportList *reports);
+static void QT_DoAddVideoSamplesToMedia(int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
+static void QT_EndAddVideoSamplesToMedia(void);
+static void QT_CreateMyVideoTrack(int rectx, int recty, struct ReportList *reports);
+static void QT_EndCreateMyVideoTrack(struct ReportList *reports);
static void check_renderbutton_framerate(struct RenderData *rd, struct ReportList *reports);
static int get_qtcodec_settings(struct RenderData *rd, struct ReportList *reports);
typedef struct QuicktimeExport {
- FSSpec theSpec;
- short resRefNum;
- Str255 qtfilename;
+ FSSpec theSpec;
+ short resRefNum;
+ Str255 qtfilename;
- Media theMedia;
- Movie theMovie;
- Track theTrack;
+ Media theMedia;
+ Movie theMovie;
+ Track theTrack;
- GWorldPtr theGWorld;
- PixMapHandle thePixMap;
- ImageDescription **anImageDescription;
+ GWorldPtr theGWorld;
+ PixMapHandle thePixMap;
+ ImageDescription **anImageDescription;
- ImBuf *ibuf; //imagedata for Quicktime's Gworld
- ImBuf *ibuf2; //copy of renderdata, to be Y-flipped
+ ImBuf *ibuf; //imagedata for Quicktime's Gworld
+ ImBuf *ibuf2; //copy of renderdata, to be Y-flipped
} QuicktimeExport;
typedef struct QuicktimeComponentData {
- ComponentInstance theComponent;
+ ComponentInstance theComponent;
SCTemporalSettings gTemporalSettings;
SCSpatialSettings gSpatialSettings;
SCDataRateSettings aDataRateSetting;
- TimeValue duration;
- long kVideoTimeScale;
+ TimeValue duration;
+ long kVideoTimeScale;
} QuicktimeComponentData;
static struct QuicktimeExport *qtexport;
static struct QuicktimeComponentData *qtdata;
-static int sframe;
+static int sframe;
/* RNA functions */
@@ -141,7 +141,8 @@ static QuicktimeCodecTypeDesc qtVideoCodecList[] = {
{kMPEG4VisualCodecType, 10, "MPEG4"},
{kH263CodecType, 11, "H.263"},
{kH264CodecType, 12, "H.264"},
- {0, 0, NULL}};
+ {0, 0, NULL}
+};
static int qtVideoCodecCount = 12;
@@ -150,9 +151,9 @@ int quicktime_get_num_videocodecs()
return qtVideoCodecCount;
}
-QuicktimeCodecTypeDesc* quicktime_get_videocodecType_desc(int indexValue)
+QuicktimeCodecTypeDesc *quicktime_get_videocodecType_desc(int indexValue)
{
- if ((indexValue>=0) && (indexValue < qtVideoCodecCount))
+ if ((indexValue >= 0) && (indexValue < qtVideoCodecCount))
return &qtVideoCodecList[indexValue];
else
return NULL;
@@ -161,7 +162,7 @@ QuicktimeCodecTypeDesc* quicktime_get_videocodecType_desc(int indexValue)
int quicktime_rnatmpvalue_from_videocodectype(int codecType)
{
int i;
- for (i=0;i<qtVideoCodecCount;i++) {
+ for (i = 0; i < qtVideoCodecCount; i++) {
if (qtVideoCodecList[i].codecType == codecType)
return qtVideoCodecList[i].rnatmpvalue;
}
@@ -172,7 +173,7 @@ int quicktime_rnatmpvalue_from_videocodectype(int codecType)
int quicktime_videocodecType_from_rnatmpvalue(int rnatmpvalue)
{
int i;
- for (i=0;i<qtVideoCodecCount;i++) {
+ for (i = 0; i < qtVideoCodecCount; i++) {
if (qtVideoCodecList[i].rnatmpvalue == rnatmpvalue)
return qtVideoCodecList[i].codecType;
}
@@ -192,12 +193,12 @@ static void CheckError(OSErr err, char *msg, ReportList *reports)
static OSErr QT_SaveCodecSettingsToScene(RenderData *rd, ReportList *reports)
{
- QTAtomContainer myContainer = NULL;
- ComponentResult myErr = noErr;
- Ptr myPtr;
- long mySize = 0;
+ QTAtomContainer myContainer = NULL;
+ ComponentResult myErr = noErr;
+ Ptr myPtr;
+ long mySize = 0;
- CodecInfo ci;
+ CodecInfo ci;
QuicktimeCodecData *qcd = rd->qtcodecdata;
@@ -210,9 +211,9 @@ static OSErr QT_SaveCodecSettingsToScene(RenderData *rd, ReportList *reports)
}
// obtain all current codec settings
- SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
- SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
// retreive codecdata from quicktime in a atomcontainer
myErr = SCGetSettingsAsAtomContainer(qtdata->theComponent, &myContainer);
@@ -234,7 +235,7 @@ static OSErr QT_SaveCodecSettingsToScene(RenderData *rd, ReportList *reports)
memcpy(qcd->cdParms, myPtr, mySize);
qcd->cdSize = mySize;
- GetCodecInfo (&ci, qtdata->gSpatialSettings.codecType, 0);
+ GetCodecInfo(&ci, qtdata->gSpatialSettings.codecType, 0);
}
else {
BKE_reportf(reports, RPT_ERROR, "Quicktime: QT_SaveCodecSettingsToScene failed\n");
@@ -252,8 +253,8 @@ bail:
static OSErr QT_GetCodecSettingsFromScene(RenderData *rd, ReportList *reports)
{
- Handle myHandle = NULL;
- ComponentResult myErr = noErr;
+ Handle myHandle = NULL;
+ ComponentResult myErr = noErr;
QuicktimeCodecData *qcd = rd->qtcodecdata;
@@ -272,9 +273,9 @@ static OSErr QT_GetCodecSettingsFromScene(RenderData *rd, ReportList *reports)
}
// update runtime codecsettings for use with the codec dialog
- SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
- SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
//Fill the render QuicktimeCodecSettigns struct
@@ -304,12 +305,12 @@ bail:
}
-static OSErr QT_AddUserDataTextToMovie (Movie theMovie, char *theText, OSType theType)
+static OSErr QT_AddUserDataTextToMovie(Movie theMovie, char *theText, OSType theType)
{
- UserData myUserData = NULL;
- Handle myHandle = NULL;
- long myLength = strlen(theText);
- OSErr myErr = noErr;
+ UserData myUserData = NULL;
+ Handle myHandle = NULL;
+ long myLength = strlen(theText);
+ OSErr myErr = noErr;
// get the movie's user data list
myUserData = GetMovieUserData(theMovie);
@@ -343,10 +344,10 @@ static void QT_CreateMyVideoTrack(int rectx, int recty, ReportList *reports)
trackFrame.bottom = recty;
trackFrame.right = rectx;
- qtexport->theTrack = NewMovieTrack (qtexport->theMovie,
- FixRatio(trackFrame.right, 1),
- FixRatio(trackFrame.bottom, 1),
- 0);
+ qtexport->theTrack = NewMovieTrack(qtexport->theMovie,
+ FixRatio(trackFrame.right, 1),
+ FixRatio(trackFrame.bottom, 1),
+ 0);
CheckError(GetMoviesError(), "NewMovieTrack error", reports);
// SetIdentityMatrix(&myMatrix);
@@ -354,17 +355,17 @@ static void QT_CreateMyVideoTrack(int rectx, int recty, ReportList *reports)
// TranslateMatrix(&myMatrix, 0, Long2Fix(trackFrame.bottom));
// SetMovieMatrix(qtexport->theMovie, &myMatrix);
- qtexport->theMedia = NewTrackMedia (qtexport->theTrack,
- VideoMediaType,
- qtdata->kVideoTimeScale,
- nil,
- 0);
+ qtexport->theMedia = NewTrackMedia(qtexport->theTrack,
+ VideoMediaType,
+ qtdata->kVideoTimeScale,
+ nil,
+ 0);
CheckError(GetMoviesError(), "NewTrackMedia error", reports);
- err = BeginMediaEdits (qtexport->theMedia);
+ err = BeginMediaEdits(qtexport->theMedia);
CheckError(err, "BeginMediaEdits error", reports);
- QT_StartAddVideoSamplesToMedia (&trackFrame, rectx, recty, reports);
+ QT_StartAddVideoSamplesToMedia(&trackFrame, rectx, recty, reports);
}
@@ -372,40 +373,40 @@ static void QT_EndCreateMyVideoTrack(ReportList *reports)
{
OSErr err = noErr;
- QT_EndAddVideoSamplesToMedia ();
+ QT_EndAddVideoSamplesToMedia();
- err = EndMediaEdits (qtexport->theMedia);
+ err = EndMediaEdits(qtexport->theMedia);
CheckError(err, "EndMediaEdits error", reports);
- err = InsertMediaIntoTrack (qtexport->theTrack,
- kTrackStart, /* track start time */
- kMediaStart, /* media start time */
- GetMediaDuration (qtexport->theMedia),
- fixed1);
+ err = InsertMediaIntoTrack(qtexport->theTrack,
+ kTrackStart, /* track start time */
+ kMediaStart, /* media start time */
+ GetMediaDuration(qtexport->theMedia),
+ fixed1);
CheckError(err, "InsertMediaIntoTrack error", reports);
}
-static void QT_StartAddVideoSamplesToMedia (const Rect *trackFrame, int rectx, int recty, ReportList *reports)
+static void QT_StartAddVideoSamplesToMedia(const Rect *trackFrame, int rectx, int recty, ReportList *reports)
{
SCTemporalSettings gTemporalSettings;
OSErr err = noErr;
- qtexport->ibuf = IMB_allocImBuf (rectx, recty, 32, IB_rect);
- qtexport->ibuf2 = IMB_allocImBuf (rectx, recty, 32, IB_rect);
+ qtexport->ibuf = IMB_allocImBuf(rectx, recty, 32, IB_rect);
+ qtexport->ibuf2 = IMB_allocImBuf(rectx, recty, 32, IB_rect);
- err = NewGWorldFromPtr( &qtexport->theGWorld,
- k32ARGBPixelFormat,
- trackFrame,
- NULL, NULL, 0,
- (Ptr)qtexport->ibuf->rect,
- rectx * 4 );
- CheckError (err, "NewGWorldFromPtr error", reports);
+ err = NewGWorldFromPtr(&qtexport->theGWorld,
+ k32ARGBPixelFormat,
+ trackFrame,
+ NULL, NULL, 0,
+ (Ptr)qtexport->ibuf->rect,
+ rectx * 4);
+ CheckError(err, "NewGWorldFromPtr error", reports);
qtexport->thePixMap = GetGWorldPixMap(qtexport->theGWorld);
LockPixels(qtexport->thePixMap);
- SCDefaultPixMapSettings (qtdata->theComponent, qtexport->thePixMap, true);
+ SCDefaultPixMapSettings(qtdata->theComponent, qtexport->thePixMap, true);
// workaround for crash with H.264, which requires an upgrade to
// the new callback based api for proper encoding, but that's not
@@ -418,32 +419,32 @@ static void QT_StartAddVideoSamplesToMedia (const Rect *trackFrame, int rectx, i
}
}
- SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &gTemporalSettings);
- SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &gTemporalSettings);
+ SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
err = SCCompressSequenceBegin(qtdata->theComponent, qtexport->thePixMap, NULL, &qtexport->anImageDescription);
- CheckError (err, "SCCompressSequenceBegin error", reports );
+ CheckError(err, "SCCompressSequenceBegin error", reports);
}
-static void QT_DoAddVideoSamplesToMedia (int frame, int *pixels, int rectx, int recty, ReportList *reports)
+static void QT_DoAddVideoSamplesToMedia(int frame, int *pixels, int rectx, int recty, ReportList *reports)
{
- OSErr err = noErr;
- Rect imageRect;
+ OSErr err = noErr;
+ Rect imageRect;
- int index;
- int boxsize;
+ int index;
+ int boxsize;
unsigned char *from, *to;
- short syncFlag;
- long dataSize;
- Handle compressedData;
- Ptr myPtr;
+ short syncFlag;
+ long dataSize;
+ Handle compressedData;
+ Ptr myPtr;
//copy and flip renderdata
- memcpy(qtexport->ibuf2->rect, pixels, 4*rectx*recty);
+ memcpy(qtexport->ibuf2->rect, pixels, 4 * rectx * recty);
IMB_flipy(qtexport->ibuf2);
//get pointers to parse bitmapdata
@@ -455,42 +456,42 @@ static void QT_DoAddVideoSamplesToMedia (int frame, int *pixels, int rectx, int
//parse RGBA bitmap into Quicktime's ARGB GWorld
boxsize = rectx * recty;
- for ( index = 0; index < boxsize; index++) {
+ for (index = 0; index < boxsize; index++) {
to[0] = from[3];
to[1] = from[0];
to[2] = from[1];
to[3] = from[2];
- to +=4, from += 4;
+ to += 4, from += 4;
}
err = SCCompressSequenceFrame(qtdata->theComponent,
- qtexport->thePixMap,
- &imageRect,
- &compressedData,
- &dataSize,
- &syncFlag);
+ qtexport->thePixMap,
+ &imageRect,
+ &compressedData,
+ &dataSize,
+ &syncFlag);
CheckError(err, "SCCompressSequenceFrame error", reports);
err = AddMediaSample(qtexport->theMedia,
- compressedData,
- 0,
- dataSize,
- qtdata->duration,
- (SampleDescriptionHandle)qtexport->anImageDescription,
- 1,
- syncFlag,
- NULL);
+ compressedData,
+ 0,
+ dataSize,
+ qtdata->duration,
+ (SampleDescriptionHandle)qtexport->anImageDescription,
+ 1,
+ syncFlag,
+ NULL);
CheckError(err, "AddMediaSample error", reports);
}
-static void QT_EndAddVideoSamplesToMedia (void)
+static void QT_EndAddVideoSamplesToMedia(void)
{
SCCompressSequenceEnd(qtdata->theComponent);
UnlockPixels(qtexport->thePixMap);
if (qtexport->theGWorld)
- DisposeGWorld (qtexport->theGWorld);
+ DisposeGWorld(qtexport->theGWorld);
if (qtexport->ibuf)
IMB_freeImBuf(qtexport->ibuf);
@@ -504,7 +505,7 @@ void filepath_qt(char *string, RenderData *rd)
{
char txt[64];
- if (string==0) return;
+ if (string == 0) return;
strcpy(string, rd->pic);
BLI_path_abs(string, G.main->name);
@@ -526,12 +527,12 @@ int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, R
char theFullPath[255];
#ifdef __APPLE__
- int myFile;
- FSRef myRef;
+ int myFile;
+ FSRef myRef;
#else
- char *qtname;
+ char *qtname;
#endif
- int success= 1;
+ int success = 1;
if (qtexport == NULL) qtexport = MEM_callocN(sizeof(QuicktimeExport), "QuicktimeExport");
@@ -561,7 +562,7 @@ int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, R
sprintf(theFullPath, "%s", name);
/* hack: create an empty file to make FSPathMakeRef() happy */
- myFile = open(theFullPath, O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRUSR|S_IWUSR);
+ myFile = open(theFullPath, O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRUSR | S_IWUSR);
if (myFile < 0) {
BKE_reportf(reports, RPT_ERROR, "error while creating movie file!\n");
/* do something? */
@@ -582,17 +583,17 @@ int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, R
err = FSMakeFSSpec(0, 0L, qtexport->qtfilename, &qtexport->theSpec);
#endif
- err = CreateMovieFile (&qtexport->theSpec,
- kMyCreatorType,
- smCurrentScript,
- createMovieFileDeleteCurFile | createMovieFileDontCreateResFile,
- &qtexport->resRefNum,
- &qtexport->theMovie );
+ err = CreateMovieFile(&qtexport->theSpec,
+ kMyCreatorType,
+ smCurrentScript,
+ createMovieFileDeleteCurFile | createMovieFileDontCreateResFile,
+ &qtexport->resRefNum,
+ &qtexport->theMovie);
CheckError(err, "CreateMovieFile error", reports);
if (err != noErr) {
BKE_reportf(reports, RPT_ERROR, "Unable to create Quicktime movie: %s", name);
- success= 0;
+ success = 0;
#ifdef __APPLE__
ExitMoviesOnThread();
#endif
@@ -622,7 +623,7 @@ void end_qt(void)
if (qtexport->theMovie) {
QT_EndCreateMyVideoTrack(NULL);
- err = AddMovieResource (qtexport->theMovie, qtexport->resRefNum, &resId, qtexport->qtfilename);
+ err = AddMovieResource(qtexport->theMovie, qtexport->resRefNum, &resId, qtexport->qtfilename);
CheckError(err, "AddMovieResource error", NULL);
err = QT_AddUserDataTextToMovie(qtexport->theMovie, "Made with Blender", kUserDataTextInformation);
@@ -639,7 +640,7 @@ void end_qt(void)
}
#ifdef __APPLE__
- ExitMoviesOnThread();
+ ExitMoviesOnThread();
#endif
if (qtexport) {
@@ -662,36 +663,36 @@ void free_qtcomponentdata(void)
static void check_renderbutton_framerate(RenderData *rd, ReportList *reports)
{
// to keep float framerates consistent between the codec dialog and frs/sec button.
- OSErr err;
+ OSErr err;
- err = SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ err = SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
CheckError(err, "SCGetInfo fr error", reports);
if ( (rd->frs_sec == 24 || rd->frs_sec == 30 || rd->frs_sec == 60) &&
- (qtdata->gTemporalSettings.frameRate == 1571553 ||
- qtdata->gTemporalSettings.frameRate == 1964113 ||
- qtdata->gTemporalSettings.frameRate == 3928227))
+ (qtdata->gTemporalSettings.frameRate == 1571553 ||
+ qtdata->gTemporalSettings.frameRate == 1964113 ||
+ qtdata->gTemporalSettings.frameRate == 3928227))
{
/* do nothing */
}
else {
if (rd->frs_sec_base > 0)
qtdata->gTemporalSettings.frameRate =
- ((float)(rd->frs_sec << 16) / rd->frs_sec_base);
+ ((float)(rd->frs_sec << 16) / rd->frs_sec_base);
}
- err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
CheckError(err, "SCSetInfo error", reports);
- if (qtdata->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
+ if (qtdata->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
qtdata->kVideoTimeScale = 24000;
qtdata->duration = 1001;
}
- else if (qtdata->gTemporalSettings.frameRate == 1964113) { // 29.97 fps
+ else if (qtdata->gTemporalSettings.frameRate == 1964113) { // 29.97 fps
qtdata->kVideoTimeScale = 30000;
qtdata->duration = 1001;
}
- else if (qtdata->gTemporalSettings.frameRate == 3928227) { // 59.94 fps
+ else if (qtdata->gTemporalSettings.frameRate == 3928227) { // 59.94 fps
qtdata->kVideoTimeScale = 60000;
qtdata->duration = 1001;
}
@@ -704,14 +705,14 @@ static void check_renderbutton_framerate(RenderData *rd, ReportList *reports)
void quicktime_verify_image_type(RenderData *rd, ImageFormatData *imf)
{
if (imf->imtype == R_IMF_IMTYPE_QUICKTIME) {
- if ((rd->qtcodecsettings.codecType== 0) ||
- (rd->qtcodecsettings.codecSpatialQuality <0) ||
- (rd->qtcodecsettings.codecSpatialQuality > 100)) {
+ if ((rd->qtcodecsettings.codecType == 0) ||
+ (rd->qtcodecsettings.codecSpatialQuality < 0) ||
+ (rd->qtcodecsettings.codecSpatialQuality > 100)) {
rd->qtcodecsettings.codecType = kJPEGCodecType;
rd->qtcodecsettings.codec = (int)anyCodec;
- rd->qtcodecsettings.codecSpatialQuality = (codecHighQuality*100)/codecLosslessQuality;
- rd->qtcodecsettings.codecTemporalQuality = (codecHighQuality*100)/codecLosslessQuality;
+ rd->qtcodecsettings.codecSpatialQuality = (codecHighQuality * 100) / codecLosslessQuality;
+ rd->qtcodecsettings.codecTemporalQuality = (codecHighQuality * 100) / codecLosslessQuality;
rd->qtcodecsettings.keyFrameRate = 25;
rd->qtcodecsettings.bitRate = 5000000; //5 Mbps
}
@@ -721,7 +722,7 @@ void quicktime_verify_image_type(RenderData *rd, ImageFormatData *imf)
int get_qtcodec_settings(RenderData *rd, ReportList *reports)
{
OSErr err = noErr;
- // erase any existing codecsetting
+ // erase any existing codecsetting
if (qtdata) {
if (qtdata->theComponent) CloseComponent(qtdata->theComponent);
free_qtcomponentdata();
@@ -736,14 +737,14 @@ int get_qtcodec_settings(RenderData *rd, ReportList *reports)
QT_GetCodecSettingsFromScene(rd, reports);
}
else {
- SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
- SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
qtdata->gSpatialSettings.codecType = rd->qtcodecsettings.codecType;
qtdata->gSpatialSettings.codec = (CodecComponent)rd->qtcodecsettings.codec;
- qtdata->gSpatialSettings.spatialQuality = (rd->qtcodecsettings.codecSpatialQuality * codecLosslessQuality) /100;
- qtdata->gTemporalSettings.temporalQuality = (rd->qtcodecsettings.codecTemporalQuality * codecLosslessQuality) /100;
+ qtdata->gSpatialSettings.spatialQuality = (rd->qtcodecsettings.codecSpatialQuality * codecLosslessQuality) / 100;
+ qtdata->gTemporalSettings.temporalQuality = (rd->qtcodecsettings.codecTemporalQuality * codecLosslessQuality) / 100;
qtdata->gTemporalSettings.keyFrameRate = rd->qtcodecsettings.keyFrameRate;
qtdata->aDataRateSetting.dataRate = rd->qtcodecsettings.bitRate;
qtdata->gSpatialSettings.depth = rd->qtcodecsettings.colorDepth;
@@ -751,14 +752,14 @@ int get_qtcodec_settings(RenderData *rd, ReportList *reports)
qtdata->aDataRateSetting.minTemporalQuality = (rd->qtcodecsettings.minTemporalQuality * codecLosslessQuality) / 100;
qtdata->aDataRateSetting.frameDuration = rd->frs_sec;
- SetMovieTimeScale(qtexport->theMovie, rd->frs_sec_base*1000);
+ SetMovieTimeScale(qtexport->theMovie, rd->frs_sec_base * 1000);
- err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
CheckError(err, "SCSetInfo1 error", reports);
- err = SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ err = SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
CheckError(err, "SCSetInfo2 error", reports);
- err = SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ err = SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
CheckError(err, "SCSetInfo3 error", reports);
}
@@ -769,7 +770,7 @@ int get_qtcodec_settings(RenderData *rd, ReportList *reports)
static int request_qtcodec_settings(bContext *C, wmOperator *op)
{
- OSErr err = noErr;
+ OSErr err = noErr;
Scene *scene = CTX_data_scene(C);
RenderData *rd = &scene->r;
@@ -788,14 +789,14 @@ static int request_qtcodec_settings(bContext *C, wmOperator *op)
QT_GetCodecSettingsFromScene(rd, op->reports);
}
else {
- SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
- SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
qtdata->gSpatialSettings.codecType = rd->qtcodecsettings.codecType;
qtdata->gSpatialSettings.codec = (CodecComponent)rd->qtcodecsettings.codec;
- qtdata->gSpatialSettings.spatialQuality = (rd->qtcodecsettings.codecSpatialQuality * codecLosslessQuality) /100;
- qtdata->gTemporalSettings.temporalQuality = (rd->qtcodecsettings.codecTemporalQuality * codecLosslessQuality) /100;
+ qtdata->gSpatialSettings.spatialQuality = (rd->qtcodecsettings.codecSpatialQuality * codecLosslessQuality) / 100;
+ qtdata->gTemporalSettings.temporalQuality = (rd->qtcodecsettings.codecTemporalQuality * codecLosslessQuality) / 100;
qtdata->gTemporalSettings.keyFrameRate = rd->qtcodecsettings.keyFrameRate;
qtdata->gTemporalSettings.frameRate = ((float)(rd->frs_sec << 16) / rd->frs_sec_base);
qtdata->aDataRateSetting.dataRate = rd->qtcodecsettings.bitRate;
@@ -805,29 +806,29 @@ static int request_qtcodec_settings(bContext *C, wmOperator *op)
qtdata->aDataRateSetting.frameDuration = rd->frs_sec;
- err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
CheckError(err, "SCSetInfo1 error", op->reports);
- err = SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ err = SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
CheckError(err, "SCSetInfo2 error", op->reports);
- err = SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ err = SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
CheckError(err, "SCSetInfo3 error", op->reports);
}
- // put up the dialog box - it needs to be called from the main thread
+ // put up the dialog box - it needs to be called from the main thread
err = SCRequestSequenceSettings(qtdata->theComponent);
if (err == scUserCancelled) {
return OPERATOR_FINISHED;
}
- // update runtime codecsettings for use with the codec dialog
- SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
- SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
+ // update runtime codecsettings for use with the codec dialog
+ SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
+ SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
+ SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
- //Fill the render QuicktimeCodecSettings struct
+ //Fill the render QuicktimeCodecSettings struct
rd->qtcodecsettings.codecTemporalQuality = (qtdata->gTemporalSettings.temporalQuality * 100) / codecLosslessQuality;
- //Do not override scene frame rate (qtdata->gTemporalSettings.framerate)
+ //Do not override scene frame rate (qtdata->gTemporalSettings.framerate)
rd->qtcodecsettings.keyFrameRate = qtdata->gTemporalSettings.keyFrameRate;
rd->qtcodecsettings.codecType = qtdata->gSpatialSettings.codecType;
@@ -838,26 +839,26 @@ static int request_qtcodec_settings(bContext *C, wmOperator *op)
rd->qtcodecsettings.bitRate = qtdata->aDataRateSetting.dataRate;
rd->qtcodecsettings.minSpatialQuality = (qtdata->aDataRateSetting.minSpatialQuality * 100) / codecLosslessQuality;
rd->qtcodecsettings.minTemporalQuality = (qtdata->aDataRateSetting.minTemporalQuality * 100) / codecLosslessQuality;
- //Frame duration is already known (qtdata->aDataRateSetting.frameDuration)
+ //Frame duration is already known (qtdata->aDataRateSetting.frameDuration)
QT_SaveCodecSettingsToScene(rd, op->reports);
// framerate jugglin'
- if (qtdata->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
+ if (qtdata->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
qtdata->kVideoTimeScale = 24000;
qtdata->duration = 1001;
rd->frs_sec = 24;
rd->frs_sec_base = 1.001;
}
- else if (qtdata->gTemporalSettings.frameRate == 1964113) { // 29.97 fps
+ else if (qtdata->gTemporalSettings.frameRate == 1964113) { // 29.97 fps
qtdata->kVideoTimeScale = 30000;
qtdata->duration = 1001;
rd->frs_sec = 30;
rd->frs_sec_base = 1.001;
}
- else if (qtdata->gTemporalSettings.frameRate == 3928227) { // 59.94 fps
+ else if (qtdata->gTemporalSettings.frameRate == 3928227) { // 59.94 fps
qtdata->kVideoTimeScale = 60000;
qtdata->duration = 1001;
@@ -917,7 +918,7 @@ void SCENE_OT_render_data_set_quicktime_codec(wmOperatorType *ot)
ot->poll = ED_operator_setqtcodec;
/* flags */
- ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
#endif /* USE_QTKIT */
diff --git a/source/blender/quicktime/apple/quicktime_import.c b/source/blender/quicktime/apple/quicktime_import.c
index 3e4e53418ac..f3e71feec58 100644
--- a/source/blender/quicktime/apple/quicktime_import.c
+++ b/source/blender/quicktime/apple/quicktime_import.c
@@ -58,35 +58,35 @@
#include "quicktime_import.h"
#include "quicktime_export.h"
-#define RECT_WIDTH(r) (r.right-r.left)
-#define RECT_HEIGHT(r) (r.bottom-r.top)
+#define RECT_WIDTH(r) (r.right - r.left)
+#define RECT_HEIGHT(r) (r.bottom - r.top)
#define QTIME_DEBUG 0
typedef struct _QuicktimeMovie {
- GWorldPtr offscreenGWorld;
- PixMapHandle offscreenPixMap;
- Movie movie;
- Rect movieBounds;
- short movieRefNum;
- short movieResId;
- int movWidth, movHeight;
+ GWorldPtr offscreenGWorld;
+ PixMapHandle offscreenPixMap;
+ Movie movie;
+ Rect movieBounds;
+ short movieRefNum;
+ short movieResId;
+ int movWidth, movHeight;
- int framecount;
+ int framecount;
- ImBuf *ibuf;
+ ImBuf *ibuf;
- TimeValue *frameIndex;
- Media theMedia;
- Track theTrack;
- long trackIndex;
- short depth;
+ TimeValue *frameIndex;
+ Media theMedia;
+ Track theTrack;
+ long trackIndex;
+ short depth;
- int have_gw; //ugly
+ int have_gw; /* ugly */
} QuicktimeMovie;
@@ -105,7 +105,7 @@ void quicktime_init(void)
#endif /* _WIN32 */
/* Initialize QuickTime */
-#if defined(_WIN32) || defined (__APPLE__)
+#if defined(_WIN32) || defined(__APPLE__)
nerr = EnterMovies();
if (nerr != noErr)
G.have_quicktime = FALSE;
@@ -113,7 +113,7 @@ void quicktime_init(void)
#endif /* _WIN32 || __APPLE__ */
#ifdef __linux__
/* inititalize quicktime codec registry */
- lqt_registry_init();
+ lqt_registry_init();
#endif
G.have_quicktime = TRUE;
}
@@ -141,7 +141,7 @@ char *get_valid_qtname(char *name)
TCHAR Buffer[MAX_PATH];
DWORD dwRet;
char *qtname;
- DynStr *ds= BLI_dynstr_new();
+ DynStr *ds = BLI_dynstr_new();
dwRet = GetCurrentDirectory(MAX_PATH, Buffer);
@@ -166,7 +166,7 @@ char *get_valid_qtname(char *name)
BLI_dynstr_append(ds, name);
}
- qtname= BLI_dynstr_get_cstring(ds);
+ qtname = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
return qtname;
@@ -176,33 +176,33 @@ char *get_valid_qtname(char *name)
int anim_is_quicktime(const char *name)
{
- FSSpec theFSSpec;
- char theFullPath[255];
+ FSSpec theFSSpec;
+ char theFullPath[255];
- Boolean isMovieFile = false;
- AliasHandle myAlias = NULL;
- Component myImporter = NULL;
+ Boolean isMovieFile = false;
+ AliasHandle myAlias = NULL;
+ Component myImporter = NULL;
#ifdef __APPLE__
- FInfo myFinderInfo;
- FSRef myRef;
+ FInfo myFinderInfo;
+ FSRef myRef;
#else
char *qtname;
- Str255 dst;
+ Str255 dst;
#endif
- OSErr err = noErr;
+ OSErr err = noErr;
// 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"))
+ 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;
}
@@ -245,7 +245,7 @@ int anim_is_quicktime(const char *name)
}
}
- if ((err == noErr) && (myImporter != NULL)) { // this file is a movie file
+ if ((err == noErr) && (myImporter != NULL)) { /* this file is a movie file */
isMovieFile = true;
}
@@ -268,8 +268,8 @@ void free_anim_quicktime(struct anim *anim)
DisposeMovie(anim->qtime->movie);
CloseMovieFile(anim->qtime->movieRefNum);
- if (anim->qtime->frameIndex) MEM_freeN (anim->qtime->frameIndex);
- if (anim->qtime) MEM_freeN (anim->qtime);
+ if (anim->qtime->frameIndex) MEM_freeN(anim->qtime->frameIndex);
+ if (anim->qtime) MEM_freeN(anim->qtime);
anim->qtime = NULL;
@@ -280,17 +280,17 @@ void free_anim_quicktime(struct anim *anim)
static OSErr QT_get_frameIndexes(struct anim *anim)
{
int i;
- OSErr anErr = noErr;
- OSType media = VideoMediaType;
+ OSErr anErr = noErr;
+ OSType media = VideoMediaType;
TimeValue nextTime = 0;
- TimeValue startPoint;
- TimeValue tmpstartPoint;
+ TimeValue startPoint;
+ TimeValue tmpstartPoint;
long sampleCount = 0;
startPoint = -1;
- GetMovieNextInterestingTime(anim->qtime->movie, nextTimeMediaSample+nextTimeEdgeOK, (TimeValue)1, &media, 0,
- 1, &startPoint, NULL);
+ GetMovieNextInterestingTime(anim->qtime->movie, nextTimeMediaSample + nextTimeEdgeOK, (TimeValue)1, &media, 0,
+ 1, &startPoint, NULL);
tmpstartPoint = startPoint;
@@ -320,16 +320,16 @@ static OSErr QT_get_frameIndexes(struct anim *anim)
}
-ImBuf * qtime_fetchibuf (struct anim *anim, int position)
+ImBuf *qtime_fetchibuf(struct anim *anim, int position)
{
- PixMapHandle myPixMap = NULL;
- Ptr myPtr;
+ PixMapHandle myPixMap = NULL;
+ Ptr myPtr;
- register int index;
- register int boxsize;
+ register int index;
+ register int boxsize;
- register uint32_t *readPos;
- register uint32_t *changePos;
+ register uint32_t *readPos;
+ register uint32_t *changePos;
ImBuf *ibuf = NULL;
unsigned int *rect;
@@ -344,7 +344,7 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
return (NULL);
}
- ibuf = IMB_allocImBuf (anim->x, anim->y, 32, IB_rect);
+ ibuf = IMB_allocImBuf(anim->x, anim->y, 32, IB_rect);
rect = ibuf->rect;
SetMovieTimeValue(anim->qtime->movie, anim->qtime->frameIndex[position]);
@@ -356,8 +356,8 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
myPtr = GetPixBaseAddr(myPixMap);
if (myPtr == NULL) {
- printf ("Error reading frame from Quicktime");
- IMB_freeImBuf (ibuf);
+ printf("Error reading frame from Quicktime");
+ IMB_freeImBuf(ibuf);
return NULL;
}
@@ -367,10 +367,10 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
#ifdef __APPLE__
// Swap alpha byte to the end, so ARGB become RGBA;
- from= (unsigned char *)readPos;
- to= (unsigned char *)changePos;
+ from = (unsigned char *)readPos;
+ to = (unsigned char *)changePos;
- for ( index = 0; index < boxsize; index++, from+=4, to+=4 ) {
+ for (index = 0; index < boxsize; index++, from += 4, to += 4) {
to[3] = from[0];
to[0] = from[1];
to[1] = from[2];
@@ -379,14 +379,14 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
#endif
#ifdef _WIN32
- for ( index = 0; index < boxsize; index++, changePos++, readPos++ )
- *( changePos ) = *(readPos );
+ for (index = 0; index < boxsize; index++, changePos++, readPos++)
+ *(changePos) = *(readPos);
if (anim->qtime->depth < 32) {
//add alpha to ibuf
boxsize = anim->x * anim->y * 4;
crect = (unsigned char *) rect;
- for ( index = 0; index < boxsize; index+=4, crect+=4 ) {
+ for (index = 0; index < boxsize; index += 4, crect += 4) {
crect[3] = 0xFF;
}
}
@@ -403,12 +403,12 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
static int GetFirstVideoMedia(struct anim *anim)
{
- long numTracks;
- OSType mediaType;
+ long numTracks;
+ OSType mediaType;
numTracks = GetMovieTrackCount(anim->qtime->movie);
- for (anim->qtime->trackIndex=1; anim->qtime->trackIndex<=numTracks; (anim->qtime->trackIndex)++) {
+ for (anim->qtime->trackIndex = 1; anim->qtime->trackIndex <= numTracks; (anim->qtime->trackIndex)++) {
anim->qtime->theTrack = GetMovieIndTrack(anim->qtime->movie, anim->qtime->trackIndex);
if (anim->qtime->theTrack)
@@ -425,7 +425,7 @@ static int GetFirstVideoMedia(struct anim *anim)
static short GetFirstVideoTrackPixelDepth(struct anim *anim)
{
- SampleDescriptionHandle imageDescH = (SampleDescriptionHandle)NewHandle(sizeof(Handle));
+ SampleDescriptionHandle imageDescH = (SampleDescriptionHandle)NewHandle(sizeof(Handle));
// long trackIndex = 0; /*unused*/
if (!GetFirstVideoMedia(anim))
@@ -440,19 +440,19 @@ static short GetFirstVideoTrackPixelDepth(struct anim *anim)
int startquicktime(struct anim *anim)
{
- FSSpec theFSSpec;
+ FSSpec theFSSpec;
- OSErr err = noErr;
- char theFullPath[255];
+ OSErr err = noErr;
+ char theFullPath[255];
#ifdef __APPLE__
- FSRef myRef;
+ FSRef myRef;
#else
- char *qtname;
- Str255 dst;
+ char *qtname;
+ Str255 dst;
#endif
short depth = 0;
- anim->qtime = MEM_callocN (sizeof(QuicktimeMovie), "animqt");
+ anim->qtime = MEM_callocN(sizeof(QuicktimeMovie), "animqt");
anim->qtime->have_gw = FALSE;
if (anim->qtime == NULL) {
@@ -481,8 +481,8 @@ int startquicktime(struct anim *anim)
if (err == noErr) {
if (QTIME_DEBUG) printf("qt: movie opened\n");
err = NewMovieFromFile(&anim->qtime->movie,
- anim->qtime->movieRefNum,
- &anim->qtime->movieResId, NULL, newMovieActive, NULL);
+ anim->qtime->movieRefNum,
+ &anim->qtime->movieResId, NULL, newMovieActive, NULL);
}
if (err) {
@@ -506,22 +506,22 @@ int startquicktime(struct anim *anim)
return -1;
}
- anim->qtime->ibuf = IMB_allocImBuf (anim->x, anim->y, 32, IB_rect);
+ anim->qtime->ibuf = IMB_allocImBuf(anim->x, anim->y, 32, IB_rect);
#ifdef _WIN32
err = NewGWorldFromPtr(&anim->qtime->offscreenGWorld,
- k32RGBAPixelFormat,
- &anim->qtime->movieBounds,
- NULL, NULL, 0,
- (unsigned char *)anim->qtime->ibuf->rect,
- anim->x * 4);
+ k32RGBAPixelFormat,
+ &anim->qtime->movieBounds,
+ NULL, NULL, 0,
+ (unsigned char *)anim->qtime->ibuf->rect,
+ anim->x * 4);
#else
err = NewGWorldFromPtr(&anim->qtime->offscreenGWorld,
- k32ARGBPixelFormat,
- &anim->qtime->movieBounds,
- NULL, NULL, 0,
- (unsigned char *)anim->qtime->ibuf->rect,
- anim->x * 4);
+ k32ARGBPixelFormat,
+ &anim->qtime->movieBounds,
+ NULL, NULL, 0,
+ (unsigned char *)anim->qtime->ibuf->rect,
+ anim->x * 4);
#endif /* _WIN32 */
if (err == noErr) {
@@ -554,29 +554,29 @@ int startquicktime(struct anim *anim)
anim->curposition = 0;
if (QTIME_DEBUG) printf("qt: load %s %dx%dx%d frames %d\n", anim->name, anim->qtime->movWidth,
- anim->qtime->movHeight, anim->qtime->depth, anim->qtime->framecount);
+ anim->qtime->movHeight, anim->qtime->depth, anim->qtime->framecount);
return 0;
}
-int imb_is_a_quicktime (char *name)
+int imb_is_a_quicktime(char *name)
{
- GraphicsImportComponent theImporter = NULL;
+ GraphicsImportComponent theImporter = NULL;
- FSSpec theFSSpec;
+ FSSpec theFSSpec;
#ifdef _WIN32
- Str255 dst; /*unused*/
+ Str255 dst; /*unused*/
#endif
- char theFullPath[255];
+ char theFullPath[255];
// Boolean isMovieFile = false; /*unused*/
// AliasHandle myAlias = NULL; /*unused*/
// Component myImporter = NULL; /*unused*/
#ifdef __APPLE__
// FInfo myFinderInfo; /*unused*/
- FSRef myRef;
+ FSRef myRef;
#endif
- OSErr err = noErr;
+ OSErr err = noErr;
if (!G.have_quicktime) return 0;
@@ -587,7 +587,7 @@ int imb_is_a_quicktime (char *name)
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, ".mov") || // not as image, doesn't work
BLI_testextensie(name, ".avi") ||
BLI_testextensie(name, ".mp3"))
{
@@ -616,30 +616,30 @@ int imb_is_a_quicktime (char *name)
ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
{
- Rect myRect;
- OSErr err = noErr;
- GraphicsImportComponent gImporter = NULL;
+ Rect myRect;
+ OSErr err = noErr;
+ GraphicsImportComponent gImporter = NULL;
- ImageDescriptionHandle desc;
+ ImageDescriptionHandle desc;
- ComponentInstance dataHandler;
+ ComponentInstance dataHandler;
PointerDataRef dataref;
int x, y, depth;
int have_gw = FALSE;
ImBuf *ibuf = NULL;
// ImBuf *imbuf = NULL; /*unused*/
- GWorldPtr offGWorld;
- PixMapHandle myPixMap = NULL;
+ GWorldPtr offGWorld;
+ PixMapHandle myPixMap = NULL;
#ifdef __APPLE__
- Ptr myPtr;
+ Ptr myPtr;
- register int index;
- register int boxsize;
+ register int index;
+ register int boxsize;
- register uint32_t *readPos;
- register uint32_t *changePos;
+ register uint32_t *readPos;
+ register uint32_t *changePos;
ImBuf *wbuf = NULL;
unsigned int *rect;
@@ -651,17 +651,17 @@ ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
if (QTIME_DEBUG) printf("qt: attempt to load mem as image\n");
- dataref= (PointerDataRef)NewHandle(sizeof(PointerDataRefRecord));
+ dataref = (PointerDataRef)NewHandle(sizeof(PointerDataRefRecord));
(**dataref).data = mem;
(**dataref).dataLength = size;
err = OpenADataHandler((Handle)dataref,
- PointerDataHandlerSubType,
- nil,
- (OSType)0,
- nil,
- kDataHCanRead,
- &dataHandler);
+ PointerDataHandlerSubType,
+ nil,
+ (OSType)0,
+ nil,
+ kDataHCanRead,
+ &dataHandler);
if (err != noErr) {
if (QTIME_DEBUG) printf("no datahandler\n");
goto bail;
@@ -679,7 +679,7 @@ ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
goto bail;
}
- err = GraphicsImportGetImageDescription (gImporter, &desc );
+ err = GraphicsImportGetImageDescription(gImporter, &desc);
if (err != noErr) {
if (QTIME_DEBUG) printf("no imagedescription\n");
goto bail;
@@ -693,26 +693,26 @@ ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
ibuf = IMB_allocImBuf(x, y, depth, 0);
ibuf->ftype = QUICKTIME;
DisposeHandle((Handle)dataref);
- if (gImporter != NULL) CloseComponent(gImporter);
+ if (gImporter != NULL) CloseComponent(gImporter);
return ibuf;
}
#ifdef __APPLE__
- ibuf = IMB_allocImBuf (x, y, 32, IB_rect);
- wbuf = IMB_allocImBuf (x, y, 32, IB_rect);
+ ibuf = IMB_allocImBuf(x, y, 32, IB_rect);
+ wbuf = IMB_allocImBuf(x, y, 32, IB_rect);
err = NewGWorldFromPtr(&offGWorld,
- k32ARGBPixelFormat,
- &myRect, NULL, NULL, 0,
- (unsigned char *)wbuf->rect, x * 4);
+ k32ARGBPixelFormat,
+ &myRect, NULL, NULL, 0,
+ (unsigned char *)wbuf->rect, x * 4);
#else
- ibuf = IMB_allocImBuf (x, y, 32, IB_rect);
+ ibuf = IMB_allocImBuf(x, y, 32, IB_rect);
err = NewGWorldFromPtr(&offGWorld,
- k32RGBAPixelFormat,
- &myRect, NULL, NULL, 0,
- (unsigned char *)ibuf->rect, x * 4);
+ k32RGBAPixelFormat,
+ &myRect, NULL, NULL, 0,
+ (unsigned char *)ibuf->rect, x * 4);
#endif
if (err != noErr) {
@@ -734,8 +734,8 @@ ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
myPtr = GetPixBaseAddr(myPixMap);
if (myPtr == NULL) {
- printf ("Error reading frame from Quicktime");
- IMB_freeImBuf (ibuf);
+ printf("Error reading frame from Quicktime");
+ IMB_freeImBuf(ibuf);
return NULL;
}
@@ -744,10 +744,10 @@ ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
changePos = (uint32_t *) rect;
// Swap alpha byte to the end, so ARGB become RGBA;
- from= (unsigned char *)readPos;
- to= (unsigned char *)changePos;
+ from = (unsigned char *)readPos;
+ to = (unsigned char *)changePos;
- for ( index = 0; index < boxsize; index++, from+=4, to+=4 ) {
+ for (index = 0; index < boxsize; index++, from += 4, to += 4) {
to[3] = from[0];
to[0] = from[1];
to[1] = from[2];
@@ -763,17 +763,17 @@ bail:
#ifdef __APPLE__
if (wbuf) {
- IMB_freeImBuf (wbuf);
+ IMB_freeImBuf(wbuf);
wbuf = NULL;
}
#endif
- if (gImporter != NULL) CloseComponent(gImporter);
+ if (gImporter != NULL) CloseComponent(gImporter);
if (err != noErr) {
if (QTIME_DEBUG) printf("quicktime import unsuccesfull\n");
if (ibuf) {
- IMB_freeImBuf (ibuf);
+ IMB_freeImBuf(ibuf);
ibuf = NULL;
}
}
@@ -788,8 +788,8 @@ bail:
int box = x * y;
unsigned char *arect = (unsigned char *) ibuf->rect;
- if ( depth < 32 && (**desc).cType != kGIFCodecType) {
- for (i = 0; i < box; i++, arect+=4)
+ if (depth < 32 && (**desc).cType != kGIFCodecType) {
+ for (i = 0; i < box; i++, arect += 4)
arect[3] = 0xFF;
}
#endif
diff --git a/source/blender/render/intern/include/strand.h b/source/blender/render/intern/include/strand.h
index 7482b4d10ee..720354219e9 100644
--- a/source/blender/render/intern/include/strand.h
+++ b/source/blender/render/intern/include/strand.h
@@ -93,7 +93,7 @@ typedef struct StrandShadeCache StrandShadeCache;
void strand_eval_point(StrandSegment *sseg, StrandPoint *spoint);
void render_strand_segment(struct Render *re, float winmat[][4], struct StrandPart *spart, struct ZSpan *zspan, int totzspan, StrandSegment *sseg);
-void strand_minmax(struct StrandRen *strand, float *min, float *max, float width);
+void strand_minmax(struct StrandRen *strand, float min[3], float max[3], const float width);
struct StrandSurface *cache_strand_surface(struct Render *re, struct ObjectRen *obr, struct DerivedMesh *dm, float mat[][4], int timeoffset);
void free_strand_surface(struct Render *re);
diff --git a/source/blender/render/intern/raytrace/bvh.h b/source/blender/render/intern/raytrace/bvh.h
index c38d9b1dcb4..fab0bb94618 100644
--- a/source/blender/render/intern/raytrace/bvh.h
+++ b/source/blender/render/intern/raytrace/bvh.h
@@ -59,12 +59,12 @@ inline int test_bb_group4(__m128 *bb_group, const Isect *isec)
copy_v3_v3(start, isec->start);
copy_v3_v3(idot_axis, isec->idot_axis);
- const __m128 tmin1 = _mm_max_ps(tmin0, _mm_mul_ps( _mm_sub_ps( bb_group[isec->bv_index[0]], _mm_set_ps1(start[0]) ), _mm_set_ps1(idot_axis[0])) );
- const __m128 tmax1 = _mm_min_ps(tmax0, _mm_mul_ps( _mm_sub_ps( bb_group[isec->bv_index[1]], _mm_set_ps1(start[0]) ), _mm_set_ps1(idot_axis[0])) );
- const __m128 tmin2 = _mm_max_ps(tmin1, _mm_mul_ps( _mm_sub_ps( bb_group[isec->bv_index[2]], _mm_set_ps1(start[1]) ), _mm_set_ps1(idot_axis[1])) );
- const __m128 tmax2 = _mm_min_ps(tmax1, _mm_mul_ps( _mm_sub_ps( bb_group[isec->bv_index[3]], _mm_set_ps1(start[1]) ), _mm_set_ps1(idot_axis[1])) );
- const __m128 tmin3 = _mm_max_ps(tmin2, _mm_mul_ps( _mm_sub_ps( bb_group[isec->bv_index[4]], _mm_set_ps1(start[2]) ), _mm_set_ps1(idot_axis[2])) );
- const __m128 tmax3 = _mm_min_ps(tmax2, _mm_mul_ps( _mm_sub_ps( bb_group[isec->bv_index[5]], _mm_set_ps1(start[2]) ), _mm_set_ps1(idot_axis[2])) );
+ const __m128 tmin1 = _mm_max_ps(tmin0, _mm_mul_ps(_mm_sub_ps(bb_group[isec->bv_index[0]], _mm_set_ps1(start[0]) ), _mm_set_ps1(idot_axis[0])) );
+ const __m128 tmax1 = _mm_min_ps(tmax0, _mm_mul_ps(_mm_sub_ps(bb_group[isec->bv_index[1]], _mm_set_ps1(start[0]) ), _mm_set_ps1(idot_axis[0])) );
+ const __m128 tmin2 = _mm_max_ps(tmin1, _mm_mul_ps(_mm_sub_ps(bb_group[isec->bv_index[2]], _mm_set_ps1(start[1]) ), _mm_set_ps1(idot_axis[1])) );
+ const __m128 tmax2 = _mm_min_ps(tmax1, _mm_mul_ps(_mm_sub_ps(bb_group[isec->bv_index[3]], _mm_set_ps1(start[1]) ), _mm_set_ps1(idot_axis[1])) );
+ const __m128 tmin3 = _mm_max_ps(tmin2, _mm_mul_ps(_mm_sub_ps(bb_group[isec->bv_index[4]], _mm_set_ps1(start[2]) ), _mm_set_ps1(idot_axis[2])) );
+ const __m128 tmax3 = _mm_min_ps(tmax2, _mm_mul_ps(_mm_sub_ps(bb_group[isec->bv_index[5]], _mm_set_ps1(start[2]) ), _mm_set_ps1(idot_axis[2])) );
return _mm_movemask_ps(_mm_cmpge_ps(tmax3, tmin3));
}
@@ -142,19 +142,19 @@ static float bvh_cost(Tree *obj)
/* bvh tree nodes generics */
template<class Node> static inline int bvh_node_hit_test(Node *node, Isect *isec)
{
- return rayobject_bb_intersect_test(isec, (const float*)node->bb);
+ return rayobject_bb_intersect_test(isec, (const float *)node->bb);
}
template<class Node>
-static inline void bvh_node_merge_bb(Node *node, float *min, float *max)
+static inline void bvh_node_merge_bb(Node *node, float min[3], float max[3])
{
if (is_leaf(node)) {
RE_rayobject_merge_bb((RayObject *)node, min, max);
}
else {
- DO_MIN(node->bb, min);
- DO_MAX(node->bb+3, max);
+ DO_MIN(node->bb, min);
+ DO_MAX(node->bb + 3, max);
}
}
@@ -185,7 +185,7 @@ static int bvh_node_stack_raycast(Node *root, Isect *isec)
}
}
else {
- hit |= RE_rayobject_intersect( (RayObject*)node, isec);
+ hit |= RE_rayobject_intersect( (RayObject *)node, isec);
if (SHADOW && hit) return hit;
}
}
@@ -211,84 +211,84 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec)
if (!is_leaf(root->child))
bvh_node_push_childs(root, isec, stack, stack_pos);
else
- return RE_rayobject_intersect( (RayObject*)root->child, isec);
+ return RE_rayobject_intersect( (RayObject *)root->child, isec);
}
else
- return RE_rayobject_intersect( (RayObject*)root, isec);
+ return RE_rayobject_intersect( (RayObject *)root, isec);
}
else {
if (!is_leaf(root))
stack[stack_pos++] = root;
else
- return RE_rayobject_intersect( (RayObject*)root, isec);
+ return RE_rayobject_intersect( (RayObject *)root, isec);
}
while (true) {
//Use SIMD 4
if (stack_pos >= 4) {
__m128 t_bb[6];
- Node * t_node[4];
+ Node *t_node[4];
stack_pos -= 4;
/* prepare the 4BB for SIMD */
- t_node[0] = stack[stack_pos+0]->child;
- t_node[1] = stack[stack_pos+1]->child;
- t_node[2] = stack[stack_pos+2]->child;
- t_node[3] = stack[stack_pos+3]->child;
-
- const float *bb0 = stack[stack_pos+0]->bb;
- const float *bb1 = stack[stack_pos+1]->bb;
- const float *bb2 = stack[stack_pos+2]->bb;
- const float *bb3 = stack[stack_pos+3]->bb;
-
- const __m128 x0y0x1y1 = _mm_shuffle_ps( _mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(1, 0, 1, 0) );
- const __m128 x2y2x3y3 = _mm_shuffle_ps( _mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(1, 0, 1, 0) );
- t_bb[0] = _mm_shuffle_ps( x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(2, 0, 2, 0) );
- t_bb[1] = _mm_shuffle_ps( x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(3, 1, 3, 1) );
-
- const __m128 z0X0z1X1 = _mm_shuffle_ps( _mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(3, 2, 3, 2) );
- const __m128 z2X2z3X3 = _mm_shuffle_ps( _mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(3, 2, 3, 2) );
- t_bb[2] = _mm_shuffle_ps( z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(2, 0, 2, 0) );
- t_bb[3] = _mm_shuffle_ps( z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(3, 1, 3, 1) );
-
- const __m128 Y0Z0Y1Z1 = _mm_shuffle_ps( _mm_load_ps(bb0+4), _mm_load_ps(bb1+4), _MM_SHUFFLE(1, 0, 1, 0) );
- const __m128 Y2Z2Y3Z3 = _mm_shuffle_ps( _mm_load_ps(bb2+4), _mm_load_ps(bb3+4), _MM_SHUFFLE(1, 0, 1, 0) );
- t_bb[4] = _mm_shuffle_ps( Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(2, 0, 2, 0) );
- t_bb[5] = _mm_shuffle_ps( Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(3, 1, 3, 1) );
+ t_node[0] = stack[stack_pos + 0]->child;
+ t_node[1] = stack[stack_pos + 1]->child;
+ t_node[2] = stack[stack_pos + 2]->child;
+ t_node[3] = stack[stack_pos + 3]->child;
+
+ const float *bb0 = stack[stack_pos + 0]->bb;
+ const float *bb1 = stack[stack_pos + 1]->bb;
+ const float *bb2 = stack[stack_pos + 2]->bb;
+ const float *bb3 = stack[stack_pos + 3]->bb;
+
+ const __m128 x0y0x1y1 = _mm_shuffle_ps(_mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(1, 0, 1, 0) );
+ const __m128 x2y2x3y3 = _mm_shuffle_ps(_mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(1, 0, 1, 0) );
+ t_bb[0] = _mm_shuffle_ps(x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(2, 0, 2, 0) );
+ t_bb[1] = _mm_shuffle_ps(x0y0x1y1, x2y2x3y3, _MM_SHUFFLE(3, 1, 3, 1) );
+
+ const __m128 z0X0z1X1 = _mm_shuffle_ps(_mm_load_ps(bb0), _mm_load_ps(bb1), _MM_SHUFFLE(3, 2, 3, 2) );
+ const __m128 z2X2z3X3 = _mm_shuffle_ps(_mm_load_ps(bb2), _mm_load_ps(bb3), _MM_SHUFFLE(3, 2, 3, 2) );
+ t_bb[2] = _mm_shuffle_ps(z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(2, 0, 2, 0) );
+ t_bb[3] = _mm_shuffle_ps(z0X0z1X1, z2X2z3X3, _MM_SHUFFLE(3, 1, 3, 1) );
+
+ const __m128 Y0Z0Y1Z1 = _mm_shuffle_ps(_mm_load_ps(bb0 + 4), _mm_load_ps(bb1 + 4), _MM_SHUFFLE(1, 0, 1, 0) );
+ const __m128 Y2Z2Y3Z3 = _mm_shuffle_ps(_mm_load_ps(bb2 + 4), _mm_load_ps(bb3 + 4), _MM_SHUFFLE(1, 0, 1, 0) );
+ t_bb[4] = _mm_shuffle_ps(Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(2, 0, 2, 0) );
+ t_bb[5] = _mm_shuffle_ps(Y0Z0Y1Z1, Y2Z2Y3Z3, _MM_SHUFFLE(3, 1, 3, 1) );
#if 0
- for(int i=0; i<4; i++)
+ for (int i = 0; i < 4; i++)
{
- Node *t = stack[stack_pos+i];
+ Node *t = stack[stack_pos + i];
assert(!is_leaf(t));
- float *bb = ((float*)t_bb)+i;
- bb[4*0] = t->bb[0];
- bb[4*1] = t->bb[1];
- bb[4*2] = t->bb[2];
- bb[4*3] = t->bb[3];
- bb[4*4] = t->bb[4];
- bb[4*5] = t->bb[5];
+ float *bb = ((float *)t_bb) + i;
+ bb[4 * 0] = t->bb[0];
+ bb[4 * 1] = t->bb[1];
+ bb[4 * 2] = t->bb[2];
+ bb[4 * 3] = t->bb[3];
+ bb[4 * 4] = t->bb[4];
+ bb[4 * 5] = t->bb[5];
t_node[i] = t->child;
}
#endif
RE_RC_COUNT(isec->raycounter->simd_bb.test);
- int res = test_bb_group4( t_bb, isec );
+ int res = test_bb_group4(t_bb, isec);
for (int i = 0; i < 4; i++)
- if (res & (1 << i)) {
- RE_RC_COUNT(isec->raycounter->simd_bb.hit);
- 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;
+ if (res & (1 << i)) {
+ RE_RC_COUNT(isec->raycounter->simd_bb.hit);
+ 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 {
+ hit |= RE_rayobject_intersect( (RayObject *)t_node[i], isec);
+ if (hit && isec->mode == RE_RAY_SHADOW) return hit;
}
}
- else {
- hit |= RE_rayobject_intersect( (RayObject*)t_node[i], isec);
- if (hit && isec->mode == RE_RAY_SHADOW) return hit;
- }
- }
}
else if (stack_pos > 0) {
Node *node = stack[--stack_pos];
@@ -300,7 +300,7 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec)
assert(stack_pos <= MAX_STACK_SIZE);
}
else {
- hit |= RE_rayobject_intersect( (RayObject*)node->child, isec);
+ hit |= RE_rayobject_intersect( (RayObject *)node->child, isec);
if (hit && isec->mode == RE_RAY_SHADOW) return hit;
}
}
@@ -324,7 +324,7 @@ static int bvh_node_raycast(Node *node, Isect *isec)
if (isec->idot_axis[node->split_axis] > 0.0f)
{
int i;
- for(i=0; i<BVH_NCHILDS; i++)
+ for (i = 0; i < BVH_NCHILDS; i++)
if (!is_leaf(node->child[i]))
{
if (node->child[i] == 0) break;
@@ -332,16 +332,14 @@ static int bvh_node_raycast(Node *node, Isect *isec)
hit |= bvh_node_raycast(node->child[i], isec);
if (hit && isec->mode == RE_RAY_SHADOW) return hit;
}
- else
- {
- hit |= RE_rayobject_intersect( (RayObject*)node->child[i], isec);
+ else {
+ hit |= RE_rayobject_intersect( (RayObject *)node->child[i], isec);
if (hit && isec->mode == RE_RAY_SHADOW) return hit;
}
}
- else
- {
+ else {
int i;
- for(i=BVH_NCHILDS-1; i>=0; i--)
+ for (i = BVH_NCHILDS - 1; i >= 0; i--)
if (!is_leaf(node->child[i]))
{
if (node->child[i])
@@ -350,9 +348,8 @@ static int bvh_node_raycast(Node *node, Isect *isec)
if (hit && isec->mode == RE_RAY_SHADOW) return hit;
}
}
- else
- {
- hit |= RE_rayobject_intersect( (RayObject*)node->child[i], isec);
+ else {
+ hit |= RE_rayobject_intersect( (RayObject *)node->child[i], isec);
if (hit && isec->mode == RE_RAY_SHADOW) return hit;
}
}
@@ -367,44 +364,44 @@ 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)) {
- hint->stack[hint->size++] = (RayObject*)node;
+ hint->stack[hint->size++] = (RayObject *)node;
}
else {
int childs = count_childs(node);
if (hint->size + reserve_space + childs <= RE_RAY_LCTS_MAX_SIZE) {
- int result = hint_test_bb(hintObject, node->bb, node->bb+3);
+ int result = hint_test_bb(hintObject, node->bb, node->bb + 3);
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) {
- hint->stack[hint->size++] = (RayObject*)node;
+ hint->stack[hint->size++] = (RayObject *)node;
}
}
else {
- hint->stack[hint->size++] = (RayObject*)node;
+ hint->stack[hint->size++] = (RayObject *)node;
}
}
}
template<class Tree>
-static RayObjectAPI* bvh_get_api(int maxstacksize);
+static RayObjectAPI *bvh_get_api(int maxstacksize);
template<class Tree, int DFS_STACK_SIZE>
static inline RayObject *bvh_create_tree(int size)
{
- Tree *obj= (Tree*)MEM_callocN(sizeof(Tree), "BVHTree" );
+ Tree *obj = (Tree *)MEM_callocN(sizeof(Tree), "BVHTree");
assert(RE_rayobject_isAligned(obj)); /* RayObject API assumes real data to be 4-byte aligned */
obj->rayobj.api = bvh_get_api<Tree>(DFS_STACK_SIZE);
obj->root = NULL;
obj->node_arena = NULL;
- obj->builder = rtbuild_create( size );
+ obj->builder = rtbuild_create(size);
- return RE_rayobject_unalignRayAPI((RayObject*) obj);
+ return RE_rayobject_unalignRayAPI((RayObject *) obj);
}
#endif
diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp
index ac29d9e78ee..ca74367dd37 100644
--- a/source/blender/render/intern/raytrace/rayobject.cpp
+++ b/source/blender/render/intern/raytrace/rayobject.cpp
@@ -50,7 +50,7 @@
* because function is too long. Since this is code that is called billions
* of times we really do want to inline. */
-MALWAYS_INLINE RayObject* rayface_from_coords(RayFace *rayface, void *ob, void *face,
+MALWAYS_INLINE RayObject *rayface_from_coords(RayFace *rayface, void *ob, void *face,
float *v1, float *v2, float *v3, float *v4)
{
rayface->ob = ob;
@@ -85,14 +85,14 @@ MALWAYS_INLINE void rayface_from_vlak(RayFace *rayface, ObjectInstanceRen *obi,
}
}
-RayObject* RE_rayface_from_vlak(RayFace *rayface, ObjectInstanceRen *obi, VlakRen *vlr)
+RayObject *RE_rayface_from_vlak(RayFace *rayface, ObjectInstanceRen *obi, VlakRen *vlr)
{
return rayface_from_coords(rayface, obi, vlr, vlr->v1->co, vlr->v2->co, vlr->v3->co, vlr->v4 ? vlr->v4->co : 0);
}
/* VlakPrimitive */
-RayObject* RE_vlakprimitive_from_vlak(VlakPrimitive *face, struct ObjectInstanceRen *obi, struct VlakRen *vlr)
+RayObject *RE_vlakprimitive_from_vlak(VlakPrimitive *face, struct ObjectInstanceRen *obi, struct VlakRen *vlr)
{
face->ob = obi;
face->face = vlr;
@@ -110,13 +110,13 @@ MALWAYS_INLINE int vlr_check_intersect(Isect *is, ObjectInstanceRen *obi, VlakRe
return 0;
/* I know... cpu cycle waste, might do smarter once */
- if (is->mode==RE_RAY_MIRROR)
+ if (is->mode == RE_RAY_MIRROR)
return !(vlr->mat->mode & MA_ONLYCAST);
else
return (is->lay & obi->lay);
}
-MALWAYS_INLINE int vlr_check_intersect_solid(Isect *UNUSED(is), ObjectInstanceRen* UNUSED(obi), VlakRen *vlr)
+MALWAYS_INLINE int vlr_check_intersect_solid(Isect *UNUSED(is), ObjectInstanceRen *UNUSED(obi), VlakRen *vlr)
{
/* solid material types only */
if (vlr->mat->material_type == MA_TYPE_SURFACE)
@@ -125,7 +125,7 @@ MALWAYS_INLINE int vlr_check_intersect_solid(Isect *UNUSED(is), ObjectInstanceRe
return 0;
}
-MALWAYS_INLINE int vlr_check_bake(Isect *is, ObjectInstanceRen* obi, VlakRen *UNUSED(vlr))
+MALWAYS_INLINE int vlr_check_bake(Isect *is, ObjectInstanceRen *obi, VlakRen *UNUSED(vlr))
{
return (obi->obr->ob != is->userdata) && (obi->obr->ob->flag & SELECT);
}
@@ -138,7 +138,7 @@ MALWAYS_INLINE int isec_tri_quad(float start[3], float dir[3], RayFace *face, fl
float t0[3], t1[3], x[3], r[3], m[3], u, v, divdet, det1, l;
int quad;
- quad= RE_rayface_isQuad(face);
+ quad = RE_rayface_isQuad(face);
copy_v3_v3(co1, face->v1);
copy_v3_v3(co2, face->v2);
@@ -151,29 +151,29 @@ MALWAYS_INLINE int isec_tri_quad(float start[3], float dir[3], RayFace *face, fl
sub_v3_v3v3(t1, co3, co1);
cross_v3_v3v3(x, r, t1);
- divdet= dot_v3v3(t0, x);
+ divdet = dot_v3v3(t0, x);
sub_v3_v3v3(m, start, co3);
- det1= dot_v3v3(m, x);
+ det1 = dot_v3v3(m, x);
if (divdet != 0.0f) {
- divdet= 1.0f/divdet;
- v= det1*divdet;
+ divdet = 1.0f / divdet;
+ v = det1 * divdet;
- if (v < RE_RAYTRACE_EPSILON && v > -(1.0f+RE_RAYTRACE_EPSILON)) {
+ if (v < RE_RAYTRACE_EPSILON && v > -(1.0f + RE_RAYTRACE_EPSILON)) {
float cros[3];
cross_v3_v3v3(cros, m, t0);
- u= divdet*dot_v3v3(cros, r);
+ u = divdet * dot_v3v3(cros, r);
- if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f+RE_RAYTRACE_EPSILON)) {
- l= divdet*dot_v3v3(cros, t1);
+ if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f + RE_RAYTRACE_EPSILON)) {
+ l = divdet * dot_v3v3(cros, t1);
/* check if intersection is within ray length */
if (l > -RE_RAYTRACE_EPSILON && l < *lambda) {
- uv[0]= u;
- uv[1]= v;
- *lambda= l;
+ uv[0] = u;
+ uv[1] = v;
+ *lambda = l;
return 1;
}
}
@@ -184,25 +184,25 @@ MALWAYS_INLINE int isec_tri_quad(float start[3], float dir[3], RayFace *face, fl
if (quad) {
copy_v3_v3(co4, face->v4);
sub_v3_v3v3(t0, co3, co4);
- divdet= dot_v3v3(t0, x);
+ divdet = dot_v3v3(t0, x);
if (divdet != 0.0f) {
- divdet= 1.0f/divdet;
- v = det1*divdet;
+ divdet = 1.0f / divdet;
+ v = det1 * divdet;
- if (v < RE_RAYTRACE_EPSILON && v > -(1.0f+RE_RAYTRACE_EPSILON)) {
+ if (v < RE_RAYTRACE_EPSILON && v > -(1.0f + RE_RAYTRACE_EPSILON)) {
float cros[3];
cross_v3_v3v3(cros, m, t0);
- u= divdet*dot_v3v3(cros, r);
+ u = divdet * dot_v3v3(cros, r);
- if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f+RE_RAYTRACE_EPSILON)) {
- l= divdet*dot_v3v3(cros, t1);
+ if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f + RE_RAYTRACE_EPSILON)) {
+ l = divdet * dot_v3v3(cros, t1);
- if (l >- RE_RAYTRACE_EPSILON && l < *lambda) {
- uv[0]= u;
- uv[1]= -(1.0f + v + u);
- *lambda= l;
+ if (l > -RE_RAYTRACE_EPSILON && l < *lambda) {
+ uv[0] = u;
+ uv[1] = -(1.0f + v + u);
+ *lambda = l;
return 2;
}
}
@@ -221,7 +221,7 @@ MALWAYS_INLINE int isec_tri_quad_neighbour(float start[3], float dir[3], RayFace
float t0[3], t1[3], x[3], r[3], m[3], u, v, divdet, det1;
int quad;
- quad= RE_rayface_isQuad(face);
+ quad = RE_rayface_isQuad(face);
copy_v3_v3(co1, face->v1);
copy_v3_v3(co2, face->v2);
@@ -234,22 +234,22 @@ MALWAYS_INLINE int isec_tri_quad_neighbour(float start[3], float dir[3], RayFace
sub_v3_v3v3(t1, co3, co1);
cross_v3_v3v3(x, r, t1);
- divdet= dot_v3v3(t0, x);
+ divdet = dot_v3v3(t0, x);
sub_v3_v3v3(m, start, co3);
- det1= dot_v3v3(m, x);
+ det1 = dot_v3v3(m, x);
if (divdet != 0.0f) {
- divdet= 1.0f/divdet;
- v= det1*divdet;
+ divdet = 1.0f / divdet;
+ v = det1 * divdet;
- if (v < RE_RAYTRACE_EPSILON && v > -(1.0f+RE_RAYTRACE_EPSILON)) {
+ if (v < RE_RAYTRACE_EPSILON && v > -(1.0f + RE_RAYTRACE_EPSILON)) {
float cros[3];
cross_v3_v3v3(cros, m, t0);
- u= divdet*dot_v3v3(cros, r);
+ u = divdet * dot_v3v3(cros, r);
- if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f+RE_RAYTRACE_EPSILON))
+ if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f + RE_RAYTRACE_EPSILON))
return 1;
}
}
@@ -258,19 +258,19 @@ MALWAYS_INLINE int isec_tri_quad_neighbour(float start[3], float dir[3], RayFace
if (quad) {
copy_v3_v3(co4, face->v4);
sub_v3_v3v3(t0, co3, co4);
- divdet= dot_v3v3(t0, x);
+ divdet = dot_v3v3(t0, x);
if (divdet != 0.0f) {
- divdet= 1.0f/divdet;
- v = det1*divdet;
+ divdet = 1.0f / divdet;
+ v = det1 * divdet;
- if (v < RE_RAYTRACE_EPSILON && v > -(1.0f+RE_RAYTRACE_EPSILON)) {
+ if (v < RE_RAYTRACE_EPSILON && v > -(1.0f + RE_RAYTRACE_EPSILON)) {
float cros[3];
cross_v3_v3v3(cros, m, t0);
- u= divdet*dot_v3v3(cros, r);
+ u = divdet * dot_v3v3(cros, r);
- if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f+RE_RAYTRACE_EPSILON))
+ if (u < RE_RAYTRACE_EPSILON && (v + u) > -(1.0f + RE_RAYTRACE_EPSILON))
return 2;
}
}
@@ -285,7 +285,7 @@ MALWAYS_INLINE int isec_tri_quad_neighbour(float start[3], float dir[3], RayFace
MALWAYS_INLINE int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *is)
{
float dist, uv[2];
- int ok= 0;
+ int ok = 0;
/* avoid self-intersection */
if (is->orig.ob == face->ob && is->orig.face == face->face)
@@ -293,25 +293,25 @@ MALWAYS_INLINE int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *i
/* check if we should intersect this face */
if (is->check == RE_CHECK_VLR_RENDER) {
- if (vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0)
+ if (vlr_check_intersect(is, (ObjectInstanceRen *)face->ob, (VlakRen *)face->face) == 0)
return 0;
}
else if (is->check == RE_CHECK_VLR_NON_SOLID_MATERIAL) {
- if (vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0)
+ 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)
+ if (vlr_check_intersect_solid(is, (ObjectInstanceRen *)face->ob, (VlakRen *)face->face) == 0)
return 0;
}
else if (is->check == RE_CHECK_VLR_BAKE) {
- if (vlr_check_bake(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0)
+ if (vlr_check_bake(is, (ObjectInstanceRen *)face->ob, (VlakRen *)face->face) == 0)
return 0;
}
/* ray counter */
RE_RC_COUNT(is->raycounter->faces.test);
- dist= is->dist;
- ok= isec_tri_quad(is->start, is->dir, face, uv, &dist);
+ dist = is->dist;
+ ok = isec_tri_quad(is->start, is->dir, face, uv, &dist);
if (ok) {
@@ -319,21 +319,21 @@ MALWAYS_INLINE int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *i
* 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) {
- VlakRen * a = (VlakRen*)is->orig.face;
- VlakRen * b = (VlakRen*)face->face;
+ 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);
+ 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)) {
return 0;
@@ -344,9 +344,9 @@ MALWAYS_INLINE int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *i
RE_RC_COUNT(is->raycounter->faces.hit);
- is->isect= ok; // which half of the quad
- is->dist= dist;
- is->u= uv[0]; is->v= uv[1];
+ is->isect = ok; // which half of the quad
+ is->dist = dist;
+ is->u = uv[0]; is->v = uv[1];
is->hit.ob = face->ob;
is->hit.face = face->face;
@@ -368,19 +368,19 @@ 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++) {
- isec->idot_axis[i] = 1.0f / isec->dir[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;
- isec->bv_index[2*i+1] = 1 - isec->bv_index[2*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];
- isec->bv_index[2*i] = i+3*isec->bv_index[2*i];
- isec->bv_index[2*i+1] = i+3*isec->bv_index[2*i+1];
+ isec->bv_index[2 * i] = i + 3 * isec->bv_index[2 * i];
+ isec->bv_index[2 * i + 1] = i + 3 * isec->bv_index[2 * i + 1];
}
#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)) {
@@ -410,11 +410,11 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec)
int RE_rayobject_intersect(RayObject *r, Isect *i)
{
if (RE_rayobject_isRayFace(r)) {
- return intersect_rayface(r, (RayFace*) RE_rayobject_align(r), i);
+ return intersect_rayface(r, (RayFace *) RE_rayobject_align(r), i);
}
else if (RE_rayobject_isVlakPrimitive(r)) {
//TODO optimize (useless copy to RayFace to avoid duplicate code)
- VlakPrimitive *face = (VlakPrimitive*) RE_rayobject_align(r);
+ VlakPrimitive *face = (VlakPrimitive *) RE_rayobject_align(r);
RayFace nface;
rayface_from_vlak(&nface, face->ob, face->face);
@@ -470,7 +470,7 @@ float RE_rayobject_cost(RayObject *r)
void RE_rayobject_merge_bb(RayObject *r, float *min, float *max)
{
if (RE_rayobject_isRayFace(r)) {
- RayFace *face = (RayFace*) RE_rayobject_align(r);
+ RayFace *face = (RayFace *) RE_rayobject_align(r);
DO_MINMAX(face->v1, min, max);
DO_MINMAX(face->v2, min, max);
@@ -478,7 +478,7 @@ void RE_rayobject_merge_bb(RayObject *r, float *min, float *max)
if (RE_rayface_isQuad(face)) DO_MINMAX(face->v4, min, max);
}
else if (RE_rayobject_isVlakPrimitive(r)) {
- VlakPrimitive *face = (VlakPrimitive*) RE_rayobject_align(r);
+ VlakPrimitive *face = (VlakPrimitive *) RE_rayobject_align(r);
RayFace nface;
rayface_from_vlak(&nface, face->ob, face->face);
diff --git a/source/blender/render/intern/raytrace/rayobject_blibvh.cpp b/source/blender/render/intern/raytrace/rayobject_blibvh.cpp
index 8f1b730bf10..2d642a0a0d8 100644
--- a/source/blender/render/intern/raytrace/rayobject_blibvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_blibvh.cpp
@@ -44,7 +44,7 @@ static int RE_rayobject_blibvh_intersect(RayObject *o, Isect *isec);
static void RE_rayobject_blibvh_add(RayObject *o, RayObject *ob);
static void RE_rayobject_blibvh_done(RayObject *o);
static void RE_rayobject_blibvh_free(RayObject *o);
-static void RE_rayobject_blibvh_bb(RayObject *o, float *min, float *max);
+static void RE_rayobject_blibvh_bb(RayObject * o, float min[3], float max[3]);
static float RE_rayobject_blibvh_cost(RayObject *UNUSED(o))
{
@@ -69,8 +69,7 @@ static RayObjectAPI bvh_api =
RE_rayobject_blibvh_hint_bb
};
-typedef struct BVHObject
-{
+typedef struct BVHObject {
RayObject rayobj;
RayObject **leafs, **next_leaf;
BVHTree *bvh;
@@ -79,26 +78,25 @@ typedef struct BVHObject
RayObject *RE_rayobject_blibvh_create(int size)
{
- BVHObject *obj= (BVHObject*)MEM_callocN(sizeof(BVHObject), "BVHObject");
+ BVHObject *obj = (BVHObject *)MEM_callocN(sizeof(BVHObject), "BVHObject");
assert(RE_rayobject_isAligned(obj)); /* RayObject API assumes real data to be 4-byte aligned */
obj->rayobj.api = &bvh_api;
obj->bvh = BLI_bvhtree_new(size, 0.0, 4, 6);
- obj->next_leaf = obj->leafs = (RayObject**)MEM_callocN(size*sizeof(RayObject*), "BVHObject leafs");
+ obj->next_leaf = obj->leafs = (RayObject **)MEM_callocN(size * sizeof(RayObject *), "BVHObject leafs");
INIT_MINMAX(obj->bb[0], obj->bb[1]);
- return RE_rayobject_unalignRayAPI((RayObject*) obj);
+ return RE_rayobject_unalignRayAPI((RayObject *) obj);
}
-struct BVHCallbackUserData
-{
+struct BVHCallbackUserData {
Isect *isec;
RayObject **leafs;
};
static void bvh_callback(void *userdata, int index, const BVHTreeRay *UNUSED(ray), BVHTreeRayHit *hit)
{
- struct BVHCallbackUserData *data = (struct BVHCallbackUserData*)userdata;
+ struct BVHCallbackUserData *data = (struct BVHCallbackUserData *)userdata;
Isect *isec = data->isec;
RayObject *face = data->leafs[index];
@@ -114,7 +112,7 @@ static void bvh_callback(void *userdata, int index, const BVHTreeRay *UNUSED(ray
static int RE_rayobject_blibvh_intersect(RayObject *o, Isect *isec)
{
- BVHObject *obj = (BVHObject*)o;
+ BVHObject *obj = (BVHObject *)o;
BVHTreeRayHit hit;
float dir[3];
struct BVHCallbackUserData data;
@@ -126,15 +124,15 @@ static int RE_rayobject_blibvh_intersect(RayObject *o, Isect *isec)
hit.index = 0;
hit.dist = isec->dist;
- return BLI_bvhtree_ray_cast(obj->bvh, isec->start, dir, 0.0, &hit, bvh_callback, (void*)&data);
+ return BLI_bvhtree_ray_cast(obj->bvh, isec->start, dir, 0.0, &hit, bvh_callback, (void *)&data);
}
static void RE_rayobject_blibvh_add(RayObject *o, RayObject *ob)
{
- BVHObject *obj = (BVHObject*)o;
+ BVHObject *obj = (BVHObject *)o;
float min_max[6];
- INIT_MINMAX(min_max, min_max+3);
- RE_rayobject_merge_bb(ob, min_max, min_max+3);
+ INIT_MINMAX(min_max, min_max + 3);
+ RE_rayobject_merge_bb(ob, min_max, min_max + 3);
DO_MIN(min_max, obj->bb[0]);
DO_MAX(min_max + 3, obj->bb[1]);
@@ -145,13 +143,13 @@ static void RE_rayobject_blibvh_add(RayObject *o, RayObject *ob)
static void RE_rayobject_blibvh_done(RayObject *o)
{
- BVHObject *obj = (BVHObject*)o;
+ BVHObject *obj = (BVHObject *)o;
BLI_bvhtree_balance(obj->bvh);
}
static void RE_rayobject_blibvh_free(RayObject *o)
{
- BVHObject *obj = (BVHObject*)o;
+ BVHObject *obj = (BVHObject *)o;
if (obj->bvh)
BLI_bvhtree_free(obj->bvh);
@@ -162,9 +160,9 @@ static void RE_rayobject_blibvh_free(RayObject *o)
MEM_freeN(obj);
}
-static void RE_rayobject_blibvh_bb(RayObject *o, float *min, float *max)
+static void RE_rayobject_blibvh_bb(RayObject *o, float min[3], float max[3])
{
- BVHObject *obj = (BVHObject*)o;
+ BVHObject *obj = (BVHObject *)o;
DO_MIN(obj->bb[0], min);
DO_MAX(obj->bb[1], max);
}
diff --git a/source/blender/render/intern/raytrace/rayobject_hint.h b/source/blender/render/intern/raytrace/rayobject_hint.h
index 37d9edb035d..6eb3c035935 100644
--- a/source/blender/render/intern/raytrace/rayobject_hint.h
+++ b/source/blender/render/intern/raytrace/rayobject_hint.h
@@ -33,25 +33,23 @@
#ifndef __RAYOBJECT_HINT_H__
#define __RAYOBJECT_HINT_H__
-#define HINT_RECURSE 1
-#define HINT_ACCEPT 0
-#define HINT_DISCARD -1
+#define HINT_RECURSE 1
+#define HINT_ACCEPT 0
+#define HINT_DISCARD -1
-struct HintBB
-{
+struct HintBB {
float bb[6];
};
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;
}
#if 0
-struct HintFrustum
-{
+struct HintFrustum {
float co[3];
float no[4][3];
};
diff --git a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
index bfcfbee536f..2e37782d047 100644
--- a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
@@ -40,10 +40,9 @@
#ifdef __SSE__
-#define DFS_STACK_SIZE 256
+#define DFS_STACK_SIZE 256
-struct QBVHTree
-{
+struct QBVHTree {
RayObject rayobj;
SVBVHNode *root;
@@ -61,11 +60,11 @@ void bvh_done<QBVHTree>(QBVHTree *obj)
//TODO find a away to exactly calculate the needed memory
MemArena *arena1 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "qbvh arena");
- BLI_memarena_use_malloc(arena1);
+ BLI_memarena_use_malloc(arena1);
MemArena *arena2 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "qbvh arena 2");
- BLI_memarena_use_malloc(arena2);
- BLI_memarena_use_align(arena2, 16);
+ BLI_memarena_use_malloc(arena2);
+ BLI_memarena_use_align(arena2, 16);
//Build and optimize the tree
//TODO do this in 1 pass (half memory usage during building)
@@ -95,7 +94,7 @@ void bvh_done<QBVHTree>(QBVHTree *obj)
}
template<int StackSize>
-int intersect(QBVHTree *obj, Isect* isec)
+int intersect(QBVHTree *obj, Isect *isec)
{
//TODO renable hint support
if (RE_rayobject_isAligned(obj->root)) {
@@ -105,7 +104,7 @@ int intersect(QBVHTree *obj, Isect* isec)
return svbvh_node_stack_raycast<StackSize, false>(obj->root, isec);
}
else
- return RE_rayobject_intersect((RayObject*)obj->root, isec);
+ return RE_rayobject_intersect((RayObject *)obj->root, isec);
}
template<class Tree>
@@ -114,7 +113,7 @@ void bvh_hint_bb(Tree *tree, LCTSHint *hint, float *UNUSED(min), float *UNUSED(m
//TODO renable hint support
{
hint->size = 0;
- hint->stack[hint->size++] = (RayObject*)tree->root;
+ hint->stack[hint->size++] = (RayObject *)tree->root;
}
}
/* the cast to pointer function is needed to workarround gcc bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11407 */
@@ -123,20 +122,20 @@ RayObjectAPI make_api()
{
static RayObjectAPI api =
{
- (RE_rayobject_raycast_callback) ((int(*)(Tree*, Isect*)) &intersect<STACK_SIZE>),
- (RE_rayobject_add_callback) ((void(*)(Tree*, RayObject*)) &bvh_add<Tree>),
- (RE_rayobject_done_callback) ((void(*)(Tree*)) &bvh_done<Tree>),
- (RE_rayobject_free_callback) ((void(*)(Tree*)) &bvh_free<Tree>),
- (RE_rayobject_merge_bb_callback)((void(*)(Tree*, float*, float*)) &bvh_bb<Tree>),
- (RE_rayobject_cost_callback) ((float(*)(Tree*)) &bvh_cost<Tree>),
- (RE_rayobject_hint_bb_callback) ((void(*)(Tree*, LCTSHint*, float*, float*)) &bvh_hint_bb<Tree>)
+ (RE_rayobject_raycast_callback) ((int (*)(Tree *, Isect *)) & intersect<STACK_SIZE>),
+ (RE_rayobject_add_callback) ((void (*)(Tree *, RayObject *)) & bvh_add<Tree>),
+ (RE_rayobject_done_callback) ((void (*)(Tree *)) & bvh_done<Tree>),
+ (RE_rayobject_free_callback) ((void (*)(Tree *)) & bvh_free<Tree>),
+ (RE_rayobject_merge_bb_callback)((void (*)(Tree *, float *, float *)) & bvh_bb<Tree>),
+ (RE_rayobject_cost_callback) ((float (*)(Tree *)) & bvh_cost<Tree>),
+ (RE_rayobject_hint_bb_callback) ((void (*)(Tree *, LCTSHint *, float *, float *)) & bvh_hint_bb<Tree>)
};
return api;
}
template<class Tree>
-RayObjectAPI* bvh_get_api(int maxstacksize)
+RayObjectAPI *bvh_get_api(int maxstacksize)
{
static RayObjectAPI bvh_api256 = make_api<Tree, 1024>();
diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
index eb3bdb37f9d..ddc84408e26 100644
--- a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
@@ -54,19 +54,19 @@ static void rtbuild_init(RTBuilder *b)
b->primitives.end = 0;
b->primitives.maxsize = 0;
- for (int i=0; i<RTBUILD_MAX_CHILDS; i++)
+ for (int i = 0; i < RTBUILD_MAX_CHILDS; i++)
b->child_offset[i] = 0;
- for (int i=0; i<3; i++)
+ for (int i = 0; i < 3; i++)
b->sorted_begin[i] = b->sorted_end[i] = 0;
- INIT_MINMAX(b->bb, b->bb+3);
+ INIT_MINMAX(b->bb, b->bb + 3);
}
-RTBuilder* rtbuild_create(int size)
+RTBuilder *rtbuild_create(int size)
{
- RTBuilder *builder = (RTBuilder*) MEM_mallocN( sizeof(RTBuilder), "RTBuilder" );
- RTBuilder::Object *memblock= (RTBuilder::Object*)MEM_mallocN( sizeof(RTBuilder::Object)*size, "RTBuilder.objects");
+ RTBuilder *builder = (RTBuilder *) MEM_mallocN(sizeof(RTBuilder), "RTBuilder");
+ RTBuilder::Object *memblock = (RTBuilder::Object *)MEM_mallocN(sizeof(RTBuilder::Object) * size, "RTBuilder.objects");
rtbuild_init(builder);
@@ -74,8 +74,8 @@ RTBuilder* rtbuild_create(int size)
builder->primitives.begin = builder->primitives.end = memblock;
builder->primitives.maxsize = size;
- for (int i=0; i<3; i++) {
- builder->sorted_begin[i] = (RTBuilder::Object**)MEM_mallocN( sizeof(RTBuilder::Object*)*size, "RTBuilder.sorted_objects");
+ 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];
}
@@ -87,7 +87,7 @@ void rtbuild_free(RTBuilder *b)
{
if (b->primitives.begin) MEM_freeN(b->primitives.begin);
- for (int i=0; i<3; i++)
+ for (int i = 0; i < 3; i++)
if (b->sorted_begin[i])
MEM_freeN(b->sorted_begin[i]);
@@ -98,10 +98,10 @@ void rtbuild_add(RTBuilder *b, RayObject *o)
{
float bb[6];
- assert( b->primitives.begin + b->primitives.maxsize != b->primitives.end );
+ assert(b->primitives.begin + b->primitives.maxsize != b->primitives.end);
- INIT_MINMAX(bb, bb+3);
- RE_rayobject_merge_bb(o, bb, bb+3);
+ INIT_MINMAX(bb, bb + 3);
+ RE_rayobject_merge_bb(o, bb, bb + 3);
/* skip objects with invalid bounding boxes, nan causes DO_MINMAX
* to do nothing, so we get these invalid values. this shouldn't
@@ -119,11 +119,11 @@ void rtbuild_add(RTBuilder *b, RayObject *o)
return;
copy_v3_v3(b->primitives.end->bb, bb);
- copy_v3_v3(b->primitives.end->bb+3, bb+3);
+ copy_v3_v3(b->primitives.end->bb + 3, bb + 3);
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]++;
}
@@ -153,32 +153,33 @@ static void object_sort(Item *begin, Item *end, int axis)
assert(false);
}
-void rtbuild_done(RTBuilder *b, RayObjectControl* ctrl)
+void rtbuild_done(RTBuilder *b, RayObjectControl *ctrl)
{
- for (int i=0; i<3; i++)
- if (b->sorted_begin[i]) {
- if (RE_rayobjectcontrol_test_break(ctrl)) break;
- object_sort( b->sorted_begin[i], b->sorted_end[i], i );
+ for (int i = 0; i < 3; i++) {
+ if (b->sorted_begin[i]) {
+ if (RE_rayobjectcontrol_test_break(ctrl)) break;
+ object_sort(b->sorted_begin[i], b->sorted_end[i], i);
+ }
}
}
-RayObject* rtbuild_get_primitive(RTBuilder *b, int index)
+RayObject *rtbuild_get_primitive(RTBuilder *b, int index)
{
return b->sorted_begin[0][index]->obj;
}
-RTBuilder* rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp)
+RTBuilder *rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp)
{
- rtbuild_init( tmp );
+ rtbuild_init(tmp);
- for (int i=0; i<3; i++)
+ for (int i = 0; i < 3; 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];
+ 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 {
tmp->sorted_begin[i] = 0;
- tmp->sorted_end [i] = 0;
+ tmp->sorted_end[i] = 0;
}
return tmp;
@@ -188,7 +189,7 @@ void rtbuild_calc_bb(RTBuilder *b)
{
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);
+ RE_rayobject_merge_bb( (*index)->obj, b->bb, b->bb + 3);
}
}
@@ -196,14 +197,14 @@ void rtbuild_merge_bb(RTBuilder *b, float *min, float *max)
{
rtbuild_calc_bb(b);
DO_MIN(b->bb, min);
- DO_MAX(b->bb+3, max);
+ DO_MAX(b->bb + 3, max);
}
#if 0
int rtbuild_get_largest_axis(RTBuilder *b)
{
rtbuild_calc_bb(b);
- return bb_largest_axis(b->bb, b->bb+3);
+ return bb_largest_axis(b->bb, b->bb + 3);
}
//Left balanced tree
@@ -219,26 +220,25 @@ int rtbuild_mean_split(RTBuilder *b, int nchilds, int axis)
assert(nchilds <= RTBUILD_MAX_CHILDS);
//TODO optimize calc of leafs_per_child
- for (s=nchilds; s<tot_leafs; s*=nchilds);
- Mleafs_per_child = s/nchilds;
- mleafs_per_child = Mleafs_per_child/nchilds;
+ for (s = nchilds; s < tot_leafs; s *= nchilds) ;
+ Mleafs_per_child = s / nchilds;
+ mleafs_per_child = Mleafs_per_child / nchilds;
//split min leafs per child
b->child_offset[0] = 0;
- for (i=1; i<=nchilds; i++)
+ for (i = 1; i <= nchilds; i++)
b->child_offset[i] = mleafs_per_child;
//split remaining leafs
- missing_leafs = tot_leafs - mleafs_per_child*nchilds;
- for (i=1; i<=nchilds; i++)
+ missing_leafs = tot_leafs - mleafs_per_child * nchilds;
+ for (i = 1; i <= nchilds; i++)
{
if (missing_leafs > Mleafs_per_child - mleafs_per_child)
{
b->child_offset[i] += Mleafs_per_child - mleafs_per_child;
missing_leafs -= Mleafs_per_child - mleafs_per_child;
}
- else
- {
+ else {
b->child_offset[i] += missing_leafs;
missing_leafs = 0;
break;
@@ -246,14 +246,14 @@ int rtbuild_mean_split(RTBuilder *b, int nchilds, int axis)
}
//adjust for accumulative offsets
- for (i=1; i<=nchilds; i++)
- b->child_offset[i] += b->child_offset[i-1];
+ for (i = 1; i <= nchilds; i++)
+ b->child_offset[i] += b->child_offset[i - 1];
//Count created childs
- for (i=nchilds; b->child_offset[i] == b->child_offset[i-1]; i--);
+ for (i = nchilds; b->child_offset[i] == b->child_offset[i - 1]; i--) ;
split_leafs(b, b->child_offset, i, axis);
- assert( b->child_offset[0] == 0 && b->child_offset[i] == tot_leafs );
+ assert(b->child_offset[0] == 0 && b->child_offset[i] == tot_leafs);
return i;
}
@@ -279,20 +279,19 @@ int rtbuild_median_split(RTBuilder *b, float *separators, int nchilds, int axis)
{
return rtbuild_mean_split(b, nchilds, axis);
}
- else
- {
+ else {
int i;
b->split_axis = axis;
//Calculate child offsets
b->child_offset[0] = 0;
- for (i=0; i<nchilds-1; i++)
- b->child_offset[i+1] = split_leafs_by_plane(b, b->child_offset[i], size, separators[i]);
+ for (i = 0; i < nchilds - 1; i++)
+ b->child_offset[i + 1] = split_leafs_by_plane(b, b->child_offset[i], size, separators[i]);
b->child_offset[nchilds] = size;
- for (i=0; i<nchilds; i++)
- if (b->child_offset[i+1] - b->child_offset[i] == size)
+ for (i = 0; i < nchilds; i++)
+ if (b->child_offset[i + 1] - b->child_offset[i] == size)
return rtbuild_mean_split(b, nchilds, axis);
return nchilds;
@@ -306,9 +305,9 @@ int rtbuild_median_split_largest_axis(RTBuilder *b, int nchilds)
rtbuild_calc_bb(b);
- la = bb_largest_axis(b->bb, b->bb+3);
- for (i=1; i<nchilds; i++)
- separators[i-1] = (b->bb[la+3]-b->bb[la])*i / nchilds;
+ la = bb_largest_axis(b->bb, b->bb + 3);
+ for (i = 1; i < nchilds; i++)
+ separators[i - 1] = (b->bb[la + 3] - b->bb[la]) * i / nchilds;
return rtbuild_median_split(b, separators, nchilds, la);
}
@@ -317,8 +316,7 @@ int rtbuild_median_split_largest_axis(RTBuilder *b, int nchilds)
//Heuristics Object Splitter
-struct SweepCost
-{
+struct SweepCost {
float bb[6];
float cost;
};
@@ -333,30 +331,30 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds)
if (size > nchilds) {
float bcost = FLT_MAX;
- baxis = -1, boffset = size/2;
+ baxis = -1, boffset = size / 2;
- SweepCost *sweep = (SweepCost*)MEM_mallocN( sizeof(SweepCost)*size, "RTBuilder.HeuristicSweep" );
+ 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);
+ copy_v3_v3(sweep[i].bb + 3, obj[i]->bb + 3);
sweep[i].cost = obj[i]->cost;
}
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]);
- sweep[i].bb[3] = MAX2(obj[i]->bb[3], sweep[i+1].bb[3]);
- sweep[i].bb[4] = MAX2(obj[i]->bb[4], sweep[i+1].bb[4]);
- sweep[i].bb[5] = MAX2(obj[i]->bb[5], sweep[i+1].bb[5]);
- sweep[i].cost = obj[i]->cost + sweep[i+1].cost;
+ 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]);
+ sweep[i].bb[3] = MAX2(obj[i]->bb[3], sweep[i + 1].bb[3]);
+ sweep[i].bb[4] = MAX2(obj[i]->bb[4], sweep[i + 1].bb[4]);
+ sweep[i].bb[5] = MAX2(obj[i]->bb[5], sweep[i + 1].bb[5]);
+ sweep[i].cost = obj[i]->cost + sweep[i + 1].cost;
}
// right_cost += obj[i]->cost;
}
@@ -371,7 +369,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<size; i++) {
+ for (int i = 1; i < size; i++) {
//Worst case heuristic (cost of each child is linear)
float hcost, left_side, right_side;
@@ -379,24 +377,24 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds)
// makes tree construction quicker, left out for now to test (brecht)
// left_side = bb_area(sweep_left.bb, sweep_left.bb+3)*(sweep_left.cost+logf((float)i));
// right_side= bb_area(sweep[i].bb, sweep[i].bb+3)*(sweep[i].cost+logf((float)size-i));
- left_side = bb_area(sweep_left.bb, sweep_left.bb+3)*(sweep_left.cost);
- right_side= bb_area(sweep[i].bb, sweep[i].bb+3)*(sweep[i].cost);
- hcost = left_side+right_side;
+ left_side = bb_area(sweep_left.bb, sweep_left.bb + 3) * (sweep_left.cost);
+ right_side = bb_area(sweep[i].bb, sweep[i].bb + 3) * (sweep[i].cost);
+ hcost = left_side + right_side;
assert(left_side >= 0);
assert(right_side >= 0);
- if (left_side > bcost) break; //No way we can find a better heuristic in this axis
+ if (left_side > bcost) break; //No way we can find a better heuristic in this axis
assert(hcost >= 0);
// this makes sure the tree built is the same whatever is the order of the sorting axis
- if ( hcost < bcost || (hcost == bcost && axis < baxis)) {
+ if (hcost < bcost || (hcost == bcost && axis < baxis)) {
bcost = hcost;
baxis = axis;
boffset = i;
}
- DO_MIN( obj[i]->bb, sweep_left.bb );
- DO_MAX( obj[i]->bb+3, sweep_left.bb+3 );
+ DO_MIN(obj[i]->bb, sweep_left.bb);
+ DO_MAX(obj[i]->bb + 3, sweep_left.bb + 3);
sweep_left.cost += obj[i]->cost;
// right_cost -= obj[i]->cost; if (right_cost < 0) right_cost = 0;
@@ -426,10 +424,10 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds)
/* Adjust sorted arrays for childs */
- for (int i=0; i<boffset; i++) b->sorted_begin[baxis][i]->selected = true;
- for (int i=boffset; i<size; i++) b->sorted_begin[baxis][i]->selected = false;
- for (int i=0; i<3; i++)
- std::stable_partition( b->sorted_begin[i], b->sorted_end[i], selected_node );
+ for (int i = 0; i < boffset; i++) b->sorted_begin[baxis][i]->selected = true;
+ for (int i = boffset; i < size; i++) b->sorted_begin[baxis][i]->selected = false;
+ for (int i = 0; i < 3; i++)
+ std::stable_partition(b->sorted_begin[i], b->sorted_end[i], selected_node);
return nchilds;
}
@@ -445,13 +443,13 @@ static void split_leafs(RTBuilder *b, int *nth, int partitions, int split_axis)
int i;
b->split_axis = split_axis;
- for (i=0; i < partitions-1; i++)
+ for (i = 0; i < partitions - 1; i++)
{
- assert(nth[i] < nth[i+1] && nth[i+1] < nth[partitions]);
+ assert(nth[i] < nth[i + 1] && nth[i + 1] < nth[partitions]);
- if (split_axis == 0) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object, 0>);
- if (split_axis == 1) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object, 1>);
- if (split_axis == 2) std::nth_element(b, nth[i], nth[i+1], nth[partitions], obj_bb_compare<RTBuilder::Object, 2>);
+ if (split_axis == 0) std::nth_element(b, nth[i], nth[i + 1], nth[partitions], obj_bb_compare<RTBuilder::Object, 0>);
+ if (split_axis == 1) std::nth_element(b, nth[i], nth[i + 1], nth[partitions], obj_bb_compare<RTBuilder::Object, 1>);
+ if (split_axis == 2) std::nth_element(b, nth[i], nth[i + 1], nth[partitions], obj_bb_compare<RTBuilder::Object, 2>);
}
}
#endif
@@ -461,20 +459,20 @@ static void split_leafs(RTBuilder *b, int *nth, int partitions, int split_axis)
*/
float bb_volume(float *min, float *max)
{
- return (max[0]-min[0])*(max[1]-min[1])*(max[2]-min[2]);
+ return (max[0] - min[0]) * (max[1] - min[1]) * (max[2] - min[2]);
}
float bb_area(float *min, float *max)
{
float sub[3], a;
- sub[0] = max[0]-min[0];
- sub[1] = max[1]-min[1];
- sub[2] = max[2]-min[2];
-
- a = (sub[0]*sub[1] + sub[0]*sub[2] + sub[1]*sub[2])*2;
- /* used to have an assert() here on negative results
- * however, in this case its likely some overflow or ffast math error.
- * so just return 0.0f instead. */
+ sub[0] = max[0] - min[0];
+ sub[1] = max[1] - min[1];
+ sub[2] = max[2] - min[2];
+
+ a = (sub[0] * sub[1] + sub[0] * sub[2] + sub[1] * sub[2]) * 2;
+ /* used to have an assert() here on negative results
+ * however, in this case its likely some overflow or ffast math error.
+ * so just return 0.0f instead. */
return a < 0.0f ? 0.0f : a;
}
@@ -482,9 +480,9 @@ int bb_largest_axis(float *min, float *max)
{
float sub[3];
- sub[0] = max[0]-min[0];
- sub[1] = max[1]-min[1];
- sub[2] = max[2]-min[2];
+ 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[2])
return 0;
@@ -502,10 +500,10 @@ int bb_largest_axis(float *min, float *max)
int bb_fits_inside(float *outer_min, float *outer_max, float *inner_min, float *inner_max)
{
int i;
- for (i=0; i<3; i++)
+ for (i = 0; i < 3; i++)
if (outer_min[i] > inner_min[i]) return 0;
- for (i=0; i<3; i++)
+ for (i = 0; i < 3; i++)
if (outer_max[i] < inner_max[i]) return 0;
return 1;
diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.h b/source/blender/render/intern/raytrace/rayobject_rtbuild.h
index f6e9aabf43d..22e3d009c07 100644
--- a/source/blender/render/intern/raytrace/rayobject_rtbuild.h
+++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.h
@@ -52,10 +52,8 @@ extern "C" {
#define RTBUILD_MAX_CHILDS 32
-typedef struct RTBuilder
-{
- struct Object
- {
+typedef struct RTBuilder {
+ struct Object {
RayObject *obj;
float cost;
float bb[6];
@@ -63,8 +61,7 @@ typedef struct RTBuilder
};
/* list to all primitives added in this tree */
- struct
- {
+ struct {
Object *begin, *end;
int maxsize;
} primitives;
@@ -76,7 +73,7 @@ typedef struct RTBuilder
int split_axis;
/* child partitions calculated during splitting */
- int child_offset[RTBUILD_MAX_CHILDS+1];
+ int child_offset[RTBUILD_MAX_CHILDS + 1];
// int child_sorted_axis; /* -1 if not sorted */
@@ -85,17 +82,17 @@ typedef struct RTBuilder
} RTBuilder;
/* used during creation */
-RTBuilder* rtbuild_create(int size);
+RTBuilder *rtbuild_create(int size);
void rtbuild_free(RTBuilder *b);
void rtbuild_add(RTBuilder *b, RayObject *o);
void rtbuild_done(RTBuilder *b, RayObjectControl *c);
void rtbuild_merge_bb(RTBuilder *b, float *min, float *max);
int rtbuild_size(RTBuilder *b);
-RayObject* rtbuild_get_primitive(RTBuilder *b, int offset);
+RayObject *rtbuild_get_primitive(RTBuilder *b, int offset);
/* used during tree reorganization */
-RTBuilder* rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp);
+RTBuilder *rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp);
/* Calculates child partitions and returns number of efectively needed partitions */
int rtbuild_get_largest_axis(RTBuilder *b);
diff --git a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
index 3cf2b4b5d5f..697ba9ad6e2 100644
--- a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
@@ -40,10 +40,9 @@
#ifdef __SSE__
-#define DFS_STACK_SIZE 256
+#define DFS_STACK_SIZE 256
-struct SVBVHTree
-{
+struct SVBVHTree {
RayObject rayobj;
SVBVHNode *root;
@@ -56,11 +55,10 @@ struct SVBVHTree
/*
* Cost to test N childs
*/
-struct PackCost
-{
+struct PackCost {
float operator()(int n)
{
- return (n / 4) + ((n % 4) > 2 ? 1 : n%4);
+ return (n / 4) + ((n % 4) > 2 ? 1 : n % 4);
}
};
@@ -72,11 +70,11 @@ void bvh_done<SVBVHTree>(SVBVHTree *obj)
//TODO find a away to exactly calculate the needed memory
MemArena *arena1 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "svbvh arena");
- BLI_memarena_use_malloc(arena1);
+ BLI_memarena_use_malloc(arena1);
MemArena *arena2 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "svbvh arena2");
- BLI_memarena_use_malloc(arena2);
- BLI_memarena_use_align(arena2, 16);
+ BLI_memarena_use_malloc(arena2);
+ BLI_memarena_use_align(arena2, 16);
//Build and optimize the tree
if (0) {
@@ -123,12 +121,12 @@ void bvh_done<SVBVHTree>(SVBVHTree *obj)
obj->node_arena = arena2;
obj->cost = 1.0;
- rtbuild_free( obj->builder );
+ rtbuild_free(obj->builder);
obj->builder = NULL;
}
template<int StackSize>
-int intersect(SVBVHTree *obj, Isect* isec)
+int intersect(SVBVHTree *obj, Isect *isec)
{
//TODO renable hint support
if (RE_rayobject_isAligned(obj->root)) {
@@ -138,7 +136,7 @@ int intersect(SVBVHTree *obj, Isect* isec)
return svbvh_node_stack_raycast<StackSize, false>(obj->root, isec);
}
else
- return RE_rayobject_intersect( (RayObject*) obj->root, isec );
+ return RE_rayobject_intersect( (RayObject *) obj->root, isec);
}
template<class Tree>
@@ -147,7 +145,7 @@ void bvh_hint_bb(Tree *tree, LCTSHint *hint, float *UNUSED(min), float *UNUSED(m
//TODO renable hint support
{
hint->size = 0;
- hint->stack[hint->size++] = (RayObject*)tree->root;
+ hint->stack[hint->size++] = (RayObject *)tree->root;
}
}
/* the cast to pointer function is needed to workarround gcc bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11407 */
@@ -156,20 +154,20 @@ RayObjectAPI make_api()
{
static RayObjectAPI api =
{
- (RE_rayobject_raycast_callback) ((int(*)(Tree*, Isect*)) &intersect<STACK_SIZE>),
- (RE_rayobject_add_callback) ((void(*)(Tree*, RayObject*)) &bvh_add<Tree>),
- (RE_rayobject_done_callback) ((void(*)(Tree*)) &bvh_done<Tree>),
- (RE_rayobject_free_callback) ((void(*)(Tree*)) &bvh_free<Tree>),
- (RE_rayobject_merge_bb_callback)((void(*)(Tree*, float*, float*)) &bvh_bb<Tree>),
- (RE_rayobject_cost_callback) ((float(*)(Tree*)) &bvh_cost<Tree>),
- (RE_rayobject_hint_bb_callback) ((void(*)(Tree*, LCTSHint*, float*, float*)) &bvh_hint_bb<Tree>)
+ (RE_rayobject_raycast_callback) ((int (*)(Tree *, Isect *)) & intersect<STACK_SIZE>),
+ (RE_rayobject_add_callback) ((void (*)(Tree *, RayObject *)) & bvh_add<Tree>),
+ (RE_rayobject_done_callback) ((void (*)(Tree *)) & bvh_done<Tree>),
+ (RE_rayobject_free_callback) ((void (*)(Tree *)) & bvh_free<Tree>),
+ (RE_rayobject_merge_bb_callback)((void (*)(Tree *, float *, float *)) & bvh_bb<Tree>),
+ (RE_rayobject_cost_callback) ((float (*)(Tree *)) & bvh_cost<Tree>),
+ (RE_rayobject_hint_bb_callback) ((void (*)(Tree *, LCTSHint *, float *, float *)) & bvh_hint_bb<Tree>)
};
return api;
}
template<class Tree>
-RayObjectAPI* bvh_get_api(int maxstacksize)
+RayObjectAPI *bvh_get_api(int maxstacksize)
{
static RayObjectAPI bvh_api256 = make_api<Tree, 1024>();
diff --git a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp
index 47e78b8912e..9e7075438cb 100644
--- a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp
@@ -55,10 +55,9 @@ int tot_hints = 0;
#include <queue>
#include <algorithm>
-#define DFS_STACK_SIZE 256
+#define DFS_STACK_SIZE 256
-struct VBVHTree
-{
+struct VBVHTree {
RayObject rayobj;
VBVHNode *root;
MemArena *node_arena;
@@ -69,8 +68,7 @@ struct VBVHTree
/*
* Cost to test N childs
*/
-struct PackCost
-{
+struct PackCost {
float operator()(int n)
{
return n;
@@ -84,7 +82,7 @@ void bvh_done<VBVHTree>(VBVHTree *obj)
//TODO find a away to exactly calculate the needed memory
MemArena *arena1 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "vbvh arena");
- BLI_memarena_use_malloc(arena1);
+ BLI_memarena_use_malloc(arena1);
//Build and optimize the tree
if (1) {
@@ -107,10 +105,10 @@ void bvh_done<VBVHTree>(VBVHTree *obj)
obj->root = NULL;
}
else {
-/*
- TODO
+ /* TODO */
+#if 0
MemArena *arena2 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "vbvh arena2");
- BLI_memarena_use_malloc(arena2);
+ BLI_memarena_use_malloc(arena2);
//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
@@ -119,11 +117,11 @@ void bvh_done<VBVHTree>(VBVHTree *obj)
obj->root = Reorganize_VBVH<OVBVHNode>(arena1).transform(root);
BLI_memarena_free(arena2);
- */
+#endif
}
//Cleanup
- rtbuild_free( obj->builder );
+ rtbuild_free(obj->builder);
obj->builder = NULL;
obj->node_arena = arena1;
@@ -131,17 +129,17 @@ void bvh_done<VBVHTree>(VBVHTree *obj)
}
template<int StackSize>
-int intersect(VBVHTree *obj, Isect* isec)
+int intersect(VBVHTree *obj, Isect *isec)
{
//TODO renable hint support
if (RE_rayobject_isAligned(obj->root)) {
if (isec->mode == RE_RAY_SHADOW)
- return bvh_node_stack_raycast<VBVHNode, StackSize, false, true>( obj->root, isec);
+ return bvh_node_stack_raycast<VBVHNode, StackSize, false, true>(obj->root, isec);
else
- return bvh_node_stack_raycast<VBVHNode, StackSize, false, false>( obj->root, isec);
+ return bvh_node_stack_raycast<VBVHNode, StackSize, false, false>(obj->root, isec);
}
else
- return RE_rayobject_intersect( (RayObject*) obj->root, isec );
+ return RE_rayobject_intersect( (RayObject *) obj->root, isec);
}
template<class Tree>
@@ -150,7 +148,7 @@ void bvh_hint_bb(Tree *tree, LCTSHint *hint, float *UNUSED(min), float *UNUSED(m
//TODO renable hint support
{
hint->size = 0;
- hint->stack[hint->size++] = (RayObject*)tree->root;
+ hint->stack[hint->size++] = (RayObject *)tree->root;
}
}
@@ -178,20 +176,20 @@ RayObjectAPI make_api()
{
static RayObjectAPI api =
{
- (RE_rayobject_raycast_callback) ((int(*)(Tree*, Isect*)) &intersect<STACK_SIZE>),
- (RE_rayobject_add_callback) ((void(*)(Tree*, RayObject*)) &bvh_add<Tree>),
- (RE_rayobject_done_callback) ((void(*)(Tree*)) &bvh_done<Tree>),
- (RE_rayobject_free_callback) ((void(*)(Tree*)) &bvh_free<Tree>),
- (RE_rayobject_merge_bb_callback)((void(*)(Tree*, float*, float*)) &bvh_bb<Tree>),
- (RE_rayobject_cost_callback) ((float(*)(Tree*)) &bvh_cost<Tree>),
- (RE_rayobject_hint_bb_callback) ((void(*)(Tree*, LCTSHint*, float*, float*)) &bvh_hint_bb<Tree>)
+ (RE_rayobject_raycast_callback) ((int (*)(Tree *, Isect *)) & intersect<STACK_SIZE>),
+ (RE_rayobject_add_callback) ((void (*)(Tree *, RayObject *)) & bvh_add<Tree>),
+ (RE_rayobject_done_callback) ((void (*)(Tree *)) & bvh_done<Tree>),
+ (RE_rayobject_free_callback) ((void (*)(Tree *)) & bvh_free<Tree>),
+ (RE_rayobject_merge_bb_callback)((void (*)(Tree *, float *, float *)) & bvh_bb<Tree>),
+ (RE_rayobject_cost_callback) ((float (*)(Tree *)) & bvh_cost<Tree>),
+ (RE_rayobject_hint_bb_callback) ((void (*)(Tree *, LCTSHint *, float *, float *)) & bvh_hint_bb<Tree>)
};
return api;
}
template<class Tree>
-RayObjectAPI* bvh_get_api(int maxstacksize)
+RayObjectAPI *bvh_get_api(int maxstacksize)
{
static RayObjectAPI bvh_api256 = make_api<Tree, 1024>();
diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h
index a47bd27d11b..1e9a0319b2f 100644
--- a/source/blender/render/intern/raytrace/reorganize.h
+++ b/source/blender/render/intern/raytrace/reorganize.h
@@ -57,13 +57,13 @@ extern int tot_pushdown;
template<class Node>
bool node_fits_inside(Node *a, Node *b)
{
- return bb_fits_inside(b->bb, b->bb+3, a->bb, a->bb+3);
+ return bb_fits_inside(b->bb, b->bb + 3, a->bb, a->bb + 3);
}
template<class Node>
-void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair<float, Node*> &cost)
+void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair<float, Node *> &cost)
{
- std::queue<Node*> q;
+ std::queue<Node *> q;
q.push(tree);
while (!q.empty()) {
@@ -72,8 +72,8 @@ void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair<float, Nod
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) );
+ 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)
q.push(child);
}
@@ -84,11 +84,11 @@ static int tot_moves = 0;
template<class Node>
void reorganize(Node *root)
{
- std::queue<Node*> q;
+ std::queue<Node *> q;
q.push(root);
while (!q.empty()) {
- Node * node = q.front();
+ Node *node = q.front();
q.pop();
if (RE_rayobject_isAligned(node->child)) {
@@ -96,7 +96,7 @@ void reorganize(Node *root)
assert(RE_rayobject_isAligned(*prev));
q.push(*prev);
- std::pair<float, Node*> best(FLT_MAX, root);
+ std::pair<float, Node *> best(FLT_MAX, root);
reorganize_find_fittest_parent(root, *prev, best);
if (best.second == node) {
@@ -129,7 +129,7 @@ void reorganize(Node *root)
template<class Node>
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; ) {
Node *next = (*prev)->sibling;
@@ -160,12 +160,12 @@ void pushup(Node *parent)
{
if (is_leaf(parent)) return;
- float p_area = bb_area(parent->bb, parent->bb+3);
+ float p_area = bb_area(parent->bb, parent->bb + 3);
Node **prev = &parent->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 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) {
append_sibling(child, child->child);
@@ -201,7 +201,7 @@ void pushup_simd(Node *parent)
Node **prev = &parent->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;
@@ -227,7 +227,7 @@ template<class Node>
void pushdown(Node *parent)
{
Node **s_child = &parent->child;
- Node * child = parent->child;
+ Node *child = parent->child;
while (child && RE_rayobject_isAligned(child)) {
Node *next = child->sibling;
@@ -236,18 +236,18 @@ void pushdown(Node *parent)
//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)) {
+ 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)
- *s_child = child->sibling;
- child->sibling = i->child;
- i->child = child;
- next_s_child = s_child;
+ *s_child = child->sibling;
+ child->sibling = i->child;
+ i->child = child;
+ next_s_child = s_child;
- tot_pushdown++;
- break;
- }
+ tot_pushdown++;
+ break;
+ }
child = next;
s_child = next_s_child;
}
@@ -273,13 +273,13 @@ float bvh_refit(Node *node)
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);
+ 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) {
DO_MIN(child->bb, node->bb);
- DO_MAX(child->bb+3, node->bb+3);
+ DO_MAX(child->bb + 3, node->bb + 3);
}
- total += old_area - bb_area(node->bb, node->bb+3);
+ total += old_area - bb_area(node->bb, node->bb + 3);
return total;
}
@@ -289,12 +289,11 @@ float bvh_refit(Node *node)
* with the purpose to reduce the expected cost (eg.: number of BB tests).
*/
#include <vector>
-#define MAX_CUT_SIZE 4 /* svbvh assumes max 4 children! */
-#define MAX_OPTIMIZE_CHILDS MAX_CUT_SIZE
+#define MAX_CUT_SIZE 4 /* svbvh assumes max 4 children! */
+#define MAX_OPTIMIZE_CHILDS MAX_CUT_SIZE
-struct OVBVHNode
-{
- float bb[6];
+struct OVBVHNode {
+ float bb[6];
OVBVHNode *child;
OVBVHNode *sibling;
@@ -306,7 +305,7 @@ struct OVBVHNode
float cut_cost[MAX_CUT_SIZE];
float get_cost(int cutsize)
{
- return cut_cost[cutsize-1];
+ return cut_cost[cutsize - 1];
}
/*
@@ -316,7 +315,7 @@ struct OVBVHNode
int cut_size[MAX_CUT_SIZE];
int get_cut_size(int parent_cut_size)
{
- return cut_size[parent_cut_size-1];
+ return cut_size[parent_cut_size - 1];
}
/*
@@ -327,19 +326,21 @@ struct OVBVHNode
{
if (cutsize == 1) {
**cut = this;
- *cut = &(**cut)->sibling;
+ *cut = &(**cut)->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 );
+ child->set_cut(1, cut);
cutsize--;
}
assert(cutsize == 0);
}
- else
- for (OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling)
- child->set_cut( child->get_cut_size( cutsize ), cut );
+ else {
+ for (OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) {
+ child->set_cut(child->get_cut_size(cutsize), cut);
+ }
+ }
}
}
@@ -365,8 +366,7 @@ struct OVBVHNode
*
*/
template<class Node, class TestCost>
-struct VBVH_optimalPackSIMD
-{
+struct VBVH_optimalPackSIMD {
TestCost testcost;
VBVH_optimalPackSIMD(TestCost testcost)
@@ -377,8 +377,7 @@ struct VBVH_optimalPackSIMD
/*
* calc best cut on a node
*/
- struct calc_best
- {
+ struct calc_best {
Node *child[MAX_OPTIMIZE_CHILDS];
float child_hit_prob[MAX_OPTIMIZE_CHILDS];
@@ -387,10 +386,10 @@ struct VBVH_optimalPackSIMD
int nchilds = 0;
//Fetch childs and needed data
{
- float parent_area = bb_area(node->bb, node->bb+3);
+ float parent_area = bb_area(node->bb, node->bb + 3);
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;
+ this->child_hit_prob[nchilds] = (parent_area != 0.0f) ? bb_area(child->bb, child->bb + 3) / parent_area : 1.0f;
nchilds++;
}
@@ -399,7 +398,7 @@ 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
+ 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++) {
@@ -410,13 +409,13 @@ struct VBVH_optimalPackSIMD
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++) {
+ 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;
+ if (new_cost < cost[i][size + cut]) {
+ cost[i][size + cut] = new_cost;
+ bt[i][size + cut] = cut;
}
}
}
@@ -424,11 +423,11 @@ struct VBVH_optimalPackSIMD
//Save the ways to archieve the minimum cost with a given cutsize
for (int i = nchilds; i <= MAX_CUT_SIZE; i++) {
- node->cut_cost[i-1] = cost[nchilds][i];
+ node->cut_cost[i - 1] = cost[nchilds][i];
if (cost[nchilds][i] < INFINITY) {
int current_size = i;
- for (int j=nchilds; j>0; j--) {
- child[j-1]->cut_size[i-1] = bt[j][current_size];
+ for (int j = nchilds; j > 0; j--) {
+ child[j - 1]->cut_size[i - 1] = bt[j][current_size];
current_size -= bt[j][current_size];
}
}
@@ -439,23 +438,23 @@ 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) {
calc_costs(child);
nchilds++;
}
- for (int i=0; i<MAX_CUT_SIZE; i++)
+ for (int i = 0; i < MAX_CUT_SIZE; i++)
node->cut_cost[i] = INFINITY;
//We are not allowed to look on nodes with with so many childs
if (nchilds > MAX_CUT_SIZE) {
float cost = 0;
- float parent_area = bb_area(node->bb, node->bb+3);
+ float parent_area = bb_area(node->bb, node->bb + 3);
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);
+ cost += ((parent_area != 0.0f) ? (bb_area(child->bb, child->bb + 3) / parent_area) : 1.0f) * child->get_cost(1);
}
cost += testcost(nchilds);
@@ -466,7 +465,7 @@ struct VBVH_optimalPackSIMD
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]) {
node->cut_cost[0] = m;
@@ -491,7 +490,7 @@ struct VBVH_optimalPackSIMD
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 a4044db8208..a58094e5021 100644
--- a/source/blender/render/intern/raytrace/svbvh.h
+++ b/source/blender/render/intern/raytrace/svbvh.h
@@ -41,8 +41,7 @@
#include <stdio.h>
#include <algorithm>
-struct SVBVHNode
-{
+struct SVBVHNode {
float child_bb[24];
SVBVHNode *child[4];
int nchilds;
@@ -120,12 +119,12 @@ static int svbvh_node_stack_raycast(SVBVHNode *root, Isect *isec)
node = stack[--stack_pos];
if (!svbvh_node_is_leaf(node)) {
- int nchilds= node->nchilds;
+ int nchilds = node->nchilds;
if (nchilds == 4) {
- float *child_bb= node->child_bb;
- int res = svbvh_bb_intersect_test_simd4(isec, ((__m128*) (child_bb)));
- SVBVHNode **child= node->child;
+ 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);
@@ -135,8 +134,8 @@ static int svbvh_node_stack_raycast(SVBVHNode *root, Isect *isec)
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;
+ float *child_bb = node->child_bb;
+ SVBVHNode **child = node->child;
int i;
for (i = 0; i < nchilds; i++) {
@@ -147,7 +146,7 @@ static int svbvh_node_stack_raycast(SVBVHNode *root, Isect *isec)
}
}
else {
- hit |= RE_rayobject_intersect((RayObject*)node, isec);
+ hit |= RE_rayobject_intersect((RayObject *)node, isec);
if (SHADOW && hit) break;
}
}
@@ -157,32 +156,30 @@ static int svbvh_node_stack_raycast(SVBVHNode *root, Isect *isec)
template<>
-inline void bvh_node_merge_bb<SVBVHNode>(SVBVHNode *node, float *min, float *max)
+inline void bvh_node_merge_bb<SVBVHNode>(SVBVHNode *node, float min[3], float max[3])
{
if (is_leaf(node)) {
- RE_rayobject_merge_bb((RayObject*)node, min, max);
+ RE_rayobject_merge_bb((RayObject *)node, min, max);
}
else {
- int i=0;
- while (i+4 <= node->nchilds) {
- float *res = node->child_bb + 6*i;
+ int i;
+ for (i = 0; i + 4 <= node->nchilds; i += 4) {
+ float *res = node->child_bb + 6 * i;
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]);
+ min[j] = minf(res[4 * j + 0],
+ minf(res[4 * j + 1],
+ minf(res[4 * j + 2],
+ minf(res[4 * j + 3], min[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]);
- max[j] = MAX2(max[j], res[4*(j+3)+3]);
+ max[j] = maxf(res[4 * (j + 3) + 0],
+ maxf(res[4 * (j + 3) + 1],
+ maxf(res[4 * (j + 3) + 2],
+ maxf(res[4 * (j + 3) + 3], max[j]))));
}
-
- i += 4;
}
- for ( ; i < node->nchilds; i++) {
+ for (; i < node->nchilds; i++) {
DO_MIN(node->child_bb + 6 * i, min);
DO_MAX(node->child_bb + 3 + 6 * i, max);
}
@@ -195,8 +192,7 @@ inline void bvh_node_merge_bb<SVBVHNode>(SVBVHNode *node, float *min, float *max
* Builds a SVBVH tree form a VBVHTree
*/
template<class OldNode>
-struct Reorganize_SVBVH
-{
+struct Reorganize_SVBVH {
MemArena *arena;
float childs_per_node;
@@ -222,14 +218,14 @@ struct Reorganize_SVBVH
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++) {
- printf("%i childs per node: %d/%d = %f\n", i, nodes_with_childs[i], nodes, nodes_with_childs[i]/float(nodes));
+ printf("%i childs per node: %d/%d = %f\n", i, nodes_with_childs[i], nodes, nodes_with_childs[i] / float(nodes));
}
}
}
SVBVHNode *create_node(int nchilds)
{
- SVBVHNode *node = (SVBVHNode*)BLI_memarena_alloc(arena, sizeof(SVBVHNode));
+ SVBVHNode *node = (SVBVHNode *)BLI_memarena_alloc(arena, sizeof(SVBVHNode));
node->nchilds = nchilds;
return node;
@@ -237,22 +233,22 @@ struct Reorganize_SVBVH
void copy_bb(float *bb, const float *old_bb)
{
- std::copy(old_bb, old_bb+6, bb);
+ std::copy(old_bb, old_bb + 6, bb);
}
void prepare_for_simd(SVBVHNode *node)
{
- int i=0;
+ int i = 0;
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++) {
- 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];
- res[4*j+3] = vec_tmp[6*3+j];
+ 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++) {
+ 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];
+ res[4 * j + 3] = vec_tmp[6 * 3 + j];
}
i += 4;
@@ -262,15 +258,15 @@ struct Reorganize_SVBVH
/* amt must be power of two */
inline int padup(int num, int amt)
{
- return ((num+(amt-1))&~(amt-1));
+ return ((num + (amt - 1)) & ~(amt - 1));
}
SVBVHNode *transform(OldNode *old)
{
if (is_leaf(old))
- return (SVBVHNode*)old;
+ return (SVBVHNode *)old;
if (is_leaf(old->child))
- return (SVBVHNode*)old->child;
+ return (SVBVHNode *)old->child;
int nchilds = count_childs(old);
int alloc_childs = nchilds;
@@ -284,27 +280,27 @@ struct Reorganize_SVBVH
if (nchilds < 16)
nodes_with_childs[nchilds]++;
- useless_bb += alloc_childs-nchilds;
+ useless_bb += 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;
- copy_bb(node->child_bb+alloc_childs*6, def_bb);
+ copy_bb(node->child_bb + alloc_childs * 6, def_bb);
}
- int i=nchilds;
+ int i = nchilds;
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)) {
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);
+ 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 {
- copy_bb(node->child_bb+i*6, o_child->bb);
+ copy_bb(node->child_bb + i * 6, o_child->bb);
}
}
assert(i == 0);
diff --git a/source/blender/render/intern/raytrace/vbvh.h b/source/blender/render/intern/raytrace/vbvh.h
index d8ff9000a3f..ec671f95c76 100644
--- a/source/blender/render/intern/raytrace/vbvh.h
+++ b/source/blender/render/intern/raytrace/vbvh.h
@@ -40,9 +40,8 @@
/*
* VBVHNode represents a BVHNode with support for a variable number of childrens
*/
-struct VBVHNode
-{
- float bb[6];
+struct VBVHNode {
+ float bb[6];
VBVHNode *child;
VBVHNode *sibling;
@@ -107,8 +106,7 @@ void append_sibling(Node *node, Node *sibling)
* Builds a binary VBVH from a rtbuild
*/
template<class Node>
-struct BuildBinaryVBVH
-{
+struct BuildBinaryVBVH {
MemArena *arena;
RayObjectControl *control;
@@ -126,7 +124,7 @@ struct BuildBinaryVBVH
Node *create_node()
{
- Node *node = (Node*)BLI_memarena_alloc( arena, sizeof(Node) );
+ Node *node = (Node *)BLI_memarena_alloc(arena, sizeof(Node) );
assert(RE_rayobject_isAligned(node));
node->sibling = NULL;
@@ -146,7 +144,7 @@ struct BuildBinaryVBVH
{
return _transform(builder);
- } catch(...)
+ } catch (...)
{
}
return NULL;
@@ -161,8 +159,8 @@ struct BuildBinaryVBVH
}
else if (size == 1) {
Node *node = create_node();
- INIT_MINMAX(node->bb, node->bb+3);
- rtbuild_merge_bb(builder, node->bb, node->bb+3);
+ 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;
}
@@ -174,7 +172,7 @@ struct BuildBinaryVBVH
Node **child = &node->child;
int nc = rtbuild_split(builder);
- INIT_MINMAX(node->bb, node->bb+3);
+ INIT_MINMAX(node->bb, node->bb + 3);
assert(nc == 2);
for (int i = 0; i < nc; i++) {
@@ -183,7 +181,7 @@ struct BuildBinaryVBVH
*child = _transform(&tmp);
DO_MIN((*child)->bb, node->bb);
- DO_MAX((*child)->bb+3, node->bb+3);
+ DO_MAX((*child)->bb + 3, node->bb + 3);
child = &((*child)->sibling);
}
@@ -194,9 +192,8 @@ struct BuildBinaryVBVH
};
#if 0
-template<class Tree,class OldNode>
-struct Reorganize_VBVH
-{
+template<class Tree, class OldNode>
+struct Reorganize_VBVH {
Tree *tree;
Reorganize_VBVH(Tree *t)
@@ -206,27 +203,27 @@ struct Reorganize_VBVH
VBVHNode *create_node()
{
- VBVHNode *node = (VBVHNode*)BLI_memarena_alloc(tree->node_arena, sizeof(VBVHNode));
+ VBVHNode *node = (VBVHNode *)BLI_memarena_alloc(tree->node_arena, sizeof(VBVHNode));
return node;
}
void copy_bb(VBVHNode *node, OldNode *old)
{
- std::copy( old->bb, old->bb+6, node->bb );
+ std::copy(old->bb, old->bb + 6, node->bb);
}
VBVHNode *transform(OldNode *old)
{
if (is_leaf(old))
- return (VBVHNode*)old;
+ return (VBVHNode *)old;
VBVHNode *node = create_node();
VBVHNode **child_ptr = &node->child;
node->sibling = 0;
- copy_bb(node,old);
+ copy_bb(node, old);
- 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)
{
VBVHNode *n_child = transform(o_child);
*child_ptr = n_child;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index c5315afcc3d..fe8662c51a7 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -903,7 +903,7 @@ static float *get_object_orco(Render *re, Object *ob)
float *orco;
if (!re->orco_hash)
- re->orco_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "get_object_orco gh");
+ re->orco_hash = BLI_ghash_ptr_new("get_object_orco gh");
orco = BLI_ghash_lookup(re->orco_hash, ob);
@@ -925,7 +925,7 @@ static float *get_object_orco(Render *re, Object *ob)
static void set_object_orco(Render *re, void *ob, float *orco)
{
if (!re->orco_hash)
- re->orco_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "set_object_orco gh");
+ re->orco_hash = BLI_ghash_ptr_new("set_object_orco gh");
BLI_ghash_insert(re->orco_hash, ob, orco);
}
@@ -4379,6 +4379,8 @@ static void finalize_render_object(Render *re, ObjectRen *obr, int timeoffset)
/* Baking lets us define a quad split order */
split_quads(obr, re->r.bake_quad_split);
}
+ else if(BKE_object_is_animated(re->scene, ob))
+ split_quads(obr, 1);
else {
if ((re->r.mode & R_SIMPLIFY && re->r.simplify_flag & R_SIMPLE_NO_TRIANGULATE) == 0)
check_non_flat_quads(obr);
@@ -4392,7 +4394,7 @@ static void finalize_render_object(Render *re, ObjectRen *obr, int timeoffset)
if ((a & 255)==0) ver= obr->vertnodes[a>>8].vert;
else ver++;
- DO_MINMAX(ver->co, min, max);
+ minmax_v3v3_v3(min, max, ver->co);
}
if (obr->strandbuf) {
@@ -4418,8 +4420,8 @@ static void finalize_render_object(Render *re, ObjectRen *obr, int timeoffset)
copy_v3_v3(sbound->boundbox[0], smin);
copy_v3_v3(sbound->boundbox[1], smax);
- DO_MINMAX(smin, min, max);
- DO_MINMAX(smax, min, max);
+ minmax_v3v3_v3(min, max, smin);
+ minmax_v3v3_v3(min, max, smax);
}
}
diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c
index a1cee6637f4..21e4e216063 100644
--- a/source/blender/render/intern/source/occlusion.c
+++ b/source/blender/render/intern/source/occlusion.c
@@ -62,7 +62,7 @@
/* ------------------------- Declarations --------------------------- */
#define INVALID_INDEX ((int)(~0))
-#define INVPI 0.31830988618379069f
+#define INVPI ((float)M_1_PI)
#define TOTCHILD 8
#define CACHE_STEP 3
@@ -402,7 +402,7 @@ static int occ_find_bbox_axis(OcclusionTree *tree, int begin, int end, float *mi
INIT_MINMAX(min, max);
for (a = begin; a < end; a++) {
- DO_MINMAX(tree->co[a], min, max);
+ minmax_v3v3_v3(min, max, tree->co[a]);
}
for (a=0; a<3; a++) {
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index c3361d7f280..45de54322f3 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1511,7 +1511,7 @@ static void do_merge_fullsample(Render *re, bNodeTree *ntree)
ntreeCompositTagRender(re->scene);
ntreeCompositTagAnimated(ntree);
- ntreeCompositExecTree(ntree, &re->r, G.background==0);
+ ntreeCompositExecTree(ntree, &re->r, 1, G.background==0);
}
/* ensure we get either composited result or the active layer */
@@ -1675,7 +1675,7 @@ static void do_render_composite_fields_blur_3d(Render *re)
if (re->r.scemode & R_FULL_SAMPLE)
do_merge_fullsample(re, ntree);
else {
- ntreeCompositExecTree(ntree, &re->r, G.background==0);
+ ntreeCompositExecTree(ntree, &re->r, 1, G.background==0);
}
ntree->stats_draw= NULL;
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index c68fb578d4c..f550cd82061 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -2234,8 +2234,8 @@ 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; i<totjitco; i++) {
- DO_MINMAX(jitco[i], min, max);
+ for (i = 0; i < totjitco; i++) {
+ minmax_v3v3_v3(min, max, jitco[i]);
}
RE_rayobject_hint_bb(R.raytree, &bb_hint, min, max);
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index 038394b47dc..f9b0de5b87d 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -90,7 +90,7 @@ extern struct Render R;
*(v1 + 0) += *(v3 + 0) * (fac); \
*(v1 + 1) += *(v3 + 1) * (fac); \
*(v1 + 2) += *(v3 + 2) * (fac); \
-}
+} (void)0
/* initialize material variables in shadeinput,
* doing inverse gamma correction where applicable */
diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c
index cbcc63148e9..690598d8c05 100644
--- a/source/blender/render/intern/source/sss.c
+++ b/source/blender/render/intern/source/sss.c
@@ -762,8 +762,8 @@ ScatterTree *scatter_tree_new(ScatterSettings *ss[3], float scale, float error,
points[i].area= fabsf(area[i])/(tree->scale*tree->scale);
points[i].back= (area[i] < 0.0f);
- mul_v3_fl(points[i].co, 1.0f/tree->scale);
- DO_MINMAX(points[i].co, tree->min, tree->max);
+ mul_v3_fl(points[i].co, 1.0f / tree->scale);
+ minmax_v3v3_v3(tree->min, tree->max, points[i].co);
refpoints[i]= points + i;
}
@@ -990,7 +990,7 @@ void make_sss_tree(Render *re)
{
Material *mat;
- re->sss_hash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "make_sss_tree gh");
+ re->sss_hash= BLI_ghash_ptr_new("make_sss_tree gh");
re->i.infostr= "SSS preprocessing";
re->stats_draw(re->sdh, &re->i);
diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c
index f986be5eaeb..02d342754ea 100644
--- a/source/blender/render/intern/source/strand.c
+++ b/source/blender/render/intern/source/strand.c
@@ -333,8 +333,8 @@ StrandShadeCache *strand_shade_cache_create(void)
StrandShadeCache *cache;
cache= MEM_callocN(sizeof(StrandShadeCache), "StrandShadeCache");
- cache->resulthash= BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, "strand_shade_cache_create1 gh");
- cache->refcounthash= BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, "strand_shade_cache_create2 gh");
+ cache->resulthash= BLI_ghash_pair_new("strand_shade_cache_create1 gh");
+ cache->refcounthash= BLI_ghash_pair_new("strand_shade_cache_create2 gh");
cache->memarena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "strand shade cache arena");
return cache;
@@ -1060,21 +1060,22 @@ void free_strand_surface(Render *re)
BLI_freelistN(&re->strandsurface);
}
-void strand_minmax(StrandRen *strand, float *min, float *max, float width)
+void strand_minmax(StrandRen *strand, float min[3], float max[3], const float width)
{
StrandVert *svert;
- float vec[3], width2= 2.0f*width;
+ const float width2 = width * 2.0f;
+ float vec[3];
int a;
for (a=0, svert=strand->vert; a<strand->totvert; a++, svert++) {
copy_v3_v3(vec, svert->co);
- DO_MINMAX(vec, min, max);
+ minmax_v3v3_v3(min, max, vec);
if (width!=0.0f) {
- vec[0]+= width; vec[1]+= width; vec[2]+= width;
- DO_MINMAX(vec, min, max);
- vec[0]-= width2; vec[1]-= width2; vec[2]-= width2;
- DO_MINMAX(vec, min, max);
+ add_v3_fl(vec, width);
+ minmax_v3v3_v3(min, max, vec);
+ add_v3_fl(vec, -width2);
+ minmax_v3v3_v3(min, max, vec);
}
}
}
diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c
index 111ec75dd27..9187bea641d 100644
--- a/source/blender/render/intern/source/sunsky.c
+++ b/source/blender/render/intern/source/sunsky.c
@@ -1,4 +1,4 @@
- /*
+/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -52,9 +52,9 @@
* */
#define VEC3OPF(v1, v2, op, f1) \
{ \
- v1[0] = (v2[0] op (f1)); \
- v1[1] = (v2[1] op (f1)); \
- v1[2] = (v2[2] op (f1)); \
+ v1[0] = (v2[0] op(f1)); \
+ v1[1] = (v2[1] op(f1)); \
+ v1[2] = (v2[2] op(f1)); \
} (void)0
/**
@@ -125,12 +125,13 @@ static float PerezFunction(struct SunSky *sunsky, const float *lam, float theta,
float den, num;
den = ((1 + lam[0] * expf(lam[1])) *
- (1 + lam[2] * expf(lam[3] * sunsky->theta) + lam[4] * cosf(sunsky->theta) * cosf(sunsky->theta)));
+ (1 + lam[2] * expf(lam[3] * sunsky->theta) + lam[4] * cosf(sunsky->theta) * cosf(sunsky->theta)));
num = ((1 + lam[0] * expf(lam[1] / cosf(theta))) *
- (1 + lam[2] * expf(lam[3] * gamma) + lam[4] * cosf(gamma) * cosf(gamma)));
+ (1 + lam[2] * expf(lam[3] * gamma) + lam[4] * cosf(gamma) * cosf(gamma)));
- return(lvz * num / den);}
+ return(lvz * num / den);
+}
/**
* InitSunSky:
@@ -146,8 +147,8 @@ static float PerezFunction(struct SunSky *sunsky, const float *lam, float theta,
* back_scatter, controls back scatter light
* */
void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness,
- float spread, float sun_brightness, float sun_size, float back_scatter,
- float skyblendfac, short skyblendtype, float sky_exposure, float sky_colorspace)
+ float spread, float sun_brightness, float sun_size, float back_scatter,
+ float skyblendfac, short skyblendtype, float sky_exposure, float sky_colorspace)
{
float theta2;
float theta3;
@@ -162,10 +163,10 @@ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_b
sunsky->sun_brightness = sun_brightness;
sunsky->sun_size = sun_size;
sunsky->backscattered_light = back_scatter;
- sunsky->skyblendfac= skyblendfac;
- sunsky->skyblendtype= skyblendtype;
- sunsky->sky_exposure= -sky_exposure;
- sunsky->sky_colorspace= sky_colorspace;
+ sunsky->skyblendfac = skyblendfac;
+ sunsky->skyblendtype = skyblendtype;
+ sunsky->sky_exposure = -sky_exposure;
+ sunsky->sky_colorspace = sky_colorspace;
sunsky->toSun[0] = toSun[0];
sunsky->toSun[1] = toSun[1];
@@ -175,27 +176,27 @@ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_b
sunsky->sunSolidAngle = 0.25 * M_PI * 1.39 * 1.39 / (150 * 150); // = 6.7443e-05
- theta2 = sunsky->theta*sunsky->theta;
+ theta2 = sunsky->theta * sunsky->theta;
theta3 = theta2 * sunsky->theta;
T = turb;
- T2 = turb*turb;
+ T2 = turb * turb;
chi = (4.0f / 9.0f - T / 120.0f) * ((float)M_PI - 2.0f * sunsky->theta);
sunsky->zenith_Y = (4.0453f * T - 4.9710f) * tanf(chi) - 0.2155f * T + 2.4192f;
sunsky->zenith_Y *= 1000; // conversion from kcd/m^2 to cd/m^2
- if (sunsky->zenith_Y<=0)
+ if (sunsky->zenith_Y <= 0)
sunsky->zenith_Y = 1e-6;
sunsky->zenith_x =
- ( + 0.00165f * theta3 - 0.00374f * theta2 + 0.00208f * sunsky->theta + 0.0f) * T2 +
- ( -0.02902f * theta3 + 0.06377f * theta2 - 0.03202f * sunsky->theta + 0.00394f) * T +
- ( + 0.11693f * theta3 - 0.21196f * theta2 + 0.06052f * sunsky->theta + 0.25885f);
+ (+0.00165f * theta3 - 0.00374f * theta2 + 0.00208f * sunsky->theta + 0.0f) * T2 +
+ (-0.02902f * theta3 + 0.06377f * theta2 - 0.03202f * sunsky->theta + 0.00394f) * T +
+ (+0.11693f * theta3 - 0.21196f * theta2 + 0.06052f * sunsky->theta + 0.25885f);
sunsky->zenith_y =
- ( + 0.00275f * theta3 - 0.00610f * theta2 + 0.00316f * sunsky->theta + 0.0f) * T2 +
- ( -0.04214f * theta3 + 0.08970f * theta2 - 0.04153f * sunsky->theta + 0.00515f) * T +
- ( + 0.15346f * theta3 - 0.26756f * theta2 + 0.06669f * sunsky->theta + 0.26688f);
+ (+0.00275f * theta3 - 0.00610f * theta2 + 0.00316f * sunsky->theta + 0.0f) * T2 +
+ (-0.04214f * theta3 + 0.08970f * theta2 - 0.04153f * sunsky->theta + 0.00515f) * T +
+ (+0.15346f * theta3 - 0.26756f * theta2 + 0.06669f * sunsky->theta + 0.26688f);
sunsky->perez_Y[0] = 0.17872f * T - 1.46303f;
@@ -248,24 +249,24 @@ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_b
* phi, is sun's phi
* color_out, is computed color that shows sky radiance in XYZ color format
* */
-void GetSkyXYZRadiance(struct SunSky* sunsky, float theta, float phi, float color_out[3])
+void GetSkyXYZRadiance(struct SunSky *sunsky, float theta, float phi, float color_out[3])
{
float gamma;
float x, y, Y, X, Z;
- float hfade=1, nfade=1;
+ float hfade = 1, nfade = 1;
- if (theta>(0.5f*(float)M_PI)) {
- hfade = 1.0f-(theta*(float)M_1_PI-0.5f)*2.0f;
- hfade = hfade*hfade*(3.0f-2.0f*hfade);
- theta = 0.5*M_PI;
+ if (theta > (0.5f * (float)M_PI)) {
+ hfade = 1.0f - (theta * (float)M_1_PI - 0.5f) * 2.0f;
+ hfade = hfade * hfade * (3.0f - 2.0f * hfade);
+ theta = 0.5 * M_PI;
}
- if (sunsky->theta>(0.5f*(float)M_PI)) {
- if (theta<=0.5f*(float)M_PI) {
- nfade = 1.0f-(0.5f-theta*(float)M_1_PI)*2.0f;
- nfade *= 1.0f-(sunsky->theta*(float)M_1_PI-0.5f)*2.0f;
- nfade = nfade*nfade*(3.0f-2.0f*nfade);
+ if (sunsky->theta > (0.5f * (float)M_PI)) {
+ if (theta <= 0.5f * (float)M_PI) {
+ nfade = 1.0f - (0.5f - theta * (float)M_1_PI) * 2.0f;
+ nfade *= 1.0f - (sunsky->theta * (float)M_1_PI - 0.5f) * 2.0f;
+ nfade = nfade * nfade * (3.0f - 2.0f * nfade);
}
}
@@ -274,10 +275,10 @@ void GetSkyXYZRadiance(struct SunSky* sunsky, float theta, float phi, float colo
// Compute xyY values
x = PerezFunction(sunsky, sunsky->perez_x, theta, gamma, sunsky->zenith_x);
y = PerezFunction(sunsky, sunsky->perez_y, theta, gamma, sunsky->zenith_y);
- Y = 6.666666667e-5f * nfade * hfade * PerezFunction(sunsky, sunsky->perez_Y, theta, gamma, sunsky->zenith_Y);
+ Y = 6.666666667e-5f *nfade *hfade *PerezFunction(sunsky, sunsky->perez_Y, theta, gamma, sunsky->zenith_Y);
- if (sunsky->sky_exposure!=0.0f)
- Y = 1.0 - exp(Y*sunsky->sky_exposure);
+ if (sunsky->sky_exposure != 0.0f)
+ Y = 1.0 - exp(Y * sunsky->sky_exposure);
X = (x / y) * Y;
Z = ((1 - x - y) / y) * Y;
@@ -295,12 +296,12 @@ void GetSkyXYZRadiance(struct SunSky* sunsky, float theta, float phi, float colo
* varg, shows direction
* color_out, is computed color that shows sky radiance in XYZ color format
* */
-void GetSkyXYZRadiancef(struct SunSky* sunsky, const float varg[3], float color_out[3])
+void GetSkyXYZRadiancef(struct SunSky *sunsky, const float varg[3], float color_out[3])
{
- float theta, phi;
- float v[3];
+ float theta, phi;
+ float v[3];
- copy_v3_v3(v, (float*)varg);
+ copy_v3_v3(v, (float *)varg);
normalize_v3(v);
if (v[2] < 0.001f) {
@@ -336,7 +337,7 @@ static void ComputeAttenuatedSunlight(float theta, int turbidity, float fTau[3])
fAlpha = 1.3f;
fBeta = 0.04608365822050f * turbidity - 0.04586025928522f;
- m = 1.0f/(cosf(theta) + 0.15f*powf(93.885f-theta/(float)M_PI*180.0f, -1.253f));
+ m = 1.0f / (cosf(theta) + 0.15f * powf(93.885f - theta / (float)M_PI * 180.0f, -1.253f));
for (i = 0; i < 3; i++) {
// Rayleigh Scattering
@@ -362,15 +363,15 @@ static void ComputeAttenuatedSunlight(float theta, int turbidity, float fTau[3])
* disf, is distance factor, multiplyed to pixle's z value to compute each pixle's distance to camera,
* */
void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float rayf,
- float inscattf, float extincf, float disf)
+ float inscattf, float extincf, float disf)
{
- const float pi = 3.14159265358f;
+ const float pi = M_PI;
const float n = 1.003f; // refractive index
const float N = 2.545e25;
const float pn = 0.035f;
const float T = 2.0f;
float fTemp, fTemp2, fTemp3, fBeta, fBetaDash;
- float c = (6.544f*T - 6.51f)*1e-17f;
+ float c = (6.544f * T - 6.51f) * 1e-17f;
float K[3] = {0.685f, 0.679f, 0.670f};
float vBetaMieTemp[3];
@@ -387,14 +388,14 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r
sunSky->atm_ExtinctionMultiplier = extincf;
sunSky->atm_DistanceMultiplier = disf;
- sunSky->atm_HGg=0.8;
-
- fLambda[0] = 1/650e-9f;
- fLambda[1] = 1/570e-9f;
- fLambda[2] = 1/475e-9f;
- for (i=0; i < 3; i++) {
- fLambda2[i] = fLambda[i]*fLambda[i];
- fLambda4[i] = fLambda2[i]*fLambda2[i];
+ sunSky->atm_HGg = 0.8;
+
+ fLambda[0] = 1 / 650e-9f;
+ fLambda[1] = 1 / 570e-9f;
+ fLambda[2] = 1 / 475e-9f;
+ for (i = 0; i < 3; i++) {
+ fLambda2[i] = fLambda[i] * fLambda[i];
+ fLambda4[i] = fLambda2[i] * fLambda2[i];
}
vLambda2[0] = fLambda2[0];
@@ -406,19 +407,19 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r
vLambda4[2] = fLambda4[2];
// Rayleigh scattering constants.
- fTemp = pi*pi*(n*n-1)*(n*n-1)*(6+3*pn)/(6-7*pn)/N;
- fBeta = 8*fTemp*pi/3;
+ fTemp = pi * pi * (n * n - 1) * (n * n - 1) * (6 + 3 * pn) / (6 - 7 * pn) / N;
+ fBeta = 8 * fTemp * pi / 3;
VEC3OPF(sunSky->atm_BetaRay, vLambda4, *, fBeta);
- fBetaDash = fTemp/2;
+ fBetaDash = fTemp / 2;
VEC3OPF(sunSky->atm_BetaDashRay, vLambda4, *, fBetaDash);
// Mie scattering constants.
- fTemp2 = 0.434f*c*(2*pi)*(2*pi)*0.5f;
+ fTemp2 = 0.434f * c * (2 * pi) * (2 * pi) * 0.5f;
VEC3OPF(sunSky->atm_BetaDashMie, vLambda2, *, fTemp2);
- fTemp3 = 0.434f*c*pi*(2*pi)*(2*pi);
+ fTemp3 = 0.434f * c * pi * (2 * pi) * (2 * pi);
VEC3OPV(vBetaMieTemp, K, *, fLambda);
VEC3OPF(sunSky->atm_BetaMie, vBetaMieTemp, *, fTemp3);
@@ -434,7 +435,7 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r
* s, is distance
* rgb, contains rendered color value for a pixle
* */
-void AtmospherePixleShader(struct SunSky* sunSky, float view[3], float s, float rgb[3])
+void AtmospherePixleShader(struct SunSky *sunSky, float view[3], float s, float rgb[3])
{
float costheta;
float Phase_1;
@@ -465,7 +466,7 @@ void AtmospherePixleShader(struct SunSky* sunSky, float view[3], float s, float
VEC3OPV(sunSky->atm_BetaRM, sunSky->atm_BetaRay, +, sunSky->atm_BetaMie);
//e^(-(beta_1 + beta_2) * s) = E1
- VEC3OPF(E1, sunSky->atm_BetaRM, *, -s/(float)M_LN2);
+ VEC3OPF(E1, sunSky->atm_BetaRM, *, -s / (float)M_LN2);
E1[0] = exp(E1[0]);
E1[1] = exp(E1[1]);
E1[2] = exp(E1[2]);
@@ -475,7 +476,7 @@ void AtmospherePixleShader(struct SunSky* sunSky, float view[3], float s, float
//Phase2(theta) = (1-g^2)/(1+g-2g*cos(theta))^(3/2)
fTemp = 1 + sunSky->atm_HGg - 2 * sunSky->atm_HGg * costheta;
fTemp = fTemp * sqrtf(fTemp);
- Phase_2 = (1 - sunSky->atm_HGg * sunSky->atm_HGg)/fTemp;
+ Phase_2 = (1 - sunSky->atm_HGg * sunSky->atm_HGg) / fTemp;
VEC3OPF(vTemp1, sunSky->atm_BetaDashRay, *, Phase_1);
VEC3OPF(vTemp2, sunSky->atm_BetaDashMie, *, Phase_2);
diff --git a/source/blender/render/intern/source/texture_ocean.c b/source/blender/render/intern/source/texture_ocean.c
index c13347dc162..4ef88e4740a 100644
--- a/source/blender/render/intern/source/texture_ocean.c
+++ b/source/blender/render/intern/source/texture_ocean.c
@@ -56,7 +56,7 @@ extern struct Render R;
/* ***** actual texture sampling ***** */
int ocean_texture(Tex *tex, float *texvec, TexResult *texres)
{
- OceanTex *ot= tex->ot;
+ OceanTex *ot = tex->ot;
ModifierData *md;
OceanModifierData *omd;
@@ -64,8 +64,8 @@ int ocean_texture(Tex *tex, float *texvec, TexResult *texres)
if ( !(ot) ||
!(ot->object) ||
- !(md = (ModifierData *)modifiers_findByType(ot->object, eModifierType_Ocean)) ||
- !(omd= (OceanModifierData *)md)->ocean)
+ !(md = (ModifierData *)modifiers_findByType(ot->object, eModifierType_Ocean)) ||
+ !(omd = (OceanModifierData *)md)->ocean)
{
return 0;
}
@@ -75,10 +75,10 @@ int ocean_texture(Tex *tex, float *texvec, TexResult *texres)
int retval = TEX_INT;
OceanResult ocr;
- const float u = 0.5f+0.5f*texvec[0];
- const float v = 0.5f+0.5f*texvec[1];
+ const float u = 0.5f + 0.5f * texvec[0];
+ const float v = 0.5f + 0.5f * texvec[1];
- if (omd->oceancache && omd->cached==TRUE) {
+ if (omd->oceancache && omd->cached == TRUE) {
CLAMP(cfra, omd->bakestart, omd->bakeend);
cfra -= omd->bakestart; // shift to 0 based
diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c
index ff715eeca07..ea6b9b890ac 100644
--- a/source/blender/render/intern/source/volume_precache.c
+++ b/source/blender/render/intern/source/volume_precache.c
@@ -150,7 +150,7 @@ void global_bounds_obi(Render *re, ObjectInstanceRen *obi, float *bbmin, float *
/* convert to global space */
mul_m4_v3(re->viewinv, co);
- DO_MINMAX(co, vp->bbmin, vp->bbmax);
+ minmax_v3v3_v3(vp->bbmin, vp->bbmax, co);
}
copy_v3_v3(bbmin, vp->bbmin);
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c
index 4c3c9889d53..cfbdf04d75a 100644
--- a/source/blender/render/intern/source/zbuf.c
+++ b/source/blender/render/intern/source/zbuf.c
@@ -1703,13 +1703,13 @@ void projectverto(const float v1[3], float winmat[][4], float adr[4])
/* calcs homogenic coord of vertex v1 */
float x, y, z;
- x= v1[0];
- y= v1[1];
- z= v1[2];
- adr[0]= x*winmat[0][0] + z*winmat[2][0] + winmat[3][0];
- adr[1]= y*winmat[1][1] + z*winmat[2][1] + winmat[3][1];
- adr[2]= z*winmat[2][2] + winmat[3][2];
- adr[3]= z*winmat[2][3] + winmat[3][3];
+ x = v1[0];
+ y = v1[1];
+ z = v1[2];
+ adr[0] = x * winmat[0][0] + z * winmat[2][0] + winmat[3][0];
+ adr[1] = y * winmat[1][1] + z * winmat[2][1] + winmat[3][1];
+ adr[2] = z * winmat[2][2] + winmat[3][2];
+ adr[3] = z * winmat[2][3] + winmat[3][3];
//printf("hoco %f %f %f %f\n", adr[0], adr[1], adr[2], adr[3]);
}
@@ -1721,13 +1721,13 @@ void projectvert(const float v1[3], float winmat[][4], float adr[4])
/* calcs homogenic coord of vertex v1 */
float x, y, z;
- x= v1[0];
- y= v1[1];
- z= v1[2];
- adr[0]= x*winmat[0][0]+ y*winmat[1][0]+ z*winmat[2][0]+ winmat[3][0];
- adr[1]= x*winmat[0][1]+ y*winmat[1][1]+ z*winmat[2][1]+ winmat[3][1];
- adr[2]= x*winmat[0][2]+ y*winmat[1][2]+ z*winmat[2][2]+ winmat[3][2];
- adr[3]= x*winmat[0][3]+ y*winmat[1][3]+ z*winmat[2][3]+ winmat[3][3];
+ x = v1[0];
+ y = v1[1];
+ z = v1[2];
+ adr[0] = x * winmat[0][0] + y * winmat[1][0] + z * winmat[2][0] + winmat[3][0];
+ adr[1] = x * winmat[0][1] + y * winmat[1][1] + z * winmat[2][1] + winmat[3][1];
+ adr[2] = x * winmat[0][2] + y * winmat[1][2] + z * winmat[2][2] + winmat[3][2];
+ adr[3] = x * winmat[0][3] + y * winmat[1][3] + z * winmat[2][3] + winmat[3][3];
}
/* ------------------------------------------------------------------------- */
@@ -3853,13 +3853,6 @@ static int shade_tra_samples(ShadeSample *ssamp, StrandShadeCache *cache, int x,
return 0;
}
-static void addvecmul(float *v1, float *v2, float fac)
-{
- v1[0]= v1[0]+fac*v2[0];
- v1[1]= v1[1]+fac*v2[1];
- v1[2]= v1[2]+fac*v2[2];
-}
-
static int addtosamp_shr(ShadeResult *samp_shr, ShadeSample *ssamp, int addpassflag)
{
int a, sample, osa = (R.osa? R.osa: 1), retval = osa;
@@ -3887,34 +3880,34 @@ static int addtosamp_shr(ShadeResult *samp_shr, ShadeSample *ssamp, int addpassf
addAlphaUnderFloat(samp_shr->col, shr->col);
if (addpassflag & SCE_PASS_NORMAL)
- addvecmul(samp_shr->nor, shr->nor, fac);
+ madd_v3_v3fl(samp_shr->nor, shr->nor, fac);
if (addpassflag & SCE_PASS_EMIT)
- addvecmul(samp_shr->emit, shr->emit, fac);
+ madd_v3_v3fl(samp_shr->emit, shr->emit, fac);
if (addpassflag & SCE_PASS_DIFFUSE)
- addvecmul(samp_shr->diff, shr->diff, fac);
+ madd_v3_v3fl(samp_shr->diff, shr->diff, fac);
if (addpassflag & SCE_PASS_SPEC)
- addvecmul(samp_shr->spec, shr->spec, fac);
+ madd_v3_v3fl(samp_shr->spec, shr->spec, fac);
if (addpassflag & SCE_PASS_SHADOW)
- addvecmul(samp_shr->shad, shr->shad, fac);
+ madd_v3_v3fl(samp_shr->shad, shr->shad, fac);
if (addpassflag & SCE_PASS_AO)
- addvecmul(samp_shr->ao, shr->ao, fac);
+ madd_v3_v3fl(samp_shr->ao, shr->ao, fac);
if (addpassflag & SCE_PASS_ENVIRONMENT)
- addvecmul(samp_shr->env, shr->env, fac);
+ madd_v3_v3fl(samp_shr->env, shr->env, fac);
if (addpassflag & SCE_PASS_INDIRECT)
- addvecmul(samp_shr->indirect, shr->indirect, fac);
+ madd_v3_v3fl(samp_shr->indirect, shr->indirect, fac);
if (addpassflag & SCE_PASS_REFLECT)
- addvecmul(samp_shr->refl, shr->refl, fac);
+ madd_v3_v3fl(samp_shr->refl, shr->refl, fac);
if (addpassflag & SCE_PASS_REFRACT)
- addvecmul(samp_shr->refr, shr->refr, fac);
+ madd_v3_v3fl(samp_shr->refr, shr->refr, fac);
if (addpassflag & SCE_PASS_MIST)
samp_shr->mist= samp_shr->mist+fac*shr->mist;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index f3872cb9594..3bbd5583aa5 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -259,6 +259,7 @@ int WM_gesture_lines_cancel(struct bContext *C, struct wmOperator *op);
int WM_gesture_lasso_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int WM_gesture_lasso_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int WM_gesture_lasso_cancel(struct bContext *C, struct wmOperator *op);
+int (*WM_gesture_lasso_path_to_array(struct bContext *C, struct wmOperator *op, int *mcords_tot))[2];
int WM_gesture_straightline_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int WM_gesture_straightline_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int WM_gesture_straightline_cancel(struct bContext *C, struct wmOperator *op);
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index 7285e155dc6..a34d294461c 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -183,7 +183,7 @@ void WM_menutype_freelink(MenuType *mt)
/* called on initialize WM_init() */
void WM_menutype_init(void)
{
- menutypes_hash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "menutypes_hash gh");
+ menutypes_hash = BLI_ghash_str_new("menutypes_hash gh");
}
void WM_menutype_free(void)
diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c
index 7f40d2980a6..97a431d296b 100644
--- a/source/blender/windowmanager/intern/wm_gesture.c
+++ b/source/blender/windowmanager/intern/wm_gesture.c
@@ -231,8 +231,8 @@ static void wm_gesture_draw_circle(wmGesture *gt)
static void draw_filled_lasso(wmGesture *gt)
{
ScanFillContext sf_ctx;
- ScanFillVert *v = NULL, *lastv = NULL, *firstv = NULL;
- ScanFillFace *efa;
+ ScanFillVert *sf_vert = NULL, *sf_vert_last = NULL, *sf_vert_first = NULL;
+ ScanFillFace *sf_tri;
short *lasso = (short *)gt->customdata;
int i;
@@ -244,26 +244,26 @@ static void draw_filled_lasso(wmGesture *gt)
co[1] = (float)lasso[1];
co[2] = 0.0f;
- v = BLI_scanfill_vert_add(&sf_ctx, co);
- if (lastv)
- /* e = */ /* UNUSED */ BLI_scanfill_edge_add(&sf_ctx, lastv, v);
- lastv = v;
- if (firstv == NULL) firstv = v;
+ sf_vert = BLI_scanfill_vert_add(&sf_ctx, co);
+ if (sf_vert_last)
+ /* e = */ /* UNUSED */ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert);
+ sf_vert_last = sf_vert;
+ if (sf_vert_first == NULL) sf_vert_first = sf_vert;
}
/* highly unlikely this will fail, but could crash if (gt->points == 0) */
- if (firstv) {
+ if (sf_vert_first) {
float zvec[3] = {0.0f, 0.0f, 1.0f};
- BLI_scanfill_edge_add(&sf_ctx, firstv, v);
+ BLI_scanfill_edge_add(&sf_ctx, sf_vert_first, sf_vert);
BLI_scanfill_calc_ex(&sf_ctx, FALSE, zvec);
glEnable(GL_BLEND);
glColor4f(1.0, 1.0, 1.0, 0.05);
glBegin(GL_TRIANGLES);
- for (efa = sf_ctx.fillfacebase.first; efa; efa = efa->next) {
- glVertex2fv(efa->v1->co);
- glVertex2fv(efa->v2->co);
- glVertex2fv(efa->v3->co);
+ for (sf_tri = sf_ctx.fillfacebase.first; sf_tri; sf_tri = sf_tri->next) {
+ glVertex2fv(sf_tri->v1->co);
+ glVertex2fv(sf_tri->v2->co);
+ glVertex2fv(sf_tri->v3->co);
}
glEnd();
glDisable(GL_BLEND);
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 27c4a38c131..d96198413e0 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -1270,7 +1270,8 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
extern char datatoc_splash_png[];
extern int datatoc_splash_png_size;
- ImBuf *ibuf = IMB_ibImageFromMemory((unsigned char *)datatoc_splash_png, datatoc_splash_png_size, IB_rect, "<splash screen>");
+ ImBuf *ibuf = IMB_ibImageFromMemory((unsigned char *)datatoc_splash_png,
+ datatoc_splash_png_size, IB_rect, "<splash screen>");
#else
ImBuf *ibuf = NULL;
#endif
@@ -2789,6 +2790,44 @@ int WM_gesture_lines_cancel(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+/**
+ * helper function, we may want to add options for conversion to view space
+ *
+ * caller must free.
+ */
+int (*WM_gesture_lasso_path_to_array(bContext *UNUSED(C), wmOperator *op, int *mcords_tot))[2]
+{
+ PropertyRNA *prop = RNA_struct_find_property(op->ptr, "path");
+ int (*mcords)[2] = NULL;
+ BLI_assert(prop != NULL);
+
+ if (prop) {
+ const int len = RNA_property_collection_length(op->ptr, prop);
+
+ if (len) {
+ int i = 0;
+ mcords = MEM_mallocN(sizeof(int) * 2 * len, __func__);
+
+ RNA_PROP_BEGIN(op->ptr, itemptr, prop)
+ {
+ float loc[2];
+
+ RNA_float_get_array(&itemptr, "loc", loc);
+ mcords[i][0] = (int)loc[0];
+ mcords[i][1] = (int)loc[1];
+ i++;
+ }
+ RNA_PROP_END;
+ }
+ *mcords_tot = len;
+ }
+ else {
+ *mcords_tot = 0;
+ }
+
+ return mcords;
+}
+
#if 0
/* template to copy from */
@@ -3702,7 +3741,7 @@ void wm_operatortype_free(void)
/* called on initialize WM_init() */
void wm_operatortype_init(void)
{
- global_ops_hash = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "wm_operatortype_init gh");
+ global_ops_hash = BLI_ghash_str_new("wm_operatortype_init gh");
WM_operatortype_append(WM_OT_window_duplicate);
WM_operatortype_append(WM_OT_read_homefile);
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 5f6b15dee02..af3ba02ed4d 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -932,7 +932,7 @@ static int wm_window_timer(const bContext *C)
wtnext = wt->next; /* in case timer gets removed */
win = wt->win;
- if (wt->sleep== 0) {
+ if (wt->sleep == 0) {
if (time > wt->ntime) {
wt->delta = time - wt->ltime;
wt->duration += wt->delta;
diff --git a/source/blender/windowmanager/wm_cursors.h b/source/blender/windowmanager/wm_cursors.h
index f41b15aadcf..4c07324184d 100644
--- a/source/blender/windowmanager/wm_cursors.h
+++ b/source/blender/windowmanager/wm_cursors.h
@@ -41,7 +41,7 @@ void wm_init_cursor_data(void);
/* old cursors */
enum {
- CURSOR_FACESEL=BC_GHOST_CURSORS,
+ CURSOR_FACESEL = BC_GHOST_CURSORS,
CURSOR_WAIT,
CURSOR_EDIT,
CURSOR_X_MOVE,
@@ -80,7 +80,7 @@ typedef struct BCursor {
#define SYSCURSOR 1
enum {
- BC_NW_ARROWCURSOR=2,
+ BC_NW_ARROWCURSOR = 2,
BC_NS_ARROWCURSOR,
BC_EW_ARROWCURSOR,
BC_WAITCURSOR,
@@ -103,7 +103,7 @@ enum {
enum {
- BC_BLACK=0,
+ BC_BLACK = 0,
BC_WHITE,
BC_RED,
BC_BLUE,
@@ -111,8 +111,8 @@ enum {
BC_YELLOW
};
-#define SMALL_CURSOR 0
-#define BIG_CURSOR 1
+#define SMALL_CURSOR 0
+#define BIG_CURSOR 1
struct wmWindow;
struct wmEvent;
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 192a9988c07..d75748e43ec 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -76,6 +76,7 @@ struct NodeBlurData;
struct Nurb;
struct Object;
struct PBVHNode;
+struct PyObject;
struct Render;
struct RenderEngine;
struct RenderEngineType;
@@ -528,6 +529,9 @@ struct DualConMesh *dualcon(const struct DualConMesh *input_mesh,
struct CCLDeviceInfo;
struct CCLDeviceInfo *CCL_compute_device_list(int opencl) { return NULL; }
+/* compositor */
+void COM_execute(struct bNodeTree *editingtree, int rendering) {}
+
char blender_path[] = "";
#endif // WITH_GAMEENGINE
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index 82acabc2be6..ddb70db88d0 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -39,6 +39,7 @@ blender_include_dirs(
../blender/gpu
../blender/freestyle
../blender/windowmanager
+ ../blender/opencl
)
if(WIN32)
@@ -912,6 +913,8 @@ endif()
cycles_kernel
cycles_util
cycles_subd
+ bf_compositor #added for opencl compositor
+ bf_opencl #added for opencl compositor
)
if(WITH_LIBMV)
diff --git a/source/creator/buildinfo.c b/source/creator/buildinfo.c
index c71b2d5e833..d747fe8e1ff 100644
--- a/source/creator/buildinfo.c
+++ b/source/creator/buildinfo.c
@@ -37,23 +37,23 @@
#ifdef BUILD_DATE
/* currently only these are defined in the header */
-char build_date[]= BUILD_DATE;
-char build_time[]= BUILD_TIME;
-char build_rev[]= BUILD_REV;
+char build_date[] = BUILD_DATE;
+char build_time[] = BUILD_TIME;
+char build_rev[] = BUILD_REV;
-char build_platform[]= BUILD_PLATFORM;
-char build_type[]= BUILD_TYPE;
+char build_platform[] = BUILD_PLATFORM;
+char build_type[] = BUILD_TYPE;
#ifdef BUILD_CFLAGS
-char build_cflags[]= BUILD_CFLAGS;
-char build_cxxflags[]= BUILD_CXXFLAGS;
-char build_linkflags[]= BUILD_LINKFLAGS;
-char build_system[]= BUILD_SYSTEM;
+char build_cflags[] = BUILD_CFLAGS;
+char build_cxxflags[] = BUILD_CXXFLAGS;
+char build_linkflags[] = BUILD_LINKFLAGS;
+char build_system[] = BUILD_SYSTEM;
#else
-char build_cflags[]= "unmaintained buildsystem alert!";
-char build_cxxflags[]= "unmaintained buildsystem alert!";
-char build_linkflags[]= "unmaintained buildsystem alert!";
-char build_system[]= "unmaintained buildsystem alert!";
+char build_cflags[] = "unmaintained buildsystem alert!";
+char build_cxxflags[] = "unmaintained buildsystem alert!";
+char build_linkflags[] = "unmaintained buildsystem alert!";
+char build_system[] = "unmaintained buildsystem alert!";
#endif
#endif // BUILD_DATE
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 6abcd594d2f..12f72c07c08 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -651,7 +651,11 @@ static int set_verbosity(int argc, const char **argv, void *UNUSED(data))
if (argc > 1) {
int level = atoi(argv[1]);
+#ifdef WITH_LIBMV
libmv_setLoggingVerbosity(level);
+#else
+ (void)level;
+#endif
return 1;
}
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 14362cd8f06..196f032e584 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -1375,16 +1375,17 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
if (!size) size= msize;
mvert= me->mvert;
- for (a=0; a<me->totvert; a++, mvert++) {
- co= mvert->co;
+ for (a = 0; a<me->totvert; a++, mvert++) {
+ co = mvert->co;
/* bounds */
- DO_MINMAX(co, min, max);
+ minmax_v3v3_v3(min, max, co);
/* radius */
- vert_radius= co[0]*co[0] + co[1]*co[1] + co[2]*co[2];
+
+ vert_radius = len_squared_v3(co);
if (vert_radius > radius)
- radius= vert_radius;
+ radius = vert_radius;
}
if (me->totvert) {
@@ -1432,8 +1433,8 @@ static void my_tex_space_mesh(Mesh *me)
INIT_MINMAX(min, max);
fp= (float *)kb->data;
- for (a=0; a<kb->totelem; a++, fp+=3) {
- DO_MINMAX(fp, min, max);
+ for (a=0; a<kb->totelem; a++, fp += 3) {
+ minmax_v3v3_v3(min, max, fp);
}
if (kb->totelem) {
loc[0]= (min[0]+max[0])/2.0f; loc[1]= (min[1]+max[1])/2.0f; loc[2]= (min[2]+max[2])/2.0f;
diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp
index 6f1e6e31507..9c8e6fe99b4 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonController.cpp
@@ -507,7 +507,7 @@ int SCA_PythonController::pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_D
}
/* set scripttext sets m_bModified to true,
- so next time the script is needed, a reparse into byte code is done */
+ * so next time the script is needed, a reparse into byte code is done */
self->SetScriptText(scriptArg);
return PY_SET_ATTR_SUCCESS;
diff --git a/source/gameengine/GameLogic/SCA_RandomNumberGenerator.h b/source/gameengine/GameLogic/SCA_RandomNumberGenerator.h
index 4391dcb304b..8f546b37ec8 100644
--- a/source/gameengine/GameLogic/SCA_RandomNumberGenerator.h
+++ b/source/gameengine/GameLogic/SCA_RandomNumberGenerator.h
@@ -52,7 +52,7 @@ class SCA_RandomNumberGenerator {
/* unsigned long mt[N]; */
unsigned long mt[624];
- /** mti==N+1 means mt[KX_MT_VectorLenght] is not initialized */
+ /** mti==N+1 means mt[KX_MT_VectorLength] is not initialized */
int mti; /* initialized in the cpp file */
/** Calculate a start vector */
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index a7078860da3..28c4630c43e 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -1843,19 +1843,24 @@ PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecur
* somehow it remembers the sys.path - Campbell
*/
static bool first_time = true;
-
+ char *py_path_bundle = BLI_get_folder(BLENDER_SYSTEM_PYTHON, NULL);
+
#if 0 // TODO - py3
STR_String pname = progname;
Py_SetProgramName(pname.Ptr());
#endif
- Py_NoSiteFlag=1;
- Py_FrozenFlag=1;
+
+ if (py_path_bundle != NULL) {
+ Py_NoSiteFlag = 1;
+ }
+
+ Py_FrozenFlag = 1;
/* must run before python initializes */
PyImport_ExtendInittab(bge_internal_modules);
/* find local python installation */
- PyC_SetHomePath(BLI_get_folder(BLENDER_SYSTEM_PYTHON, NULL));
+ PyC_SetHomePath(py_path_bundle);
Py_Initialize();
@@ -1929,8 +1934,6 @@ PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLev
STR_String pname = progname;
Py_SetProgramName(pname.Ptr());
#endif
- Py_NoSiteFlag=1;
- Py_FrozenFlag=1;
#ifdef WITH_AUDASPACE
/* accessing a SoundActuator's sound results in a crash if aud is not initialized... */
diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt
index 3e8dcaffcfe..f436fecf6b7 100644
--- a/source/gameengine/VideoTexture/CMakeLists.txt
+++ b/source/gameengine/VideoTexture/CMakeLists.txt
@@ -96,6 +96,10 @@ if(WITH_CODEC_FFMPEG)
${PTHREADS_INCLUDE_DIRS}
)
add_definitions(-DWITH_FFMPEG)
+
+ remove_strict_flags_file(
+ VideoFFmpeg.cpp
+ )
endif()
blender_add_lib(ge_videotex "${SRC}" "${INC}" "${INC_SYS}")